diff --git a/.gitignore b/.gitignore index d48e657f..17c1a7f7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ -*.DS_Store -bin/ +*.DS_Store +bin/ src-gen/ \ No newline at end of file diff --git a/Build/org.jamopp.build.juno/.project b/Build/org.jamopp.build.juno/.project index 4924cd8e..a567ed4e 100644 --- a/Build/org.jamopp.build.juno/.project +++ b/Build/org.jamopp.build.juno/.project @@ -1,11 +1,11 @@ - - - org.jamopp.build.juno - - - - - - - - + + + org.jamopp.build.juno + + + + + + + + diff --git a/Build/org.jamopp.build.juno/jamopp.repositories b/Build/org.jamopp.build.juno/jamopp.repositories index c49c8cb6..35137810 100644 --- a/Build/org.jamopp.build.juno/jamopp.repositories +++ b/Build/org.jamopp.build.juno/jamopp.repositories @@ -1,14 +1,14 @@ -git:https://github.com/DevBoost/JaMoPP.git!Build/org.jamopp.build - -// Eclipse Platform -get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/eclipse/downloads/drops4/R-4.2.2-201302041200/eclipse-platform-4.2.2-win32-x86_64.zip -get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/eclipse/downloads/drops4/R-4.2.2-201302041200/eclipse-4.2.2-delta-pack.zip -// JDT -get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/eclipse/downloads/drops4/R-4.2.2-201302041200/org.eclipse.jdt-4.2.2.zip -// EMF -get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/modeling/emf/emf/downloads/drops/2.8.0/R201206080554/emf-xsd-SDK-2.8.0.zip -// EMF Validation (core API plugin and feature) -get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/modeling/emf/validation/downloads/drops/1.6.0/R201206271200/emf-validation-runtime-1.6.0.zip!eclipse/plugins/org.eclipse.emf.validation_1.4.0.v20100428-2315.jar -get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/modeling/emf/validation/downloads/drops/1.6.0/R201206271200/emf-validation-runtime-1.6.0.zip!eclipse/plugins/org.eclipse.emf.validation.ui_1.3.0.v200901271722.jar -get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/modeling/emf/validation/downloads/drops/1.6.0/R201206271200/emf-validation-runtime-1.6.0.zip!eclipse/plugins/org.eclipse.emf.validation.ui.ide_1.3.0.v200901271722.jar -get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/modeling/emf/validation/downloads/drops/1.6.0/R201206271200/emf-validation-runtime-1.6.0.zip!eclipse/features/org.eclipse.emf.validation_1.6.0.v20120328-0001-479-9oB56N5BBR6LCA6/feature.xml +git:https://github.com/DevBoost/JaMoPP.git!Build/org.jamopp.build + +// Eclipse Platform +get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/eclipse/downloads/drops4/R-4.2.2-201302041200/eclipse-platform-4.2.2-win32-x86_64.zip +get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/eclipse/downloads/drops4/R-4.2.2-201302041200/eclipse-4.2.2-delta-pack.zip +// JDT +get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/eclipse/downloads/drops4/R-4.2.2-201302041200/org.eclipse.jdt-4.2.2.zip +// EMF +get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/modeling/emf/emf/downloads/drops/2.8.0/R201206080554/emf-xsd-SDK-2.8.0.zip +// EMF Validation (core API plugin and feature) +get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/modeling/emf/validation/downloads/drops/1.6.0/R201206271200/emf-validation-runtime-1.6.0.zip!eclipse/plugins/org.eclipse.emf.validation_1.4.0.v20100428-2315.jar +get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/modeling/emf/validation/downloads/drops/1.6.0/R201206271200/emf-validation-runtime-1.6.0.zip!eclipse/plugins/org.eclipse.emf.validation.ui_1.3.0.v200901271722.jar +get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/modeling/emf/validation/downloads/drops/1.6.0/R201206271200/emf-validation-runtime-1.6.0.zip!eclipse/plugins/org.eclipse.emf.validation.ui.ide_1.3.0.v200901271722.jar +get:http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/modeling/emf/validation/downloads/drops/1.6.0/R201206271200/emf-validation-runtime-1.6.0.zip!eclipse/features/org.eclipse.emf.validation_1.6.0.v20120328-0001-479-9oB56N5BBR6LCA6/feature.xml diff --git a/Build/org.jamopp.build.kepler/.project b/Build/org.jamopp.build.kepler/.project index a60f3da1..40833cbf 100644 --- a/Build/org.jamopp.build.kepler/.project +++ b/Build/org.jamopp.build.kepler/.project @@ -1,11 +1,11 @@ - - - org.jamopp.build.kepler - - - - - - - - + + + org.jamopp.build.kepler + + + + + + + + diff --git a/Build/org.jamopp.build/.project b/Build/org.jamopp.build/.project index 1ed8d33f..b4182514 100644 --- a/Build/org.jamopp.build/.project +++ b/Build/org.jamopp.build/.project @@ -1,11 +1,11 @@ - - - org.jamopp.build - - - - - - - - + + + org.jamopp.build + + + + + + + + diff --git a/Core/org.emftext.language.java.resource.bcel/.classpath b/Core/org.emftext.language.java.resource.bcel/.classpath index 0b4d0cf4..db09e695 100644 --- a/Core/org.emftext.language.java.resource.bcel/.classpath +++ b/Core/org.emftext.language.java.resource.bcel/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/Core/org.emftext.language.java.resource.bcel/.project b/Core/org.emftext.language.java.resource.bcel/.project index 45985d28..92bf7c8d 100644 --- a/Core/org.emftext.language.java.resource.bcel/.project +++ b/Core/org.emftext.language.java.resource.bcel/.project @@ -1,28 +1,28 @@ - - - org.emftext.language.java.resource.bcel - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - + + + org.emftext.language.java.resource.bcel + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/Core/org.emftext.language.java.resource.bcel/META-INF/MANIFEST.MF b/Core/org.emftext.language.java.resource.bcel/META-INF/MANIFEST.MF index df823035..3bf0568a 100644 --- a/Core/org.emftext.language.java.resource.bcel/META-INF/MANIFEST.MF +++ b/Core/org.emftext.language.java.resource.bcel/META-INF/MANIFEST.MF @@ -1,10 +1,10 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Bcel -Bundle-SymbolicName: org.emftext.language.java.resource.bcel -Bundle-Version: 1.0.0.qualifier -Bundle-RequiredExecutionEnvironment: JavaSE-1.6 -Export-Package: org.apache.bcel5_2_0, - org.apache.bcel5_2_0.classfile, - org.apache.bcel5_2_0.generic, - org.apache.bcel5_2_0.util +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Bcel +Bundle-SymbolicName: org.emftext.language.java.resource.bcel +Bundle-Version: 1.0.0.qualifier +Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Export-Package: org.apache.bcel5_2_0, + org.apache.bcel5_2_0.classfile, + org.apache.bcel5_2_0.generic, + org.apache.bcel5_2_0.util diff --git a/Core/org.emftext.language.java.resource.bcel/build.properties b/Core/org.emftext.language.java.resource.bcel/build.properties index 8ca449d7..fb21930c 100644 --- a/Core/org.emftext.language.java.resource.bcel/build.properties +++ b/Core/org.emftext.language.java.resource.bcel/build.properties @@ -1,4 +1,4 @@ -source.. = src-bcel/ -output.. = bin/ -bin.includes = META-INF/,\ - . +source.. = src-bcel/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/Constants.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/Constants.java index 3f1b39c6..61fea620 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/Constants.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/Constants.java @@ -1,766 +1,766 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0; - -/** - * Constants for the project, mostly defined in the JVM specification. - * - * @version $Id: Constants.java 410087 2006-05-29 12:12:19Z tcurdt $ - * @author M. Dahm - */ -public interface Constants { - /** Major and minor version of the code. - */ - public final static short MAJOR_1_1 = 45; - public final static short MINOR_1_1 = 3; - public final static short MAJOR_1_2 = 46; - public final static short MINOR_1_2 = 0; - public final static short MAJOR_1_3 = 47; - public final static short MINOR_1_3 = 0; - public final static short MAJOR_1_4 = 48; - public final static short MINOR_1_4 = 0; - public final static short MAJOR_1_5 = 49; - public final static short MINOR_1_5 = 0; - public final static short MAJOR = MAJOR_1_1; // Defaults - public final static short MINOR = MINOR_1_1; - - /** Maximum value for an unsigned short. - */ - public final static int MAX_SHORT = 65535; // 2^16 - 1 - - /** Maximum value for an unsigned byte. - */ - public final static int MAX_BYTE = 255; // 2^8 - 1 - - /** Access flags for classes, fields and methods. - */ - public final static short ACC_PUBLIC = 0x0001; - public final static short ACC_PRIVATE = 0x0002; - public final static short ACC_PROTECTED = 0x0004; - public final static short ACC_STATIC = 0x0008; - - public final static short ACC_FINAL = 0x0010; - public final static short ACC_SYNCHRONIZED = 0x0020; - public final static short ACC_VOLATILE = 0x0040; - public final static short ACC_BRIDGE = 0x0040; - public final static short ACC_TRANSIENT = 0x0080; - public final static short ACC_VARARGS = 0x0080; - - public final static short ACC_NATIVE = 0x0100; - public final static short ACC_INTERFACE = 0x0200; - public final static short ACC_ABSTRACT = 0x0400; - public final static short ACC_STRICT = 0x0800; - - public final static short ACC_SYNTHETIC = 0x1000; - public final static short ACC_ANNOTATION = 0x2000; - public final static short ACC_ENUM = 0x4000; - - // Applies to classes compiled by new compilers only - public final static short ACC_SUPER = 0x0020; - - public final static short MAX_ACC_FLAG = ACC_ENUM; - - public final static String[] ACCESS_NAMES = { - "public", "private", "protected", "static", "final", "synchronized", - "volatile", "transient", "native", "interface", "abstract", "strictfp", - "synthetic", "annotation", "enum" - }; - - /** Tags in constant pool to denote type of constant. - */ - public final static byte CONSTANT_Utf8 = 1; - public final static byte CONSTANT_Integer = 3; - public final static byte CONSTANT_Float = 4; - public final static byte CONSTANT_Long = 5; - public final static byte CONSTANT_Double = 6; - public final static byte CONSTANT_Class = 7; - public final static byte CONSTANT_Fieldref = 9; - public final static byte CONSTANT_String = 8; - public final static byte CONSTANT_Methodref = 10; - public final static byte CONSTANT_InterfaceMethodref = 11; - public final static byte CONSTANT_NameAndType = 12; - - public final static String[] CONSTANT_NAMES = { - "", "CONSTANT_Utf8", "", "CONSTANT_Integer", - "CONSTANT_Float", "CONSTANT_Long", "CONSTANT_Double", - "CONSTANT_Class", "CONSTANT_String", "CONSTANT_Fieldref", - "CONSTANT_Methodref", "CONSTANT_InterfaceMethodref", - "CONSTANT_NameAndType" }; - - /** The name of the static initializer, also called "class - * initialization method" or "interface initialization - * method". This is "<clinit>". - */ - public final static String STATIC_INITIALIZER_NAME = ""; - - /** The name of every constructor method in a class, also called - * "instance initialization method". This is "<init>". - */ - public final static String CONSTRUCTOR_NAME = ""; - - /** The names of the interfaces implemented by arrays */ - public final static String[] INTERFACES_IMPLEMENTED_BY_ARRAYS = {"java.lang.Cloneable", "java.io.Serializable"}; - - /** - * Limitations of the Java Virtual Machine. - * See The Java Virtual Machine Specification, Second Edition, page 152, chapter 4.10. - */ - public static final int MAX_CP_ENTRIES = 65535; - public static final int MAX_CODE_SIZE = 65536; //bytes - - /** Java VM opcodes. - */ - public static final short NOP = 0; - public static final short ACONST_NULL = 1; - public static final short ICONST_M1 = 2; - public static final short ICONST_0 = 3; - public static final short ICONST_1 = 4; - public static final short ICONST_2 = 5; - public static final short ICONST_3 = 6; - public static final short ICONST_4 = 7; - public static final short ICONST_5 = 8; - public static final short LCONST_0 = 9; - public static final short LCONST_1 = 10; - public static final short FCONST_0 = 11; - public static final short FCONST_1 = 12; - public static final short FCONST_2 = 13; - public static final short DCONST_0 = 14; - public static final short DCONST_1 = 15; - public static final short BIPUSH = 16; - public static final short SIPUSH = 17; - public static final short LDC = 18; - public static final short LDC_W = 19; - public static final short LDC2_W = 20; - public static final short ILOAD = 21; - public static final short LLOAD = 22; - public static final short FLOAD = 23; - public static final short DLOAD = 24; - public static final short ALOAD = 25; - public static final short ILOAD_0 = 26; - public static final short ILOAD_1 = 27; - public static final short ILOAD_2 = 28; - public static final short ILOAD_3 = 29; - public static final short LLOAD_0 = 30; - public static final short LLOAD_1 = 31; - public static final short LLOAD_2 = 32; - public static final short LLOAD_3 = 33; - public static final short FLOAD_0 = 34; - public static final short FLOAD_1 = 35; - public static final short FLOAD_2 = 36; - public static final short FLOAD_3 = 37; - public static final short DLOAD_0 = 38; - public static final short DLOAD_1 = 39; - public static final short DLOAD_2 = 40; - public static final short DLOAD_3 = 41; - public static final short ALOAD_0 = 42; - public static final short ALOAD_1 = 43; - public static final short ALOAD_2 = 44; - public static final short ALOAD_3 = 45; - public static final short IALOAD = 46; - public static final short LALOAD = 47; - public static final short FALOAD = 48; - public static final short DALOAD = 49; - public static final short AALOAD = 50; - public static final short BALOAD = 51; - public static final short CALOAD = 52; - public static final short SALOAD = 53; - public static final short ISTORE = 54; - public static final short LSTORE = 55; - public static final short FSTORE = 56; - public static final short DSTORE = 57; - public static final short ASTORE = 58; - public static final short ISTORE_0 = 59; - public static final short ISTORE_1 = 60; - public static final short ISTORE_2 = 61; - public static final short ISTORE_3 = 62; - public static final short LSTORE_0 = 63; - public static final short LSTORE_1 = 64; - public static final short LSTORE_2 = 65; - public static final short LSTORE_3 = 66; - public static final short FSTORE_0 = 67; - public static final short FSTORE_1 = 68; - public static final short FSTORE_2 = 69; - public static final short FSTORE_3 = 70; - public static final short DSTORE_0 = 71; - public static final short DSTORE_1 = 72; - public static final short DSTORE_2 = 73; - public static final short DSTORE_3 = 74; - public static final short ASTORE_0 = 75; - public static final short ASTORE_1 = 76; - public static final short ASTORE_2 = 77; - public static final short ASTORE_3 = 78; - public static final short IASTORE = 79; - public static final short LASTORE = 80; - public static final short FASTORE = 81; - public static final short DASTORE = 82; - public static final short AASTORE = 83; - public static final short BASTORE = 84; - public static final short CASTORE = 85; - public static final short SASTORE = 86; - public static final short POP = 87; - public static final short POP2 = 88; - public static final short DUP = 89; - public static final short DUP_X1 = 90; - public static final short DUP_X2 = 91; - public static final short DUP2 = 92; - public static final short DUP2_X1 = 93; - public static final short DUP2_X2 = 94; - public static final short SWAP = 95; - public static final short IADD = 96; - public static final short LADD = 97; - public static final short FADD = 98; - public static final short DADD = 99; - public static final short ISUB = 100; - public static final short LSUB = 101; - public static final short FSUB = 102; - public static final short DSUB = 103; - public static final short IMUL = 104; - public static final short LMUL = 105; - public static final short FMUL = 106; - public static final short DMUL = 107; - public static final short IDIV = 108; - public static final short LDIV = 109; - public static final short FDIV = 110; - public static final short DDIV = 111; - public static final short IREM = 112; - public static final short LREM = 113; - public static final short FREM = 114; - public static final short DREM = 115; - public static final short INEG = 116; - public static final short LNEG = 117; - public static final short FNEG = 118; - public static final short DNEG = 119; - public static final short ISHL = 120; - public static final short LSHL = 121; - public static final short ISHR = 122; - public static final short LSHR = 123; - public static final short IUSHR = 124; - public static final short LUSHR = 125; - public static final short IAND = 126; - public static final short LAND = 127; - public static final short IOR = 128; - public static final short LOR = 129; - public static final short IXOR = 130; - public static final short LXOR = 131; - public static final short IINC = 132; - public static final short I2L = 133; - public static final short I2F = 134; - public static final short I2D = 135; - public static final short L2I = 136; - public static final short L2F = 137; - public static final short L2D = 138; - public static final short F2I = 139; - public static final short F2L = 140; - public static final short F2D = 141; - public static final short D2I = 142; - public static final short D2L = 143; - public static final short D2F = 144; - public static final short I2B = 145; - public static final short INT2BYTE = 145; // Old notion - public static final short I2C = 146; - public static final short INT2CHAR = 146; // Old notion - public static final short I2S = 147; - public static final short INT2SHORT = 147; // Old notion - public static final short LCMP = 148; - public static final short FCMPL = 149; - public static final short FCMPG = 150; - public static final short DCMPL = 151; - public static final short DCMPG = 152; - public static final short IFEQ = 153; - public static final short IFNE = 154; - public static final short IFLT = 155; - public static final short IFGE = 156; - public static final short IFGT = 157; - public static final short IFLE = 158; - public static final short IF_ICMPEQ = 159; - public static final short IF_ICMPNE = 160; - public static final short IF_ICMPLT = 161; - public static final short IF_ICMPGE = 162; - public static final short IF_ICMPGT = 163; - public static final short IF_ICMPLE = 164; - public static final short IF_ACMPEQ = 165; - public static final short IF_ACMPNE = 166; - public static final short GOTO = 167; - public static final short JSR = 168; - public static final short RET = 169; - public static final short TABLESWITCH = 170; - public static final short LOOKUPSWITCH = 171; - public static final short IRETURN = 172; - public static final short LRETURN = 173; - public static final short FRETURN = 174; - public static final short DRETURN = 175; - public static final short ARETURN = 176; - public static final short RETURN = 177; - public static final short GETSTATIC = 178; - public static final short PUTSTATIC = 179; - public static final short GETFIELD = 180; - public static final short PUTFIELD = 181; - public static final short INVOKEVIRTUAL = 182; - public static final short INVOKESPECIAL = 183; - public static final short INVOKENONVIRTUAL = 183; // Old name in JDK 1.0 - public static final short INVOKESTATIC = 184; - public static final short INVOKEINTERFACE = 185; - public static final short NEW = 187; - public static final short NEWARRAY = 188; - public static final short ANEWARRAY = 189; - public static final short ARRAYLENGTH = 190; - public static final short ATHROW = 191; - public static final short CHECKCAST = 192; - public static final short INSTANCEOF = 193; - public static final short MONITORENTER = 194; - public static final short MONITOREXIT = 195; - public static final short WIDE = 196; - public static final short MULTIANEWARRAY = 197; - public static final short IFNULL = 198; - public static final short IFNONNULL = 199; - public static final short GOTO_W = 200; - public static final short JSR_W = 201; - - /** - * Non-legal opcodes, may be used by JVM internally. - */ - public static final short BREAKPOINT = 202; - public static final short LDC_QUICK = 203; - public static final short LDC_W_QUICK = 204; - public static final short LDC2_W_QUICK = 205; - public static final short GETFIELD_QUICK = 206; - public static final short PUTFIELD_QUICK = 207; - public static final short GETFIELD2_QUICK = 208; - public static final short PUTFIELD2_QUICK = 209; - public static final short GETSTATIC_QUICK = 210; - public static final short PUTSTATIC_QUICK = 211; - public static final short GETSTATIC2_QUICK = 212; - public static final short PUTSTATIC2_QUICK = 213; - public static final short INVOKEVIRTUAL_QUICK = 214; - public static final short INVOKENONVIRTUAL_QUICK = 215; - public static final short INVOKESUPER_QUICK = 216; - public static final short INVOKESTATIC_QUICK = 217; - public static final short INVOKEINTERFACE_QUICK = 218; - public static final short INVOKEVIRTUALOBJECT_QUICK = 219; - public static final short NEW_QUICK = 221; - public static final short ANEWARRAY_QUICK = 222; - public static final short MULTIANEWARRAY_QUICK = 223; - public static final short CHECKCAST_QUICK = 224; - public static final short INSTANCEOF_QUICK = 225; - public static final short INVOKEVIRTUAL_QUICK_W = 226; - public static final short GETFIELD_QUICK_W = 227; - public static final short PUTFIELD_QUICK_W = 228; - public static final short IMPDEP1 = 254; - public static final short IMPDEP2 = 255; - - /** - * For internal purposes only. - */ - public static final short PUSH = 4711; - public static final short SWITCH = 4712; - - /** - * Illegal codes - */ - public static final short UNDEFINED = -1; - public static final short UNPREDICTABLE = -2; - public static final short RESERVED = -3; - public static final String ILLEGAL_OPCODE = ""; - public static final String ILLEGAL_TYPE = ""; - - public static final byte T_BOOLEAN = 4; - public static final byte T_CHAR = 5; - public static final byte T_FLOAT = 6; - public static final byte T_DOUBLE = 7; - public static final byte T_BYTE = 8; - public static final byte T_SHORT = 9; - public static final byte T_INT = 10; - public static final byte T_LONG = 11; - - public static final byte T_VOID = 12; // Non-standard - public static final byte T_ARRAY = 13; - public static final byte T_OBJECT = 14; - public static final byte T_REFERENCE = 14; // Deprecated - public static final byte T_UNKNOWN = 15; - public static final byte T_ADDRESS = 16; - - /** The primitive type names corresponding to the T_XX constants, - * e.g., TYPE_NAMES[T_INT] = "int" - */ - public static final String[] TYPE_NAMES = { - ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE, - "boolean", "char", "float", "double", "byte", "short", "int", "long", - "void", "array", "object", "unknown" // Non-standard - }; - - /** The primitive class names corresponding to the T_XX constants, - * e.g., CLASS_TYPE_NAMES[T_INT] = "java.lang.Integer" - */ - public static final String[] CLASS_TYPE_NAMES = { - ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE, - "java.lang.Boolean", "java.lang.Character", "java.lang.Float", - "java.lang.Double", "java.lang.Byte", "java.lang.Short", - "java.lang.Integer", "java.lang.Long", "java.lang.Void", - ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE - }; - - /** The signature characters corresponding to primitive types, - * e.g., SHORT_TYPE_NAMES[T_INT] = "I" - */ - public static final String[] SHORT_TYPE_NAMES = { - ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE, - "Z", "C", "F", "D", "B", "S", "I", "J", - "V", ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE - }; - - /** - * Number of byte code operands, i.e., number of bytes after the tag byte - * itself. - */ - public static final short[] NO_OF_OPERANDS = { - 0/*nop*/, 0/*aconst_null*/, 0/*iconst_m1*/, 0/*iconst_0*/, - 0/*iconst_1*/, 0/*iconst_2*/, 0/*iconst_3*/, 0/*iconst_4*/, - 0/*iconst_5*/, 0/*lconst_0*/, 0/*lconst_1*/, 0/*fconst_0*/, - 0/*fconst_1*/, 0/*fconst_2*/, 0/*dconst_0*/, 0/*dconst_1*/, - 1/*bipush*/, 2/*sipush*/, 1/*ldc*/, 2/*ldc_w*/, 2/*ldc2_w*/, - 1/*iload*/, 1/*lload*/, 1/*fload*/, 1/*dload*/, 1/*aload*/, - 0/*iload_0*/, 0/*iload_1*/, 0/*iload_2*/, 0/*iload_3*/, - 0/*lload_0*/, 0/*lload_1*/, 0/*lload_2*/, 0/*lload_3*/, - 0/*fload_0*/, 0/*fload_1*/, 0/*fload_2*/, 0/*fload_3*/, - 0/*dload_0*/, 0/*dload_1*/, 0/*dload_2*/, 0/*dload_3*/, - 0/*aload_0*/, 0/*aload_1*/, 0/*aload_2*/, 0/*aload_3*/, - 0/*iaload*/, 0/*laload*/, 0/*faload*/, 0/*daload*/, - 0/*aaload*/, 0/*baload*/, 0/*caload*/, 0/*saload*/, - 1/*istore*/, 1/*lstore*/, 1/*fstore*/, 1/*dstore*/, - 1/*astore*/, 0/*istore_0*/, 0/*istore_1*/, 0/*istore_2*/, - 0/*istore_3*/, 0/*lstore_0*/, 0/*lstore_1*/, 0/*lstore_2*/, - 0/*lstore_3*/, 0/*fstore_0*/, 0/*fstore_1*/, 0/*fstore_2*/, - 0/*fstore_3*/, 0/*dstore_0*/, 0/*dstore_1*/, 0/*dstore_2*/, - 0/*dstore_3*/, 0/*astore_0*/, 0/*astore_1*/, 0/*astore_2*/, - 0/*astore_3*/, 0/*iastore*/, 0/*lastore*/, 0/*fastore*/, - 0/*dastore*/, 0/*aastore*/, 0/*bastore*/, 0/*castore*/, - 0/*sastore*/, 0/*pop*/, 0/*pop2*/, 0/*dup*/, 0/*dup_x1*/, - 0/*dup_x2*/, 0/*dup2*/, 0/*dup2_x1*/, 0/*dup2_x2*/, 0/*swap*/, - 0/*iadd*/, 0/*ladd*/, 0/*fadd*/, 0/*dadd*/, 0/*isub*/, - 0/*lsub*/, 0/*fsub*/, 0/*dsub*/, 0/*imul*/, 0/*lmul*/, - 0/*fmul*/, 0/*dmul*/, 0/*idiv*/, 0/*ldiv*/, 0/*fdiv*/, - 0/*ddiv*/, 0/*irem*/, 0/*lrem*/, 0/*frem*/, 0/*drem*/, - 0/*ineg*/, 0/*lneg*/, 0/*fneg*/, 0/*dneg*/, 0/*ishl*/, - 0/*lshl*/, 0/*ishr*/, 0/*lshr*/, 0/*iushr*/, 0/*lushr*/, - 0/*iand*/, 0/*land*/, 0/*ior*/, 0/*lor*/, 0/*ixor*/, 0/*lxor*/, - 2/*iinc*/, 0/*i2l*/, 0/*i2f*/, 0/*i2d*/, 0/*l2i*/, 0/*l2f*/, - 0/*l2d*/, 0/*f2i*/, 0/*f2l*/, 0/*f2d*/, 0/*d2i*/, 0/*d2l*/, - 0/*d2f*/, 0/*i2b*/, 0/*i2c*/, 0/*i2s*/, 0/*lcmp*/, 0/*fcmpl*/, - 0/*fcmpg*/, 0/*dcmpl*/, 0/*dcmpg*/, 2/*ifeq*/, 2/*ifne*/, - 2/*iflt*/, 2/*ifge*/, 2/*ifgt*/, 2/*ifle*/, 2/*if_icmpeq*/, - 2/*if_icmpne*/, 2/*if_icmplt*/, 2/*if_icmpge*/, 2/*if_icmpgt*/, - 2/*if_icmple*/, 2/*if_acmpeq*/, 2/*if_acmpne*/, 2/*goto*/, - 2/*jsr*/, 1/*ret*/, UNPREDICTABLE/*tableswitch*/, UNPREDICTABLE/*lookupswitch*/, - 0/*ireturn*/, 0/*lreturn*/, 0/*freturn*/, - 0/*dreturn*/, 0/*areturn*/, 0/*return*/, - 2/*getstatic*/, 2/*putstatic*/, 2/*getfield*/, - 2/*putfield*/, 2/*invokevirtual*/, 2/*invokespecial*/, 2/*invokestatic*/, - 4/*invokeinterface*/, UNDEFINED, 2/*new*/, - 1/*newarray*/, 2/*anewarray*/, - 0/*arraylength*/, 0/*athrow*/, 2/*checkcast*/, - 2/*instanceof*/, 0/*monitorenter*/, - 0/*monitorexit*/, UNPREDICTABLE/*wide*/, 3/*multianewarray*/, - 2/*ifnull*/, 2/*ifnonnull*/, 4/*goto_w*/, - 4/*jsr_w*/, 0/*breakpoint*/, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, RESERVED/*impdep1*/, RESERVED/*impdep2*/ - }; - - /** - * How the byte code operands are to be interpreted. - */ - public static final short[][] TYPE_OF_OPERANDS = { - {}/*nop*/, {}/*aconst_null*/, {}/*iconst_m1*/, {}/*iconst_0*/, - {}/*iconst_1*/, {}/*iconst_2*/, {}/*iconst_3*/, {}/*iconst_4*/, - {}/*iconst_5*/, {}/*lconst_0*/, {}/*lconst_1*/, {}/*fconst_0*/, - {}/*fconst_1*/, {}/*fconst_2*/, {}/*dconst_0*/, {}/*dconst_1*/, - {T_BYTE}/*bipush*/, {T_SHORT}/*sipush*/, {T_BYTE}/*ldc*/, - {T_SHORT}/*ldc_w*/, {T_SHORT}/*ldc2_w*/, - {T_BYTE}/*iload*/, {T_BYTE}/*lload*/, {T_BYTE}/*fload*/, - {T_BYTE}/*dload*/, {T_BYTE}/*aload*/, {}/*iload_0*/, - {}/*iload_1*/, {}/*iload_2*/, {}/*iload_3*/, {}/*lload_0*/, - {}/*lload_1*/, {}/*lload_2*/, {}/*lload_3*/, {}/*fload_0*/, - {}/*fload_1*/, {}/*fload_2*/, {}/*fload_3*/, {}/*dload_0*/, - {}/*dload_1*/, {}/*dload_2*/, {}/*dload_3*/, {}/*aload_0*/, - {}/*aload_1*/, {}/*aload_2*/, {}/*aload_3*/, {}/*iaload*/, - {}/*laload*/, {}/*faload*/, {}/*daload*/, {}/*aaload*/, - {}/*baload*/, {}/*caload*/, {}/*saload*/, {T_BYTE}/*istore*/, - {T_BYTE}/*lstore*/, {T_BYTE}/*fstore*/, {T_BYTE}/*dstore*/, - {T_BYTE}/*astore*/, {}/*istore_0*/, {}/*istore_1*/, - {}/*istore_2*/, {}/*istore_3*/, {}/*lstore_0*/, {}/*lstore_1*/, - {}/*lstore_2*/, {}/*lstore_3*/, {}/*fstore_0*/, {}/*fstore_1*/, - {}/*fstore_2*/, {}/*fstore_3*/, {}/*dstore_0*/, {}/*dstore_1*/, - {}/*dstore_2*/, {}/*dstore_3*/, {}/*astore_0*/, {}/*astore_1*/, - {}/*astore_2*/, {}/*astore_3*/, {}/*iastore*/, {}/*lastore*/, - {}/*fastore*/, {}/*dastore*/, {}/*aastore*/, {}/*bastore*/, - {}/*castore*/, {}/*sastore*/, {}/*pop*/, {}/*pop2*/, {}/*dup*/, - {}/*dup_x1*/, {}/*dup_x2*/, {}/*dup2*/, {}/*dup2_x1*/, - {}/*dup2_x2*/, {}/*swap*/, {}/*iadd*/, {}/*ladd*/, {}/*fadd*/, - {}/*dadd*/, {}/*isub*/, {}/*lsub*/, {}/*fsub*/, {}/*dsub*/, - {}/*imul*/, {}/*lmul*/, {}/*fmul*/, {}/*dmul*/, {}/*idiv*/, - {}/*ldiv*/, {}/*fdiv*/, {}/*ddiv*/, {}/*irem*/, {}/*lrem*/, - {}/*frem*/, {}/*drem*/, {}/*ineg*/, {}/*lneg*/, {}/*fneg*/, - {}/*dneg*/, {}/*ishl*/, {}/*lshl*/, {}/*ishr*/, {}/*lshr*/, - {}/*iushr*/, {}/*lushr*/, {}/*iand*/, {}/*land*/, {}/*ior*/, - {}/*lor*/, {}/*ixor*/, {}/*lxor*/, {T_BYTE, T_BYTE}/*iinc*/, - {}/*i2l*/, {}/*i2f*/, {}/*i2d*/, {}/*l2i*/, {}/*l2f*/, {}/*l2d*/, - {}/*f2i*/, {}/*f2l*/, {}/*f2d*/, {}/*d2i*/, {}/*d2l*/, {}/*d2f*/, - {}/*i2b*/, {}/*i2c*/,{}/*i2s*/, {}/*lcmp*/, {}/*fcmpl*/, - {}/*fcmpg*/, {}/*dcmpl*/, {}/*dcmpg*/, {T_SHORT}/*ifeq*/, - {T_SHORT}/*ifne*/, {T_SHORT}/*iflt*/, {T_SHORT}/*ifge*/, - {T_SHORT}/*ifgt*/, {T_SHORT}/*ifle*/, {T_SHORT}/*if_icmpeq*/, - {T_SHORT}/*if_icmpne*/, {T_SHORT}/*if_icmplt*/, - {T_SHORT}/*if_icmpge*/, {T_SHORT}/*if_icmpgt*/, - {T_SHORT}/*if_icmple*/, {T_SHORT}/*if_acmpeq*/, - {T_SHORT}/*if_acmpne*/, {T_SHORT}/*goto*/, {T_SHORT}/*jsr*/, - {T_BYTE}/*ret*/, {}/*tableswitch*/, {}/*lookupswitch*/, - {}/*ireturn*/, {}/*lreturn*/, {}/*freturn*/, {}/*dreturn*/, - {}/*areturn*/, {}/*return*/, {T_SHORT}/*getstatic*/, - {T_SHORT}/*putstatic*/, {T_SHORT}/*getfield*/, - {T_SHORT}/*putfield*/, {T_SHORT}/*invokevirtual*/, - {T_SHORT}/*invokespecial*/, {T_SHORT}/*invokestatic*/, - {T_SHORT, T_BYTE, T_BYTE}/*invokeinterface*/, {}, - {T_SHORT}/*new*/, {T_BYTE}/*newarray*/, - {T_SHORT}/*anewarray*/, {}/*arraylength*/, {}/*athrow*/, - {T_SHORT}/*checkcast*/, {T_SHORT}/*instanceof*/, - {}/*monitorenter*/, {}/*monitorexit*/, {T_BYTE}/*wide*/, - {T_SHORT, T_BYTE}/*multianewarray*/, {T_SHORT}/*ifnull*/, - {T_SHORT}/*ifnonnull*/, {T_INT}/*goto_w*/, {T_INT}/*jsr_w*/, - {}/*breakpoint*/, {}, {}, {}, {}, {}, {}, {}, - {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, - {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, - {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, - {}/*impdep1*/, {}/*impdep2*/ - }; - - /** - * Names of opcodes. - */ - public static final String[] OPCODE_NAMES = { - "nop", "aconst_null", "iconst_m1", "iconst_0", "iconst_1", - "iconst_2", "iconst_3", "iconst_4", "iconst_5", "lconst_0", - "lconst_1", "fconst_0", "fconst_1", "fconst_2", "dconst_0", - "dconst_1", "bipush", "sipush", "ldc", "ldc_w", "ldc2_w", "iload", - "lload", "fload", "dload", "aload", "iload_0", "iload_1", "iload_2", - "iload_3", "lload_0", "lload_1", "lload_2", "lload_3", "fload_0", - "fload_1", "fload_2", "fload_3", "dload_0", "dload_1", "dload_2", - "dload_3", "aload_0", "aload_1", "aload_2", "aload_3", "iaload", - "laload", "faload", "daload", "aaload", "baload", "caload", "saload", - "istore", "lstore", "fstore", "dstore", "astore", "istore_0", - "istore_1", "istore_2", "istore_3", "lstore_0", "lstore_1", - "lstore_2", "lstore_3", "fstore_0", "fstore_1", "fstore_2", - "fstore_3", "dstore_0", "dstore_1", "dstore_2", "dstore_3", - "astore_0", "astore_1", "astore_2", "astore_3", "iastore", "lastore", - "fastore", "dastore", "aastore", "bastore", "castore", "sastore", - "pop", "pop2", "dup", "dup_x1", "dup_x2", "dup2", "dup2_x1", - "dup2_x2", "swap", "iadd", "ladd", "fadd", "dadd", "isub", "lsub", - "fsub", "dsub", "imul", "lmul", "fmul", "dmul", "idiv", "ldiv", - "fdiv", "ddiv", "irem", "lrem", "frem", "drem", "ineg", "lneg", - "fneg", "dneg", "ishl", "lshl", "ishr", "lshr", "iushr", "lushr", - "iand", "land", "ior", "lor", "ixor", "lxor", "iinc", "i2l", "i2f", - "i2d", "l2i", "l2f", "l2d", "f2i", "f2l", "f2d", "d2i", "d2l", "d2f", - "i2b", "i2c", "i2s", "lcmp", "fcmpl", "fcmpg", - "dcmpl", "dcmpg", "ifeq", "ifne", "iflt", "ifge", "ifgt", "ifle", - "if_icmpeq", "if_icmpne", "if_icmplt", "if_icmpge", "if_icmpgt", - "if_icmple", "if_acmpeq", "if_acmpne", "goto", "jsr", "ret", - "tableswitch", "lookupswitch", "ireturn", "lreturn", "freturn", - "dreturn", "areturn", "return", "getstatic", "putstatic", "getfield", - "putfield", "invokevirtual", "invokespecial", "invokestatic", - "invokeinterface", ILLEGAL_OPCODE, "new", "newarray", "anewarray", - "arraylength", "athrow", "checkcast", "instanceof", "monitorenter", - "monitorexit", "wide", "multianewarray", "ifnull", "ifnonnull", - "goto_w", "jsr_w", "breakpoint", ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, "impdep1", "impdep2" - }; - - /** - * Number of words consumed on operand stack by instructions. - */ - public static final int[] CONSUME_STACK = { - 0/*nop*/, 0/*aconst_null*/, 0/*iconst_m1*/, 0/*iconst_0*/, 0/*iconst_1*/, - 0/*iconst_2*/, 0/*iconst_3*/, 0/*iconst_4*/, 0/*iconst_5*/, 0/*lconst_0*/, - 0/*lconst_1*/, 0/*fconst_0*/, 0/*fconst_1*/, 0/*fconst_2*/, 0/*dconst_0*/, - 0/*dconst_1*/, 0/*bipush*/, 0/*sipush*/, 0/*ldc*/, 0/*ldc_w*/, 0/*ldc2_w*/, 0/*iload*/, - 0/*lload*/, 0/*fload*/, 0/*dload*/, 0/*aload*/, 0/*iload_0*/, 0/*iload_1*/, 0/*iload_2*/, - 0/*iload_3*/, 0/*lload_0*/, 0/*lload_1*/, 0/*lload_2*/, 0/*lload_3*/, 0/*fload_0*/, - 0/*fload_1*/, 0/*fload_2*/, 0/*fload_3*/, 0/*dload_0*/, 0/*dload_1*/, 0/*dload_2*/, - 0/*dload_3*/, 0/*aload_0*/, 0/*aload_1*/, 0/*aload_2*/, 0/*aload_3*/, 2/*iaload*/, - 2/*laload*/, 2/*faload*/, 2/*daload*/, 2/*aaload*/, 2/*baload*/, 2/*caload*/, 2/*saload*/, - 1/*istore*/, 2/*lstore*/, 1/*fstore*/, 2/*dstore*/, 1/*astore*/, 1/*istore_0*/, - 1/*istore_1*/, 1/*istore_2*/, 1/*istore_3*/, 2/*lstore_0*/, 2/*lstore_1*/, - 2/*lstore_2*/, 2/*lstore_3*/, 1/*fstore_0*/, 1/*fstore_1*/, 1/*fstore_2*/, - 1/*fstore_3*/, 2/*dstore_0*/, 2/*dstore_1*/, 2/*dstore_2*/, 2/*dstore_3*/, - 1/*astore_0*/, 1/*astore_1*/, 1/*astore_2*/, 1/*astore_3*/, 3/*iastore*/, 4/*lastore*/, - 3/*fastore*/, 4/*dastore*/, 3/*aastore*/, 3/*bastore*/, 3/*castore*/, 3/*sastore*/, - 1/*pop*/, 2/*pop2*/, 1/*dup*/, 2/*dup_x1*/, 3/*dup_x2*/, 2/*dup2*/, 3/*dup2_x1*/, - 4/*dup2_x2*/, 2/*swap*/, 2/*iadd*/, 4/*ladd*/, 2/*fadd*/, 4/*dadd*/, 2/*isub*/, 4/*lsub*/, - 2/*fsub*/, 4/*dsub*/, 2/*imul*/, 4/*lmul*/, 2/*fmul*/, 4/*dmul*/, 2/*idiv*/, 4/*ldiv*/, - 2/*fdiv*/, 4/*ddiv*/, 2/*irem*/, 4/*lrem*/, 2/*frem*/, 4/*drem*/, 1/*ineg*/, 2/*lneg*/, - 1/*fneg*/, 2/*dneg*/, 2/*ishl*/, 3/*lshl*/, 2/*ishr*/, 3/*lshr*/, 2/*iushr*/, 3/*lushr*/, - 2/*iand*/, 4/*land*/, 2/*ior*/, 4/*lor*/, 2/*ixor*/, 4/*lxor*/, 0/*iinc*/, - 1/*i2l*/, 1/*i2f*/, 1/*i2d*/, 2/*l2i*/, 2/*l2f*/, 2/*l2d*/, 1/*f2i*/, 1/*f2l*/, - 1/*f2d*/, 2/*d2i*/, 2/*d2l*/, 2/*d2f*/, 1/*i2b*/, 1/*i2c*/, 1/*i2s*/, - 4/*lcmp*/, 2/*fcmpl*/, 2/*fcmpg*/, 4/*dcmpl*/, 4/*dcmpg*/, 1/*ifeq*/, 1/*ifne*/, - 1/*iflt*/, 1/*ifge*/, 1/*ifgt*/, 1/*ifle*/, 2/*if_icmpeq*/, 2/*if_icmpne*/, 2/*if_icmplt*/, - 2 /*if_icmpge*/, 2/*if_icmpgt*/, 2/*if_icmple*/, 2/*if_acmpeq*/, 2/*if_acmpne*/, - 0/*goto*/, 0/*jsr*/, 0/*ret*/, 1/*tableswitch*/, 1/*lookupswitch*/, 1/*ireturn*/, - 2/*lreturn*/, 1/*freturn*/, 2/*dreturn*/, 1/*areturn*/, 0/*return*/, 0/*getstatic*/, - UNPREDICTABLE/*putstatic*/, 1/*getfield*/, UNPREDICTABLE/*putfield*/, - UNPREDICTABLE/*invokevirtual*/, UNPREDICTABLE/*invokespecial*/, - UNPREDICTABLE/*invokestatic*/, - UNPREDICTABLE/*invokeinterface*/, UNDEFINED, 0/*new*/, 1/*newarray*/, 1/*anewarray*/, - 1/*arraylength*/, 1/*athrow*/, 1/*checkcast*/, 1/*instanceof*/, 1/*monitorenter*/, - 1/*monitorexit*/, 0/*wide*/, UNPREDICTABLE/*multianewarray*/, 1/*ifnull*/, 1/*ifnonnull*/, - 0/*goto_w*/, 0/*jsr_w*/, 0/*breakpoint*/, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNPREDICTABLE/*impdep1*/, UNPREDICTABLE/*impdep2*/ - }; - - /** - * Number of words produced onto operand stack by instructions. - */ - public static final int[] PRODUCE_STACK = { - 0/*nop*/, 1/*aconst_null*/, 1/*iconst_m1*/, 1/*iconst_0*/, 1/*iconst_1*/, - 1/*iconst_2*/, 1/*iconst_3*/, 1/*iconst_4*/, 1/*iconst_5*/, 2/*lconst_0*/, - 2/*lconst_1*/, 1/*fconst_0*/, 1/*fconst_1*/, 1/*fconst_2*/, 2/*dconst_0*/, - 2/*dconst_1*/, 1/*bipush*/, 1/*sipush*/, 1/*ldc*/, 1/*ldc_w*/, 2/*ldc2_w*/, 1/*iload*/, - 2/*lload*/, 1/*fload*/, 2/*dload*/, 1/*aload*/, 1/*iload_0*/, 1/*iload_1*/, 1/*iload_2*/, - 1/*iload_3*/, 2/*lload_0*/, 2/*lload_1*/, 2/*lload_2*/, 2/*lload_3*/, 1/*fload_0*/, - 1/*fload_1*/, 1/*fload_2*/, 1/*fload_3*/, 2/*dload_0*/, 2/*dload_1*/, 2/*dload_2*/, - 2/*dload_3*/, 1/*aload_0*/, 1/*aload_1*/, 1/*aload_2*/, 1/*aload_3*/, 1/*iaload*/, - 2/*laload*/, 1/*faload*/, 2/*daload*/, 1/*aaload*/, 1/*baload*/, 1/*caload*/, 1/*saload*/, - 0/*istore*/, 0/*lstore*/, 0/*fstore*/, 0/*dstore*/, 0/*astore*/, 0/*istore_0*/, - 0/*istore_1*/, 0/*istore_2*/, 0/*istore_3*/, 0/*lstore_0*/, 0/*lstore_1*/, - 0/*lstore_2*/, 0/*lstore_3*/, 0/*fstore_0*/, 0/*fstore_1*/, 0/*fstore_2*/, - 0/*fstore_3*/, 0/*dstore_0*/, 0/*dstore_1*/, 0/*dstore_2*/, 0/*dstore_3*/, - 0/*astore_0*/, 0/*astore_1*/, 0/*astore_2*/, 0/*astore_3*/, 0/*iastore*/, 0/*lastore*/, - 0/*fastore*/, 0/*dastore*/, 0/*aastore*/, 0/*bastore*/, 0/*castore*/, 0/*sastore*/, - 0/*pop*/, 0/*pop2*/, 2/*dup*/, 3/*dup_x1*/, 4/*dup_x2*/, 4/*dup2*/, 5/*dup2_x1*/, - 6/*dup2_x2*/, 2/*swap*/, 1/*iadd*/, 2/*ladd*/, 1/*fadd*/, 2/*dadd*/, 1/*isub*/, 2/*lsub*/, - 1/*fsub*/, 2/*dsub*/, 1/*imul*/, 2/*lmul*/, 1/*fmul*/, 2/*dmul*/, 1/*idiv*/, 2/*ldiv*/, - 1/*fdiv*/, 2/*ddiv*/, 1/*irem*/, 2/*lrem*/, 1/*frem*/, 2/*drem*/, 1/*ineg*/, 2/*lneg*/, - 1/*fneg*/, 2/*dneg*/, 1/*ishl*/, 2/*lshl*/, 1/*ishr*/, 2/*lshr*/, 1/*iushr*/, 2/*lushr*/, - 1/*iand*/, 2/*land*/, 1/*ior*/, 2/*lor*/, 1/*ixor*/, 2/*lxor*/, - 0/*iinc*/, 2/*i2l*/, 1/*i2f*/, 2/*i2d*/, 1/*l2i*/, 1/*l2f*/, 2/*l2d*/, 1/*f2i*/, - 2/*f2l*/, 2/*f2d*/, 1/*d2i*/, 2/*d2l*/, 1/*d2f*/, - 1/*i2b*/, 1/*i2c*/, 1/*i2s*/, 1/*lcmp*/, 1/*fcmpl*/, 1/*fcmpg*/, - 1/*dcmpl*/, 1/*dcmpg*/, 0/*ifeq*/, 0/*ifne*/, 0/*iflt*/, 0/*ifge*/, 0/*ifgt*/, 0/*ifle*/, - 0/*if_icmpeq*/, 0/*if_icmpne*/, 0/*if_icmplt*/, 0/*if_icmpge*/, 0/*if_icmpgt*/, - 0/*if_icmple*/, 0/*if_acmpeq*/, 0/*if_acmpne*/, 0/*goto*/, 1/*jsr*/, 0/*ret*/, - 0/*tableswitch*/, 0/*lookupswitch*/, 0/*ireturn*/, 0/*lreturn*/, 0/*freturn*/, - 0/*dreturn*/, 0/*areturn*/, 0/*return*/, UNPREDICTABLE/*getstatic*/, 0/*putstatic*/, - UNPREDICTABLE/*getfield*/, 0/*putfield*/, UNPREDICTABLE/*invokevirtual*/, - UNPREDICTABLE/*invokespecial*/, UNPREDICTABLE/*invokestatic*/, - UNPREDICTABLE/*invokeinterface*/, UNDEFINED, 1/*new*/, 1/*newarray*/, 1/*anewarray*/, - 1/*arraylength*/, 1/*athrow*/, 1/*checkcast*/, 1/*instanceof*/, 0/*monitorenter*/, - 0/*monitorexit*/, 0/*wide*/, 1/*multianewarray*/, 0/*ifnull*/, 0/*ifnonnull*/, - 0/*goto_w*/, 1/*jsr_w*/, 0/*breakpoint*/, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNPREDICTABLE/*impdep1*/, UNPREDICTABLE/*impdep2*/ - }; - - /** Attributes and their corresponding names. - */ - public static final byte ATTR_UNKNOWN = -1; - public static final byte ATTR_SOURCE_FILE = 0; - public static final byte ATTR_CONSTANT_VALUE = 1; - public static final byte ATTR_CODE = 2; - public static final byte ATTR_EXCEPTIONS = 3; - public static final byte ATTR_LINE_NUMBER_TABLE = 4; - public static final byte ATTR_LOCAL_VARIABLE_TABLE = 5; - public static final byte ATTR_INNER_CLASSES = 6; - public static final byte ATTR_SYNTHETIC = 7; - public static final byte ATTR_DEPRECATED = 8; - public static final byte ATTR_PMG = 9; - public static final byte ATTR_SIGNATURE = 10; - public static final byte ATTR_STACK_MAP = 11; - public static final byte ATTR_RUNTIMEVISIBLE_ANNOTATIONS = 12; - public static final byte ATTR_RUNTIMEINVISIBLE_ANNOTATIONS = 13; - public static final byte ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS = 14; - public static final byte ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS = 15; - public static final byte ATTR_ANNOTATION_DEFAULT = 16; - - public static final short KNOWN_ATTRIBUTES = 12;//should be 17 - - public static final String[] ATTRIBUTE_NAMES = { - "SourceFile", "ConstantValue", "Code", "Exceptions", - "LineNumberTable", "LocalVariableTable", - "InnerClasses", "Synthetic", "Deprecated", - "PMGClass", "Signature", "StackMap", - "RuntimeVisibleAnnotations", "RuntimeInvisibleAnnotations", - "RuntimeVisibleParameterAnnotations", "RuntimeInvisibleParameterAnnotations", - "AnnotationDefault" - }; - - /** Constants used in the StackMap attribute. - */ - public static final byte ITEM_Bogus = 0; - public static final byte ITEM_Integer = 1; - public static final byte ITEM_Float = 2; - public static final byte ITEM_Double = 3; - public static final byte ITEM_Long = 4; - public static final byte ITEM_Null = 5; - public static final byte ITEM_InitObject = 6; - public static final byte ITEM_Object = 7; - public static final byte ITEM_NewObject = 8; - - public static final String[] ITEM_NAMES = { - "Bogus", "Integer", "Float", "Double", "Long", - "Null", "InitObject", "Object", "NewObject" - }; -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0; + +/** + * Constants for the project, mostly defined in the JVM specification. + * + * @version $Id: Constants.java 410087 2006-05-29 12:12:19Z tcurdt $ + * @author M. Dahm + */ +public interface Constants { + /** Major and minor version of the code. + */ + public final static short MAJOR_1_1 = 45; + public final static short MINOR_1_1 = 3; + public final static short MAJOR_1_2 = 46; + public final static short MINOR_1_2 = 0; + public final static short MAJOR_1_3 = 47; + public final static short MINOR_1_3 = 0; + public final static short MAJOR_1_4 = 48; + public final static short MINOR_1_4 = 0; + public final static short MAJOR_1_5 = 49; + public final static short MINOR_1_5 = 0; + public final static short MAJOR = MAJOR_1_1; // Defaults + public final static short MINOR = MINOR_1_1; + + /** Maximum value for an unsigned short. + */ + public final static int MAX_SHORT = 65535; // 2^16 - 1 + + /** Maximum value for an unsigned byte. + */ + public final static int MAX_BYTE = 255; // 2^8 - 1 + + /** Access flags for classes, fields and methods. + */ + public final static short ACC_PUBLIC = 0x0001; + public final static short ACC_PRIVATE = 0x0002; + public final static short ACC_PROTECTED = 0x0004; + public final static short ACC_STATIC = 0x0008; + + public final static short ACC_FINAL = 0x0010; + public final static short ACC_SYNCHRONIZED = 0x0020; + public final static short ACC_VOLATILE = 0x0040; + public final static short ACC_BRIDGE = 0x0040; + public final static short ACC_TRANSIENT = 0x0080; + public final static short ACC_VARARGS = 0x0080; + + public final static short ACC_NATIVE = 0x0100; + public final static short ACC_INTERFACE = 0x0200; + public final static short ACC_ABSTRACT = 0x0400; + public final static short ACC_STRICT = 0x0800; + + public final static short ACC_SYNTHETIC = 0x1000; + public final static short ACC_ANNOTATION = 0x2000; + public final static short ACC_ENUM = 0x4000; + + // Applies to classes compiled by new compilers only + public final static short ACC_SUPER = 0x0020; + + public final static short MAX_ACC_FLAG = ACC_ENUM; + + public final static String[] ACCESS_NAMES = { + "public", "private", "protected", "static", "final", "synchronized", + "volatile", "transient", "native", "interface", "abstract", "strictfp", + "synthetic", "annotation", "enum" + }; + + /** Tags in constant pool to denote type of constant. + */ + public final static byte CONSTANT_Utf8 = 1; + public final static byte CONSTANT_Integer = 3; + public final static byte CONSTANT_Float = 4; + public final static byte CONSTANT_Long = 5; + public final static byte CONSTANT_Double = 6; + public final static byte CONSTANT_Class = 7; + public final static byte CONSTANT_Fieldref = 9; + public final static byte CONSTANT_String = 8; + public final static byte CONSTANT_Methodref = 10; + public final static byte CONSTANT_InterfaceMethodref = 11; + public final static byte CONSTANT_NameAndType = 12; + + public final static String[] CONSTANT_NAMES = { + "", "CONSTANT_Utf8", "", "CONSTANT_Integer", + "CONSTANT_Float", "CONSTANT_Long", "CONSTANT_Double", + "CONSTANT_Class", "CONSTANT_String", "CONSTANT_Fieldref", + "CONSTANT_Methodref", "CONSTANT_InterfaceMethodref", + "CONSTANT_NameAndType" }; + + /** The name of the static initializer, also called "class + * initialization method" or "interface initialization + * method". This is "<clinit>". + */ + public final static String STATIC_INITIALIZER_NAME = ""; + + /** The name of every constructor method in a class, also called + * "instance initialization method". This is "<init>". + */ + public final static String CONSTRUCTOR_NAME = ""; + + /** The names of the interfaces implemented by arrays */ + public final static String[] INTERFACES_IMPLEMENTED_BY_ARRAYS = {"java.lang.Cloneable", "java.io.Serializable"}; + + /** + * Limitations of the Java Virtual Machine. + * See The Java Virtual Machine Specification, Second Edition, page 152, chapter 4.10. + */ + public static final int MAX_CP_ENTRIES = 65535; + public static final int MAX_CODE_SIZE = 65536; //bytes + + /** Java VM opcodes. + */ + public static final short NOP = 0; + public static final short ACONST_NULL = 1; + public static final short ICONST_M1 = 2; + public static final short ICONST_0 = 3; + public static final short ICONST_1 = 4; + public static final short ICONST_2 = 5; + public static final short ICONST_3 = 6; + public static final short ICONST_4 = 7; + public static final short ICONST_5 = 8; + public static final short LCONST_0 = 9; + public static final short LCONST_1 = 10; + public static final short FCONST_0 = 11; + public static final short FCONST_1 = 12; + public static final short FCONST_2 = 13; + public static final short DCONST_0 = 14; + public static final short DCONST_1 = 15; + public static final short BIPUSH = 16; + public static final short SIPUSH = 17; + public static final short LDC = 18; + public static final short LDC_W = 19; + public static final short LDC2_W = 20; + public static final short ILOAD = 21; + public static final short LLOAD = 22; + public static final short FLOAD = 23; + public static final short DLOAD = 24; + public static final short ALOAD = 25; + public static final short ILOAD_0 = 26; + public static final short ILOAD_1 = 27; + public static final short ILOAD_2 = 28; + public static final short ILOAD_3 = 29; + public static final short LLOAD_0 = 30; + public static final short LLOAD_1 = 31; + public static final short LLOAD_2 = 32; + public static final short LLOAD_3 = 33; + public static final short FLOAD_0 = 34; + public static final short FLOAD_1 = 35; + public static final short FLOAD_2 = 36; + public static final short FLOAD_3 = 37; + public static final short DLOAD_0 = 38; + public static final short DLOAD_1 = 39; + public static final short DLOAD_2 = 40; + public static final short DLOAD_3 = 41; + public static final short ALOAD_0 = 42; + public static final short ALOAD_1 = 43; + public static final short ALOAD_2 = 44; + public static final short ALOAD_3 = 45; + public static final short IALOAD = 46; + public static final short LALOAD = 47; + public static final short FALOAD = 48; + public static final short DALOAD = 49; + public static final short AALOAD = 50; + public static final short BALOAD = 51; + public static final short CALOAD = 52; + public static final short SALOAD = 53; + public static final short ISTORE = 54; + public static final short LSTORE = 55; + public static final short FSTORE = 56; + public static final short DSTORE = 57; + public static final short ASTORE = 58; + public static final short ISTORE_0 = 59; + public static final short ISTORE_1 = 60; + public static final short ISTORE_2 = 61; + public static final short ISTORE_3 = 62; + public static final short LSTORE_0 = 63; + public static final short LSTORE_1 = 64; + public static final short LSTORE_2 = 65; + public static final short LSTORE_3 = 66; + public static final short FSTORE_0 = 67; + public static final short FSTORE_1 = 68; + public static final short FSTORE_2 = 69; + public static final short FSTORE_3 = 70; + public static final short DSTORE_0 = 71; + public static final short DSTORE_1 = 72; + public static final short DSTORE_2 = 73; + public static final short DSTORE_3 = 74; + public static final short ASTORE_0 = 75; + public static final short ASTORE_1 = 76; + public static final short ASTORE_2 = 77; + public static final short ASTORE_3 = 78; + public static final short IASTORE = 79; + public static final short LASTORE = 80; + public static final short FASTORE = 81; + public static final short DASTORE = 82; + public static final short AASTORE = 83; + public static final short BASTORE = 84; + public static final short CASTORE = 85; + public static final short SASTORE = 86; + public static final short POP = 87; + public static final short POP2 = 88; + public static final short DUP = 89; + public static final short DUP_X1 = 90; + public static final short DUP_X2 = 91; + public static final short DUP2 = 92; + public static final short DUP2_X1 = 93; + public static final short DUP2_X2 = 94; + public static final short SWAP = 95; + public static final short IADD = 96; + public static final short LADD = 97; + public static final short FADD = 98; + public static final short DADD = 99; + public static final short ISUB = 100; + public static final short LSUB = 101; + public static final short FSUB = 102; + public static final short DSUB = 103; + public static final short IMUL = 104; + public static final short LMUL = 105; + public static final short FMUL = 106; + public static final short DMUL = 107; + public static final short IDIV = 108; + public static final short LDIV = 109; + public static final short FDIV = 110; + public static final short DDIV = 111; + public static final short IREM = 112; + public static final short LREM = 113; + public static final short FREM = 114; + public static final short DREM = 115; + public static final short INEG = 116; + public static final short LNEG = 117; + public static final short FNEG = 118; + public static final short DNEG = 119; + public static final short ISHL = 120; + public static final short LSHL = 121; + public static final short ISHR = 122; + public static final short LSHR = 123; + public static final short IUSHR = 124; + public static final short LUSHR = 125; + public static final short IAND = 126; + public static final short LAND = 127; + public static final short IOR = 128; + public static final short LOR = 129; + public static final short IXOR = 130; + public static final short LXOR = 131; + public static final short IINC = 132; + public static final short I2L = 133; + public static final short I2F = 134; + public static final short I2D = 135; + public static final short L2I = 136; + public static final short L2F = 137; + public static final short L2D = 138; + public static final short F2I = 139; + public static final short F2L = 140; + public static final short F2D = 141; + public static final short D2I = 142; + public static final short D2L = 143; + public static final short D2F = 144; + public static final short I2B = 145; + public static final short INT2BYTE = 145; // Old notion + public static final short I2C = 146; + public static final short INT2CHAR = 146; // Old notion + public static final short I2S = 147; + public static final short INT2SHORT = 147; // Old notion + public static final short LCMP = 148; + public static final short FCMPL = 149; + public static final short FCMPG = 150; + public static final short DCMPL = 151; + public static final short DCMPG = 152; + public static final short IFEQ = 153; + public static final short IFNE = 154; + public static final short IFLT = 155; + public static final short IFGE = 156; + public static final short IFGT = 157; + public static final short IFLE = 158; + public static final short IF_ICMPEQ = 159; + public static final short IF_ICMPNE = 160; + public static final short IF_ICMPLT = 161; + public static final short IF_ICMPGE = 162; + public static final short IF_ICMPGT = 163; + public static final short IF_ICMPLE = 164; + public static final short IF_ACMPEQ = 165; + public static final short IF_ACMPNE = 166; + public static final short GOTO = 167; + public static final short JSR = 168; + public static final short RET = 169; + public static final short TABLESWITCH = 170; + public static final short LOOKUPSWITCH = 171; + public static final short IRETURN = 172; + public static final short LRETURN = 173; + public static final short FRETURN = 174; + public static final short DRETURN = 175; + public static final short ARETURN = 176; + public static final short RETURN = 177; + public static final short GETSTATIC = 178; + public static final short PUTSTATIC = 179; + public static final short GETFIELD = 180; + public static final short PUTFIELD = 181; + public static final short INVOKEVIRTUAL = 182; + public static final short INVOKESPECIAL = 183; + public static final short INVOKENONVIRTUAL = 183; // Old name in JDK 1.0 + public static final short INVOKESTATIC = 184; + public static final short INVOKEINTERFACE = 185; + public static final short NEW = 187; + public static final short NEWARRAY = 188; + public static final short ANEWARRAY = 189; + public static final short ARRAYLENGTH = 190; + public static final short ATHROW = 191; + public static final short CHECKCAST = 192; + public static final short INSTANCEOF = 193; + public static final short MONITORENTER = 194; + public static final short MONITOREXIT = 195; + public static final short WIDE = 196; + public static final short MULTIANEWARRAY = 197; + public static final short IFNULL = 198; + public static final short IFNONNULL = 199; + public static final short GOTO_W = 200; + public static final short JSR_W = 201; + + /** + * Non-legal opcodes, may be used by JVM internally. + */ + public static final short BREAKPOINT = 202; + public static final short LDC_QUICK = 203; + public static final short LDC_W_QUICK = 204; + public static final short LDC2_W_QUICK = 205; + public static final short GETFIELD_QUICK = 206; + public static final short PUTFIELD_QUICK = 207; + public static final short GETFIELD2_QUICK = 208; + public static final short PUTFIELD2_QUICK = 209; + public static final short GETSTATIC_QUICK = 210; + public static final short PUTSTATIC_QUICK = 211; + public static final short GETSTATIC2_QUICK = 212; + public static final short PUTSTATIC2_QUICK = 213; + public static final short INVOKEVIRTUAL_QUICK = 214; + public static final short INVOKENONVIRTUAL_QUICK = 215; + public static final short INVOKESUPER_QUICK = 216; + public static final short INVOKESTATIC_QUICK = 217; + public static final short INVOKEINTERFACE_QUICK = 218; + public static final short INVOKEVIRTUALOBJECT_QUICK = 219; + public static final short NEW_QUICK = 221; + public static final short ANEWARRAY_QUICK = 222; + public static final short MULTIANEWARRAY_QUICK = 223; + public static final short CHECKCAST_QUICK = 224; + public static final short INSTANCEOF_QUICK = 225; + public static final short INVOKEVIRTUAL_QUICK_W = 226; + public static final short GETFIELD_QUICK_W = 227; + public static final short PUTFIELD_QUICK_W = 228; + public static final short IMPDEP1 = 254; + public static final short IMPDEP2 = 255; + + /** + * For internal purposes only. + */ + public static final short PUSH = 4711; + public static final short SWITCH = 4712; + + /** + * Illegal codes + */ + public static final short UNDEFINED = -1; + public static final short UNPREDICTABLE = -2; + public static final short RESERVED = -3; + public static final String ILLEGAL_OPCODE = ""; + public static final String ILLEGAL_TYPE = ""; + + public static final byte T_BOOLEAN = 4; + public static final byte T_CHAR = 5; + public static final byte T_FLOAT = 6; + public static final byte T_DOUBLE = 7; + public static final byte T_BYTE = 8; + public static final byte T_SHORT = 9; + public static final byte T_INT = 10; + public static final byte T_LONG = 11; + + public static final byte T_VOID = 12; // Non-standard + public static final byte T_ARRAY = 13; + public static final byte T_OBJECT = 14; + public static final byte T_REFERENCE = 14; // Deprecated + public static final byte T_UNKNOWN = 15; + public static final byte T_ADDRESS = 16; + + /** The primitive type names corresponding to the T_XX constants, + * e.g., TYPE_NAMES[T_INT] = "int" + */ + public static final String[] TYPE_NAMES = { + ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE, + "boolean", "char", "float", "double", "byte", "short", "int", "long", + "void", "array", "object", "unknown" // Non-standard + }; + + /** The primitive class names corresponding to the T_XX constants, + * e.g., CLASS_TYPE_NAMES[T_INT] = "java.lang.Integer" + */ + public static final String[] CLASS_TYPE_NAMES = { + ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE, + "java.lang.Boolean", "java.lang.Character", "java.lang.Float", + "java.lang.Double", "java.lang.Byte", "java.lang.Short", + "java.lang.Integer", "java.lang.Long", "java.lang.Void", + ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE + }; + + /** The signature characters corresponding to primitive types, + * e.g., SHORT_TYPE_NAMES[T_INT] = "I" + */ + public static final String[] SHORT_TYPE_NAMES = { + ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE, + "Z", "C", "F", "D", "B", "S", "I", "J", + "V", ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE + }; + + /** + * Number of byte code operands, i.e., number of bytes after the tag byte + * itself. + */ + public static final short[] NO_OF_OPERANDS = { + 0/*nop*/, 0/*aconst_null*/, 0/*iconst_m1*/, 0/*iconst_0*/, + 0/*iconst_1*/, 0/*iconst_2*/, 0/*iconst_3*/, 0/*iconst_4*/, + 0/*iconst_5*/, 0/*lconst_0*/, 0/*lconst_1*/, 0/*fconst_0*/, + 0/*fconst_1*/, 0/*fconst_2*/, 0/*dconst_0*/, 0/*dconst_1*/, + 1/*bipush*/, 2/*sipush*/, 1/*ldc*/, 2/*ldc_w*/, 2/*ldc2_w*/, + 1/*iload*/, 1/*lload*/, 1/*fload*/, 1/*dload*/, 1/*aload*/, + 0/*iload_0*/, 0/*iload_1*/, 0/*iload_2*/, 0/*iload_3*/, + 0/*lload_0*/, 0/*lload_1*/, 0/*lload_2*/, 0/*lload_3*/, + 0/*fload_0*/, 0/*fload_1*/, 0/*fload_2*/, 0/*fload_3*/, + 0/*dload_0*/, 0/*dload_1*/, 0/*dload_2*/, 0/*dload_3*/, + 0/*aload_0*/, 0/*aload_1*/, 0/*aload_2*/, 0/*aload_3*/, + 0/*iaload*/, 0/*laload*/, 0/*faload*/, 0/*daload*/, + 0/*aaload*/, 0/*baload*/, 0/*caload*/, 0/*saload*/, + 1/*istore*/, 1/*lstore*/, 1/*fstore*/, 1/*dstore*/, + 1/*astore*/, 0/*istore_0*/, 0/*istore_1*/, 0/*istore_2*/, + 0/*istore_3*/, 0/*lstore_0*/, 0/*lstore_1*/, 0/*lstore_2*/, + 0/*lstore_3*/, 0/*fstore_0*/, 0/*fstore_1*/, 0/*fstore_2*/, + 0/*fstore_3*/, 0/*dstore_0*/, 0/*dstore_1*/, 0/*dstore_2*/, + 0/*dstore_3*/, 0/*astore_0*/, 0/*astore_1*/, 0/*astore_2*/, + 0/*astore_3*/, 0/*iastore*/, 0/*lastore*/, 0/*fastore*/, + 0/*dastore*/, 0/*aastore*/, 0/*bastore*/, 0/*castore*/, + 0/*sastore*/, 0/*pop*/, 0/*pop2*/, 0/*dup*/, 0/*dup_x1*/, + 0/*dup_x2*/, 0/*dup2*/, 0/*dup2_x1*/, 0/*dup2_x2*/, 0/*swap*/, + 0/*iadd*/, 0/*ladd*/, 0/*fadd*/, 0/*dadd*/, 0/*isub*/, + 0/*lsub*/, 0/*fsub*/, 0/*dsub*/, 0/*imul*/, 0/*lmul*/, + 0/*fmul*/, 0/*dmul*/, 0/*idiv*/, 0/*ldiv*/, 0/*fdiv*/, + 0/*ddiv*/, 0/*irem*/, 0/*lrem*/, 0/*frem*/, 0/*drem*/, + 0/*ineg*/, 0/*lneg*/, 0/*fneg*/, 0/*dneg*/, 0/*ishl*/, + 0/*lshl*/, 0/*ishr*/, 0/*lshr*/, 0/*iushr*/, 0/*lushr*/, + 0/*iand*/, 0/*land*/, 0/*ior*/, 0/*lor*/, 0/*ixor*/, 0/*lxor*/, + 2/*iinc*/, 0/*i2l*/, 0/*i2f*/, 0/*i2d*/, 0/*l2i*/, 0/*l2f*/, + 0/*l2d*/, 0/*f2i*/, 0/*f2l*/, 0/*f2d*/, 0/*d2i*/, 0/*d2l*/, + 0/*d2f*/, 0/*i2b*/, 0/*i2c*/, 0/*i2s*/, 0/*lcmp*/, 0/*fcmpl*/, + 0/*fcmpg*/, 0/*dcmpl*/, 0/*dcmpg*/, 2/*ifeq*/, 2/*ifne*/, + 2/*iflt*/, 2/*ifge*/, 2/*ifgt*/, 2/*ifle*/, 2/*if_icmpeq*/, + 2/*if_icmpne*/, 2/*if_icmplt*/, 2/*if_icmpge*/, 2/*if_icmpgt*/, + 2/*if_icmple*/, 2/*if_acmpeq*/, 2/*if_acmpne*/, 2/*goto*/, + 2/*jsr*/, 1/*ret*/, UNPREDICTABLE/*tableswitch*/, UNPREDICTABLE/*lookupswitch*/, + 0/*ireturn*/, 0/*lreturn*/, 0/*freturn*/, + 0/*dreturn*/, 0/*areturn*/, 0/*return*/, + 2/*getstatic*/, 2/*putstatic*/, 2/*getfield*/, + 2/*putfield*/, 2/*invokevirtual*/, 2/*invokespecial*/, 2/*invokestatic*/, + 4/*invokeinterface*/, UNDEFINED, 2/*new*/, + 1/*newarray*/, 2/*anewarray*/, + 0/*arraylength*/, 0/*athrow*/, 2/*checkcast*/, + 2/*instanceof*/, 0/*monitorenter*/, + 0/*monitorexit*/, UNPREDICTABLE/*wide*/, 3/*multianewarray*/, + 2/*ifnull*/, 2/*ifnonnull*/, 4/*goto_w*/, + 4/*jsr_w*/, 0/*breakpoint*/, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, RESERVED/*impdep1*/, RESERVED/*impdep2*/ + }; + + /** + * How the byte code operands are to be interpreted. + */ + public static final short[][] TYPE_OF_OPERANDS = { + {}/*nop*/, {}/*aconst_null*/, {}/*iconst_m1*/, {}/*iconst_0*/, + {}/*iconst_1*/, {}/*iconst_2*/, {}/*iconst_3*/, {}/*iconst_4*/, + {}/*iconst_5*/, {}/*lconst_0*/, {}/*lconst_1*/, {}/*fconst_0*/, + {}/*fconst_1*/, {}/*fconst_2*/, {}/*dconst_0*/, {}/*dconst_1*/, + {T_BYTE}/*bipush*/, {T_SHORT}/*sipush*/, {T_BYTE}/*ldc*/, + {T_SHORT}/*ldc_w*/, {T_SHORT}/*ldc2_w*/, + {T_BYTE}/*iload*/, {T_BYTE}/*lload*/, {T_BYTE}/*fload*/, + {T_BYTE}/*dload*/, {T_BYTE}/*aload*/, {}/*iload_0*/, + {}/*iload_1*/, {}/*iload_2*/, {}/*iload_3*/, {}/*lload_0*/, + {}/*lload_1*/, {}/*lload_2*/, {}/*lload_3*/, {}/*fload_0*/, + {}/*fload_1*/, {}/*fload_2*/, {}/*fload_3*/, {}/*dload_0*/, + {}/*dload_1*/, {}/*dload_2*/, {}/*dload_3*/, {}/*aload_0*/, + {}/*aload_1*/, {}/*aload_2*/, {}/*aload_3*/, {}/*iaload*/, + {}/*laload*/, {}/*faload*/, {}/*daload*/, {}/*aaload*/, + {}/*baload*/, {}/*caload*/, {}/*saload*/, {T_BYTE}/*istore*/, + {T_BYTE}/*lstore*/, {T_BYTE}/*fstore*/, {T_BYTE}/*dstore*/, + {T_BYTE}/*astore*/, {}/*istore_0*/, {}/*istore_1*/, + {}/*istore_2*/, {}/*istore_3*/, {}/*lstore_0*/, {}/*lstore_1*/, + {}/*lstore_2*/, {}/*lstore_3*/, {}/*fstore_0*/, {}/*fstore_1*/, + {}/*fstore_2*/, {}/*fstore_3*/, {}/*dstore_0*/, {}/*dstore_1*/, + {}/*dstore_2*/, {}/*dstore_3*/, {}/*astore_0*/, {}/*astore_1*/, + {}/*astore_2*/, {}/*astore_3*/, {}/*iastore*/, {}/*lastore*/, + {}/*fastore*/, {}/*dastore*/, {}/*aastore*/, {}/*bastore*/, + {}/*castore*/, {}/*sastore*/, {}/*pop*/, {}/*pop2*/, {}/*dup*/, + {}/*dup_x1*/, {}/*dup_x2*/, {}/*dup2*/, {}/*dup2_x1*/, + {}/*dup2_x2*/, {}/*swap*/, {}/*iadd*/, {}/*ladd*/, {}/*fadd*/, + {}/*dadd*/, {}/*isub*/, {}/*lsub*/, {}/*fsub*/, {}/*dsub*/, + {}/*imul*/, {}/*lmul*/, {}/*fmul*/, {}/*dmul*/, {}/*idiv*/, + {}/*ldiv*/, {}/*fdiv*/, {}/*ddiv*/, {}/*irem*/, {}/*lrem*/, + {}/*frem*/, {}/*drem*/, {}/*ineg*/, {}/*lneg*/, {}/*fneg*/, + {}/*dneg*/, {}/*ishl*/, {}/*lshl*/, {}/*ishr*/, {}/*lshr*/, + {}/*iushr*/, {}/*lushr*/, {}/*iand*/, {}/*land*/, {}/*ior*/, + {}/*lor*/, {}/*ixor*/, {}/*lxor*/, {T_BYTE, T_BYTE}/*iinc*/, + {}/*i2l*/, {}/*i2f*/, {}/*i2d*/, {}/*l2i*/, {}/*l2f*/, {}/*l2d*/, + {}/*f2i*/, {}/*f2l*/, {}/*f2d*/, {}/*d2i*/, {}/*d2l*/, {}/*d2f*/, + {}/*i2b*/, {}/*i2c*/,{}/*i2s*/, {}/*lcmp*/, {}/*fcmpl*/, + {}/*fcmpg*/, {}/*dcmpl*/, {}/*dcmpg*/, {T_SHORT}/*ifeq*/, + {T_SHORT}/*ifne*/, {T_SHORT}/*iflt*/, {T_SHORT}/*ifge*/, + {T_SHORT}/*ifgt*/, {T_SHORT}/*ifle*/, {T_SHORT}/*if_icmpeq*/, + {T_SHORT}/*if_icmpne*/, {T_SHORT}/*if_icmplt*/, + {T_SHORT}/*if_icmpge*/, {T_SHORT}/*if_icmpgt*/, + {T_SHORT}/*if_icmple*/, {T_SHORT}/*if_acmpeq*/, + {T_SHORT}/*if_acmpne*/, {T_SHORT}/*goto*/, {T_SHORT}/*jsr*/, + {T_BYTE}/*ret*/, {}/*tableswitch*/, {}/*lookupswitch*/, + {}/*ireturn*/, {}/*lreturn*/, {}/*freturn*/, {}/*dreturn*/, + {}/*areturn*/, {}/*return*/, {T_SHORT}/*getstatic*/, + {T_SHORT}/*putstatic*/, {T_SHORT}/*getfield*/, + {T_SHORT}/*putfield*/, {T_SHORT}/*invokevirtual*/, + {T_SHORT}/*invokespecial*/, {T_SHORT}/*invokestatic*/, + {T_SHORT, T_BYTE, T_BYTE}/*invokeinterface*/, {}, + {T_SHORT}/*new*/, {T_BYTE}/*newarray*/, + {T_SHORT}/*anewarray*/, {}/*arraylength*/, {}/*athrow*/, + {T_SHORT}/*checkcast*/, {T_SHORT}/*instanceof*/, + {}/*monitorenter*/, {}/*monitorexit*/, {T_BYTE}/*wide*/, + {T_SHORT, T_BYTE}/*multianewarray*/, {T_SHORT}/*ifnull*/, + {T_SHORT}/*ifnonnull*/, {T_INT}/*goto_w*/, {T_INT}/*jsr_w*/, + {}/*breakpoint*/, {}, {}, {}, {}, {}, {}, {}, + {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, + {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, + {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, + {}/*impdep1*/, {}/*impdep2*/ + }; + + /** + * Names of opcodes. + */ + public static final String[] OPCODE_NAMES = { + "nop", "aconst_null", "iconst_m1", "iconst_0", "iconst_1", + "iconst_2", "iconst_3", "iconst_4", "iconst_5", "lconst_0", + "lconst_1", "fconst_0", "fconst_1", "fconst_2", "dconst_0", + "dconst_1", "bipush", "sipush", "ldc", "ldc_w", "ldc2_w", "iload", + "lload", "fload", "dload", "aload", "iload_0", "iload_1", "iload_2", + "iload_3", "lload_0", "lload_1", "lload_2", "lload_3", "fload_0", + "fload_1", "fload_2", "fload_3", "dload_0", "dload_1", "dload_2", + "dload_3", "aload_0", "aload_1", "aload_2", "aload_3", "iaload", + "laload", "faload", "daload", "aaload", "baload", "caload", "saload", + "istore", "lstore", "fstore", "dstore", "astore", "istore_0", + "istore_1", "istore_2", "istore_3", "lstore_0", "lstore_1", + "lstore_2", "lstore_3", "fstore_0", "fstore_1", "fstore_2", + "fstore_3", "dstore_0", "dstore_1", "dstore_2", "dstore_3", + "astore_0", "astore_1", "astore_2", "astore_3", "iastore", "lastore", + "fastore", "dastore", "aastore", "bastore", "castore", "sastore", + "pop", "pop2", "dup", "dup_x1", "dup_x2", "dup2", "dup2_x1", + "dup2_x2", "swap", "iadd", "ladd", "fadd", "dadd", "isub", "lsub", + "fsub", "dsub", "imul", "lmul", "fmul", "dmul", "idiv", "ldiv", + "fdiv", "ddiv", "irem", "lrem", "frem", "drem", "ineg", "lneg", + "fneg", "dneg", "ishl", "lshl", "ishr", "lshr", "iushr", "lushr", + "iand", "land", "ior", "lor", "ixor", "lxor", "iinc", "i2l", "i2f", + "i2d", "l2i", "l2f", "l2d", "f2i", "f2l", "f2d", "d2i", "d2l", "d2f", + "i2b", "i2c", "i2s", "lcmp", "fcmpl", "fcmpg", + "dcmpl", "dcmpg", "ifeq", "ifne", "iflt", "ifge", "ifgt", "ifle", + "if_icmpeq", "if_icmpne", "if_icmplt", "if_icmpge", "if_icmpgt", + "if_icmple", "if_acmpeq", "if_acmpne", "goto", "jsr", "ret", + "tableswitch", "lookupswitch", "ireturn", "lreturn", "freturn", + "dreturn", "areturn", "return", "getstatic", "putstatic", "getfield", + "putfield", "invokevirtual", "invokespecial", "invokestatic", + "invokeinterface", ILLEGAL_OPCODE, "new", "newarray", "anewarray", + "arraylength", "athrow", "checkcast", "instanceof", "monitorenter", + "monitorexit", "wide", "multianewarray", "ifnull", "ifnonnull", + "goto_w", "jsr_w", "breakpoint", ILLEGAL_OPCODE, ILLEGAL_OPCODE, + ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, + ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, + ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, + ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, + ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, + ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, + ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, + ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, + ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, + ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, + ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, + ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, + ILLEGAL_OPCODE, "impdep1", "impdep2" + }; + + /** + * Number of words consumed on operand stack by instructions. + */ + public static final int[] CONSUME_STACK = { + 0/*nop*/, 0/*aconst_null*/, 0/*iconst_m1*/, 0/*iconst_0*/, 0/*iconst_1*/, + 0/*iconst_2*/, 0/*iconst_3*/, 0/*iconst_4*/, 0/*iconst_5*/, 0/*lconst_0*/, + 0/*lconst_1*/, 0/*fconst_0*/, 0/*fconst_1*/, 0/*fconst_2*/, 0/*dconst_0*/, + 0/*dconst_1*/, 0/*bipush*/, 0/*sipush*/, 0/*ldc*/, 0/*ldc_w*/, 0/*ldc2_w*/, 0/*iload*/, + 0/*lload*/, 0/*fload*/, 0/*dload*/, 0/*aload*/, 0/*iload_0*/, 0/*iload_1*/, 0/*iload_2*/, + 0/*iload_3*/, 0/*lload_0*/, 0/*lload_1*/, 0/*lload_2*/, 0/*lload_3*/, 0/*fload_0*/, + 0/*fload_1*/, 0/*fload_2*/, 0/*fload_3*/, 0/*dload_0*/, 0/*dload_1*/, 0/*dload_2*/, + 0/*dload_3*/, 0/*aload_0*/, 0/*aload_1*/, 0/*aload_2*/, 0/*aload_3*/, 2/*iaload*/, + 2/*laload*/, 2/*faload*/, 2/*daload*/, 2/*aaload*/, 2/*baload*/, 2/*caload*/, 2/*saload*/, + 1/*istore*/, 2/*lstore*/, 1/*fstore*/, 2/*dstore*/, 1/*astore*/, 1/*istore_0*/, + 1/*istore_1*/, 1/*istore_2*/, 1/*istore_3*/, 2/*lstore_0*/, 2/*lstore_1*/, + 2/*lstore_2*/, 2/*lstore_3*/, 1/*fstore_0*/, 1/*fstore_1*/, 1/*fstore_2*/, + 1/*fstore_3*/, 2/*dstore_0*/, 2/*dstore_1*/, 2/*dstore_2*/, 2/*dstore_3*/, + 1/*astore_0*/, 1/*astore_1*/, 1/*astore_2*/, 1/*astore_3*/, 3/*iastore*/, 4/*lastore*/, + 3/*fastore*/, 4/*dastore*/, 3/*aastore*/, 3/*bastore*/, 3/*castore*/, 3/*sastore*/, + 1/*pop*/, 2/*pop2*/, 1/*dup*/, 2/*dup_x1*/, 3/*dup_x2*/, 2/*dup2*/, 3/*dup2_x1*/, + 4/*dup2_x2*/, 2/*swap*/, 2/*iadd*/, 4/*ladd*/, 2/*fadd*/, 4/*dadd*/, 2/*isub*/, 4/*lsub*/, + 2/*fsub*/, 4/*dsub*/, 2/*imul*/, 4/*lmul*/, 2/*fmul*/, 4/*dmul*/, 2/*idiv*/, 4/*ldiv*/, + 2/*fdiv*/, 4/*ddiv*/, 2/*irem*/, 4/*lrem*/, 2/*frem*/, 4/*drem*/, 1/*ineg*/, 2/*lneg*/, + 1/*fneg*/, 2/*dneg*/, 2/*ishl*/, 3/*lshl*/, 2/*ishr*/, 3/*lshr*/, 2/*iushr*/, 3/*lushr*/, + 2/*iand*/, 4/*land*/, 2/*ior*/, 4/*lor*/, 2/*ixor*/, 4/*lxor*/, 0/*iinc*/, + 1/*i2l*/, 1/*i2f*/, 1/*i2d*/, 2/*l2i*/, 2/*l2f*/, 2/*l2d*/, 1/*f2i*/, 1/*f2l*/, + 1/*f2d*/, 2/*d2i*/, 2/*d2l*/, 2/*d2f*/, 1/*i2b*/, 1/*i2c*/, 1/*i2s*/, + 4/*lcmp*/, 2/*fcmpl*/, 2/*fcmpg*/, 4/*dcmpl*/, 4/*dcmpg*/, 1/*ifeq*/, 1/*ifne*/, + 1/*iflt*/, 1/*ifge*/, 1/*ifgt*/, 1/*ifle*/, 2/*if_icmpeq*/, 2/*if_icmpne*/, 2/*if_icmplt*/, + 2 /*if_icmpge*/, 2/*if_icmpgt*/, 2/*if_icmple*/, 2/*if_acmpeq*/, 2/*if_acmpne*/, + 0/*goto*/, 0/*jsr*/, 0/*ret*/, 1/*tableswitch*/, 1/*lookupswitch*/, 1/*ireturn*/, + 2/*lreturn*/, 1/*freturn*/, 2/*dreturn*/, 1/*areturn*/, 0/*return*/, 0/*getstatic*/, + UNPREDICTABLE/*putstatic*/, 1/*getfield*/, UNPREDICTABLE/*putfield*/, + UNPREDICTABLE/*invokevirtual*/, UNPREDICTABLE/*invokespecial*/, + UNPREDICTABLE/*invokestatic*/, + UNPREDICTABLE/*invokeinterface*/, UNDEFINED, 0/*new*/, 1/*newarray*/, 1/*anewarray*/, + 1/*arraylength*/, 1/*athrow*/, 1/*checkcast*/, 1/*instanceof*/, 1/*monitorenter*/, + 1/*monitorexit*/, 0/*wide*/, UNPREDICTABLE/*multianewarray*/, 1/*ifnull*/, 1/*ifnonnull*/, + 0/*goto_w*/, 0/*jsr_w*/, 0/*breakpoint*/, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNPREDICTABLE/*impdep1*/, UNPREDICTABLE/*impdep2*/ + }; + + /** + * Number of words produced onto operand stack by instructions. + */ + public static final int[] PRODUCE_STACK = { + 0/*nop*/, 1/*aconst_null*/, 1/*iconst_m1*/, 1/*iconst_0*/, 1/*iconst_1*/, + 1/*iconst_2*/, 1/*iconst_3*/, 1/*iconst_4*/, 1/*iconst_5*/, 2/*lconst_0*/, + 2/*lconst_1*/, 1/*fconst_0*/, 1/*fconst_1*/, 1/*fconst_2*/, 2/*dconst_0*/, + 2/*dconst_1*/, 1/*bipush*/, 1/*sipush*/, 1/*ldc*/, 1/*ldc_w*/, 2/*ldc2_w*/, 1/*iload*/, + 2/*lload*/, 1/*fload*/, 2/*dload*/, 1/*aload*/, 1/*iload_0*/, 1/*iload_1*/, 1/*iload_2*/, + 1/*iload_3*/, 2/*lload_0*/, 2/*lload_1*/, 2/*lload_2*/, 2/*lload_3*/, 1/*fload_0*/, + 1/*fload_1*/, 1/*fload_2*/, 1/*fload_3*/, 2/*dload_0*/, 2/*dload_1*/, 2/*dload_2*/, + 2/*dload_3*/, 1/*aload_0*/, 1/*aload_1*/, 1/*aload_2*/, 1/*aload_3*/, 1/*iaload*/, + 2/*laload*/, 1/*faload*/, 2/*daload*/, 1/*aaload*/, 1/*baload*/, 1/*caload*/, 1/*saload*/, + 0/*istore*/, 0/*lstore*/, 0/*fstore*/, 0/*dstore*/, 0/*astore*/, 0/*istore_0*/, + 0/*istore_1*/, 0/*istore_2*/, 0/*istore_3*/, 0/*lstore_0*/, 0/*lstore_1*/, + 0/*lstore_2*/, 0/*lstore_3*/, 0/*fstore_0*/, 0/*fstore_1*/, 0/*fstore_2*/, + 0/*fstore_3*/, 0/*dstore_0*/, 0/*dstore_1*/, 0/*dstore_2*/, 0/*dstore_3*/, + 0/*astore_0*/, 0/*astore_1*/, 0/*astore_2*/, 0/*astore_3*/, 0/*iastore*/, 0/*lastore*/, + 0/*fastore*/, 0/*dastore*/, 0/*aastore*/, 0/*bastore*/, 0/*castore*/, 0/*sastore*/, + 0/*pop*/, 0/*pop2*/, 2/*dup*/, 3/*dup_x1*/, 4/*dup_x2*/, 4/*dup2*/, 5/*dup2_x1*/, + 6/*dup2_x2*/, 2/*swap*/, 1/*iadd*/, 2/*ladd*/, 1/*fadd*/, 2/*dadd*/, 1/*isub*/, 2/*lsub*/, + 1/*fsub*/, 2/*dsub*/, 1/*imul*/, 2/*lmul*/, 1/*fmul*/, 2/*dmul*/, 1/*idiv*/, 2/*ldiv*/, + 1/*fdiv*/, 2/*ddiv*/, 1/*irem*/, 2/*lrem*/, 1/*frem*/, 2/*drem*/, 1/*ineg*/, 2/*lneg*/, + 1/*fneg*/, 2/*dneg*/, 1/*ishl*/, 2/*lshl*/, 1/*ishr*/, 2/*lshr*/, 1/*iushr*/, 2/*lushr*/, + 1/*iand*/, 2/*land*/, 1/*ior*/, 2/*lor*/, 1/*ixor*/, 2/*lxor*/, + 0/*iinc*/, 2/*i2l*/, 1/*i2f*/, 2/*i2d*/, 1/*l2i*/, 1/*l2f*/, 2/*l2d*/, 1/*f2i*/, + 2/*f2l*/, 2/*f2d*/, 1/*d2i*/, 2/*d2l*/, 1/*d2f*/, + 1/*i2b*/, 1/*i2c*/, 1/*i2s*/, 1/*lcmp*/, 1/*fcmpl*/, 1/*fcmpg*/, + 1/*dcmpl*/, 1/*dcmpg*/, 0/*ifeq*/, 0/*ifne*/, 0/*iflt*/, 0/*ifge*/, 0/*ifgt*/, 0/*ifle*/, + 0/*if_icmpeq*/, 0/*if_icmpne*/, 0/*if_icmplt*/, 0/*if_icmpge*/, 0/*if_icmpgt*/, + 0/*if_icmple*/, 0/*if_acmpeq*/, 0/*if_acmpne*/, 0/*goto*/, 1/*jsr*/, 0/*ret*/, + 0/*tableswitch*/, 0/*lookupswitch*/, 0/*ireturn*/, 0/*lreturn*/, 0/*freturn*/, + 0/*dreturn*/, 0/*areturn*/, 0/*return*/, UNPREDICTABLE/*getstatic*/, 0/*putstatic*/, + UNPREDICTABLE/*getfield*/, 0/*putfield*/, UNPREDICTABLE/*invokevirtual*/, + UNPREDICTABLE/*invokespecial*/, UNPREDICTABLE/*invokestatic*/, + UNPREDICTABLE/*invokeinterface*/, UNDEFINED, 1/*new*/, 1/*newarray*/, 1/*anewarray*/, + 1/*arraylength*/, 1/*athrow*/, 1/*checkcast*/, 1/*instanceof*/, 0/*monitorenter*/, + 0/*monitorexit*/, 0/*wide*/, 1/*multianewarray*/, 0/*ifnull*/, 0/*ifnonnull*/, + 0/*goto_w*/, 1/*jsr_w*/, 0/*breakpoint*/, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, + UNDEFINED, UNPREDICTABLE/*impdep1*/, UNPREDICTABLE/*impdep2*/ + }; + + /** Attributes and their corresponding names. + */ + public static final byte ATTR_UNKNOWN = -1; + public static final byte ATTR_SOURCE_FILE = 0; + public static final byte ATTR_CONSTANT_VALUE = 1; + public static final byte ATTR_CODE = 2; + public static final byte ATTR_EXCEPTIONS = 3; + public static final byte ATTR_LINE_NUMBER_TABLE = 4; + public static final byte ATTR_LOCAL_VARIABLE_TABLE = 5; + public static final byte ATTR_INNER_CLASSES = 6; + public static final byte ATTR_SYNTHETIC = 7; + public static final byte ATTR_DEPRECATED = 8; + public static final byte ATTR_PMG = 9; + public static final byte ATTR_SIGNATURE = 10; + public static final byte ATTR_STACK_MAP = 11; + public static final byte ATTR_RUNTIMEVISIBLE_ANNOTATIONS = 12; + public static final byte ATTR_RUNTIMEINVISIBLE_ANNOTATIONS = 13; + public static final byte ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS = 14; + public static final byte ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS = 15; + public static final byte ATTR_ANNOTATION_DEFAULT = 16; + + public static final short KNOWN_ATTRIBUTES = 12;//should be 17 + + public static final String[] ATTRIBUTE_NAMES = { + "SourceFile", "ConstantValue", "Code", "Exceptions", + "LineNumberTable", "LocalVariableTable", + "InnerClasses", "Synthetic", "Deprecated", + "PMGClass", "Signature", "StackMap", + "RuntimeVisibleAnnotations", "RuntimeInvisibleAnnotations", + "RuntimeVisibleParameterAnnotations", "RuntimeInvisibleParameterAnnotations", + "AnnotationDefault" + }; + + /** Constants used in the StackMap attribute. + */ + public static final byte ITEM_Bogus = 0; + public static final byte ITEM_Integer = 1; + public static final byte ITEM_Float = 2; + public static final byte ITEM_Double = 3; + public static final byte ITEM_Long = 4; + public static final byte ITEM_Null = 5; + public static final byte ITEM_InitObject = 6; + public static final byte ITEM_Object = 7; + public static final byte ITEM_NewObject = 8; + + public static final String[] ITEM_NAMES = { + "Bogus", "Integer", "Float", "Double", "Long", + "Null", "InitObject", "Object", "NewObject" + }; +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/ExceptionConstants.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/ExceptionConstants.java index e7a697c3..fc67d26d 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/ExceptionConstants.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/ExceptionConstants.java @@ -1,76 +1,76 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0; - -/** - * Exception constants. - * - * @version $Id: ExceptionConstants.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author E. Haase - */ -public interface ExceptionConstants { - - /** The mother of all exceptions - */ - public static final Class THROWABLE = Throwable.class; - /** Super class of any run-time exception - */ - public static final Class RUNTIME_EXCEPTION = RuntimeException.class; - /** Super class of any linking exception (aka Linkage Error) - */ - public static final Class LINKING_EXCEPTION = LinkageError.class; - /** Linking Exceptions - */ - public static final Class CLASS_CIRCULARITY_ERROR = ClassCircularityError.class; - public static final Class CLASS_FORMAT_ERROR = ClassFormatError.class; - public static final Class EXCEPTION_IN_INITIALIZER_ERROR = ExceptionInInitializerError.class; - public static final Class INCOMPATIBLE_CLASS_CHANGE_ERROR = IncompatibleClassChangeError.class; - public static final Class ABSTRACT_METHOD_ERROR = AbstractMethodError.class; - public static final Class ILLEGAL_ACCESS_ERROR = IllegalAccessError.class; - public static final Class INSTANTIATION_ERROR = InstantiationError.class; - public static final Class NO_SUCH_FIELD_ERROR = NoSuchFieldError.class; - public static final Class NO_SUCH_METHOD_ERROR = NoSuchMethodError.class; - public static final Class NO_CLASS_DEF_FOUND_ERROR = NoClassDefFoundError.class; - public static final Class UNSATISFIED_LINK_ERROR = UnsatisfiedLinkError.class; - public static final Class VERIFY_ERROR = VerifyError.class; - /* UnsupportedClassVersionError is new in JDK 1.2 */ - //public static final Class UnsupportedClassVersionError = UnsupportedClassVersionError.class; - /** Run-Time Exceptions - */ - public static final Class NULL_POINTER_EXCEPTION = NullPointerException.class; - public static final Class ARRAY_INDEX_OUT_OF_BOUNDS_EXCEPTION = ArrayIndexOutOfBoundsException.class; - public static final Class ARITHMETIC_EXCEPTION = ArithmeticException.class; - public static final Class NEGATIVE_ARRAY_SIZE_EXCEPTION = NegativeArraySizeException.class; - public static final Class CLASS_CAST_EXCEPTION = ClassCastException.class; - public static final Class ILLEGAL_MONITOR_STATE = IllegalMonitorStateException.class; - /** Pre-defined exception arrays according to chapters 5.1-5.4 of the Java Virtual - * Machine Specification - */ - public static final Class[] EXCS_CLASS_AND_INTERFACE_RESOLUTION = { - NO_CLASS_DEF_FOUND_ERROR, CLASS_FORMAT_ERROR, VERIFY_ERROR, ABSTRACT_METHOD_ERROR, - EXCEPTION_IN_INITIALIZER_ERROR, ILLEGAL_ACCESS_ERROR - }; // Chapter 5.1 - public static final Class[] EXCS_FIELD_AND_METHOD_RESOLUTION = { - NO_SUCH_FIELD_ERROR, ILLEGAL_ACCESS_ERROR, NO_SUCH_METHOD_ERROR - }; // Chapter 5.2 - public static final Class[] EXCS_INTERFACE_METHOD_RESOLUTION = new Class[0]; // Chapter 5.3 (as below) - public static final Class[] EXCS_STRING_RESOLUTION = new Class[0]; - // Chapter 5.4 (no errors but the ones that _always_ could happen! How stupid.) - public static final Class[] EXCS_ARRAY_EXCEPTION = { - NULL_POINTER_EXCEPTION, ARRAY_INDEX_OUT_OF_BOUNDS_EXCEPTION - }; -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0; + +/** + * Exception constants. + * + * @version $Id: ExceptionConstants.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author E. Haase + */ +public interface ExceptionConstants { + + /** The mother of all exceptions + */ + public static final Class THROWABLE = Throwable.class; + /** Super class of any run-time exception + */ + public static final Class RUNTIME_EXCEPTION = RuntimeException.class; + /** Super class of any linking exception (aka Linkage Error) + */ + public static final Class LINKING_EXCEPTION = LinkageError.class; + /** Linking Exceptions + */ + public static final Class CLASS_CIRCULARITY_ERROR = ClassCircularityError.class; + public static final Class CLASS_FORMAT_ERROR = ClassFormatError.class; + public static final Class EXCEPTION_IN_INITIALIZER_ERROR = ExceptionInInitializerError.class; + public static final Class INCOMPATIBLE_CLASS_CHANGE_ERROR = IncompatibleClassChangeError.class; + public static final Class ABSTRACT_METHOD_ERROR = AbstractMethodError.class; + public static final Class ILLEGAL_ACCESS_ERROR = IllegalAccessError.class; + public static final Class INSTANTIATION_ERROR = InstantiationError.class; + public static final Class NO_SUCH_FIELD_ERROR = NoSuchFieldError.class; + public static final Class NO_SUCH_METHOD_ERROR = NoSuchMethodError.class; + public static final Class NO_CLASS_DEF_FOUND_ERROR = NoClassDefFoundError.class; + public static final Class UNSATISFIED_LINK_ERROR = UnsatisfiedLinkError.class; + public static final Class VERIFY_ERROR = VerifyError.class; + /* UnsupportedClassVersionError is new in JDK 1.2 */ + //public static final Class UnsupportedClassVersionError = UnsupportedClassVersionError.class; + /** Run-Time Exceptions + */ + public static final Class NULL_POINTER_EXCEPTION = NullPointerException.class; + public static final Class ARRAY_INDEX_OUT_OF_BOUNDS_EXCEPTION = ArrayIndexOutOfBoundsException.class; + public static final Class ARITHMETIC_EXCEPTION = ArithmeticException.class; + public static final Class NEGATIVE_ARRAY_SIZE_EXCEPTION = NegativeArraySizeException.class; + public static final Class CLASS_CAST_EXCEPTION = ClassCastException.class; + public static final Class ILLEGAL_MONITOR_STATE = IllegalMonitorStateException.class; + /** Pre-defined exception arrays according to chapters 5.1-5.4 of the Java Virtual + * Machine Specification + */ + public static final Class[] EXCS_CLASS_AND_INTERFACE_RESOLUTION = { + NO_CLASS_DEF_FOUND_ERROR, CLASS_FORMAT_ERROR, VERIFY_ERROR, ABSTRACT_METHOD_ERROR, + EXCEPTION_IN_INITIALIZER_ERROR, ILLEGAL_ACCESS_ERROR + }; // Chapter 5.1 + public static final Class[] EXCS_FIELD_AND_METHOD_RESOLUTION = { + NO_SUCH_FIELD_ERROR, ILLEGAL_ACCESS_ERROR, NO_SUCH_METHOD_ERROR + }; // Chapter 5.2 + public static final Class[] EXCS_INTERFACE_METHOD_RESOLUTION = new Class[0]; // Chapter 5.3 (as below) + public static final Class[] EXCS_STRING_RESOLUTION = new Class[0]; + // Chapter 5.4 (no errors but the ones that _always_ could happen! How stupid.) + public static final Class[] EXCS_ARRAY_EXCEPTION = { + NULL_POINTER_EXCEPTION, ARRAY_INDEX_OUT_OF_BOUNDS_EXCEPTION + }; +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/Repository.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/Repository.java index dd024472..972db5dc 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/Repository.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/Repository.java @@ -1,262 +1,262 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0; - -import java.io.IOException; - -import org.apache.bcel5_2_0.classfile.JavaClass; -import org.apache.bcel5_2_0.util.ClassPath; -import org.apache.bcel5_2_0.util.SyntheticRepository; - -/** - * The repository maintains informations about class interdependencies, e.g., - * whether a class is a sub-class of another. Delegates actual class loading - * to SyntheticRepository with current class path by default. - * - * @see org.apache.bcel5_2_0.util.Repository - * @see org.apache.bcel5_2_0.util.SyntheticRepository - * - * @version $Id: Repository.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class Repository { - - private static org.apache.bcel5_2_0.util.Repository _repository = SyntheticRepository.getInstance(); - - - /** @return currently used repository instance - */ - public static org.apache.bcel5_2_0.util.Repository getRepository() { - return _repository; - } - - - /** Set repository instance to be used for class loading - */ - public static void setRepository( org.apache.bcel5_2_0.util.Repository rep ) { - _repository = rep; - } - - - /** Lookup class somewhere found on your CLASSPATH, or whereever the - * repository instance looks for it. - * - * @return class object for given fully qualified class name - * @throws ClassNotFoundException if the class could not be found or - * parsed correctly - */ - public static JavaClass lookupClass( String class_name ) throws ClassNotFoundException { - return _repository.loadClass(class_name); - } - - - /** - * Try to find class source using the internal repository instance. - * @see Class - * @return JavaClass object for given runtime class - * @throws ClassNotFoundException if the class could not be found or - * parsed correctly - */ - public static JavaClass lookupClass( Class clazz ) throws ClassNotFoundException { - return _repository.loadClass(clazz); - } - - - /** - * @return class file object for given Java class by looking on the - * system class path; returns null if the class file can't be - * found - */ - public static ClassPath.ClassFile lookupClassFile( String class_name ) { - try { - ClassPath path = _repository.getClassPath(); - if (path == null) { - return null; - } - return path.getClassFile(class_name); - } catch (IOException e) { - return null; - } - } - - - /** Clear the repository. - */ - public static void clearCache() { - _repository.clear(); - } - - - /** - * Add clazz to repository if there isn't an equally named class already in there. - * - * @return old entry in repository - */ - public static JavaClass addClass( JavaClass clazz ) { - JavaClass old = _repository.findClass(clazz.getClassName()); - _repository.storeClass(clazz); - return old; - } - - - /** - * Remove class with given (fully qualified) name from repository. - */ - public static void removeClass( String clazz ) { - _repository.removeClass(_repository.findClass(clazz)); - } - - - /** - * Remove given class from repository. - */ - public static void removeClass( JavaClass clazz ) { - _repository.removeClass(clazz); - } - - - /** - * @return list of super classes of clazz in ascending order, i.e., - * Object is always the last element - * @throws ClassNotFoundException if any of the superclasses can't be found - */ - public static JavaClass[] getSuperClasses( JavaClass clazz ) throws ClassNotFoundException { - return clazz.getSuperClasses(); - } - - - /** - * @return list of super classes of clazz in ascending order, i.e., - * Object is always the last element. - * @throws ClassNotFoundException if the named class or any of its - * superclasses can't be found - */ - public static JavaClass[] getSuperClasses( String class_name ) throws ClassNotFoundException { - JavaClass jc = lookupClass(class_name); - return getSuperClasses(jc); - } - - - /** - * @return all interfaces implemented by class and its super - * classes and the interfaces that those interfaces extend, and so on. - * (Some people call this a transitive hull). - * @throws ClassNotFoundException if any of the class's - * superclasses or superinterfaces can't be found - */ - public static JavaClass[] getInterfaces( JavaClass clazz ) throws ClassNotFoundException { - return clazz.getAllInterfaces(); - } - - - /** - * @return all interfaces implemented by class and its super - * classes and the interfaces that extend those interfaces, and so on - * @throws ClassNotFoundException if the named class can't be found, - * or if any of its superclasses or superinterfaces can't be found - */ - public static JavaClass[] getInterfaces( String class_name ) throws ClassNotFoundException { - return getInterfaces(lookupClass(class_name)); - } - - - /** - * Equivalent to runtime "instanceof" operator. - * @return true, if clazz is an instance of super_class - * @throws ClassNotFoundException if any superclasses or superinterfaces - * of clazz can't be found - */ - public static boolean instanceOf( JavaClass clazz, JavaClass super_class ) - throws ClassNotFoundException { - return clazz.instanceOf(super_class); - } - - - /** - * @return true, if clazz is an instance of super_class - * @throws ClassNotFoundException if either clazz or super_class - * can't be found - */ - public static boolean instanceOf( String clazz, String super_class ) - throws ClassNotFoundException { - return instanceOf(lookupClass(clazz), lookupClass(super_class)); - } - - - /** - * @return true, if clazz is an instance of super_class - * @throws ClassNotFoundException if super_class can't be found - */ - public static boolean instanceOf( JavaClass clazz, String super_class ) - throws ClassNotFoundException { - return instanceOf(clazz, lookupClass(super_class)); - } - - - /** - * @return true, if clazz is an instance of super_class - * @throws ClassNotFoundException if clazz can't be found - */ - public static boolean instanceOf( String clazz, JavaClass super_class ) - throws ClassNotFoundException { - return instanceOf(lookupClass(clazz), super_class); - } - - - /** - * @return true, if clazz is an implementation of interface inter - * @throws ClassNotFoundException if any superclasses or superinterfaces - * of clazz can't be found - */ - public static boolean implementationOf( JavaClass clazz, JavaClass inter ) - throws ClassNotFoundException { - return clazz.implementationOf(inter); - } - - - /** - * @return true, if clazz is an implementation of interface inter - * @throws ClassNotFoundException if clazz, inter, or any superclasses - * or superinterfaces of clazz can't be found - */ - public static boolean implementationOf( String clazz, String inter ) - throws ClassNotFoundException { - return implementationOf(lookupClass(clazz), lookupClass(inter)); - } - - - /** - * @return true, if clazz is an implementation of interface inter - * @throws ClassNotFoundException if inter or any superclasses - * or superinterfaces of clazz can't be found - */ - public static boolean implementationOf( JavaClass clazz, String inter ) - throws ClassNotFoundException { - return implementationOf(clazz, lookupClass(inter)); - } - - - /** - * @return true, if clazz is an implementation of interface inter - * @throws ClassNotFoundException if clazz or any superclasses or - * superinterfaces of clazz can't be found - */ - public static boolean implementationOf( String clazz, JavaClass inter ) - throws ClassNotFoundException { - return implementationOf(lookupClass(clazz), inter); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0; + +import java.io.IOException; + +import org.apache.bcel5_2_0.classfile.JavaClass; +import org.apache.bcel5_2_0.util.ClassPath; +import org.apache.bcel5_2_0.util.SyntheticRepository; + +/** + * The repository maintains informations about class interdependencies, e.g., + * whether a class is a sub-class of another. Delegates actual class loading + * to SyntheticRepository with current class path by default. + * + * @see org.apache.bcel5_2_0.util.Repository + * @see org.apache.bcel5_2_0.util.SyntheticRepository + * + * @version $Id: Repository.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class Repository { + + private static org.apache.bcel5_2_0.util.Repository _repository = SyntheticRepository.getInstance(); + + + /** @return currently used repository instance + */ + public static org.apache.bcel5_2_0.util.Repository getRepository() { + return _repository; + } + + + /** Set repository instance to be used for class loading + */ + public static void setRepository( org.apache.bcel5_2_0.util.Repository rep ) { + _repository = rep; + } + + + /** Lookup class somewhere found on your CLASSPATH, or whereever the + * repository instance looks for it. + * + * @return class object for given fully qualified class name + * @throws ClassNotFoundException if the class could not be found or + * parsed correctly + */ + public static JavaClass lookupClass( String class_name ) throws ClassNotFoundException { + return _repository.loadClass(class_name); + } + + + /** + * Try to find class source using the internal repository instance. + * @see Class + * @return JavaClass object for given runtime class + * @throws ClassNotFoundException if the class could not be found or + * parsed correctly + */ + public static JavaClass lookupClass( Class clazz ) throws ClassNotFoundException { + return _repository.loadClass(clazz); + } + + + /** + * @return class file object for given Java class by looking on the + * system class path; returns null if the class file can't be + * found + */ + public static ClassPath.ClassFile lookupClassFile( String class_name ) { + try { + ClassPath path = _repository.getClassPath(); + if (path == null) { + return null; + } + return path.getClassFile(class_name); + } catch (IOException e) { + return null; + } + } + + + /** Clear the repository. + */ + public static void clearCache() { + _repository.clear(); + } + + + /** + * Add clazz to repository if there isn't an equally named class already in there. + * + * @return old entry in repository + */ + public static JavaClass addClass( JavaClass clazz ) { + JavaClass old = _repository.findClass(clazz.getClassName()); + _repository.storeClass(clazz); + return old; + } + + + /** + * Remove class with given (fully qualified) name from repository. + */ + public static void removeClass( String clazz ) { + _repository.removeClass(_repository.findClass(clazz)); + } + + + /** + * Remove given class from repository. + */ + public static void removeClass( JavaClass clazz ) { + _repository.removeClass(clazz); + } + + + /** + * @return list of super classes of clazz in ascending order, i.e., + * Object is always the last element + * @throws ClassNotFoundException if any of the superclasses can't be found + */ + public static JavaClass[] getSuperClasses( JavaClass clazz ) throws ClassNotFoundException { + return clazz.getSuperClasses(); + } + + + /** + * @return list of super classes of clazz in ascending order, i.e., + * Object is always the last element. + * @throws ClassNotFoundException if the named class or any of its + * superclasses can't be found + */ + public static JavaClass[] getSuperClasses( String class_name ) throws ClassNotFoundException { + JavaClass jc = lookupClass(class_name); + return getSuperClasses(jc); + } + + + /** + * @return all interfaces implemented by class and its super + * classes and the interfaces that those interfaces extend, and so on. + * (Some people call this a transitive hull). + * @throws ClassNotFoundException if any of the class's + * superclasses or superinterfaces can't be found + */ + public static JavaClass[] getInterfaces( JavaClass clazz ) throws ClassNotFoundException { + return clazz.getAllInterfaces(); + } + + + /** + * @return all interfaces implemented by class and its super + * classes and the interfaces that extend those interfaces, and so on + * @throws ClassNotFoundException if the named class can't be found, + * or if any of its superclasses or superinterfaces can't be found + */ + public static JavaClass[] getInterfaces( String class_name ) throws ClassNotFoundException { + return getInterfaces(lookupClass(class_name)); + } + + + /** + * Equivalent to runtime "instanceof" operator. + * @return true, if clazz is an instance of super_class + * @throws ClassNotFoundException if any superclasses or superinterfaces + * of clazz can't be found + */ + public static boolean instanceOf( JavaClass clazz, JavaClass super_class ) + throws ClassNotFoundException { + return clazz.instanceOf(super_class); + } + + + /** + * @return true, if clazz is an instance of super_class + * @throws ClassNotFoundException if either clazz or super_class + * can't be found + */ + public static boolean instanceOf( String clazz, String super_class ) + throws ClassNotFoundException { + return instanceOf(lookupClass(clazz), lookupClass(super_class)); + } + + + /** + * @return true, if clazz is an instance of super_class + * @throws ClassNotFoundException if super_class can't be found + */ + public static boolean instanceOf( JavaClass clazz, String super_class ) + throws ClassNotFoundException { + return instanceOf(clazz, lookupClass(super_class)); + } + + + /** + * @return true, if clazz is an instance of super_class + * @throws ClassNotFoundException if clazz can't be found + */ + public static boolean instanceOf( String clazz, JavaClass super_class ) + throws ClassNotFoundException { + return instanceOf(lookupClass(clazz), super_class); + } + + + /** + * @return true, if clazz is an implementation of interface inter + * @throws ClassNotFoundException if any superclasses or superinterfaces + * of clazz can't be found + */ + public static boolean implementationOf( JavaClass clazz, JavaClass inter ) + throws ClassNotFoundException { + return clazz.implementationOf(inter); + } + + + /** + * @return true, if clazz is an implementation of interface inter + * @throws ClassNotFoundException if clazz, inter, or any superclasses + * or superinterfaces of clazz can't be found + */ + public static boolean implementationOf( String clazz, String inter ) + throws ClassNotFoundException { + return implementationOf(lookupClass(clazz), lookupClass(inter)); + } + + + /** + * @return true, if clazz is an implementation of interface inter + * @throws ClassNotFoundException if inter or any superclasses + * or superinterfaces of clazz can't be found + */ + public static boolean implementationOf( JavaClass clazz, String inter ) + throws ClassNotFoundException { + return implementationOf(clazz, lookupClass(inter)); + } + + + /** + * @return true, if clazz is an implementation of interface inter + * @throws ClassNotFoundException if clazz or any superclasses or + * superinterfaces of clazz can't be found + */ + public static boolean implementationOf( String clazz, JavaClass inter ) + throws ClassNotFoundException { + return implementationOf(lookupClass(clazz), inter); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/AccessFlags.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/AccessFlags.java index e903ea4a..aee9ea3f 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/AccessFlags.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/AccessFlags.java @@ -1,238 +1,238 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import org.apache.bcel5_2_0.Constants; - -/** - * Super class for all objects that have modifiers like private, final, ... - * I.e. classes, fields, and methods. - * - * @version $Id: AccessFlags.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class AccessFlags implements java.io.Serializable { - - protected int access_flags; - - - public AccessFlags() { - } - - - /** - * @param a inital access flags - */ - public AccessFlags(int a) { - access_flags = a; - } - - - /** - * @return Access flags of the object aka. "modifiers". - */ - public final int getAccessFlags() { - return access_flags; - } - - - /** - * @return Access flags of the object aka. "modifiers". - */ - public final int getModifiers() { - return access_flags; - } - - - /** Set access flags aka "modifiers". - * @param access_flags Access flags of the object. - */ - public final void setAccessFlags( int access_flags ) { - this.access_flags = access_flags; - } - - - /** Set access flags aka "modifiers". - * @param access_flags Access flags of the object. - */ - public final void setModifiers( int access_flags ) { - setAccessFlags(access_flags); - } - - - private final void setFlag( int flag, boolean set ) { - if ((access_flags & flag) != 0) { // Flag is set already - if (!set) { - access_flags ^= flag; - } - } else { // Flag not set - if (set) { - access_flags |= flag; - } - } - } - - - public final void isPublic( boolean flag ) { - setFlag(Constants.ACC_PUBLIC, flag); - } - - - public final boolean isPublic() { - return (access_flags & Constants.ACC_PUBLIC) != 0; - } - - - public final void isPrivate( boolean flag ) { - setFlag(Constants.ACC_PRIVATE, flag); - } - - - public final boolean isPrivate() { - return (access_flags & Constants.ACC_PRIVATE) != 0; - } - - - public final void isProtected( boolean flag ) { - setFlag(Constants.ACC_PROTECTED, flag); - } - - - public final boolean isProtected() { - return (access_flags & Constants.ACC_PROTECTED) != 0; - } - - - public final void isStatic( boolean flag ) { - setFlag(Constants.ACC_STATIC, flag); - } - - - public final boolean isStatic() { - return (access_flags & Constants.ACC_STATIC) != 0; - } - - - public final void isFinal( boolean flag ) { - setFlag(Constants.ACC_FINAL, flag); - } - - - public final boolean isFinal() { - return (access_flags & Constants.ACC_FINAL) != 0; - } - - - public final void isSynchronized( boolean flag ) { - setFlag(Constants.ACC_SYNCHRONIZED, flag); - } - - - public final boolean isSynchronized() { - return (access_flags & Constants.ACC_SYNCHRONIZED) != 0; - } - - - public final void isVolatile( boolean flag ) { - setFlag(Constants.ACC_VOLATILE, flag); - } - - - public final boolean isVolatile() { - return (access_flags & Constants.ACC_VOLATILE) != 0; - } - - - public final void isTransient( boolean flag ) { - setFlag(Constants.ACC_TRANSIENT, flag); - } - - - public final boolean isTransient() { - return (access_flags & Constants.ACC_TRANSIENT) != 0; - } - - - public final void isNative( boolean flag ) { - setFlag(Constants.ACC_NATIVE, flag); - } - - - public final boolean isNative() { - return (access_flags & Constants.ACC_NATIVE) != 0; - } - - - public final void isInterface( boolean flag ) { - setFlag(Constants.ACC_INTERFACE, flag); - } - - - public final boolean isInterface() { - return (access_flags & Constants.ACC_INTERFACE) != 0; - } - - - public final void isAbstract( boolean flag ) { - setFlag(Constants.ACC_ABSTRACT, flag); - } - - - public final boolean isAbstract() { - return (access_flags & Constants.ACC_ABSTRACT) != 0; - } - - - public final void isStrictfp( boolean flag ) { - setFlag(Constants.ACC_STRICT, flag); - } - - - public final boolean isStrictfp() { - return (access_flags & Constants.ACC_STRICT) != 0; - } - - - public final void isSynthetic( boolean flag ) { - setFlag(Constants.ACC_SYNTHETIC, flag); - } - - - public final boolean isSynthetic() { - return (access_flags & Constants.ACC_SYNTHETIC) != 0; - } - - - public final void isAnnotation( boolean flag ) { - setFlag(Constants.ACC_ANNOTATION, flag); - } - - - public final boolean isAnnotation() { - return (access_flags & Constants.ACC_ANNOTATION) != 0; - } - - - public final void isEnum( boolean flag ) { - setFlag(Constants.ACC_ENUM, flag); - } - - - public final boolean isEnum() { - return (access_flags & Constants.ACC_ENUM) != 0; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import org.apache.bcel5_2_0.Constants; + +/** + * Super class for all objects that have modifiers like private, final, ... + * I.e. classes, fields, and methods. + * + * @version $Id: AccessFlags.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class AccessFlags implements java.io.Serializable { + + protected int access_flags; + + + public AccessFlags() { + } + + + /** + * @param a inital access flags + */ + public AccessFlags(int a) { + access_flags = a; + } + + + /** + * @return Access flags of the object aka. "modifiers". + */ + public final int getAccessFlags() { + return access_flags; + } + + + /** + * @return Access flags of the object aka. "modifiers". + */ + public final int getModifiers() { + return access_flags; + } + + + /** Set access flags aka "modifiers". + * @param access_flags Access flags of the object. + */ + public final void setAccessFlags( int access_flags ) { + this.access_flags = access_flags; + } + + + /** Set access flags aka "modifiers". + * @param access_flags Access flags of the object. + */ + public final void setModifiers( int access_flags ) { + setAccessFlags(access_flags); + } + + + private final void setFlag( int flag, boolean set ) { + if ((access_flags & flag) != 0) { // Flag is set already + if (!set) { + access_flags ^= flag; + } + } else { // Flag not set + if (set) { + access_flags |= flag; + } + } + } + + + public final void isPublic( boolean flag ) { + setFlag(Constants.ACC_PUBLIC, flag); + } + + + public final boolean isPublic() { + return (access_flags & Constants.ACC_PUBLIC) != 0; + } + + + public final void isPrivate( boolean flag ) { + setFlag(Constants.ACC_PRIVATE, flag); + } + + + public final boolean isPrivate() { + return (access_flags & Constants.ACC_PRIVATE) != 0; + } + + + public final void isProtected( boolean flag ) { + setFlag(Constants.ACC_PROTECTED, flag); + } + + + public final boolean isProtected() { + return (access_flags & Constants.ACC_PROTECTED) != 0; + } + + + public final void isStatic( boolean flag ) { + setFlag(Constants.ACC_STATIC, flag); + } + + + public final boolean isStatic() { + return (access_flags & Constants.ACC_STATIC) != 0; + } + + + public final void isFinal( boolean flag ) { + setFlag(Constants.ACC_FINAL, flag); + } + + + public final boolean isFinal() { + return (access_flags & Constants.ACC_FINAL) != 0; + } + + + public final void isSynchronized( boolean flag ) { + setFlag(Constants.ACC_SYNCHRONIZED, flag); + } + + + public final boolean isSynchronized() { + return (access_flags & Constants.ACC_SYNCHRONIZED) != 0; + } + + + public final void isVolatile( boolean flag ) { + setFlag(Constants.ACC_VOLATILE, flag); + } + + + public final boolean isVolatile() { + return (access_flags & Constants.ACC_VOLATILE) != 0; + } + + + public final void isTransient( boolean flag ) { + setFlag(Constants.ACC_TRANSIENT, flag); + } + + + public final boolean isTransient() { + return (access_flags & Constants.ACC_TRANSIENT) != 0; + } + + + public final void isNative( boolean flag ) { + setFlag(Constants.ACC_NATIVE, flag); + } + + + public final boolean isNative() { + return (access_flags & Constants.ACC_NATIVE) != 0; + } + + + public final void isInterface( boolean flag ) { + setFlag(Constants.ACC_INTERFACE, flag); + } + + + public final boolean isInterface() { + return (access_flags & Constants.ACC_INTERFACE) != 0; + } + + + public final void isAbstract( boolean flag ) { + setFlag(Constants.ACC_ABSTRACT, flag); + } + + + public final boolean isAbstract() { + return (access_flags & Constants.ACC_ABSTRACT) != 0; + } + + + public final void isStrictfp( boolean flag ) { + setFlag(Constants.ACC_STRICT, flag); + } + + + public final boolean isStrictfp() { + return (access_flags & Constants.ACC_STRICT) != 0; + } + + + public final void isSynthetic( boolean flag ) { + setFlag(Constants.ACC_SYNTHETIC, flag); + } + + + public final boolean isSynthetic() { + return (access_flags & Constants.ACC_SYNTHETIC) != 0; + } + + + public final void isAnnotation( boolean flag ) { + setFlag(Constants.ACC_ANNOTATION, flag); + } + + + public final boolean isAnnotation() { + return (access_flags & Constants.ACC_ANNOTATION) != 0; + } + + + public final void isEnum( boolean flag ) { + setFlag(Constants.ACC_ENUM, flag); + } + + + public final boolean isEnum() { + return (access_flags & Constants.ACC_ENUM) != 0; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Attribute.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Attribute.java index ea450115..55ec41cd 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Attribute.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Attribute.java @@ -1,279 +1,279 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; - -import org.apache.bcel5_2_0.Constants; - -/** - * Abstract super class for Attribute objects. Currently the - * ConstantValue, SourceFile, Code, - * Exceptiontable, LineNumberTable, - * LocalVariableTable, InnerClasses and - * Synthetic attributes are supported. The - * Unknown attribute stands for non-standard-attributes. - * - * @version $Id: Attribute.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see ConstantValue - * @see SourceFile - * @see Code - * @see Unknown - * @see ExceptionTable - * @see LineNumberTable - * @see LocalVariableTable - * @see InnerClasses - * @see Synthetic - * @see Deprecated - * @see Signature - */ -public abstract class Attribute implements Cloneable, Node, Serializable { - - protected int name_index; // Points to attribute name in constant pool - protected int length; // Content length of attribute field - protected byte tag; // Tag to distiguish subclasses - protected ConstantPool constant_pool; - - - protected Attribute(byte tag, int name_index, int length, ConstantPool constant_pool) { - this.tag = tag; - this.name_index = name_index; - this.length = length; - this.constant_pool = constant_pool; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public abstract void accept( Visitor v ); - - - /** - * Dump attribute to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public void dump( DataOutputStream file ) throws IOException { - file.writeShort(name_index); - file.writeInt(length); - } - - private static Map readers = new HashMap(); - - - /** Add an Attribute reader capable of parsing (user-defined) attributes - * named "name". You should not add readers for the standard attributes - * such as "LineNumberTable", because those are handled internally. - * - * @param name the name of the attribute as stored in the class file - * @param r the reader object - */ - public static void addAttributeReader( String name, AttributeReader r ) { - readers.put(name, r); - } - - - /** Remove attribute reader - * - * @param name the name of the attribute as stored in the class file - */ - public static void removeAttributeReader( String name ) { - readers.remove(name); - } - - - /* Class method reads one attribute from the input data stream. - * This method must not be accessible from the outside. It is - * called by the Field and Method constructor methods. - * - * @see Field - * @see Method - * @param file Input stream - * @param constant_pool Array of constants - * @return Attribute - * @throws IOException - * @throws ClassFormatException - */ - public static final Attribute readAttribute( DataInputStream file, ConstantPool constant_pool ) - throws IOException, ClassFormatException { - ConstantUtf8 c; - String name; - int name_index; - int length; - byte tag = Constants.ATTR_UNKNOWN; // Unknown attribute - // Get class name from constant pool via `name_index' indirection - name_index = file.readUnsignedShort(); - c = (ConstantUtf8) constant_pool.getConstant(name_index, Constants.CONSTANT_Utf8); - name = c.getBytes(); - // Length of data in bytes - length = file.readInt(); - // Compare strings to find known attribute - for (byte i = 0; i < Constants.KNOWN_ATTRIBUTES; i++) { - if (name.equals(Constants.ATTRIBUTE_NAMES[i])) { - tag = i; // found! - break; - } - } - // Call proper constructor, depending on `tag' - switch (tag) { - case Constants.ATTR_UNKNOWN: - AttributeReader r = (AttributeReader) readers.get(name); - if (r != null) { - return r.createAttribute(name_index, length, file, constant_pool); - } - return new Unknown(name_index, length, file, constant_pool); - case Constants.ATTR_CONSTANT_VALUE: - return new ConstantValue(name_index, length, file, constant_pool); - case Constants.ATTR_SOURCE_FILE: - return new SourceFile(name_index, length, file, constant_pool); - case Constants.ATTR_CODE: - return new Code(name_index, length, file, constant_pool); - case Constants.ATTR_EXCEPTIONS: - return new ExceptionTable(name_index, length, file, constant_pool); - case Constants.ATTR_LINE_NUMBER_TABLE: - return new LineNumberTable(name_index, length, file, constant_pool); - case Constants.ATTR_LOCAL_VARIABLE_TABLE: - return new LocalVariableTable(name_index, length, file, constant_pool); - case Constants.ATTR_INNER_CLASSES: - return new InnerClasses(name_index, length, file, constant_pool); - case Constants.ATTR_SYNTHETIC: - return new Synthetic(name_index, length, file, constant_pool); - case Constants.ATTR_DEPRECATED: - return new Deprecated(name_index, length, file, constant_pool); - case Constants.ATTR_PMG: - return new PMGClass(name_index, length, file, constant_pool); - case Constants.ATTR_SIGNATURE: - return new Signature(name_index, length, file, constant_pool); - case Constants.ATTR_STACK_MAP: - return new StackMap(name_index, length, file, constant_pool); - // case Constants.ATTR_RUNTIMEVISIBLE_ANNOTATIONS: - // return new RuntimeVisibleAnnotations(name_index, length, file, constant_pool); - // case Constants.ATTR_RUNTIMEINVISIBLE_ANNOTATIONS: - // return new RuntimeInvisibleAnnotations(name_index, length, file, constant_pool); - // case Constants.ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS: - // return new RuntimeVisibleParameterAnnotations(name_index, length, file, constant_pool); - // case Constants.ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS: - // return new RuntimeInvisibleParameterAnnotations(name_index, length, file, constant_pool); - // case Constants.ATTR_ANNOTATION_DEFAULT: - // return new AnnotationDefault(name_index, length, file, constant_pool); - default: // Never reached - throw new IllegalStateException("Ooops! default case reached."); - } - } - - - /** - * @return Length of attribute field in bytes. - */ - public final int getLength() { - return length; - } - - - /** - * @param length length in bytes. - */ - public final void setLength( int length ) { - this.length = length; - } - - - /** - * @param name_index of attribute. - */ - public final void setNameIndex( int name_index ) { - this.name_index = name_index; - } - - - /** - * @return Name index in constant pool of attribute name. - */ - public final int getNameIndex() { - return name_index; - } - - - /** - * @return Tag of attribute, i.e., its type. Value may not be altered, thus - * there is no setTag() method. - */ - public final byte getTag() { - return tag; - } - - - /** - * @return Constant pool used by this object. - * @see ConstantPool - */ - public final ConstantPool getConstantPool() { - return constant_pool; - } - - - /** - * @param constant_pool Constant pool to be used for this object. - * @see ConstantPool - */ - public final void setConstantPool( ConstantPool constant_pool ) { - this.constant_pool = constant_pool; - } - - - /** - * Use copy() if you want to have a deep copy(), i.e., with all references - * copied correctly. - * - * @return shallow copy of this attribute - */ - public Object clone() { - Object o = null; - try { - o = super.clone(); - } catch (CloneNotSupportedException e) { - e.printStackTrace(); // Never occurs - } - return o; - } - - - /** - * @return deep copy of this attribute - */ - public abstract Attribute copy( ConstantPool _constant_pool ); - - - /** - * @return attribute name. - */ - public String toString() { - return Constants.ATTRIBUTE_NAMES[tag]; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +import org.apache.bcel5_2_0.Constants; + +/** + * Abstract super class for Attribute objects. Currently the + * ConstantValue, SourceFile, Code, + * Exceptiontable, LineNumberTable, + * LocalVariableTable, InnerClasses and + * Synthetic attributes are supported. The + * Unknown attribute stands for non-standard-attributes. + * + * @version $Id: Attribute.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see ConstantValue + * @see SourceFile + * @see Code + * @see Unknown + * @see ExceptionTable + * @see LineNumberTable + * @see LocalVariableTable + * @see InnerClasses + * @see Synthetic + * @see Deprecated + * @see Signature + */ +public abstract class Attribute implements Cloneable, Node, Serializable { + + protected int name_index; // Points to attribute name in constant pool + protected int length; // Content length of attribute field + protected byte tag; // Tag to distiguish subclasses + protected ConstantPool constant_pool; + + + protected Attribute(byte tag, int name_index, int length, ConstantPool constant_pool) { + this.tag = tag; + this.name_index = name_index; + this.length = length; + this.constant_pool = constant_pool; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public abstract void accept( Visitor v ); + + + /** + * Dump attribute to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public void dump( DataOutputStream file ) throws IOException { + file.writeShort(name_index); + file.writeInt(length); + } + + private static Map readers = new HashMap(); + + + /** Add an Attribute reader capable of parsing (user-defined) attributes + * named "name". You should not add readers for the standard attributes + * such as "LineNumberTable", because those are handled internally. + * + * @param name the name of the attribute as stored in the class file + * @param r the reader object + */ + public static void addAttributeReader( String name, AttributeReader r ) { + readers.put(name, r); + } + + + /** Remove attribute reader + * + * @param name the name of the attribute as stored in the class file + */ + public static void removeAttributeReader( String name ) { + readers.remove(name); + } + + + /* Class method reads one attribute from the input data stream. + * This method must not be accessible from the outside. It is + * called by the Field and Method constructor methods. + * + * @see Field + * @see Method + * @param file Input stream + * @param constant_pool Array of constants + * @return Attribute + * @throws IOException + * @throws ClassFormatException + */ + public static final Attribute readAttribute( DataInputStream file, ConstantPool constant_pool ) + throws IOException, ClassFormatException { + ConstantUtf8 c; + String name; + int name_index; + int length; + byte tag = Constants.ATTR_UNKNOWN; // Unknown attribute + // Get class name from constant pool via `name_index' indirection + name_index = file.readUnsignedShort(); + c = (ConstantUtf8) constant_pool.getConstant(name_index, Constants.CONSTANT_Utf8); + name = c.getBytes(); + // Length of data in bytes + length = file.readInt(); + // Compare strings to find known attribute + for (byte i = 0; i < Constants.KNOWN_ATTRIBUTES; i++) { + if (name.equals(Constants.ATTRIBUTE_NAMES[i])) { + tag = i; // found! + break; + } + } + // Call proper constructor, depending on `tag' + switch (tag) { + case Constants.ATTR_UNKNOWN: + AttributeReader r = (AttributeReader) readers.get(name); + if (r != null) { + return r.createAttribute(name_index, length, file, constant_pool); + } + return new Unknown(name_index, length, file, constant_pool); + case Constants.ATTR_CONSTANT_VALUE: + return new ConstantValue(name_index, length, file, constant_pool); + case Constants.ATTR_SOURCE_FILE: + return new SourceFile(name_index, length, file, constant_pool); + case Constants.ATTR_CODE: + return new Code(name_index, length, file, constant_pool); + case Constants.ATTR_EXCEPTIONS: + return new ExceptionTable(name_index, length, file, constant_pool); + case Constants.ATTR_LINE_NUMBER_TABLE: + return new LineNumberTable(name_index, length, file, constant_pool); + case Constants.ATTR_LOCAL_VARIABLE_TABLE: + return new LocalVariableTable(name_index, length, file, constant_pool); + case Constants.ATTR_INNER_CLASSES: + return new InnerClasses(name_index, length, file, constant_pool); + case Constants.ATTR_SYNTHETIC: + return new Synthetic(name_index, length, file, constant_pool); + case Constants.ATTR_DEPRECATED: + return new Deprecated(name_index, length, file, constant_pool); + case Constants.ATTR_PMG: + return new PMGClass(name_index, length, file, constant_pool); + case Constants.ATTR_SIGNATURE: + return new Signature(name_index, length, file, constant_pool); + case Constants.ATTR_STACK_MAP: + return new StackMap(name_index, length, file, constant_pool); + // case Constants.ATTR_RUNTIMEVISIBLE_ANNOTATIONS: + // return new RuntimeVisibleAnnotations(name_index, length, file, constant_pool); + // case Constants.ATTR_RUNTIMEINVISIBLE_ANNOTATIONS: + // return new RuntimeInvisibleAnnotations(name_index, length, file, constant_pool); + // case Constants.ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS: + // return new RuntimeVisibleParameterAnnotations(name_index, length, file, constant_pool); + // case Constants.ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS: + // return new RuntimeInvisibleParameterAnnotations(name_index, length, file, constant_pool); + // case Constants.ATTR_ANNOTATION_DEFAULT: + // return new AnnotationDefault(name_index, length, file, constant_pool); + default: // Never reached + throw new IllegalStateException("Ooops! default case reached."); + } + } + + + /** + * @return Length of attribute field in bytes. + */ + public final int getLength() { + return length; + } + + + /** + * @param length length in bytes. + */ + public final void setLength( int length ) { + this.length = length; + } + + + /** + * @param name_index of attribute. + */ + public final void setNameIndex( int name_index ) { + this.name_index = name_index; + } + + + /** + * @return Name index in constant pool of attribute name. + */ + public final int getNameIndex() { + return name_index; + } + + + /** + * @return Tag of attribute, i.e., its type. Value may not be altered, thus + * there is no setTag() method. + */ + public final byte getTag() { + return tag; + } + + + /** + * @return Constant pool used by this object. + * @see ConstantPool + */ + public final ConstantPool getConstantPool() { + return constant_pool; + } + + + /** + * @param constant_pool Constant pool to be used for this object. + * @see ConstantPool + */ + public final void setConstantPool( ConstantPool constant_pool ) { + this.constant_pool = constant_pool; + } + + + /** + * Use copy() if you want to have a deep copy(), i.e., with all references + * copied correctly. + * + * @return shallow copy of this attribute + */ + public Object clone() { + Object o = null; + try { + o = super.clone(); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); // Never occurs + } + return o; + } + + + /** + * @return deep copy of this attribute + */ + public abstract Attribute copy( ConstantPool _constant_pool ); + + + /** + * @return attribute name. + */ + public String toString() { + return Constants.ATTRIBUTE_NAMES[tag]; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/AttributeReader.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/AttributeReader.java index 2e10b295..27942fc0 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/AttributeReader.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/AttributeReader.java @@ -1,58 +1,58 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -/** - * Unknown (non-standard) attributes may be read via user-defined factory - * objects that can be registered with the Attribute.addAttributeReader - * method. These factory objects should implement this interface. - - * @see Attribute - * @version $Id: AttributeReader.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface AttributeReader { - - /** - When this attribute reader is added via the static method - Attribute.addAttributeReader, an attribute name is associated with it. - As the class file parser parses attributes, it will call various - AttributeReaders based on the name of the attributes it is - constructing. - - @param name_index An index into the constant pool, indexing a - ConstantUtf8 that represents the name of the attribute. - - @param length The length of the data contained in the attribute. This - is written into the constant pool and should agree with what the - factory expects the length to be. - - @param file This is the data input stream that the factory needs to read - its data from. - - @param constant_pool This is the constant pool associated with the - Attribute that we are constructing. - - @return The user-defined AttributeReader should take this data and use - it to construct an attribute. In the case of errors, a null can be - returned which will cause the parsing of the class file to fail. - - @see Attribute#addAttributeReader( String, AttributeReader ) - */ - public Attribute createAttribute( int name_index, int length, java.io.DataInputStream file, - ConstantPool constant_pool ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +/** + * Unknown (non-standard) attributes may be read via user-defined factory + * objects that can be registered with the Attribute.addAttributeReader + * method. These factory objects should implement this interface. + + * @see Attribute + * @version $Id: AttributeReader.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface AttributeReader { + + /** + When this attribute reader is added via the static method + Attribute.addAttributeReader, an attribute name is associated with it. + As the class file parser parses attributes, it will call various + AttributeReaders based on the name of the attributes it is + constructing. + + @param name_index An index into the constant pool, indexing a + ConstantUtf8 that represents the name of the attribute. + + @param length The length of the data contained in the attribute. This + is written into the constant pool and should agree with what the + factory expects the length to be. + + @param file This is the data input stream that the factory needs to read + its data from. + + @param constant_pool This is the constant pool associated with the + Attribute that we are constructing. + + @return The user-defined AttributeReader should take this data and use + it to construct an attribute. In the case of errors, a null can be + returned which will cause the parsing of the class file to fail. + + @see Attribute#addAttributeReader( String, AttributeReader ) + */ + public Attribute createAttribute( int name_index, int length, java.io.DataInputStream file, + ConstantPool constant_pool ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ClassFormatException.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ClassFormatException.java index 4b4eea4a..b75155fb 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ClassFormatException.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ClassFormatException.java @@ -1,37 +1,37 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -/** - * Thrown when the BCEL attempts to read a class file and determines - * that the file is malformed or otherwise cannot be interpreted as a - * class file. - * - * @version $Id: ClassFormatException.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ClassFormatException extends RuntimeException { - - public ClassFormatException() { - super(); - } - - - public ClassFormatException(String s) { - super(s); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +/** + * Thrown when the BCEL attempts to read a class file and determines + * that the file is malformed or otherwise cannot be interpreted as a + * class file. + * + * @version $Id: ClassFormatException.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ClassFormatException extends RuntimeException { + + public ClassFormatException() { + super(); + } + + + public ClassFormatException(String s) { + super(s); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ClassParser.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ClassParser.java index 8b315608..14e79998 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ClassParser.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ClassParser.java @@ -1,302 +1,302 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.BufferedInputStream; -import java.io.DataInputStream; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -import org.apache.bcel5_2_0.Constants; - -/** - * Wrapper class that parses a given Java .class file. The method parse returns a - * JavaClass object on success. When an I/O error or an - * inconsistency occurs an appropiate exception is propagated back to - * the caller. - * - * The structure and the names comply, except for a few conveniences, - * exactly with the - * JVM specification 1.0. See this paper for - * further details about the structure of a bytecode file. - * - * @version $Id: ClassParser.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class ClassParser { - - private DataInputStream file; - private boolean fileOwned; - private String file_name; - private String zip_file; - private int class_name_index, superclass_name_index; - private int major, minor; // Compiler version - private int access_flags; // Access rights of parsed class - private int[] interfaces; // Names of implemented interfaces - private ConstantPool constant_pool; // collection of constants - private Field[] fields; // class fields, i.e., its variables - private Method[] methods; // methods defined in the class - private Attribute[] attributes; // attributes defined in the class - private boolean is_zip; // Loaded from zip file - private static final int BUFSIZE = 8192; - - - /** - * Parse class from the given stream. - * - * @param file Input stream - * @param file_name File name - */ - public ClassParser(InputStream file, String file_name) { - this.file_name = file_name; - fileOwned = false; - String clazz = file.getClass().getName(); // Not a very clean solution ... - is_zip = clazz.startsWith("java.util.zip.") || clazz.startsWith("java.util.jar."); - if (file instanceof DataInputStream) { - this.file = (DataInputStream) file; - } else { - this.file = new DataInputStream(new BufferedInputStream(file, BUFSIZE)); - } - } - - - /** Parse class from given .class file. - * - * @param file_name file name - */ - public ClassParser(String file_name) throws IOException { - is_zip = false; - this.file_name = file_name; - fileOwned = true; - } - - - /** Parse class from given .class file in a ZIP-archive - * - * @param zip_file zip file name - * @param file_name file name - */ - public ClassParser(String zip_file, String file_name) { - is_zip = true; - fileOwned = true; - this.zip_file = zip_file; - this.file_name = file_name; - } - - - /** - * Parse the given Java class file and return an object that represents - * the contained data, i.e., constants, methods, fields and commands. - * A ClassFormatException is raised, if the file is not a valid - * .class file. (This does not include verification of the byte code as it - * is performed by the java interpreter). - * - * @return Class object representing the parsed class file - * @throws IOException - * @throws ClassFormatException - */ - public JavaClass parse() throws IOException, ClassFormatException { - ZipFile zip = null; - try { - if (fileOwned) { - if (is_zip) { - zip = new ZipFile(zip_file); - ZipEntry entry = zip.getEntry(file_name); - file = new DataInputStream(new BufferedInputStream(zip.getInputStream(entry), - BUFSIZE)); - } else { - file = new DataInputStream(new BufferedInputStream(new FileInputStream( - file_name), BUFSIZE)); - } - } - /****************** Read headers ********************************/ - // Check magic tag of class file - readID(); - // Get compiler version - readVersion(); - /****************** Read constant pool and related **************/ - // Read constant pool entries - readConstantPool(); - // Get class information - readClassInfo(); - // Get interface information, i.e., implemented interfaces - readInterfaces(); - /****************** Read class fields and methods ***************/ - // Read class fields, i.e., the variables of the class - readFields(); - // Read class methods, i.e., the functions in the class - readMethods(); - // Read class attributes - readAttributes(); - // Check for unknown variables - //Unknown[] u = Unknown.getUnknownAttributes(); - //for(int i=0; i < u.length; i++) - // System.err.println("WARNING: " + u[i]); - // Everything should have been read now - // if(file.available() > 0) { - // int bytes = file.available(); - // byte[] buf = new byte[bytes]; - // file.read(buf); - // if(!(is_zip && (buf.length == 1))) { - // System.err.println("WARNING: Trailing garbage at end of " + file_name); - // System.err.println(bytes + " extra bytes: " + Utility.toHexString(buf)); - // } - // } - } catch (IOException ioe) { - // this is just temporary to find the cause for the strange - // ClassFormatException that is raised randomly during the JaMoPP - // bulk tests - ioe.printStackTrace(); - throw ioe; - } finally { - // Read everything of interest, so close the file - if (fileOwned) { - file.close(); - if (zip != null) { - zip.close(); - } - } - } - // Return the information we have gathered in a new object - return new JavaClass(class_name_index, superclass_name_index, file_name, major, minor, - access_flags, constant_pool, interfaces, fields, methods, attributes, is_zip - ? JavaClass.ZIP - : JavaClass.FILE); - } - - - /** - * Read information about the attributes of the class. - * @throws IOException - * @throws ClassFormatException - */ - private final void readAttributes() throws IOException, ClassFormatException { - int attributes_count; - attributes_count = file.readUnsignedShort(); - attributes = new Attribute[attributes_count]; - for (int i = 0; i < attributes_count; i++) { - attributes[i] = Attribute.readAttribute(file, constant_pool); - } - } - - - /** - * Read information about the class and its super class. - * @throws IOException - * @throws ClassFormatException - */ - private final void readClassInfo() throws IOException, ClassFormatException { - access_flags = file.readUnsignedShort(); - /* Interfaces are implicitely abstract, the flag should be set - * according to the JVM specification. - */ - if ((access_flags & Constants.ACC_INTERFACE) != 0) { - access_flags |= Constants.ACC_ABSTRACT; - } - if (((access_flags & Constants.ACC_ABSTRACT) != 0) - && ((access_flags & Constants.ACC_FINAL) != 0)) { - throw new ClassFormatException("Class can't be both final and abstract"); - } - class_name_index = file.readUnsignedShort(); - superclass_name_index = file.readUnsignedShort(); - } - - - /** - * Read constant pool entries. - * @throws IOException - * @throws ClassFormatException - */ - private final void readConstantPool() throws IOException, ClassFormatException { - constant_pool = new ConstantPool(file); - } - - - /** - * Read information about the fields of the class, i.e., its variables. - * @throws IOException - * @throws ClassFormatException - */ - private final void readFields() throws IOException, ClassFormatException { - int fields_count; - fields_count = file.readUnsignedShort(); - fields = new Field[fields_count]; - for (int i = 0; i < fields_count; i++) { - fields[i] = new Field(file, constant_pool); - } - } - - - /******************** Private utility methods **********************/ - /** - * Check whether the header of the file is ok. - * Of course, this has to be the first action on successive file reads. - * @throws IOException - * @throws ClassFormatException - */ - private final void readID() throws IOException, ClassFormatException { - int magic = 0xCAFEBABE; - if (file.readInt() != magic) { - throw new ClassFormatException(file_name + " is not a Java .class file"); - } - } - - - /** - * Read information about the interfaces implemented by this class. - * @throws IOException - * @throws ClassFormatException - */ - private final void readInterfaces() throws IOException, ClassFormatException { - int interfaces_count; - interfaces_count = file.readUnsignedShort(); - interfaces = new int[interfaces_count]; - for (int i = 0; i < interfaces_count; i++) { - interfaces[i] = file.readUnsignedShort(); - } - } - - - /** - * Read information about the methods of the class. - * @throws IOException - * @throws ClassFormatException - */ - private final void readMethods() throws IOException, ClassFormatException { - int methods_count; - methods_count = file.readUnsignedShort(); - methods = new Method[methods_count]; - for (int i = 0; i < methods_count; i++) { - methods[i] = new Method(file, constant_pool); - } - } - - - /** - * Read major and minor version of compiler which created the file. - * @throws IOException - * @throws ClassFormatException - */ - private final void readVersion() throws IOException, ClassFormatException { - minor = file.readUnsignedShort(); - major = file.readUnsignedShort(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.BufferedInputStream; +import java.io.DataInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +import org.apache.bcel5_2_0.Constants; + +/** + * Wrapper class that parses a given Java .class file. The method parse returns a + * JavaClass object on success. When an I/O error or an + * inconsistency occurs an appropiate exception is propagated back to + * the caller. + * + * The structure and the names comply, except for a few conveniences, + * exactly with the + * JVM specification 1.0. See this paper for + * further details about the structure of a bytecode file. + * + * @version $Id: ClassParser.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public final class ClassParser { + + private DataInputStream file; + private boolean fileOwned; + private String file_name; + private String zip_file; + private int class_name_index, superclass_name_index; + private int major, minor; // Compiler version + private int access_flags; // Access rights of parsed class + private int[] interfaces; // Names of implemented interfaces + private ConstantPool constant_pool; // collection of constants + private Field[] fields; // class fields, i.e., its variables + private Method[] methods; // methods defined in the class + private Attribute[] attributes; // attributes defined in the class + private boolean is_zip; // Loaded from zip file + private static final int BUFSIZE = 8192; + + + /** + * Parse class from the given stream. + * + * @param file Input stream + * @param file_name File name + */ + public ClassParser(InputStream file, String file_name) { + this.file_name = file_name; + fileOwned = false; + String clazz = file.getClass().getName(); // Not a very clean solution ... + is_zip = clazz.startsWith("java.util.zip.") || clazz.startsWith("java.util.jar."); + if (file instanceof DataInputStream) { + this.file = (DataInputStream) file; + } else { + this.file = new DataInputStream(new BufferedInputStream(file, BUFSIZE)); + } + } + + + /** Parse class from given .class file. + * + * @param file_name file name + */ + public ClassParser(String file_name) throws IOException { + is_zip = false; + this.file_name = file_name; + fileOwned = true; + } + + + /** Parse class from given .class file in a ZIP-archive + * + * @param zip_file zip file name + * @param file_name file name + */ + public ClassParser(String zip_file, String file_name) { + is_zip = true; + fileOwned = true; + this.zip_file = zip_file; + this.file_name = file_name; + } + + + /** + * Parse the given Java class file and return an object that represents + * the contained data, i.e., constants, methods, fields and commands. + * A ClassFormatException is raised, if the file is not a valid + * .class file. (This does not include verification of the byte code as it + * is performed by the java interpreter). + * + * @return Class object representing the parsed class file + * @throws IOException + * @throws ClassFormatException + */ + public JavaClass parse() throws IOException, ClassFormatException { + ZipFile zip = null; + try { + if (fileOwned) { + if (is_zip) { + zip = new ZipFile(zip_file); + ZipEntry entry = zip.getEntry(file_name); + file = new DataInputStream(new BufferedInputStream(zip.getInputStream(entry), + BUFSIZE)); + } else { + file = new DataInputStream(new BufferedInputStream(new FileInputStream( + file_name), BUFSIZE)); + } + } + /****************** Read headers ********************************/ + // Check magic tag of class file + readID(); + // Get compiler version + readVersion(); + /****************** Read constant pool and related **************/ + // Read constant pool entries + readConstantPool(); + // Get class information + readClassInfo(); + // Get interface information, i.e., implemented interfaces + readInterfaces(); + /****************** Read class fields and methods ***************/ + // Read class fields, i.e., the variables of the class + readFields(); + // Read class methods, i.e., the functions in the class + readMethods(); + // Read class attributes + readAttributes(); + // Check for unknown variables + //Unknown[] u = Unknown.getUnknownAttributes(); + //for(int i=0; i < u.length; i++) + // System.err.println("WARNING: " + u[i]); + // Everything should have been read now + // if(file.available() > 0) { + // int bytes = file.available(); + // byte[] buf = new byte[bytes]; + // file.read(buf); + // if(!(is_zip && (buf.length == 1))) { + // System.err.println("WARNING: Trailing garbage at end of " + file_name); + // System.err.println(bytes + " extra bytes: " + Utility.toHexString(buf)); + // } + // } + } catch (IOException ioe) { + // this is just temporary to find the cause for the strange + // ClassFormatException that is raised randomly during the JaMoPP + // bulk tests + ioe.printStackTrace(); + throw ioe; + } finally { + // Read everything of interest, so close the file + if (fileOwned) { + file.close(); + if (zip != null) { + zip.close(); + } + } + } + // Return the information we have gathered in a new object + return new JavaClass(class_name_index, superclass_name_index, file_name, major, minor, + access_flags, constant_pool, interfaces, fields, methods, attributes, is_zip + ? JavaClass.ZIP + : JavaClass.FILE); + } + + + /** + * Read information about the attributes of the class. + * @throws IOException + * @throws ClassFormatException + */ + private final void readAttributes() throws IOException, ClassFormatException { + int attributes_count; + attributes_count = file.readUnsignedShort(); + attributes = new Attribute[attributes_count]; + for (int i = 0; i < attributes_count; i++) { + attributes[i] = Attribute.readAttribute(file, constant_pool); + } + } + + + /** + * Read information about the class and its super class. + * @throws IOException + * @throws ClassFormatException + */ + private final void readClassInfo() throws IOException, ClassFormatException { + access_flags = file.readUnsignedShort(); + /* Interfaces are implicitely abstract, the flag should be set + * according to the JVM specification. + */ + if ((access_flags & Constants.ACC_INTERFACE) != 0) { + access_flags |= Constants.ACC_ABSTRACT; + } + if (((access_flags & Constants.ACC_ABSTRACT) != 0) + && ((access_flags & Constants.ACC_FINAL) != 0)) { + throw new ClassFormatException("Class can't be both final and abstract"); + } + class_name_index = file.readUnsignedShort(); + superclass_name_index = file.readUnsignedShort(); + } + + + /** + * Read constant pool entries. + * @throws IOException + * @throws ClassFormatException + */ + private final void readConstantPool() throws IOException, ClassFormatException { + constant_pool = new ConstantPool(file); + } + + + /** + * Read information about the fields of the class, i.e., its variables. + * @throws IOException + * @throws ClassFormatException + */ + private final void readFields() throws IOException, ClassFormatException { + int fields_count; + fields_count = file.readUnsignedShort(); + fields = new Field[fields_count]; + for (int i = 0; i < fields_count; i++) { + fields[i] = new Field(file, constant_pool); + } + } + + + /******************** Private utility methods **********************/ + /** + * Check whether the header of the file is ok. + * Of course, this has to be the first action on successive file reads. + * @throws IOException + * @throws ClassFormatException + */ + private final void readID() throws IOException, ClassFormatException { + int magic = 0xCAFEBABE; + if (file.readInt() != magic) { + throw new ClassFormatException(file_name + " is not a Java .class file"); + } + } + + + /** + * Read information about the interfaces implemented by this class. + * @throws IOException + * @throws ClassFormatException + */ + private final void readInterfaces() throws IOException, ClassFormatException { + int interfaces_count; + interfaces_count = file.readUnsignedShort(); + interfaces = new int[interfaces_count]; + for (int i = 0; i < interfaces_count; i++) { + interfaces[i] = file.readUnsignedShort(); + } + } + + + /** + * Read information about the methods of the class. + * @throws IOException + * @throws ClassFormatException + */ + private final void readMethods() throws IOException, ClassFormatException { + int methods_count; + methods_count = file.readUnsignedShort(); + methods = new Method[methods_count]; + for (int i = 0; i < methods_count; i++) { + methods[i] = new Method(file, constant_pool); + } + } + + + /** + * Read major and minor version of compiler which created the file. + * @throws IOException + * @throws ClassFormatException + */ + private final void readVersion() throws IOException, ClassFormatException { + minor = file.readUnsignedShort(); + major = file.readUnsignedShort(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Code.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Code.java index a746617a..c0846283 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Code.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Code.java @@ -1,352 +1,352 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class represents a chunk of Java byte code contained in a - * method. It is instantiated by the - * Attribute.readAttribute() method. A Code - * attribute contains informations about operand stack, local - * variables, byte code and the exceptions handled within this - * method. - * - * This attribute has attributes itself, namely LineNumberTable which - * is used for debugging purposes and LocalVariableTable which - * contains information about the local variables. - * - * @version $Id: Code.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - * @see CodeException - * @see LineNumberTable - * @see LocalVariableTable - */ -public final class Code extends Attribute { - - private int max_stack; // Maximum size of stack used by this method - private int max_locals; // Number of local variables - private int code_length; // Length of code in bytes - private byte[] code; // Actual byte code - private int exception_table_length; - private CodeException[] exception_table; // Table of handled exceptions - private int attributes_count; // Attributes of code: LineNumber - private Attribute[] attributes; // or LocalVariable - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use copy() for a physical copy. - */ - public Code(Code c) { - this(c.getNameIndex(), c.getLength(), c.getMaxStack(), c.getMaxLocals(), c.getCode(), c - .getExceptionTable(), c.getAttributes(), c.getConstantPool()); - } - - - /** - * @param name_index Index pointing to the name Code - * @param length Content length in bytes - * @param file Input stream - * @param constant_pool Array of constants - */ - Code(int name_index, int length, DataInputStream file, ConstantPool constant_pool) - throws IOException { - // Initialize with some default values which will be overwritten later - this(name_index, length, file.readUnsignedShort(), file.readUnsignedShort(), (byte[]) null, - (CodeException[]) null, (Attribute[]) null, constant_pool); - code_length = file.readInt(); - code = new byte[code_length]; // Read byte code - file.readFully(code); - /* Read exception table that contains all regions where an exception - * handler is active, i.e., a try { ... } catch() block. - */ - exception_table_length = file.readUnsignedShort(); - exception_table = new CodeException[exception_table_length]; - for (int i = 0; i < exception_table_length; i++) { - exception_table[i] = new CodeException(file); - } - /* Read all attributes, currently `LineNumberTable' and - * `LocalVariableTable' - */ - attributes_count = file.readUnsignedShort(); - attributes = new Attribute[attributes_count]; - for (int i = 0; i < attributes_count; i++) { - attributes[i] = Attribute.readAttribute(file, constant_pool); - } - /* Adjust length, because of setAttributes in this(), s.b. length - * is incorrect, because it didn't take the internal attributes - * into account yet! Very subtle bug, fixed in 3.1.1. - */ - this.length = length; - } - - - /** - * @param name_index Index pointing to the name Code - * @param length Content length in bytes - * @param max_stack Maximum size of stack - * @param max_locals Number of local variables - * @param code Actual byte code - * @param exception_table Table of handled exceptions - * @param attributes Attributes of code: LineNumber or LocalVariable - * @param constant_pool Array of constants - */ - public Code(int name_index, int length, int max_stack, int max_locals, byte[] code, - CodeException[] exception_table, Attribute[] attributes, ConstantPool constant_pool) { - super(Constants.ATTR_CODE, name_index, length, constant_pool); - this.max_stack = max_stack; - this.max_locals = max_locals; - setCode(code); - setExceptionTable(exception_table); - setAttributes(attributes); // Overwrites length! - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitCode(this); - } - - - /** - * Dump code attribute to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - super.dump(file); - file.writeShort(max_stack); - file.writeShort(max_locals); - file.writeInt(code_length); - file.write(code, 0, code_length); - file.writeShort(exception_table_length); - for (int i = 0; i < exception_table_length; i++) { - exception_table[i].dump(file); - } - file.writeShort(attributes_count); - for (int i = 0; i < attributes_count; i++) { - attributes[i].dump(file); - } - } - - - /** - * @return Collection of code attributes. - * @see Attribute - */ - public final Attribute[] getAttributes() { - return attributes; - } - - - /** - * @return LineNumberTable of Code, if it has one - */ - public LineNumberTable getLineNumberTable() { - for (int i = 0; i < attributes_count; i++) { - if (attributes[i] instanceof LineNumberTable) { - return (LineNumberTable) attributes[i]; - } - } - return null; - } - - - /** - * @return LocalVariableTable of Code, if it has one - */ - public LocalVariableTable getLocalVariableTable() { - for (int i = 0; i < attributes_count; i++) { - if (attributes[i] instanceof LocalVariableTable) { - return (LocalVariableTable) attributes[i]; - } - } - return null; - } - - - /** - * @return Actual byte code of the method. - */ - public final byte[] getCode() { - return code; - } - - - /** - * @return Table of handled exceptions. - * @see CodeException - */ - public final CodeException[] getExceptionTable() { - return exception_table; - } - - - /** - * @return Number of local variables. - */ - public final int getMaxLocals() { - return max_locals; - } - - - /** - * @return Maximum size of stack used by this method. - */ - public final int getMaxStack() { - return max_stack; - } - - - /** - * @return the internal length of this code attribute (minus the first 6 bytes) - * and excluding all its attributes - */ - private final int getInternalLength() { - return 2 /*max_stack*/+ 2 /*max_locals*/+ 4 /*code length*/ - + code_length /*byte-code*/ - + 2 /*exception-table length*/ - + 8 * exception_table_length /* exception table */ - + 2 /* attributes count */; - } - - - /** - * @return the full size of this code attribute, minus its first 6 bytes, - * including the size of all its contained attributes - */ - private final int calculateLength() { - int len = 0; - for (int i = 0; i < attributes_count; i++) { - len += attributes[i].length + 6 /*attribute header size*/; - } - return len + getInternalLength(); - } - - - /** - * @param attributes the attributes to set for this Code - */ - public final void setAttributes( Attribute[] attributes ) { - this.attributes = attributes; - attributes_count = (attributes == null) ? 0 : attributes.length; - length = calculateLength(); // Adjust length - } - - - /** - * @param code byte code - */ - public final void setCode( byte[] code ) { - this.code = code; - code_length = (code == null) ? 0 : code.length; - } - - - /** - * @param exception_table exception table - */ - public final void setExceptionTable( CodeException[] exception_table ) { - this.exception_table = exception_table; - exception_table_length = (exception_table == null) ? 0 : exception_table.length; - } - - - /** - * @param max_locals maximum number of local variables - */ - public final void setMaxLocals( int max_locals ) { - this.max_locals = max_locals; - } - - - /** - * @param max_stack maximum stack size - */ - public final void setMaxStack( int max_stack ) { - this.max_stack = max_stack; - } - - - /** - * @return String representation of code chunk. - */ - public final String toString( boolean verbose ) { - StringBuilder buf = new StringBuilder(100); - buf.append("Code(max_stack = ").append(max_stack).append(", max_locals = ").append( - max_locals).append(", code_length = ").append(code_length).append(")\n").append( - Utility.codeToString(code, constant_pool, 0, -1, verbose)); - if (exception_table_length > 0) { - buf.append("\nException handler(s) = \n").append("From\tTo\tHandler\tType\n"); - for (int i = 0; i < exception_table_length; i++) { - buf.append(exception_table[i].toString(constant_pool, verbose)).append("\n"); - } - } - if (attributes_count > 0) { - buf.append("\nAttribute(s) = \n"); - for (int i = 0; i < attributes_count; i++) { - buf.append(attributes[i].toString()).append("\n"); - } - } - return buf.toString(); - } - - - /** - * @return String representation of code chunk. - */ - public final String toString() { - return toString(true); - } - - - /** - * @return deep copy of this attribute - * - * @param _constant_pool the constant pool to duplicate - */ - public Attribute copy( ConstantPool _constant_pool ) { - Code c = (Code) clone(); - if (code != null) { - c.code = new byte[code.length]; - System.arraycopy(code, 0, c.code, 0, code.length); - } - c.constant_pool = _constant_pool; - c.exception_table = new CodeException[exception_table_length]; - for (int i = 0; i < exception_table_length; i++) { - c.exception_table[i] = exception_table[i].copy(); - } - c.attributes = new Attribute[attributes_count]; - for (int i = 0; i < attributes_count; i++) { - c.attributes[i] = attributes[i].copy(_constant_pool); - } - return c; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class represents a chunk of Java byte code contained in a + * method. It is instantiated by the + * Attribute.readAttribute() method. A Code + * attribute contains informations about operand stack, local + * variables, byte code and the exceptions handled within this + * method. + * + * This attribute has attributes itself, namely LineNumberTable which + * is used for debugging purposes and LocalVariableTable which + * contains information about the local variables. + * + * @version $Id: Code.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Attribute + * @see CodeException + * @see LineNumberTable + * @see LocalVariableTable + */ +public final class Code extends Attribute { + + private int max_stack; // Maximum size of stack used by this method + private int max_locals; // Number of local variables + private int code_length; // Length of code in bytes + private byte[] code; // Actual byte code + private int exception_table_length; + private CodeException[] exception_table; // Table of handled exceptions + private int attributes_count; // Attributes of code: LineNumber + private Attribute[] attributes; // or LocalVariable + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use copy() for a physical copy. + */ + public Code(Code c) { + this(c.getNameIndex(), c.getLength(), c.getMaxStack(), c.getMaxLocals(), c.getCode(), c + .getExceptionTable(), c.getAttributes(), c.getConstantPool()); + } + + + /** + * @param name_index Index pointing to the name Code + * @param length Content length in bytes + * @param file Input stream + * @param constant_pool Array of constants + */ + Code(int name_index, int length, DataInputStream file, ConstantPool constant_pool) + throws IOException { + // Initialize with some default values which will be overwritten later + this(name_index, length, file.readUnsignedShort(), file.readUnsignedShort(), (byte[]) null, + (CodeException[]) null, (Attribute[]) null, constant_pool); + code_length = file.readInt(); + code = new byte[code_length]; // Read byte code + file.readFully(code); + /* Read exception table that contains all regions where an exception + * handler is active, i.e., a try { ... } catch() block. + */ + exception_table_length = file.readUnsignedShort(); + exception_table = new CodeException[exception_table_length]; + for (int i = 0; i < exception_table_length; i++) { + exception_table[i] = new CodeException(file); + } + /* Read all attributes, currently `LineNumberTable' and + * `LocalVariableTable' + */ + attributes_count = file.readUnsignedShort(); + attributes = new Attribute[attributes_count]; + for (int i = 0; i < attributes_count; i++) { + attributes[i] = Attribute.readAttribute(file, constant_pool); + } + /* Adjust length, because of setAttributes in this(), s.b. length + * is incorrect, because it didn't take the internal attributes + * into account yet! Very subtle bug, fixed in 3.1.1. + */ + this.length = length; + } + + + /** + * @param name_index Index pointing to the name Code + * @param length Content length in bytes + * @param max_stack Maximum size of stack + * @param max_locals Number of local variables + * @param code Actual byte code + * @param exception_table Table of handled exceptions + * @param attributes Attributes of code: LineNumber or LocalVariable + * @param constant_pool Array of constants + */ + public Code(int name_index, int length, int max_stack, int max_locals, byte[] code, + CodeException[] exception_table, Attribute[] attributes, ConstantPool constant_pool) { + super(Constants.ATTR_CODE, name_index, length, constant_pool); + this.max_stack = max_stack; + this.max_locals = max_locals; + setCode(code); + setExceptionTable(exception_table); + setAttributes(attributes); // Overwrites length! + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitCode(this); + } + + + /** + * Dump code attribute to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + super.dump(file); + file.writeShort(max_stack); + file.writeShort(max_locals); + file.writeInt(code_length); + file.write(code, 0, code_length); + file.writeShort(exception_table_length); + for (int i = 0; i < exception_table_length; i++) { + exception_table[i].dump(file); + } + file.writeShort(attributes_count); + for (int i = 0; i < attributes_count; i++) { + attributes[i].dump(file); + } + } + + + /** + * @return Collection of code attributes. + * @see Attribute + */ + public final Attribute[] getAttributes() { + return attributes; + } + + + /** + * @return LineNumberTable of Code, if it has one + */ + public LineNumberTable getLineNumberTable() { + for (int i = 0; i < attributes_count; i++) { + if (attributes[i] instanceof LineNumberTable) { + return (LineNumberTable) attributes[i]; + } + } + return null; + } + + + /** + * @return LocalVariableTable of Code, if it has one + */ + public LocalVariableTable getLocalVariableTable() { + for (int i = 0; i < attributes_count; i++) { + if (attributes[i] instanceof LocalVariableTable) { + return (LocalVariableTable) attributes[i]; + } + } + return null; + } + + + /** + * @return Actual byte code of the method. + */ + public final byte[] getCode() { + return code; + } + + + /** + * @return Table of handled exceptions. + * @see CodeException + */ + public final CodeException[] getExceptionTable() { + return exception_table; + } + + + /** + * @return Number of local variables. + */ + public final int getMaxLocals() { + return max_locals; + } + + + /** + * @return Maximum size of stack used by this method. + */ + public final int getMaxStack() { + return max_stack; + } + + + /** + * @return the internal length of this code attribute (minus the first 6 bytes) + * and excluding all its attributes + */ + private final int getInternalLength() { + return 2 /*max_stack*/+ 2 /*max_locals*/+ 4 /*code length*/ + + code_length /*byte-code*/ + + 2 /*exception-table length*/ + + 8 * exception_table_length /* exception table */ + + 2 /* attributes count */; + } + + + /** + * @return the full size of this code attribute, minus its first 6 bytes, + * including the size of all its contained attributes + */ + private final int calculateLength() { + int len = 0; + for (int i = 0; i < attributes_count; i++) { + len += attributes[i].length + 6 /*attribute header size*/; + } + return len + getInternalLength(); + } + + + /** + * @param attributes the attributes to set for this Code + */ + public final void setAttributes( Attribute[] attributes ) { + this.attributes = attributes; + attributes_count = (attributes == null) ? 0 : attributes.length; + length = calculateLength(); // Adjust length + } + + + /** + * @param code byte code + */ + public final void setCode( byte[] code ) { + this.code = code; + code_length = (code == null) ? 0 : code.length; + } + + + /** + * @param exception_table exception table + */ + public final void setExceptionTable( CodeException[] exception_table ) { + this.exception_table = exception_table; + exception_table_length = (exception_table == null) ? 0 : exception_table.length; + } + + + /** + * @param max_locals maximum number of local variables + */ + public final void setMaxLocals( int max_locals ) { + this.max_locals = max_locals; + } + + + /** + * @param max_stack maximum stack size + */ + public final void setMaxStack( int max_stack ) { + this.max_stack = max_stack; + } + + + /** + * @return String representation of code chunk. + */ + public final String toString( boolean verbose ) { + StringBuilder buf = new StringBuilder(100); + buf.append("Code(max_stack = ").append(max_stack).append(", max_locals = ").append( + max_locals).append(", code_length = ").append(code_length).append(")\n").append( + Utility.codeToString(code, constant_pool, 0, -1, verbose)); + if (exception_table_length > 0) { + buf.append("\nException handler(s) = \n").append("From\tTo\tHandler\tType\n"); + for (int i = 0; i < exception_table_length; i++) { + buf.append(exception_table[i].toString(constant_pool, verbose)).append("\n"); + } + } + if (attributes_count > 0) { + buf.append("\nAttribute(s) = \n"); + for (int i = 0; i < attributes_count; i++) { + buf.append(attributes[i].toString()).append("\n"); + } + } + return buf.toString(); + } + + + /** + * @return String representation of code chunk. + */ + public final String toString() { + return toString(true); + } + + + /** + * @return deep copy of this attribute + * + * @param _constant_pool the constant pool to duplicate + */ + public Attribute copy( ConstantPool _constant_pool ) { + Code c = (Code) clone(); + if (code != null) { + c.code = new byte[code.length]; + System.arraycopy(code, 0, c.code, 0, code.length); + } + c.constant_pool = _constant_pool; + c.exception_table = new CodeException[exception_table_length]; + for (int i = 0; i < exception_table_length; i++) { + c.exception_table[i] = exception_table[i].copy(); + } + c.attributes = new Attribute[attributes_count]; + for (int i = 0; i < attributes_count; i++) { + c.attributes[i] = attributes[i].copy(_constant_pool); + } + return c; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/CodeException.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/CodeException.java index 007d2298..f89db535 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/CodeException.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/CodeException.java @@ -1,215 +1,215 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class represents an entry in the exception table of the Code - * attribute and is used only there. It contains a range in which a - * particular exception handler is active. - * - * @version $Id: CodeException.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Code - */ -public final class CodeException implements Cloneable, Constants, Node, Serializable { - - private int start_pc; // Range in the code the exception handler is - private int end_pc; // active. start_pc is inclusive, end_pc exclusive - private int handler_pc; /* Starting address of exception handler, i.e., - * an offset from start of code. - */ - private int catch_type; /* If this is zero the handler catches any - * exception, otherwise it points to the - * exception class which is to be caught. - */ - - - /** - * Initialize from another object. - */ - public CodeException(CodeException c) { - this(c.getStartPC(), c.getEndPC(), c.getHandlerPC(), c.getCatchType()); - } - - - /** - * Construct object from file stream. - * @param file Input stream - * @throws IOException - */ - CodeException(DataInputStream file) throws IOException { - this(file.readUnsignedShort(), file.readUnsignedShort(), file.readUnsignedShort(), file - .readUnsignedShort()); - } - - - /** - * @param start_pc Range in the code the exception handler is active, - * start_pc is inclusive while - * @param end_pc is exclusive - * @param handler_pc Starting address of exception handler, i.e., - * an offset from start of code. - * @param catch_type If zero the handler catches any - * exception, otherwise it points to the exception class which is - * to be caught. - */ - public CodeException(int start_pc, int end_pc, int handler_pc, int catch_type) { - this.start_pc = start_pc; - this.end_pc = end_pc; - this.handler_pc = handler_pc; - this.catch_type = catch_type; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitCodeException(this); - } - - - /** - * Dump code exception to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeShort(start_pc); - file.writeShort(end_pc); - file.writeShort(handler_pc); - file.writeShort(catch_type); - } - - - /** - * @return 0, if the handler catches any exception, otherwise it points to - * the exception class which is to be caught. - */ - public final int getCatchType() { - return catch_type; - } - - - /** - * @return Exclusive end index of the region where the handler is active. - */ - public final int getEndPC() { - return end_pc; - } - - - /** - * @return Starting address of exception handler, relative to the code. - */ - public final int getHandlerPC() { - return handler_pc; - } - - - /** - * @return Inclusive start index of the region where the handler is active. - */ - public final int getStartPC() { - return start_pc; - } - - - /** - * @param catch_type the type of exception that is caught - */ - public final void setCatchType( int catch_type ) { - this.catch_type = catch_type; - } - - - /** - * @param end_pc end of handled block - */ - public final void setEndPC( int end_pc ) { - this.end_pc = end_pc; - } - - - /** - * @param handler_pc where the actual code is - */ - public final void setHandlerPC( int handler_pc ) { - this.handler_pc = handler_pc; - } - - - /** - * @param start_pc start of handled block - */ - public final void setStartPC( int start_pc ) { - this.start_pc = start_pc; - } - - - /** - * @return String representation. - */ - public final String toString() { - return "CodeException(start_pc = " + start_pc + ", end_pc = " + end_pc + ", handler_pc = " - + handler_pc + ", catch_type = " + catch_type + ")"; - } - - - /** - * @return String representation. - */ - public final String toString( ConstantPool cp, boolean verbose ) { - String str; - if (catch_type == 0) { - str = "(0)"; - } else { - str = Utility.compactClassName(cp.getConstantString(catch_type, CONSTANT_Class), false) - + (verbose ? "(" + catch_type + ")" : ""); - } - return start_pc + "\t" + end_pc + "\t" + handler_pc + "\t" + str; - } - - - public final String toString( ConstantPool cp ) { - return toString(cp, true); - } - - - /** - * @return deep copy of this object - */ - public CodeException copy() { - try { - return (CodeException) clone(); - } catch (CloneNotSupportedException e) { - } - return null; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.Serializable; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class represents an entry in the exception table of the Code + * attribute and is used only there. It contains a range in which a + * particular exception handler is active. + * + * @version $Id: CodeException.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Code + */ +public final class CodeException implements Cloneable, Constants, Node, Serializable { + + private int start_pc; // Range in the code the exception handler is + private int end_pc; // active. start_pc is inclusive, end_pc exclusive + private int handler_pc; /* Starting address of exception handler, i.e., + * an offset from start of code. + */ + private int catch_type; /* If this is zero the handler catches any + * exception, otherwise it points to the + * exception class which is to be caught. + */ + + + /** + * Initialize from another object. + */ + public CodeException(CodeException c) { + this(c.getStartPC(), c.getEndPC(), c.getHandlerPC(), c.getCatchType()); + } + + + /** + * Construct object from file stream. + * @param file Input stream + * @throws IOException + */ + CodeException(DataInputStream file) throws IOException { + this(file.readUnsignedShort(), file.readUnsignedShort(), file.readUnsignedShort(), file + .readUnsignedShort()); + } + + + /** + * @param start_pc Range in the code the exception handler is active, + * start_pc is inclusive while + * @param end_pc is exclusive + * @param handler_pc Starting address of exception handler, i.e., + * an offset from start of code. + * @param catch_type If zero the handler catches any + * exception, otherwise it points to the exception class which is + * to be caught. + */ + public CodeException(int start_pc, int end_pc, int handler_pc, int catch_type) { + this.start_pc = start_pc; + this.end_pc = end_pc; + this.handler_pc = handler_pc; + this.catch_type = catch_type; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitCodeException(this); + } + + + /** + * Dump code exception to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeShort(start_pc); + file.writeShort(end_pc); + file.writeShort(handler_pc); + file.writeShort(catch_type); + } + + + /** + * @return 0, if the handler catches any exception, otherwise it points to + * the exception class which is to be caught. + */ + public final int getCatchType() { + return catch_type; + } + + + /** + * @return Exclusive end index of the region where the handler is active. + */ + public final int getEndPC() { + return end_pc; + } + + + /** + * @return Starting address of exception handler, relative to the code. + */ + public final int getHandlerPC() { + return handler_pc; + } + + + /** + * @return Inclusive start index of the region where the handler is active. + */ + public final int getStartPC() { + return start_pc; + } + + + /** + * @param catch_type the type of exception that is caught + */ + public final void setCatchType( int catch_type ) { + this.catch_type = catch_type; + } + + + /** + * @param end_pc end of handled block + */ + public final void setEndPC( int end_pc ) { + this.end_pc = end_pc; + } + + + /** + * @param handler_pc where the actual code is + */ + public final void setHandlerPC( int handler_pc ) { + this.handler_pc = handler_pc; + } + + + /** + * @param start_pc start of handled block + */ + public final void setStartPC( int start_pc ) { + this.start_pc = start_pc; + } + + + /** + * @return String representation. + */ + public final String toString() { + return "CodeException(start_pc = " + start_pc + ", end_pc = " + end_pc + ", handler_pc = " + + handler_pc + ", catch_type = " + catch_type + ")"; + } + + + /** + * @return String representation. + */ + public final String toString( ConstantPool cp, boolean verbose ) { + String str; + if (catch_type == 0) { + str = "(0)"; + } else { + str = Utility.compactClassName(cp.getConstantString(catch_type, CONSTANT_Class), false) + + (verbose ? "(" + catch_type + ")" : ""); + } + return start_pc + "\t" + end_pc + "\t" + handler_pc + "\t" + str; + } + + + public final String toString( ConstantPool cp ) { + return toString(cp, true); + } + + + /** + * @return deep copy of this object + */ + public CodeException copy() { + try { + return (CodeException) clone(); + } catch (CloneNotSupportedException e) { + } + return null; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Constant.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Constant.java index cbc213ad..97a4ccbc 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Constant.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Constant.java @@ -1,189 +1,189 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.util.BCELComparator; - -/** - * Abstract superclass for classes to represent the different constant types - * in the constant pool of a class file. The classes keep closely to - * the JVM specification. - * - * @version $Id: Constant.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class Constant implements Cloneable, Node, Serializable { - - private static BCELComparator _cmp = new BCELComparator() { - - public boolean equals( Object o1, Object o2 ) { - Constant THIS = (Constant) o1; - Constant THAT = (Constant) o2; - return THIS.toString().equals(THAT.toString()); - } - - - public int hashCode( Object o ) { - Constant THIS = (Constant) o; - return THIS.toString().hashCode(); - } - }; - /* In fact this tag is redundant since we can distinguish different - * `Constant' objects by their type, i.e., via `instanceof'. In some - * places we will use the tag for switch()es anyway. - * - * First, we want match the specification as closely as possible. Second we - * need the tag as an index to select the corresponding class name from the - * `CONSTANT_NAMES' array. - */ - protected byte tag; - - - Constant(byte tag) { - this.tag = tag; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public abstract void accept( Visitor v ); - - - public abstract void dump( DataOutputStream file ) throws IOException; - - - /** - * @return Tag of constant, i.e., its type. No setTag() method to avoid - * confusion. - */ - public final byte getTag() { - return tag; - } - - - /** - * @return String representation. - */ - public String toString() { - return Constants.CONSTANT_NAMES[tag] + "[" + tag + "]"; - } - - - /** - * @return deep copy of this constant - */ - public Constant copy() { - try { - return (Constant) super.clone(); - } catch (CloneNotSupportedException e) { - } - return null; - } - - - public Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - - /** - * Read one constant from the given file, the type depends on a tag byte. - * - * @param file Input stream - * @return Constant object - */ - static final Constant readConstant( DataInputStream file ) throws IOException, - ClassFormatException { - byte b = file.readByte(); // Read tag byte - switch (b) { - case Constants.CONSTANT_Class: - return new ConstantClass(file); - case Constants.CONSTANT_Fieldref: - return new ConstantFieldref(file); - case Constants.CONSTANT_Methodref: - return new ConstantMethodref(file); - case Constants.CONSTANT_InterfaceMethodref: - return new ConstantInterfaceMethodref(file); - case Constants.CONSTANT_String: - return new ConstantString(file); - case Constants.CONSTANT_Integer: - return new ConstantInteger(file); - case Constants.CONSTANT_Float: - return new ConstantFloat(file); - case Constants.CONSTANT_Long: - return new ConstantLong(file); - case Constants.CONSTANT_Double: - return new ConstantDouble(file); - case Constants.CONSTANT_NameAndType: - return new ConstantNameAndType(file); - case Constants.CONSTANT_Utf8: - return new ConstantUtf8(file); - default: - throw new ClassFormatException("Invalid byte tag in constant pool: " + b); - } - } - - - /** - * @return Comparison strategy object - */ - public static BCELComparator getComparator() { - return _cmp; - } - - - /** - * @param comparator Comparison strategy object - */ - public static void setComparator( BCELComparator comparator ) { - _cmp = comparator; - } - - - /** - * Return value as defined by given BCELComparator strategy. - * By default two Constant objects are said to be equal when - * the result of toString() is equal. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals( Object obj ) { - return _cmp.equals(this, obj); - } - - - /** - * Return value as defined by given BCELComparator strategy. - * By default return the hashcode of the result of toString(). - * - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return _cmp.hashCode(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.Serializable; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.util.BCELComparator; + +/** + * Abstract superclass for classes to represent the different constant types + * in the constant pool of a class file. The classes keep closely to + * the JVM specification. + * + * @version $Id: Constant.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class Constant implements Cloneable, Node, Serializable { + + private static BCELComparator _cmp = new BCELComparator() { + + public boolean equals( Object o1, Object o2 ) { + Constant THIS = (Constant) o1; + Constant THAT = (Constant) o2; + return THIS.toString().equals(THAT.toString()); + } + + + public int hashCode( Object o ) { + Constant THIS = (Constant) o; + return THIS.toString().hashCode(); + } + }; + /* In fact this tag is redundant since we can distinguish different + * `Constant' objects by their type, i.e., via `instanceof'. In some + * places we will use the tag for switch()es anyway. + * + * First, we want match the specification as closely as possible. Second we + * need the tag as an index to select the corresponding class name from the + * `CONSTANT_NAMES' array. + */ + protected byte tag; + + + Constant(byte tag) { + this.tag = tag; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public abstract void accept( Visitor v ); + + + public abstract void dump( DataOutputStream file ) throws IOException; + + + /** + * @return Tag of constant, i.e., its type. No setTag() method to avoid + * confusion. + */ + public final byte getTag() { + return tag; + } + + + /** + * @return String representation. + */ + public String toString() { + return Constants.CONSTANT_NAMES[tag] + "[" + tag + "]"; + } + + + /** + * @return deep copy of this constant + */ + public Constant copy() { + try { + return (Constant) super.clone(); + } catch (CloneNotSupportedException e) { + } + return null; + } + + + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } + + + /** + * Read one constant from the given file, the type depends on a tag byte. + * + * @param file Input stream + * @return Constant object + */ + static final Constant readConstant( DataInputStream file ) throws IOException, + ClassFormatException { + byte b = file.readByte(); // Read tag byte + switch (b) { + case Constants.CONSTANT_Class: + return new ConstantClass(file); + case Constants.CONSTANT_Fieldref: + return new ConstantFieldref(file); + case Constants.CONSTANT_Methodref: + return new ConstantMethodref(file); + case Constants.CONSTANT_InterfaceMethodref: + return new ConstantInterfaceMethodref(file); + case Constants.CONSTANT_String: + return new ConstantString(file); + case Constants.CONSTANT_Integer: + return new ConstantInteger(file); + case Constants.CONSTANT_Float: + return new ConstantFloat(file); + case Constants.CONSTANT_Long: + return new ConstantLong(file); + case Constants.CONSTANT_Double: + return new ConstantDouble(file); + case Constants.CONSTANT_NameAndType: + return new ConstantNameAndType(file); + case Constants.CONSTANT_Utf8: + return new ConstantUtf8(file); + default: + throw new ClassFormatException("Invalid byte tag in constant pool: " + b); + } + } + + + /** + * @return Comparison strategy object + */ + public static BCELComparator getComparator() { + return _cmp; + } + + + /** + * @param comparator Comparison strategy object + */ + public static void setComparator( BCELComparator comparator ) { + _cmp = comparator; + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default two Constant objects are said to be equal when + * the result of toString() is equal. + * + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals( Object obj ) { + return _cmp.equals(this, obj); + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default return the hashcode of the result of toString(). + * + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + return _cmp.hashCode(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantCP.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantCP.java index bec15e07..24a53306 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantCP.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantCP.java @@ -1,132 +1,132 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * Abstract super class for Fieldref and Methodref constants. - * - * @version $Id: ConstantCP.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see ConstantFieldref - * @see ConstantMethodref - * @see ConstantInterfaceMethodref - */ -public abstract class ConstantCP extends Constant { - - /** References to the constants containing the class and the field signature - */ - protected int class_index, name_and_type_index; - - - /** - * Initialize from another object. - */ - public ConstantCP(ConstantCP c) { - this(c.getTag(), c.getClassIndex(), c.getNameAndTypeIndex()); - } - - - /** - * Initialize instance from file data. - * - * @param tag Constant type tag - * @param file Input stream - * @throws IOException - */ - ConstantCP(byte tag, DataInputStream file) throws IOException { - this(tag, file.readUnsignedShort(), file.readUnsignedShort()); - } - - - /** - * @param class_index Reference to the class containing the field - * @param name_and_type_index and the field signature - */ - protected ConstantCP(byte tag, int class_index, int name_and_type_index) { - super(tag); - this.class_index = class_index; - this.name_and_type_index = name_and_type_index; - } - - - /** - * Dump constant field reference to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeByte(tag); - file.writeShort(class_index); - file.writeShort(name_and_type_index); - } - - - /** - * @return Reference (index) to class this field or method belongs to. - */ - public final int getClassIndex() { - return class_index; - } - - - /** - * @return Reference (index) to signature of the field. - */ - public final int getNameAndTypeIndex() { - return name_and_type_index; - } - - - /** - * @param class_index points to Constant_class - */ - public final void setClassIndex( int class_index ) { - this.class_index = class_index; - } - - - /** - * @return Class this field belongs to. - */ - public String getClass( ConstantPool cp ) { - return cp.constantToString(class_index, Constants.CONSTANT_Class); - } - - - /** - * @param name_and_type_index points to Constant_NameAndType - */ - public final void setNameAndTypeIndex( int name_and_type_index ) { - this.name_and_type_index = name_and_type_index; - } - - - /** - * @return String representation. - */ - public final String toString() { - return super.toString() + "(class_index = " + class_index + ", name_and_type_index = " - + name_and_type_index + ")"; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * Abstract super class for Fieldref and Methodref constants. + * + * @version $Id: ConstantCP.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see ConstantFieldref + * @see ConstantMethodref + * @see ConstantInterfaceMethodref + */ +public abstract class ConstantCP extends Constant { + + /** References to the constants containing the class and the field signature + */ + protected int class_index, name_and_type_index; + + + /** + * Initialize from another object. + */ + public ConstantCP(ConstantCP c) { + this(c.getTag(), c.getClassIndex(), c.getNameAndTypeIndex()); + } + + + /** + * Initialize instance from file data. + * + * @param tag Constant type tag + * @param file Input stream + * @throws IOException + */ + ConstantCP(byte tag, DataInputStream file) throws IOException { + this(tag, file.readUnsignedShort(), file.readUnsignedShort()); + } + + + /** + * @param class_index Reference to the class containing the field + * @param name_and_type_index and the field signature + */ + protected ConstantCP(byte tag, int class_index, int name_and_type_index) { + super(tag); + this.class_index = class_index; + this.name_and_type_index = name_and_type_index; + } + + + /** + * Dump constant field reference to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeByte(tag); + file.writeShort(class_index); + file.writeShort(name_and_type_index); + } + + + /** + * @return Reference (index) to class this field or method belongs to. + */ + public final int getClassIndex() { + return class_index; + } + + + /** + * @return Reference (index) to signature of the field. + */ + public final int getNameAndTypeIndex() { + return name_and_type_index; + } + + + /** + * @param class_index points to Constant_class + */ + public final void setClassIndex( int class_index ) { + this.class_index = class_index; + } + + + /** + * @return Class this field belongs to. + */ + public String getClass( ConstantPool cp ) { + return cp.constantToString(class_index, Constants.CONSTANT_Class); + } + + + /** + * @param name_and_type_index points to Constant_NameAndType + */ + public final void setNameAndTypeIndex( int name_and_type_index ) { + this.name_and_type_index = name_and_type_index; + } + + + /** + * @return String representation. + */ + public final String toString() { + return super.toString() + "(class_index = " + class_index + ", name_and_type_index = " + + name_and_type_index + ")"; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantClass.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantClass.java index aa67cad8..b951e057 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantClass.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantClass.java @@ -1,129 +1,129 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from the abstract - * Constant class - * and represents a reference to a (external) class. - * - * @version $Id: ConstantClass.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantClass extends Constant implements ConstantObject { - - private int name_index; // Identical to ConstantString except for the name - - - /** - * Initialize from another object. - */ - public ConstantClass(ConstantClass c) { - this(c.getNameIndex()); - } - - - /** - * Initialize instance from file data. - * - * @param file Input stream - * @throws IOException - */ - ConstantClass(DataInputStream file) throws IOException { - this(file.readUnsignedShort()); - } - - - /** - * @param name_index Name index in constant pool. Should refer to a - * ConstantUtf8. - */ - public ConstantClass(int name_index) { - super(Constants.CONSTANT_Class); - this.name_index = name_index; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitConstantClass(this); - } - - - /** - * Dump constant class to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeByte(tag); - file.writeShort(name_index); - } - - - /** - * @return Name index in constant pool of class name. - */ - public final int getNameIndex() { - return name_index; - } - - - /** - * @param name_index the name index in the constant pool of this Constant Class - */ - public final void setNameIndex( int name_index ) { - this.name_index = name_index; - } - - - /** @return String object - */ - public Object getConstantValue( ConstantPool cp ) { - Constant c = cp.getConstant(name_index, Constants.CONSTANT_Utf8); - return ((ConstantUtf8) c).getBytes(); - } - - - /** @return dereferenced string - */ - public String getBytes( ConstantPool cp ) { - return (String) getConstantValue(cp); - } - - - /** - * @return String representation. - */ - public final String toString() { - return super.toString() + "(name_index = " + name_index + ")"; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from the abstract + * Constant class + * and represents a reference to a (external) class. + * + * @version $Id: ConstantClass.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Constant + */ +public final class ConstantClass extends Constant implements ConstantObject { + + private int name_index; // Identical to ConstantString except for the name + + + /** + * Initialize from another object. + */ + public ConstantClass(ConstantClass c) { + this(c.getNameIndex()); + } + + + /** + * Initialize instance from file data. + * + * @param file Input stream + * @throws IOException + */ + ConstantClass(DataInputStream file) throws IOException { + this(file.readUnsignedShort()); + } + + + /** + * @param name_index Name index in constant pool. Should refer to a + * ConstantUtf8. + */ + public ConstantClass(int name_index) { + super(Constants.CONSTANT_Class); + this.name_index = name_index; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitConstantClass(this); + } + + + /** + * Dump constant class to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeByte(tag); + file.writeShort(name_index); + } + + + /** + * @return Name index in constant pool of class name. + */ + public final int getNameIndex() { + return name_index; + } + + + /** + * @param name_index the name index in the constant pool of this Constant Class + */ + public final void setNameIndex( int name_index ) { + this.name_index = name_index; + } + + + /** @return String object + */ + public Object getConstantValue( ConstantPool cp ) { + Constant c = cp.getConstant(name_index, Constants.CONSTANT_Utf8); + return ((ConstantUtf8) c).getBytes(); + } + + + /** @return dereferenced string + */ + public String getBytes( ConstantPool cp ) { + return (String) getConstantValue(cp); + } + + + /** + * @return String representation. + */ + public final String toString() { + return super.toString() + "(name_index = " + name_index + ")"; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantDouble.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantDouble.java index 831ca968..c781c4ca 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantDouble.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantDouble.java @@ -1,120 +1,120 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from the abstract - * Constant class - * and represents a reference to a Double object. - * - * @version $Id: ConstantDouble.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantDouble extends Constant implements ConstantObject { - - private double bytes; - - - /** - * @param bytes Data - */ - public ConstantDouble(double bytes) { - super(Constants.CONSTANT_Double); - this.bytes = bytes; - } - - - /** - * Initialize from another object. - */ - public ConstantDouble(ConstantDouble c) { - this(c.getBytes()); - } - - - /** - * Initialize instance from file data. - * - * @param file Input stream - * @throws IOException - */ - ConstantDouble(DataInputStream file) throws IOException { - this(file.readDouble()); - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitConstantDouble(this); - } - - - /** - * Dump constant double to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeByte(tag); - file.writeDouble(bytes); - } - - - /** - * @return data, i.e., 8 bytes. - */ - public final double getBytes() { - return bytes; - } - - - /** - * @param bytes the raw bytes that represent the double value - */ - public final void setBytes( double bytes ) { - this.bytes = bytes; - } - - - /** - * @return String representation. - */ - public final String toString() { - return super.toString() + "(bytes = " + bytes + ")"; - } - - - /** @return Double object - */ - public Object getConstantValue( ConstantPool cp ) { - return new Double(bytes); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from the abstract + * Constant class + * and represents a reference to a Double object. + * + * @version $Id: ConstantDouble.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Constant + */ +public final class ConstantDouble extends Constant implements ConstantObject { + + private double bytes; + + + /** + * @param bytes Data + */ + public ConstantDouble(double bytes) { + super(Constants.CONSTANT_Double); + this.bytes = bytes; + } + + + /** + * Initialize from another object. + */ + public ConstantDouble(ConstantDouble c) { + this(c.getBytes()); + } + + + /** + * Initialize instance from file data. + * + * @param file Input stream + * @throws IOException + */ + ConstantDouble(DataInputStream file) throws IOException { + this(file.readDouble()); + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitConstantDouble(this); + } + + + /** + * Dump constant double to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeByte(tag); + file.writeDouble(bytes); + } + + + /** + * @return data, i.e., 8 bytes. + */ + public final double getBytes() { + return bytes; + } + + + /** + * @param bytes the raw bytes that represent the double value + */ + public final void setBytes( double bytes ) { + this.bytes = bytes; + } + + + /** + * @return String representation. + */ + public final String toString() { + return super.toString() + "(bytes = " + bytes + ")"; + } + + + /** @return Double object + */ + public Object getConstantValue( ConstantPool cp ) { + return new Double(bytes); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantFieldref.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantFieldref.java index d06a59af..32ee762b 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantFieldref.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantFieldref.java @@ -1,70 +1,70 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class represents a constant pool reference to a field. - * - * @version $Id: ConstantFieldref.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class ConstantFieldref extends ConstantCP { - - /** - * Initialize from another object. - */ - public ConstantFieldref(ConstantFieldref c) { - super(Constants.CONSTANT_Fieldref, c.getClassIndex(), c.getNameAndTypeIndex()); - } - - - /** - * Initialize instance from file data. - * - * @param file input stream - * @throws IOException - */ - ConstantFieldref(DataInputStream file) throws IOException { - super(Constants.CONSTANT_Fieldref, file); - } - - - /** - * @param class_index Reference to the class containing the Field - * @param name_and_type_index and the Field signature - */ - public ConstantFieldref(int class_index, int name_and_type_index) { - super(Constants.CONSTANT_Fieldref, class_index, name_and_type_index); - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of Fields, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitConstantFieldref(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class represents a constant pool reference to a field. + * + * @version $Id: ConstantFieldref.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public final class ConstantFieldref extends ConstantCP { + + /** + * Initialize from another object. + */ + public ConstantFieldref(ConstantFieldref c) { + super(Constants.CONSTANT_Fieldref, c.getClassIndex(), c.getNameAndTypeIndex()); + } + + + /** + * Initialize instance from file data. + * + * @param file input stream + * @throws IOException + */ + ConstantFieldref(DataInputStream file) throws IOException { + super(Constants.CONSTANT_Fieldref, file); + } + + + /** + * @param class_index Reference to the class containing the Field + * @param name_and_type_index and the Field signature + */ + public ConstantFieldref(int class_index, int name_and_type_index) { + super(Constants.CONSTANT_Fieldref, class_index, name_and_type_index); + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of Fields, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitConstantFieldref(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantFloat.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantFloat.java index 023ff4c0..89864027 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantFloat.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantFloat.java @@ -1,121 +1,121 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from the abstract - * Constant class - * and represents a reference to a float object. - * - * @version $Id: ConstantFloat.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantFloat extends Constant implements ConstantObject { - - private float bytes; - - - /** - * @param bytes Data - */ - public ConstantFloat(float bytes) { - super(Constants.CONSTANT_Float); - this.bytes = bytes; - } - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public ConstantFloat(ConstantFloat c) { - this(c.getBytes()); - } - - - /** - * Initialize instance from file data. - * - * @param file Input stream - * @throws IOException - */ - ConstantFloat(DataInputStream file) throws IOException { - this(file.readFloat()); - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitConstantFloat(this); - } - - - /** - * Dump constant float to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeByte(tag); - file.writeFloat(bytes); - } - - - /** - * @return data, i.e., 4 bytes. - */ - public final float getBytes() { - return bytes; - } - - - /** - * @param bytes the raw bytes that represent this float - */ - public final void setBytes( float bytes ) { - this.bytes = bytes; - } - - - /** - * @return String representation. - */ - public final String toString() { - return super.toString() + "(bytes = " + bytes + ")"; - } - - - /** @return Float object - */ - public Object getConstantValue( ConstantPool cp ) { - return new Float(bytes); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from the abstract + * Constant class + * and represents a reference to a float object. + * + * @version $Id: ConstantFloat.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Constant + */ +public final class ConstantFloat extends Constant implements ConstantObject { + + private float bytes; + + + /** + * @param bytes Data + */ + public ConstantFloat(float bytes) { + super(Constants.CONSTANT_Float); + this.bytes = bytes; + } + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use clone() for a physical copy. + */ + public ConstantFloat(ConstantFloat c) { + this(c.getBytes()); + } + + + /** + * Initialize instance from file data. + * + * @param file Input stream + * @throws IOException + */ + ConstantFloat(DataInputStream file) throws IOException { + this(file.readFloat()); + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitConstantFloat(this); + } + + + /** + * Dump constant float to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeByte(tag); + file.writeFloat(bytes); + } + + + /** + * @return data, i.e., 4 bytes. + */ + public final float getBytes() { + return bytes; + } + + + /** + * @param bytes the raw bytes that represent this float + */ + public final void setBytes( float bytes ) { + this.bytes = bytes; + } + + + /** + * @return String representation. + */ + public final String toString() { + return super.toString() + "(bytes = " + bytes + ")"; + } + + + /** @return Float object + */ + public Object getConstantValue( ConstantPool cp ) { + return new Float(bytes); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantInteger.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantInteger.java index b4b8c347..158487ef 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantInteger.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantInteger.java @@ -1,120 +1,120 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from the abstract - * Constant class - * and represents a reference to an int object. - * - * @version $Id: ConstantInteger.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantInteger extends Constant implements ConstantObject { - - private int bytes; - - - /** - * @param bytes Data - */ - public ConstantInteger(int bytes) { - super(Constants.CONSTANT_Integer); - this.bytes = bytes; - } - - - /** - * Initialize from another object. - */ - public ConstantInteger(ConstantInteger c) { - this(c.getBytes()); - } - - - /** - * Initialize instance from file data. - * - * @param file Input stream - * @throws IOException - */ - ConstantInteger(DataInputStream file) throws IOException { - this(file.readInt()); - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitConstantInteger(this); - } - - - /** - * Dump constant integer to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeByte(tag); - file.writeInt(bytes); - } - - - /** - * @return data, i.e., 4 bytes. - */ - public final int getBytes() { - return bytes; - } - - - /** - * @param bytes the raw bytes that represent this integer - */ - public final void setBytes( int bytes ) { - this.bytes = bytes; - } - - - /** - * @return String representation. - */ - public final String toString() { - return super.toString() + "(bytes = " + bytes + ")"; - } - - - /** @return Integer object - */ - public Object getConstantValue( ConstantPool cp ) { - return new Integer(bytes); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from the abstract + * Constant class + * and represents a reference to an int object. + * + * @version $Id: ConstantInteger.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Constant + */ +public final class ConstantInteger extends Constant implements ConstantObject { + + private int bytes; + + + /** + * @param bytes Data + */ + public ConstantInteger(int bytes) { + super(Constants.CONSTANT_Integer); + this.bytes = bytes; + } + + + /** + * Initialize from another object. + */ + public ConstantInteger(ConstantInteger c) { + this(c.getBytes()); + } + + + /** + * Initialize instance from file data. + * + * @param file Input stream + * @throws IOException + */ + ConstantInteger(DataInputStream file) throws IOException { + this(file.readInt()); + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitConstantInteger(this); + } + + + /** + * Dump constant integer to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeByte(tag); + file.writeInt(bytes); + } + + + /** + * @return data, i.e., 4 bytes. + */ + public final int getBytes() { + return bytes; + } + + + /** + * @param bytes the raw bytes that represent this integer + */ + public final void setBytes( int bytes ) { + this.bytes = bytes; + } + + + /** + * @return String representation. + */ + public final String toString() { + return super.toString() + "(bytes = " + bytes + ")"; + } + + + /** @return Integer object + */ + public Object getConstantValue( ConstantPool cp ) { + return new Integer(bytes); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantInterfaceMethodref.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantInterfaceMethodref.java index 2a6d4373..fbcb5099 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantInterfaceMethodref.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantInterfaceMethodref.java @@ -1,70 +1,70 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class represents a constant pool reference to an interface method. - * - * @version $Id: ConstantInterfaceMethodref.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class ConstantInterfaceMethodref extends ConstantCP { - - /** - * Initialize from another object. - */ - public ConstantInterfaceMethodref(ConstantInterfaceMethodref c) { - super(Constants.CONSTANT_InterfaceMethodref, c.getClassIndex(), c.getNameAndTypeIndex()); - } - - - /** - * Initialize instance from file data. - * - * @param file input stream - * @throws IOException - */ - ConstantInterfaceMethodref(DataInputStream file) throws IOException { - super(Constants.CONSTANT_InterfaceMethodref, file); - } - - - /** - * @param class_index Reference to the class containing the method - * @param name_and_type_index and the method signature - */ - public ConstantInterfaceMethodref(int class_index, int name_and_type_index) { - super(Constants.CONSTANT_InterfaceMethodref, class_index, name_and_type_index); - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitConstantInterfaceMethodref(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class represents a constant pool reference to an interface method. + * + * @version $Id: ConstantInterfaceMethodref.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public final class ConstantInterfaceMethodref extends ConstantCP { + + /** + * Initialize from another object. + */ + public ConstantInterfaceMethodref(ConstantInterfaceMethodref c) { + super(Constants.CONSTANT_InterfaceMethodref, c.getClassIndex(), c.getNameAndTypeIndex()); + } + + + /** + * Initialize instance from file data. + * + * @param file input stream + * @throws IOException + */ + ConstantInterfaceMethodref(DataInputStream file) throws IOException { + super(Constants.CONSTANT_InterfaceMethodref, file); + } + + + /** + * @param class_index Reference to the class containing the method + * @param name_and_type_index and the method signature + */ + public ConstantInterfaceMethodref(int class_index, int name_and_type_index) { + super(Constants.CONSTANT_InterfaceMethodref, class_index, name_and_type_index); + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitConstantInterfaceMethodref(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantLong.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantLong.java index b950c636..5398c889 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantLong.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantLong.java @@ -1,120 +1,120 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from the abstract - * Constant class - * and represents a reference to a long object. - * - * @version $Id: ConstantLong.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantLong extends Constant implements ConstantObject { - - private long bytes; - - - /** - * @param bytes Data - */ - public ConstantLong(long bytes) { - super(Constants.CONSTANT_Long); - this.bytes = bytes; - } - - - /** - * Initialize from another object. - */ - public ConstantLong(ConstantLong c) { - this(c.getBytes()); - } - - - /** - * Initialize instance from file data. - * - * @param file Input stream - * @throws IOException - */ - ConstantLong(DataInputStream file) throws IOException { - this(file.readLong()); - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitConstantLong(this); - } - - - /** - * Dump constant long to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeByte(tag); - file.writeLong(bytes); - } - - - /** - * @return data, i.e., 8 bytes. - */ - public final long getBytes() { - return bytes; - } - - - /** - * @param bytes thr raw bytes that represent this long - */ - public final void setBytes( long bytes ) { - this.bytes = bytes; - } - - - /** - * @return String representation. - */ - public final String toString() { - return super.toString() + "(bytes = " + bytes + ")"; - } - - - /** @return Long object - */ - public Object getConstantValue( ConstantPool cp ) { - return new Long(bytes); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from the abstract + * Constant class + * and represents a reference to a long object. + * + * @version $Id: ConstantLong.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Constant + */ +public final class ConstantLong extends Constant implements ConstantObject { + + private long bytes; + + + /** + * @param bytes Data + */ + public ConstantLong(long bytes) { + super(Constants.CONSTANT_Long); + this.bytes = bytes; + } + + + /** + * Initialize from another object. + */ + public ConstantLong(ConstantLong c) { + this(c.getBytes()); + } + + + /** + * Initialize instance from file data. + * + * @param file Input stream + * @throws IOException + */ + ConstantLong(DataInputStream file) throws IOException { + this(file.readLong()); + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitConstantLong(this); + } + + + /** + * Dump constant long to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeByte(tag); + file.writeLong(bytes); + } + + + /** + * @return data, i.e., 8 bytes. + */ + public final long getBytes() { + return bytes; + } + + + /** + * @param bytes thr raw bytes that represent this long + */ + public final void setBytes( long bytes ) { + this.bytes = bytes; + } + + + /** + * @return String representation. + */ + public final String toString() { + return super.toString() + "(bytes = " + bytes + ")"; + } + + + /** @return Long object + */ + public Object getConstantValue( ConstantPool cp ) { + return new Long(bytes); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantMethodref.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantMethodref.java index 2bbc76db..c11827a1 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantMethodref.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantMethodref.java @@ -1,70 +1,70 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class represents a constant pool reference to a method. - * - * @version $Id: ConstantMethodref.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class ConstantMethodref extends ConstantCP { - - /** - * Initialize from another object. - */ - public ConstantMethodref(ConstantMethodref c) { - super(Constants.CONSTANT_Methodref, c.getClassIndex(), c.getNameAndTypeIndex()); - } - - - /** - * Initialize instance from file data. - * - * @param file input stream - * @throws IOException - */ - ConstantMethodref(DataInputStream file) throws IOException { - super(Constants.CONSTANT_Methodref, file); - } - - - /** - * @param class_index Reference to the class containing the method - * @param name_and_type_index and the method signature - */ - public ConstantMethodref(int class_index, int name_and_type_index) { - super(Constants.CONSTANT_Methodref, class_index, name_and_type_index); - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitConstantMethodref(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class represents a constant pool reference to a method. + * + * @version $Id: ConstantMethodref.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public final class ConstantMethodref extends ConstantCP { + + /** + * Initialize from another object. + */ + public ConstantMethodref(ConstantMethodref c) { + super(Constants.CONSTANT_Methodref, c.getClassIndex(), c.getNameAndTypeIndex()); + } + + + /** + * Initialize instance from file data. + * + * @param file input stream + * @throws IOException + */ + ConstantMethodref(DataInputStream file) throws IOException { + super(Constants.CONSTANT_Methodref, file); + } + + + /** + * @param class_index Reference to the class containing the method + * @param name_and_type_index and the method signature + */ + public ConstantMethodref(int class_index, int name_and_type_index) { + super(Constants.CONSTANT_Methodref, class_index, name_and_type_index); + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitConstantMethodref(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantNameAndType.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantNameAndType.java index 2c6846f1..f6119204 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantNameAndType.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantNameAndType.java @@ -1,149 +1,149 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from the abstract - * Constant class - * and represents a reference to the name and signature - * of a field or method. - * - * @version $Id: ConstantNameAndType.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantNameAndType extends Constant { - - private int name_index; // Name of field/method - private int signature_index; // and its signature. - - - /** - * Initialize from another object. - */ - public ConstantNameAndType(ConstantNameAndType c) { - this(c.getNameIndex(), c.getSignatureIndex()); - } - - - /** - * Initialize instance from file data. - * - * @param file Input stream - * @throws IOException - */ - ConstantNameAndType(DataInputStream file) throws IOException { - this(file.readUnsignedShort(), file.readUnsignedShort()); - } - - - /** - * @param name_index Name of field/method - * @param signature_index and its signature - */ - public ConstantNameAndType(int name_index, int signature_index) { - super(Constants.CONSTANT_NameAndType); - this.name_index = name_index; - this.signature_index = signature_index; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitConstantNameAndType(this); - } - - - /** - * Dump name and signature index to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeByte(tag); - file.writeShort(name_index); - file.writeShort(signature_index); - } - - - /** - * @return Name index in constant pool of field/method name. - */ - public final int getNameIndex() { - return name_index; - } - - - /** @return name - */ - public final String getName( ConstantPool cp ) { - return cp.constantToString(getNameIndex(), Constants.CONSTANT_Utf8); - } - - - /** - * @return Index in constant pool of field/method signature. - */ - public final int getSignatureIndex() { - return signature_index; - } - - - /** @return signature - */ - public final String getSignature( ConstantPool cp ) { - return cp.constantToString(getSignatureIndex(), Constants.CONSTANT_Utf8); - } - - - /** - * @param name_index the name index of this constant - */ - public final void setNameIndex( int name_index ) { - this.name_index = name_index; - } - - - /** - * @param signature_index the signature index in the constant pool of this type - */ - public final void setSignatureIndex( int signature_index ) { - this.signature_index = signature_index; - } - - - /** - * @return String representation - */ - public final String toString() { - return super.toString() + "(name_index = " + name_index + ", signature_index = " - + signature_index + ")"; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from the abstract + * Constant class + * and represents a reference to the name and signature + * of a field or method. + * + * @version $Id: ConstantNameAndType.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Constant + */ +public final class ConstantNameAndType extends Constant { + + private int name_index; // Name of field/method + private int signature_index; // and its signature. + + + /** + * Initialize from another object. + */ + public ConstantNameAndType(ConstantNameAndType c) { + this(c.getNameIndex(), c.getSignatureIndex()); + } + + + /** + * Initialize instance from file data. + * + * @param file Input stream + * @throws IOException + */ + ConstantNameAndType(DataInputStream file) throws IOException { + this(file.readUnsignedShort(), file.readUnsignedShort()); + } + + + /** + * @param name_index Name of field/method + * @param signature_index and its signature + */ + public ConstantNameAndType(int name_index, int signature_index) { + super(Constants.CONSTANT_NameAndType); + this.name_index = name_index; + this.signature_index = signature_index; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitConstantNameAndType(this); + } + + + /** + * Dump name and signature index to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeByte(tag); + file.writeShort(name_index); + file.writeShort(signature_index); + } + + + /** + * @return Name index in constant pool of field/method name. + */ + public final int getNameIndex() { + return name_index; + } + + + /** @return name + */ + public final String getName( ConstantPool cp ) { + return cp.constantToString(getNameIndex(), Constants.CONSTANT_Utf8); + } + + + /** + * @return Index in constant pool of field/method signature. + */ + public final int getSignatureIndex() { + return signature_index; + } + + + /** @return signature + */ + public final String getSignature( ConstantPool cp ) { + return cp.constantToString(getSignatureIndex(), Constants.CONSTANT_Utf8); + } + + + /** + * @param name_index the name index of this constant + */ + public final void setNameIndex( int name_index ) { + this.name_index = name_index; + } + + + /** + * @param signature_index the signature index in the constant pool of this type + */ + public final void setSignatureIndex( int signature_index ) { + this.signature_index = signature_index; + } + + + /** + * @return String representation + */ + public final String toString() { + return super.toString() + "(name_index = " + name_index + ", signature_index = " + + signature_index + ")"; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantObject.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantObject.java index 10d611dd..d4843937 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantObject.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantObject.java @@ -1,32 +1,32 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -/** - * This interface denotes those constants that have a "natural" value, - * such as ConstantLong, ConstantString, etc.. - * - * @version $Id: ConstantObject.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public interface ConstantObject { - - /** @return object representing the constant, e.g., Long for ConstantLong - */ - public abstract Object getConstantValue( ConstantPool cp ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +/** + * This interface denotes those constants that have a "natural" value, + * such as ConstantLong, ConstantString, etc.. + * + * @version $Id: ConstantObject.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Constant + */ +public interface ConstantObject { + + /** @return object representing the constant, e.g., Long for ConstantLong + */ + public abstract Object getConstantValue( ConstantPool cp ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantPool.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantPool.java index 31216424..235f70ed 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantPool.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantPool.java @@ -1,354 +1,354 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class represents the constant pool, i.e., a table of constants, of - * a parsed classfile. It may contain null references, due to the JVM - * specification that skips an entry after an 8-byte constant (double, - * long) entry. Those interested in generating constant pools - * programatically should see - * ConstantPoolGen. - - * @version $Id: ConstantPool.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @see Constant - * @see org.apache.bcel5_2_0.generic.ConstantPoolGen - * @author M. Dahm - */ -public class ConstantPool implements Cloneable, Node, Serializable { - - private int constant_pool_count; - private Constant[] constant_pool; - - - /** - * @param constant_pool Array of constants - */ - public ConstantPool(Constant[] constant_pool) { - setConstantPool(constant_pool); - } - - - /** - * Read constants from given file stream. - * - * @param file Input stream - * @throws IOException - * @throws ClassFormatException - */ - ConstantPool(DataInputStream file) throws IOException, ClassFormatException { - byte tag; - constant_pool_count = file.readUnsignedShort(); - constant_pool = new Constant[constant_pool_count]; - /* constant_pool[0] is unused by the compiler and may be used freely - * by the implementation. - */ - for (int i = 1; i < constant_pool_count; i++) { - constant_pool[i] = Constant.readConstant(file); - /* Quote from the JVM specification: - * "All eight byte constants take up two spots in the constant pool. - * If this is the n'th byte in the constant pool, then the next item - * will be numbered n+2" - * - * Thus we have to increment the index counter. - */ - tag = constant_pool[i].getTag(); - if ((tag == Constants.CONSTANT_Double) || (tag == Constants.CONSTANT_Long)) { - i++; - } - } - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitConstantPool(this); - } - - - /** - * Resolve constant to a string representation. - * - * @param c Constant to be printed - * @return String representation - */ - public String constantToString( Constant c ) throws ClassFormatException { - String str; - int i; - byte tag = c.getTag(); - switch (tag) { - case Constants.CONSTANT_Class: - i = ((ConstantClass) c).getNameIndex(); - c = getConstant(i, Constants.CONSTANT_Utf8); - str = Utility.compactClassName(((ConstantUtf8) c).getBytes(), false); - break; - case Constants.CONSTANT_String: - i = ((ConstantString) c).getStringIndex(); - c = getConstant(i, Constants.CONSTANT_Utf8); - str = "\"" + escape(((ConstantUtf8) c).getBytes()) + "\""; - break; - case Constants.CONSTANT_Utf8: - str = ((ConstantUtf8) c).getBytes(); - break; - case Constants.CONSTANT_Double: - str = "" + ((ConstantDouble) c).getBytes(); - break; - case Constants.CONSTANT_Float: - str = "" + ((ConstantFloat) c).getBytes(); - break; - case Constants.CONSTANT_Long: - str = "" + ((ConstantLong) c).getBytes(); - break; - case Constants.CONSTANT_Integer: - str = "" + ((ConstantInteger) c).getBytes(); - break; - case Constants.CONSTANT_NameAndType: - str = (constantToString(((ConstantNameAndType) c).getNameIndex(), - Constants.CONSTANT_Utf8) - + " " + constantToString(((ConstantNameAndType) c).getSignatureIndex(), - Constants.CONSTANT_Utf8)); - break; - case Constants.CONSTANT_InterfaceMethodref: - case Constants.CONSTANT_Methodref: - case Constants.CONSTANT_Fieldref: - str = (constantToString(((ConstantCP) c).getClassIndex(), Constants.CONSTANT_Class) - + "." + constantToString(((ConstantCP) c).getNameAndTypeIndex(), - Constants.CONSTANT_NameAndType)); - break; - default: // Never reached - throw new RuntimeException("Unknown constant type " + tag); - } - return str; - } - - - private static final String escape( String str ) { - int len = str.length(); - StringBuilder buf = new StringBuilder(len + 5); - char[] ch = str.toCharArray(); - for (int i = 0; i < len; i++) { - switch (ch[i]) { - case '\n': - buf.append("\\n"); - break; - case '\r': - buf.append("\\r"); - break; - case '\t': - buf.append("\\t"); - break; - case '\b': - buf.append("\\b"); - break; - case '"': - buf.append("\\\""); - break; - default: - buf.append(ch[i]); - } - } - return buf.toString(); - } - - - /** - * Retrieve constant at `index' from constant pool and resolve it to - * a string representation. - * - * @param index of constant in constant pool - * @param tag expected type - * @return String representation - */ - public String constantToString( int index, byte tag ) throws ClassFormatException { - Constant c = getConstant(index, tag); - return constantToString(c); - } - - - /** - * Dump constant pool to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public void dump( DataOutputStream file ) throws IOException { - file.writeShort(constant_pool_count); - for (int i = 1; i < constant_pool_count; i++) { - if (constant_pool[i] != null) { - constant_pool[i].dump(file); - } - } - } - - - /** - * Get constant from constant pool. - * - * @param index Index in constant pool - * @return Constant value - * @see Constant - */ - public Constant getConstant( int index ) { - if (index >= constant_pool.length || index < 0) { - throw new ClassFormatException("Invalid constant pool reference: " + index - + ". Constant pool size is: " + constant_pool.length); - } - return constant_pool[index]; - } - - - /** - * Get constant from constant pool and check whether it has the - * expected type. - * - * @param index Index in constant pool - * @param tag Tag of expected constant, i.e., its type - * @return Constant value - * @see Constant - * @throws ClassFormatException - */ - public Constant getConstant( int index, byte tag ) throws ClassFormatException { - Constant c; - c = getConstant(index); - if (c == null) { - throw new ClassFormatException("Constant pool at index " + index + " is null."); - } - if (c.getTag() != tag) { - throw new ClassFormatException("Expected class `" + Constants.CONSTANT_NAMES[tag] - + "' at index " + index + " and got " + c); - } - return c; - } - - - /** - * @return Array of constants. - * @see Constant - */ - public Constant[] getConstantPool() { - return constant_pool; - } - - - /** - * Get string from constant pool and bypass the indirection of - * `ConstantClass' and `ConstantString' objects. I.e. these classes have - * an index field that points to another entry of the constant pool of - * type `ConstantUtf8' which contains the real data. - * - * @param index Index in constant pool - * @param tag Tag of expected constant, either ConstantClass or ConstantString - * @return Contents of string reference - * @see ConstantClass - * @see ConstantString - * @throws ClassFormatException - */ - public String getConstantString( int index, byte tag ) throws ClassFormatException { - Constant c; - int i; - c = getConstant(index, tag); - /* This switch() is not that elegant, since the two classes have the - * same contents, they just differ in the name of the index - * field variable. - * But we want to stick to the JVM naming conventions closely though - * we could have solved these more elegantly by using the same - * variable name or by subclassing. - */ - switch (tag) { - case Constants.CONSTANT_Class: - i = ((ConstantClass) c).getNameIndex(); - break; - case Constants.CONSTANT_String: - i = ((ConstantString) c).getStringIndex(); - break; - default: - throw new RuntimeException("getConstantString called with illegal tag " + tag); - } - // Finally get the string from the constant pool - c = getConstant(i, Constants.CONSTANT_Utf8); - return ((ConstantUtf8) c).getBytes(); - } - - - /** - * @return Length of constant pool. - */ - public int getLength() { - return constant_pool_count; - } - - - /** - * @param constant Constant to set - */ - public void setConstant( int index, Constant constant ) { - constant_pool[index] = constant; - } - - - /** - * @param constant_pool - */ - public void setConstantPool( Constant[] constant_pool ) { - this.constant_pool = constant_pool; - constant_pool_count = (constant_pool == null) ? 0 : constant_pool.length; - } - - - /** - * @return String representation. - */ - public String toString() { - StringBuilder buf = new StringBuilder(); - for (int i = 1; i < constant_pool_count; i++) { - buf.append(i).append(")").append(constant_pool[i]).append("\n"); - } - return buf.toString(); - } - - - /** - * @return deep copy of this constant pool - */ - public ConstantPool copy() { - ConstantPool c = null; - try { - c = (ConstantPool) clone(); - c.constant_pool = new Constant[constant_pool_count]; - for (int i = 1; i < constant_pool_count; i++) { - if (constant_pool[i] != null) { - c.constant_pool[i] = constant_pool[i].copy(); - } - } - } catch (CloneNotSupportedException e) { - } - return c; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.Serializable; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class represents the constant pool, i.e., a table of constants, of + * a parsed classfile. It may contain null references, due to the JVM + * specification that skips an entry after an 8-byte constant (double, + * long) entry. Those interested in generating constant pools + * programatically should see + * ConstantPoolGen. + + * @version $Id: ConstantPool.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @see Constant + * @see org.apache.bcel5_2_0.generic.ConstantPoolGen + * @author M. Dahm + */ +public class ConstantPool implements Cloneable, Node, Serializable { + + private int constant_pool_count; + private Constant[] constant_pool; + + + /** + * @param constant_pool Array of constants + */ + public ConstantPool(Constant[] constant_pool) { + setConstantPool(constant_pool); + } + + + /** + * Read constants from given file stream. + * + * @param file Input stream + * @throws IOException + * @throws ClassFormatException + */ + ConstantPool(DataInputStream file) throws IOException, ClassFormatException { + byte tag; + constant_pool_count = file.readUnsignedShort(); + constant_pool = new Constant[constant_pool_count]; + /* constant_pool[0] is unused by the compiler and may be used freely + * by the implementation. + */ + for (int i = 1; i < constant_pool_count; i++) { + constant_pool[i] = Constant.readConstant(file); + /* Quote from the JVM specification: + * "All eight byte constants take up two spots in the constant pool. + * If this is the n'th byte in the constant pool, then the next item + * will be numbered n+2" + * + * Thus we have to increment the index counter. + */ + tag = constant_pool[i].getTag(); + if ((tag == Constants.CONSTANT_Double) || (tag == Constants.CONSTANT_Long)) { + i++; + } + } + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitConstantPool(this); + } + + + /** + * Resolve constant to a string representation. + * + * @param c Constant to be printed + * @return String representation + */ + public String constantToString( Constant c ) throws ClassFormatException { + String str; + int i; + byte tag = c.getTag(); + switch (tag) { + case Constants.CONSTANT_Class: + i = ((ConstantClass) c).getNameIndex(); + c = getConstant(i, Constants.CONSTANT_Utf8); + str = Utility.compactClassName(((ConstantUtf8) c).getBytes(), false); + break; + case Constants.CONSTANT_String: + i = ((ConstantString) c).getStringIndex(); + c = getConstant(i, Constants.CONSTANT_Utf8); + str = "\"" + escape(((ConstantUtf8) c).getBytes()) + "\""; + break; + case Constants.CONSTANT_Utf8: + str = ((ConstantUtf8) c).getBytes(); + break; + case Constants.CONSTANT_Double: + str = "" + ((ConstantDouble) c).getBytes(); + break; + case Constants.CONSTANT_Float: + str = "" + ((ConstantFloat) c).getBytes(); + break; + case Constants.CONSTANT_Long: + str = "" + ((ConstantLong) c).getBytes(); + break; + case Constants.CONSTANT_Integer: + str = "" + ((ConstantInteger) c).getBytes(); + break; + case Constants.CONSTANT_NameAndType: + str = (constantToString(((ConstantNameAndType) c).getNameIndex(), + Constants.CONSTANT_Utf8) + + " " + constantToString(((ConstantNameAndType) c).getSignatureIndex(), + Constants.CONSTANT_Utf8)); + break; + case Constants.CONSTANT_InterfaceMethodref: + case Constants.CONSTANT_Methodref: + case Constants.CONSTANT_Fieldref: + str = (constantToString(((ConstantCP) c).getClassIndex(), Constants.CONSTANT_Class) + + "." + constantToString(((ConstantCP) c).getNameAndTypeIndex(), + Constants.CONSTANT_NameAndType)); + break; + default: // Never reached + throw new RuntimeException("Unknown constant type " + tag); + } + return str; + } + + + private static final String escape( String str ) { + int len = str.length(); + StringBuilder buf = new StringBuilder(len + 5); + char[] ch = str.toCharArray(); + for (int i = 0; i < len; i++) { + switch (ch[i]) { + case '\n': + buf.append("\\n"); + break; + case '\r': + buf.append("\\r"); + break; + case '\t': + buf.append("\\t"); + break; + case '\b': + buf.append("\\b"); + break; + case '"': + buf.append("\\\""); + break; + default: + buf.append(ch[i]); + } + } + return buf.toString(); + } + + + /** + * Retrieve constant at `index' from constant pool and resolve it to + * a string representation. + * + * @param index of constant in constant pool + * @param tag expected type + * @return String representation + */ + public String constantToString( int index, byte tag ) throws ClassFormatException { + Constant c = getConstant(index, tag); + return constantToString(c); + } + + + /** + * Dump constant pool to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public void dump( DataOutputStream file ) throws IOException { + file.writeShort(constant_pool_count); + for (int i = 1; i < constant_pool_count; i++) { + if (constant_pool[i] != null) { + constant_pool[i].dump(file); + } + } + } + + + /** + * Get constant from constant pool. + * + * @param index Index in constant pool + * @return Constant value + * @see Constant + */ + public Constant getConstant( int index ) { + if (index >= constant_pool.length || index < 0) { + throw new ClassFormatException("Invalid constant pool reference: " + index + + ". Constant pool size is: " + constant_pool.length); + } + return constant_pool[index]; + } + + + /** + * Get constant from constant pool and check whether it has the + * expected type. + * + * @param index Index in constant pool + * @param tag Tag of expected constant, i.e., its type + * @return Constant value + * @see Constant + * @throws ClassFormatException + */ + public Constant getConstant( int index, byte tag ) throws ClassFormatException { + Constant c; + c = getConstant(index); + if (c == null) { + throw new ClassFormatException("Constant pool at index " + index + " is null."); + } + if (c.getTag() != tag) { + throw new ClassFormatException("Expected class `" + Constants.CONSTANT_NAMES[tag] + + "' at index " + index + " and got " + c); + } + return c; + } + + + /** + * @return Array of constants. + * @see Constant + */ + public Constant[] getConstantPool() { + return constant_pool; + } + + + /** + * Get string from constant pool and bypass the indirection of + * `ConstantClass' and `ConstantString' objects. I.e. these classes have + * an index field that points to another entry of the constant pool of + * type `ConstantUtf8' which contains the real data. + * + * @param index Index in constant pool + * @param tag Tag of expected constant, either ConstantClass or ConstantString + * @return Contents of string reference + * @see ConstantClass + * @see ConstantString + * @throws ClassFormatException + */ + public String getConstantString( int index, byte tag ) throws ClassFormatException { + Constant c; + int i; + c = getConstant(index, tag); + /* This switch() is not that elegant, since the two classes have the + * same contents, they just differ in the name of the index + * field variable. + * But we want to stick to the JVM naming conventions closely though + * we could have solved these more elegantly by using the same + * variable name or by subclassing. + */ + switch (tag) { + case Constants.CONSTANT_Class: + i = ((ConstantClass) c).getNameIndex(); + break; + case Constants.CONSTANT_String: + i = ((ConstantString) c).getStringIndex(); + break; + default: + throw new RuntimeException("getConstantString called with illegal tag " + tag); + } + // Finally get the string from the constant pool + c = getConstant(i, Constants.CONSTANT_Utf8); + return ((ConstantUtf8) c).getBytes(); + } + + + /** + * @return Length of constant pool. + */ + public int getLength() { + return constant_pool_count; + } + + + /** + * @param constant Constant to set + */ + public void setConstant( int index, Constant constant ) { + constant_pool[index] = constant; + } + + + /** + * @param constant_pool + */ + public void setConstantPool( Constant[] constant_pool ) { + this.constant_pool = constant_pool; + constant_pool_count = (constant_pool == null) ? 0 : constant_pool.length; + } + + + /** + * @return String representation. + */ + public String toString() { + StringBuilder buf = new StringBuilder(); + for (int i = 1; i < constant_pool_count; i++) { + buf.append(i).append(")").append(constant_pool[i]).append("\n"); + } + return buf.toString(); + } + + + /** + * @return deep copy of this constant pool + */ + public ConstantPool copy() { + ConstantPool c = null; + try { + c = (ConstantPool) clone(); + c.constant_pool = new Constant[constant_pool_count]; + for (int i = 1; i < constant_pool_count; i++) { + if (constant_pool[i] != null) { + c.constant_pool[i] = constant_pool[i].copy(); + } + } + } catch (CloneNotSupportedException e) { + } + return c; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantString.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantString.java index be5cbdbd..38f6ce1f 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantString.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantString.java @@ -1,128 +1,128 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from the abstract - * Constant class - * and represents a reference to a String object. - * - * @version $Id: ConstantString.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantString extends Constant implements ConstantObject { - - private int string_index; // Identical to ConstantClass except for this name - - - /** - * Initialize from another object. - */ - public ConstantString(ConstantString c) { - this(c.getStringIndex()); - } - - - /** - * Initialize instance from file data. - * - * @param file Input stream - * @throws IOException - */ - ConstantString(DataInputStream file) throws IOException { - this(file.readUnsignedShort()); - } - - - /** - * @param string_index Index of Constant_Utf8 in constant pool - */ - public ConstantString(int string_index) { - super(Constants.CONSTANT_String); - this.string_index = string_index; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitConstantString(this); - } - - - /** - * Dump constant field reference to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeByte(tag); - file.writeShort(string_index); - } - - - /** - * @return Index in constant pool of the string (ConstantUtf8). - */ - public final int getStringIndex() { - return string_index; - } - - - /** - * @param string_index the index into the constant of the string value - */ - public final void setStringIndex( int string_index ) { - this.string_index = string_index; - } - - - /** - * @return String representation. - */ - public final String toString() { - return super.toString() + "(string_index = " + string_index + ")"; - } - - - /** @return String object - */ - public Object getConstantValue( ConstantPool cp ) { - Constant c = cp.getConstant(string_index, Constants.CONSTANT_Utf8); - return ((ConstantUtf8) c).getBytes(); - } - - - /** @return dereferenced string - */ - public String getBytes( ConstantPool cp ) { - return (String) getConstantValue(cp); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from the abstract + * Constant class + * and represents a reference to a String object. + * + * @version $Id: ConstantString.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Constant + */ +public final class ConstantString extends Constant implements ConstantObject { + + private int string_index; // Identical to ConstantClass except for this name + + + /** + * Initialize from another object. + */ + public ConstantString(ConstantString c) { + this(c.getStringIndex()); + } + + + /** + * Initialize instance from file data. + * + * @param file Input stream + * @throws IOException + */ + ConstantString(DataInputStream file) throws IOException { + this(file.readUnsignedShort()); + } + + + /** + * @param string_index Index of Constant_Utf8 in constant pool + */ + public ConstantString(int string_index) { + super(Constants.CONSTANT_String); + this.string_index = string_index; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitConstantString(this); + } + + + /** + * Dump constant field reference to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeByte(tag); + file.writeShort(string_index); + } + + + /** + * @return Index in constant pool of the string (ConstantUtf8). + */ + public final int getStringIndex() { + return string_index; + } + + + /** + * @param string_index the index into the constant of the string value + */ + public final void setStringIndex( int string_index ) { + this.string_index = string_index; + } + + + /** + * @return String representation. + */ + public final String toString() { + return super.toString() + "(string_index = " + string_index + ")"; + } + + + /** @return String object + */ + public Object getConstantValue( ConstantPool cp ) { + Constant c = cp.getConstant(string_index, Constants.CONSTANT_Utf8); + return ((ConstantUtf8) c).getBytes(); + } + + + /** @return dereferenced string + */ + public String getBytes( ConstantPool cp ) { + return (String) getConstantValue(cp); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantUtf8.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantUtf8.java index fcd833ec..eecee207 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantUtf8.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantUtf8.java @@ -1,117 +1,117 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from the abstract - * Constant class - * and represents a reference to a Utf8 encoded string. - * - * @version $Id: ConstantUtf8.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantUtf8 extends Constant { - - private String bytes; - - - /** - * Initialize from another object. - */ - public ConstantUtf8(ConstantUtf8 c) { - this(c.getBytes()); - } - - - /** - * Initialize instance from file data. - * - * @param file Input stream - * @throws IOException - */ - ConstantUtf8(DataInputStream file) throws IOException { - super(Constants.CONSTANT_Utf8); - bytes = file.readUTF(); - } - - - /** - * @param bytes Data - */ - public ConstantUtf8(String bytes) { - super(Constants.CONSTANT_Utf8); - if (bytes == null) { - throw new IllegalArgumentException("bytes must not be null!"); - } - this.bytes = bytes; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitConstantUtf8(this); - } - - - /** - * Dump String in Utf8 format to file stream. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeByte(tag); - file.writeUTF(bytes); - } - - - /** - * @return Data converted to string. - */ - public final String getBytes() { - return bytes; - } - - - /** - * @param bytes the raw bytes of this Utf-8 - */ - public final void setBytes( String bytes ) { - this.bytes = bytes; - } - - - /** - * @return String representation - */ - public final String toString() { - return super.toString() + "(\"" + Utility.replace(bytes, "\n", "\\n") + "\")"; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from the abstract + * Constant class + * and represents a reference to a Utf8 encoded string. + * + * @version $Id: ConstantUtf8.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Constant + */ +public final class ConstantUtf8 extends Constant { + + private String bytes; + + + /** + * Initialize from another object. + */ + public ConstantUtf8(ConstantUtf8 c) { + this(c.getBytes()); + } + + + /** + * Initialize instance from file data. + * + * @param file Input stream + * @throws IOException + */ + ConstantUtf8(DataInputStream file) throws IOException { + super(Constants.CONSTANT_Utf8); + bytes = file.readUTF(); + } + + + /** + * @param bytes Data + */ + public ConstantUtf8(String bytes) { + super(Constants.CONSTANT_Utf8); + if (bytes == null) { + throw new IllegalArgumentException("bytes must not be null!"); + } + this.bytes = bytes; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitConstantUtf8(this); + } + + + /** + * Dump String in Utf8 format to file stream. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeByte(tag); + file.writeUTF(bytes); + } + + + /** + * @return Data converted to string. + */ + public final String getBytes() { + return bytes; + } + + + /** + * @param bytes the raw bytes of this Utf-8 + */ + public final void setBytes( String bytes ) { + this.bytes = bytes; + } + + + /** + * @return String representation + */ + public final String toString() { + return super.toString() + "(\"" + Utility.replace(bytes, "\n", "\\n") + "\")"; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantValue.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantValue.java index 671d9b44..a3948fad 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantValue.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ConstantValue.java @@ -1,156 +1,156 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from Attribute and represents a constant - * value, i.e., a default value for initializing a class field. - * This class is instantiated by the Attribute.readAttribute() method. - * - * @version $Id: ConstantValue.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - */ -public final class ConstantValue extends Attribute { - - private int constantvalue_index; - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public ConstantValue(ConstantValue c) { - this(c.getNameIndex(), c.getLength(), c.getConstantValueIndex(), c.getConstantPool()); - } - - - /** - * Construct object from file stream. - * @param name_index Name index in constant pool - * @param length Content length in bytes - * @param file Input stream - * @param constant_pool Array of constants - * @throws IOException - */ - ConstantValue(int name_index, int length, DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(name_index, length, file.readUnsignedShort(), constant_pool); - } - - - /** - * @param name_index Name index in constant pool - * @param length Content length in bytes - * @param constantvalue_index Index in constant pool - * @param constant_pool Array of constants - */ - public ConstantValue(int name_index, int length, int constantvalue_index, - ConstantPool constant_pool) { - super(Constants.ATTR_CONSTANT_VALUE, name_index, length, constant_pool); - this.constantvalue_index = constantvalue_index; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitConstantValue(this); - } - - - /** - * Dump constant value attribute to file stream on binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - super.dump(file); - file.writeShort(constantvalue_index); - } - - - /** - * @return Index in constant pool of constant value. - */ - public final int getConstantValueIndex() { - return constantvalue_index; - } - - - /** - * @param constantvalue_index the index info the constant pool of this constant value - */ - public final void setConstantValueIndex( int constantvalue_index ) { - this.constantvalue_index = constantvalue_index; - } - - - /** - * @return String representation of constant value. - */ - public final String toString() { - Constant c = constant_pool.getConstant(constantvalue_index); - String buf; - int i; - // Print constant to string depending on its type - switch (c.getTag()) { - case Constants.CONSTANT_Long: - buf = "" + ((ConstantLong) c).getBytes(); - break; - case Constants.CONSTANT_Float: - buf = "" + ((ConstantFloat) c).getBytes(); - break; - case Constants.CONSTANT_Double: - buf = "" + ((ConstantDouble) c).getBytes(); - break; - case Constants.CONSTANT_Integer: - buf = "" + ((ConstantInteger) c).getBytes(); - break; - case Constants.CONSTANT_String: - i = ((ConstantString) c).getStringIndex(); - c = constant_pool.getConstant(i, Constants.CONSTANT_Utf8); - buf = "\"" + Utility.convertString(((ConstantUtf8) c).getBytes()) + "\""; - break; - default: - throw new IllegalStateException("Type of ConstValue invalid: " + c); - } - return buf; - } - - - /** - * @return deep copy of this attribute - */ - public Attribute copy( ConstantPool _constant_pool ) { - ConstantValue c = (ConstantValue) clone(); - c.constant_pool = _constant_pool; - return c; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from Attribute and represents a constant + * value, i.e., a default value for initializing a class field. + * This class is instantiated by the Attribute.readAttribute() method. + * + * @version $Id: ConstantValue.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Attribute + */ +public final class ConstantValue extends Attribute { + + private int constantvalue_index; + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use clone() for a physical copy. + */ + public ConstantValue(ConstantValue c) { + this(c.getNameIndex(), c.getLength(), c.getConstantValueIndex(), c.getConstantPool()); + } + + + /** + * Construct object from file stream. + * @param name_index Name index in constant pool + * @param length Content length in bytes + * @param file Input stream + * @param constant_pool Array of constants + * @throws IOException + */ + ConstantValue(int name_index, int length, DataInputStream file, ConstantPool constant_pool) + throws IOException { + this(name_index, length, file.readUnsignedShort(), constant_pool); + } + + + /** + * @param name_index Name index in constant pool + * @param length Content length in bytes + * @param constantvalue_index Index in constant pool + * @param constant_pool Array of constants + */ + public ConstantValue(int name_index, int length, int constantvalue_index, + ConstantPool constant_pool) { + super(Constants.ATTR_CONSTANT_VALUE, name_index, length, constant_pool); + this.constantvalue_index = constantvalue_index; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitConstantValue(this); + } + + + /** + * Dump constant value attribute to file stream on binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + super.dump(file); + file.writeShort(constantvalue_index); + } + + + /** + * @return Index in constant pool of constant value. + */ + public final int getConstantValueIndex() { + return constantvalue_index; + } + + + /** + * @param constantvalue_index the index info the constant pool of this constant value + */ + public final void setConstantValueIndex( int constantvalue_index ) { + this.constantvalue_index = constantvalue_index; + } + + + /** + * @return String representation of constant value. + */ + public final String toString() { + Constant c = constant_pool.getConstant(constantvalue_index); + String buf; + int i; + // Print constant to string depending on its type + switch (c.getTag()) { + case Constants.CONSTANT_Long: + buf = "" + ((ConstantLong) c).getBytes(); + break; + case Constants.CONSTANT_Float: + buf = "" + ((ConstantFloat) c).getBytes(); + break; + case Constants.CONSTANT_Double: + buf = "" + ((ConstantDouble) c).getBytes(); + break; + case Constants.CONSTANT_Integer: + buf = "" + ((ConstantInteger) c).getBytes(); + break; + case Constants.CONSTANT_String: + i = ((ConstantString) c).getStringIndex(); + c = constant_pool.getConstant(i, Constants.CONSTANT_Utf8); + buf = "\"" + Utility.convertString(((ConstantUtf8) c).getBytes()) + "\""; + break; + default: + throw new IllegalStateException("Type of ConstValue invalid: " + c); + } + return buf; + } + + + /** + * @return deep copy of this attribute + */ + public Attribute copy( ConstantPool _constant_pool ) { + ConstantValue c = (ConstantValue) clone(); + c.constant_pool = _constant_pool; + return c; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Deprecated.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Deprecated.java index 0623063e..a12cbf87 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Deprecated.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Deprecated.java @@ -1,141 +1,141 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from Attribute and denotes that this is a - * deprecated method. - * It is instantiated from the Attribute.readAttribute() method. - * - * @version $Id: Deprecated.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - */ -public final class Deprecated extends Attribute { - - private byte[] bytes; - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public Deprecated(Deprecated c) { - this(c.getNameIndex(), c.getLength(), c.getBytes(), c.getConstantPool()); - } - - - /** - * @param name_index Index in constant pool to CONSTANT_Utf8 - * @param length Content length in bytes - * @param bytes Attribute contents - * @param constant_pool Array of constants - */ - public Deprecated(int name_index, int length, byte[] bytes, ConstantPool constant_pool) { - super(Constants.ATTR_DEPRECATED, name_index, length, constant_pool); - this.bytes = bytes; - } - - - /** - * Construct object from file stream. - * @param name_index Index in constant pool to CONSTANT_Utf8 - * @param length Content length in bytes - * @param file Input stream - * @param constant_pool Array of constants - * @throws IOException - */ - Deprecated(int name_index, int length, DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(name_index, length, (byte[]) null, constant_pool); - if (length > 0) { - bytes = new byte[length]; - file.readFully(bytes); - System.err.println("Deprecated attribute with length > 0"); - } - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitDeprecated(this); - } - - - /** - * Dump source file attribute to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - super.dump(file); - if (length > 0) { - file.write(bytes, 0, length); - } - } - - - /** - * @return data bytes. - */ - public final byte[] getBytes() { - return bytes; - } - - - /** - * @param bytes the raw bytes that represents this byte array - */ - public final void setBytes( byte[] bytes ) { - this.bytes = bytes; - } - - - /** - * @return attribute name - */ - public final String toString() { - return Constants.ATTRIBUTE_NAMES[Constants.ATTR_DEPRECATED]; - } - - - /** - * @return deep copy of this attribute - */ - public Attribute copy( ConstantPool _constant_pool ) { - Deprecated c = (Deprecated) clone(); - if (bytes != null) { - c.bytes = new byte[bytes.length]; - System.arraycopy(bytes, 0, c.bytes, 0, bytes.length); - } - c.constant_pool = _constant_pool; - return c; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from Attribute and denotes that this is a + * deprecated method. + * It is instantiated from the Attribute.readAttribute() method. + * + * @version $Id: Deprecated.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Attribute + */ +public final class Deprecated extends Attribute { + + private byte[] bytes; + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use clone() for a physical copy. + */ + public Deprecated(Deprecated c) { + this(c.getNameIndex(), c.getLength(), c.getBytes(), c.getConstantPool()); + } + + + /** + * @param name_index Index in constant pool to CONSTANT_Utf8 + * @param length Content length in bytes + * @param bytes Attribute contents + * @param constant_pool Array of constants + */ + public Deprecated(int name_index, int length, byte[] bytes, ConstantPool constant_pool) { + super(Constants.ATTR_DEPRECATED, name_index, length, constant_pool); + this.bytes = bytes; + } + + + /** + * Construct object from file stream. + * @param name_index Index in constant pool to CONSTANT_Utf8 + * @param length Content length in bytes + * @param file Input stream + * @param constant_pool Array of constants + * @throws IOException + */ + Deprecated(int name_index, int length, DataInputStream file, ConstantPool constant_pool) + throws IOException { + this(name_index, length, (byte[]) null, constant_pool); + if (length > 0) { + bytes = new byte[length]; + file.readFully(bytes); + System.err.println("Deprecated attribute with length > 0"); + } + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitDeprecated(this); + } + + + /** + * Dump source file attribute to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + super.dump(file); + if (length > 0) { + file.write(bytes, 0, length); + } + } + + + /** + * @return data bytes. + */ + public final byte[] getBytes() { + return bytes; + } + + + /** + * @param bytes the raw bytes that represents this byte array + */ + public final void setBytes( byte[] bytes ) { + this.bytes = bytes; + } + + + /** + * @return attribute name + */ + public final String toString() { + return Constants.ATTRIBUTE_NAMES[Constants.ATTR_DEPRECATED]; + } + + + /** + * @return deep copy of this attribute + */ + public Attribute copy( ConstantPool _constant_pool ) { + Deprecated c = (Deprecated) clone(); + if (bytes != null) { + c.bytes = new byte[bytes.length]; + System.arraycopy(bytes, 0, c.bytes, 0, bytes.length); + } + c.constant_pool = _constant_pool; + return c; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/DescendingVisitor.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/DescendingVisitor.java index a1ec7938..69e44665 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/DescendingVisitor.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/DescendingVisitor.java @@ -1,356 +1,356 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.util.Stack; - -/** - * Traverses a JavaClass with another Visitor object 'piggy-backed' - * that is applied to all components of a JavaClass object. I.e. this - * class supplies the traversal strategy, other classes can make use - * of it. - * - * @version $Id: DescendingVisitor.java 388707 2006-03-25 05:40:28Z tcurdt $ - * @author M. Dahm - */ -public class DescendingVisitor implements Visitor { - - private JavaClass clazz; - private Visitor visitor; - private Stack stack = new Stack(); - - - /** @return container of current entitity, i.e., predecessor during traversal - */ - public Object predecessor() { - return predecessor(0); - } - - - /** - * @param level nesting level, i.e., 0 returns the direct predecessor - * @return container of current entitity, i.e., predecessor during traversal - */ - public Object predecessor( int level ) { - int size = stack.size(); - if ((size < 2) || (level < 0)) { - return null; - } else { - return stack.elementAt(size - (level + 2)); // size - 1 == current - } - } - - - /** @return current object - */ - public Object current() { - return stack.peek(); - } - - - /** - * @param clazz Class to traverse - * @param visitor visitor object to apply to all components - */ - public DescendingVisitor(JavaClass clazz, Visitor visitor) { - this.clazz = clazz; - this.visitor = visitor; - } - - - /** - * Start traversal. - */ - public void visit() { - clazz.accept(this); - } - - - public void visitJavaClass( JavaClass _clazz ) { - stack.push(_clazz); - _clazz.accept(visitor); - Field[] fields = _clazz.getFields(); - for (int i = 0; i < fields.length; i++) { - fields[i].accept(this); - } - Method[] methods = _clazz.getMethods(); - for (int i = 0; i < methods.length; i++) { - methods[i].accept(this); - } - Attribute[] attributes = _clazz.getAttributes(); - for (int i = 0; i < attributes.length; i++) { - attributes[i].accept(this); - } - _clazz.getConstantPool().accept(this); - stack.pop(); - } - - - public void visitField( Field field ) { - stack.push(field); - field.accept(visitor); - Attribute[] attributes = field.getAttributes(); - for (int i = 0; i < attributes.length; i++) { - attributes[i].accept(this); - } - stack.pop(); - } - - - public void visitConstantValue( ConstantValue cv ) { - stack.push(cv); - cv.accept(visitor); - stack.pop(); - } - - - public void visitMethod( Method method ) { - stack.push(method); - method.accept(visitor); - Attribute[] attributes = method.getAttributes(); - for (int i = 0; i < attributes.length; i++) { - attributes[i].accept(this); - } - stack.pop(); - } - - - public void visitExceptionTable( ExceptionTable table ) { - stack.push(table); - table.accept(visitor); - stack.pop(); - } - - - public void visitCode( Code code ) { - stack.push(code); - code.accept(visitor); - CodeException[] table = code.getExceptionTable(); - for (int i = 0; i < table.length; i++) { - table[i].accept(this); - } - Attribute[] attributes = code.getAttributes(); - for (int i = 0; i < attributes.length; i++) { - attributes[i].accept(this); - } - stack.pop(); - } - - - public void visitCodeException( CodeException ce ) { - stack.push(ce); - ce.accept(visitor); - stack.pop(); - } - - - public void visitLineNumberTable( LineNumberTable table ) { - stack.push(table); - table.accept(visitor); - LineNumber[] numbers = table.getLineNumberTable(); - for (int i = 0; i < numbers.length; i++) { - numbers[i].accept(this); - } - stack.pop(); - } - - - public void visitLineNumber( LineNumber number ) { - stack.push(number); - number.accept(visitor); - stack.pop(); - } - - - public void visitLocalVariableTable( LocalVariableTable table ) { - stack.push(table); - table.accept(visitor); - LocalVariable[] vars = table.getLocalVariableTable(); - for (int i = 0; i < vars.length; i++) { - vars[i].accept(this); - } - stack.pop(); - } - - - public void visitStackMap( StackMap table ) { - stack.push(table); - table.accept(visitor); - StackMapEntry[] vars = table.getStackMap(); - for (int i = 0; i < vars.length; i++) { - vars[i].accept(this); - } - stack.pop(); - } - - - public void visitStackMapEntry( StackMapEntry var ) { - stack.push(var); - var.accept(visitor); - stack.pop(); - } - - - public void visitLocalVariable( LocalVariable var ) { - stack.push(var); - var.accept(visitor); - stack.pop(); - } - - - public void visitConstantPool( ConstantPool cp ) { - stack.push(cp); - cp.accept(visitor); - Constant[] constants = cp.getConstantPool(); - for (int i = 1; i < constants.length; i++) { - if (constants[i] != null) { - constants[i].accept(this); - } - } - stack.pop(); - } - - - public void visitConstantClass( ConstantClass constant ) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - - public void visitConstantDouble( ConstantDouble constant ) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - - public void visitConstantFieldref( ConstantFieldref constant ) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - - public void visitConstantFloat( ConstantFloat constant ) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - - public void visitConstantInteger( ConstantInteger constant ) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - - public void visitConstantInterfaceMethodref( ConstantInterfaceMethodref constant ) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - - public void visitConstantLong( ConstantLong constant ) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - - public void visitConstantMethodref( ConstantMethodref constant ) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - - public void visitConstantNameAndType( ConstantNameAndType constant ) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - - public void visitConstantString( ConstantString constant ) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - - public void visitConstantUtf8( ConstantUtf8 constant ) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - - public void visitInnerClasses( InnerClasses ic ) { - stack.push(ic); - ic.accept(visitor); - InnerClass[] ics = ic.getInnerClasses(); - for (int i = 0; i < ics.length; i++) { - ics[i].accept(this); - } - stack.pop(); - } - - - public void visitInnerClass( InnerClass inner ) { - stack.push(inner); - inner.accept(visitor); - stack.pop(); - } - - - public void visitDeprecated( Deprecated attribute ) { - stack.push(attribute); - attribute.accept(visitor); - stack.pop(); - } - - - public void visitSignature( Signature attribute ) { - stack.push(attribute); - attribute.accept(visitor); - stack.pop(); - } - - - public void visitSourceFile( SourceFile attribute ) { - stack.push(attribute); - attribute.accept(visitor); - stack.pop(); - } - - - public void visitSynthetic( Synthetic attribute ) { - stack.push(attribute); - attribute.accept(visitor); - stack.pop(); - } - - - public void visitUnknown( Unknown attribute ) { - stack.push(attribute); - attribute.accept(visitor); - stack.pop(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.util.Stack; + +/** + * Traverses a JavaClass with another Visitor object 'piggy-backed' + * that is applied to all components of a JavaClass object. I.e. this + * class supplies the traversal strategy, other classes can make use + * of it. + * + * @version $Id: DescendingVisitor.java 388707 2006-03-25 05:40:28Z tcurdt $ + * @author M. Dahm + */ +public class DescendingVisitor implements Visitor { + + private JavaClass clazz; + private Visitor visitor; + private Stack stack = new Stack(); + + + /** @return container of current entitity, i.e., predecessor during traversal + */ + public Object predecessor() { + return predecessor(0); + } + + + /** + * @param level nesting level, i.e., 0 returns the direct predecessor + * @return container of current entitity, i.e., predecessor during traversal + */ + public Object predecessor( int level ) { + int size = stack.size(); + if ((size < 2) || (level < 0)) { + return null; + } else { + return stack.elementAt(size - (level + 2)); // size - 1 == current + } + } + + + /** @return current object + */ + public Object current() { + return stack.peek(); + } + + + /** + * @param clazz Class to traverse + * @param visitor visitor object to apply to all components + */ + public DescendingVisitor(JavaClass clazz, Visitor visitor) { + this.clazz = clazz; + this.visitor = visitor; + } + + + /** + * Start traversal. + */ + public void visit() { + clazz.accept(this); + } + + + public void visitJavaClass( JavaClass _clazz ) { + stack.push(_clazz); + _clazz.accept(visitor); + Field[] fields = _clazz.getFields(); + for (int i = 0; i < fields.length; i++) { + fields[i].accept(this); + } + Method[] methods = _clazz.getMethods(); + for (int i = 0; i < methods.length; i++) { + methods[i].accept(this); + } + Attribute[] attributes = _clazz.getAttributes(); + for (int i = 0; i < attributes.length; i++) { + attributes[i].accept(this); + } + _clazz.getConstantPool().accept(this); + stack.pop(); + } + + + public void visitField( Field field ) { + stack.push(field); + field.accept(visitor); + Attribute[] attributes = field.getAttributes(); + for (int i = 0; i < attributes.length; i++) { + attributes[i].accept(this); + } + stack.pop(); + } + + + public void visitConstantValue( ConstantValue cv ) { + stack.push(cv); + cv.accept(visitor); + stack.pop(); + } + + + public void visitMethod( Method method ) { + stack.push(method); + method.accept(visitor); + Attribute[] attributes = method.getAttributes(); + for (int i = 0; i < attributes.length; i++) { + attributes[i].accept(this); + } + stack.pop(); + } + + + public void visitExceptionTable( ExceptionTable table ) { + stack.push(table); + table.accept(visitor); + stack.pop(); + } + + + public void visitCode( Code code ) { + stack.push(code); + code.accept(visitor); + CodeException[] table = code.getExceptionTable(); + for (int i = 0; i < table.length; i++) { + table[i].accept(this); + } + Attribute[] attributes = code.getAttributes(); + for (int i = 0; i < attributes.length; i++) { + attributes[i].accept(this); + } + stack.pop(); + } + + + public void visitCodeException( CodeException ce ) { + stack.push(ce); + ce.accept(visitor); + stack.pop(); + } + + + public void visitLineNumberTable( LineNumberTable table ) { + stack.push(table); + table.accept(visitor); + LineNumber[] numbers = table.getLineNumberTable(); + for (int i = 0; i < numbers.length; i++) { + numbers[i].accept(this); + } + stack.pop(); + } + + + public void visitLineNumber( LineNumber number ) { + stack.push(number); + number.accept(visitor); + stack.pop(); + } + + + public void visitLocalVariableTable( LocalVariableTable table ) { + stack.push(table); + table.accept(visitor); + LocalVariable[] vars = table.getLocalVariableTable(); + for (int i = 0; i < vars.length; i++) { + vars[i].accept(this); + } + stack.pop(); + } + + + public void visitStackMap( StackMap table ) { + stack.push(table); + table.accept(visitor); + StackMapEntry[] vars = table.getStackMap(); + for (int i = 0; i < vars.length; i++) { + vars[i].accept(this); + } + stack.pop(); + } + + + public void visitStackMapEntry( StackMapEntry var ) { + stack.push(var); + var.accept(visitor); + stack.pop(); + } + + + public void visitLocalVariable( LocalVariable var ) { + stack.push(var); + var.accept(visitor); + stack.pop(); + } + + + public void visitConstantPool( ConstantPool cp ) { + stack.push(cp); + cp.accept(visitor); + Constant[] constants = cp.getConstantPool(); + for (int i = 1; i < constants.length; i++) { + if (constants[i] != null) { + constants[i].accept(this); + } + } + stack.pop(); + } + + + public void visitConstantClass( ConstantClass constant ) { + stack.push(constant); + constant.accept(visitor); + stack.pop(); + } + + + public void visitConstantDouble( ConstantDouble constant ) { + stack.push(constant); + constant.accept(visitor); + stack.pop(); + } + + + public void visitConstantFieldref( ConstantFieldref constant ) { + stack.push(constant); + constant.accept(visitor); + stack.pop(); + } + + + public void visitConstantFloat( ConstantFloat constant ) { + stack.push(constant); + constant.accept(visitor); + stack.pop(); + } + + + public void visitConstantInteger( ConstantInteger constant ) { + stack.push(constant); + constant.accept(visitor); + stack.pop(); + } + + + public void visitConstantInterfaceMethodref( ConstantInterfaceMethodref constant ) { + stack.push(constant); + constant.accept(visitor); + stack.pop(); + } + + + public void visitConstantLong( ConstantLong constant ) { + stack.push(constant); + constant.accept(visitor); + stack.pop(); + } + + + public void visitConstantMethodref( ConstantMethodref constant ) { + stack.push(constant); + constant.accept(visitor); + stack.pop(); + } + + + public void visitConstantNameAndType( ConstantNameAndType constant ) { + stack.push(constant); + constant.accept(visitor); + stack.pop(); + } + + + public void visitConstantString( ConstantString constant ) { + stack.push(constant); + constant.accept(visitor); + stack.pop(); + } + + + public void visitConstantUtf8( ConstantUtf8 constant ) { + stack.push(constant); + constant.accept(visitor); + stack.pop(); + } + + + public void visitInnerClasses( InnerClasses ic ) { + stack.push(ic); + ic.accept(visitor); + InnerClass[] ics = ic.getInnerClasses(); + for (int i = 0; i < ics.length; i++) { + ics[i].accept(this); + } + stack.pop(); + } + + + public void visitInnerClass( InnerClass inner ) { + stack.push(inner); + inner.accept(visitor); + stack.pop(); + } + + + public void visitDeprecated( Deprecated attribute ) { + stack.push(attribute); + attribute.accept(visitor); + stack.pop(); + } + + + public void visitSignature( Signature attribute ) { + stack.push(attribute); + attribute.accept(visitor); + stack.pop(); + } + + + public void visitSourceFile( SourceFile attribute ) { + stack.push(attribute); + attribute.accept(visitor); + stack.pop(); + } + + + public void visitSynthetic( Synthetic attribute ) { + stack.push(attribute); + attribute.accept(visitor); + stack.pop(); + } + + + public void visitUnknown( Unknown attribute ) { + stack.push(attribute); + attribute.accept(visitor); + stack.pop(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/EmptyVisitor.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/EmptyVisitor.java index 340c4edf..9093b216 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/EmptyVisitor.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/EmptyVisitor.java @@ -1,161 +1,161 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -/** - * Visitor with empty method bodies, can be extended and used in conjunction with the - * DescendingVisitor class, e.g. - * - * By courtesy of David Spencer. - * - * @see DescendingVisitor - * @version $Id: EmptyVisitor.java 388707 2006-03-25 05:40:28Z tcurdt $ - * - */ -public class EmptyVisitor implements Visitor { - - protected EmptyVisitor() { - } - - - public void visitCode( Code obj ) { - } - - - public void visitCodeException( CodeException obj ) { - } - - - public void visitConstantClass( ConstantClass obj ) { - } - - - public void visitConstantDouble( ConstantDouble obj ) { - } - - - public void visitConstantFieldref( ConstantFieldref obj ) { - } - - - public void visitConstantFloat( ConstantFloat obj ) { - } - - - public void visitConstantInteger( ConstantInteger obj ) { - } - - - public void visitConstantInterfaceMethodref( ConstantInterfaceMethodref obj ) { - } - - - public void visitConstantLong( ConstantLong obj ) { - } - - - public void visitConstantMethodref( ConstantMethodref obj ) { - } - - - public void visitConstantNameAndType( ConstantNameAndType obj ) { - } - - - public void visitConstantPool( ConstantPool obj ) { - } - - - public void visitConstantString( ConstantString obj ) { - } - - - public void visitConstantUtf8( ConstantUtf8 obj ) { - } - - - public void visitConstantValue( ConstantValue obj ) { - } - - - public void visitDeprecated( Deprecated obj ) { - } - - - public void visitExceptionTable( ExceptionTable obj ) { - } - - - public void visitField( Field obj ) { - } - - - public void visitInnerClass( InnerClass obj ) { - } - - - public void visitInnerClasses( InnerClasses obj ) { - } - - - public void visitJavaClass( JavaClass obj ) { - } - - - public void visitLineNumber( LineNumber obj ) { - } - - - public void visitLineNumberTable( LineNumberTable obj ) { - } - - - public void visitLocalVariable( LocalVariable obj ) { - } - - - public void visitLocalVariableTable( LocalVariableTable obj ) { - } - - - public void visitMethod( Method obj ) { - } - - - public void visitSignature( Signature obj ) { - } - - - public void visitSourceFile( SourceFile obj ) { - } - - - public void visitSynthetic( Synthetic obj ) { - } - - - public void visitUnknown( Unknown obj ) { - } - - - public void visitStackMap( StackMap obj ) { - } - - - public void visitStackMapEntry( StackMapEntry obj ) { - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +/** + * Visitor with empty method bodies, can be extended and used in conjunction with the + * DescendingVisitor class, e.g. + * + * By courtesy of David Spencer. + * + * @see DescendingVisitor + * @version $Id: EmptyVisitor.java 388707 2006-03-25 05:40:28Z tcurdt $ + * + */ +public class EmptyVisitor implements Visitor { + + protected EmptyVisitor() { + } + + + public void visitCode( Code obj ) { + } + + + public void visitCodeException( CodeException obj ) { + } + + + public void visitConstantClass( ConstantClass obj ) { + } + + + public void visitConstantDouble( ConstantDouble obj ) { + } + + + public void visitConstantFieldref( ConstantFieldref obj ) { + } + + + public void visitConstantFloat( ConstantFloat obj ) { + } + + + public void visitConstantInteger( ConstantInteger obj ) { + } + + + public void visitConstantInterfaceMethodref( ConstantInterfaceMethodref obj ) { + } + + + public void visitConstantLong( ConstantLong obj ) { + } + + + public void visitConstantMethodref( ConstantMethodref obj ) { + } + + + public void visitConstantNameAndType( ConstantNameAndType obj ) { + } + + + public void visitConstantPool( ConstantPool obj ) { + } + + + public void visitConstantString( ConstantString obj ) { + } + + + public void visitConstantUtf8( ConstantUtf8 obj ) { + } + + + public void visitConstantValue( ConstantValue obj ) { + } + + + public void visitDeprecated( Deprecated obj ) { + } + + + public void visitExceptionTable( ExceptionTable obj ) { + } + + + public void visitField( Field obj ) { + } + + + public void visitInnerClass( InnerClass obj ) { + } + + + public void visitInnerClasses( InnerClasses obj ) { + } + + + public void visitJavaClass( JavaClass obj ) { + } + + + public void visitLineNumber( LineNumber obj ) { + } + + + public void visitLineNumberTable( LineNumberTable obj ) { + } + + + public void visitLocalVariable( LocalVariable obj ) { + } + + + public void visitLocalVariableTable( LocalVariableTable obj ) { + } + + + public void visitMethod( Method obj ) { + } + + + public void visitSignature( Signature obj ) { + } + + + public void visitSourceFile( SourceFile obj ) { + } + + + public void visitSynthetic( Synthetic obj ) { + } + + + public void visitUnknown( Unknown obj ) { + } + + + public void visitStackMap( StackMap obj ) { + } + + + public void visitStackMapEntry( StackMapEntry obj ) { + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ExceptionTable.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ExceptionTable.java index ba091e55..7f052bce 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ExceptionTable.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/ExceptionTable.java @@ -1,181 +1,181 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class represents the table of exceptions that are thrown by a - * method. This attribute may be used once per method. The name of - * this class is ExceptionTable for historical reasons; The - * Java Virtual Machine Specification, Second Edition defines this - * attribute using the name Exceptions (which is inconsistent - * with the other classes). - * - * @version $Id: ExceptionTable.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Code - */ -public final class ExceptionTable extends Attribute { - - private int number_of_exceptions; // Table of indices into - private int[] exception_index_table; // constant pool - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use copy() for a physical copy. - */ - public ExceptionTable(ExceptionTable c) { - this(c.getNameIndex(), c.getLength(), c.getExceptionIndexTable(), c.getConstantPool()); - } - - - /** - * @param name_index Index in constant pool - * @param length Content length in bytes - * @param exception_index_table Table of indices in constant pool - * @param constant_pool Array of constants - */ - public ExceptionTable(int name_index, int length, int[] exception_index_table, - ConstantPool constant_pool) { - super(Constants.ATTR_EXCEPTIONS, name_index, length, constant_pool); - setExceptionIndexTable(exception_index_table); - } - - - /** - * Construct object from file stream. - * @param name_index Index in constant pool - * @param length Content length in bytes - * @param file Input stream - * @param constant_pool Array of constants - * @throws IOException - */ - ExceptionTable(int name_index, int length, DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(name_index, length, (int[]) null, constant_pool); - number_of_exceptions = file.readUnsignedShort(); - exception_index_table = new int[number_of_exceptions]; - for (int i = 0; i < number_of_exceptions; i++) { - exception_index_table[i] = file.readUnsignedShort(); - } - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionTable(this); - } - - - /** - * Dump exceptions attribute to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - super.dump(file); - file.writeShort(number_of_exceptions); - for (int i = 0; i < number_of_exceptions; i++) { - file.writeShort(exception_index_table[i]); - } - } - - - /** - * @return Array of indices into constant pool of thrown exceptions. - */ - public final int[] getExceptionIndexTable() { - return exception_index_table; - } - - - /** - * @return Length of exception table. - */ - public final int getNumberOfExceptions() { - return number_of_exceptions; - } - - - /** - * @return class names of thrown exceptions - */ - public final String[] getExceptionNames() { - String[] names = new String[number_of_exceptions]; - for (int i = 0; i < number_of_exceptions; i++) { - names[i] = constant_pool.getConstantString(exception_index_table[i], - Constants.CONSTANT_Class).replace('/', '.'); - } - return names; - } - - - /** - * @param exception_index_table the list of exception indexes - * Also redefines number_of_exceptions according to table length. - */ - public final void setExceptionIndexTable( int[] exception_index_table ) { - this.exception_index_table = exception_index_table; - number_of_exceptions = (exception_index_table == null) ? 0 : exception_index_table.length; - } - - - /** - * @return String representation, i.e., a list of thrown exceptions. - */ - public final String toString() { - StringBuilder buf = new StringBuilder(""); - String str; - for (int i = 0; i < number_of_exceptions; i++) { - str = constant_pool.getConstantString(exception_index_table[i], - Constants.CONSTANT_Class); - buf.append(Utility.compactClassName(str, false)); - if (i < number_of_exceptions - 1) { - buf.append(", "); - } - } - return buf.toString(); - } - - - /** - * @return deep copy of this attribute - */ - public Attribute copy( ConstantPool _constant_pool ) { - ExceptionTable c = (ExceptionTable) clone(); - if (exception_index_table != null) { - c.exception_index_table = new int[exception_index_table.length]; - System.arraycopy(exception_index_table, 0, c.exception_index_table, 0, - exception_index_table.length); - } - c.constant_pool = _constant_pool; - return c; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class represents the table of exceptions that are thrown by a + * method. This attribute may be used once per method. The name of + * this class is ExceptionTable for historical reasons; The + * Java Virtual Machine Specification, Second Edition defines this + * attribute using the name Exceptions (which is inconsistent + * with the other classes). + * + * @version $Id: ExceptionTable.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Code + */ +public final class ExceptionTable extends Attribute { + + private int number_of_exceptions; // Table of indices into + private int[] exception_index_table; // constant pool + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use copy() for a physical copy. + */ + public ExceptionTable(ExceptionTable c) { + this(c.getNameIndex(), c.getLength(), c.getExceptionIndexTable(), c.getConstantPool()); + } + + + /** + * @param name_index Index in constant pool + * @param length Content length in bytes + * @param exception_index_table Table of indices in constant pool + * @param constant_pool Array of constants + */ + public ExceptionTable(int name_index, int length, int[] exception_index_table, + ConstantPool constant_pool) { + super(Constants.ATTR_EXCEPTIONS, name_index, length, constant_pool); + setExceptionIndexTable(exception_index_table); + } + + + /** + * Construct object from file stream. + * @param name_index Index in constant pool + * @param length Content length in bytes + * @param file Input stream + * @param constant_pool Array of constants + * @throws IOException + */ + ExceptionTable(int name_index, int length, DataInputStream file, ConstantPool constant_pool) + throws IOException { + this(name_index, length, (int[]) null, constant_pool); + number_of_exceptions = file.readUnsignedShort(); + exception_index_table = new int[number_of_exceptions]; + for (int i = 0; i < number_of_exceptions; i++) { + exception_index_table[i] = file.readUnsignedShort(); + } + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionTable(this); + } + + + /** + * Dump exceptions attribute to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + super.dump(file); + file.writeShort(number_of_exceptions); + for (int i = 0; i < number_of_exceptions; i++) { + file.writeShort(exception_index_table[i]); + } + } + + + /** + * @return Array of indices into constant pool of thrown exceptions. + */ + public final int[] getExceptionIndexTable() { + return exception_index_table; + } + + + /** + * @return Length of exception table. + */ + public final int getNumberOfExceptions() { + return number_of_exceptions; + } + + + /** + * @return class names of thrown exceptions + */ + public final String[] getExceptionNames() { + String[] names = new String[number_of_exceptions]; + for (int i = 0; i < number_of_exceptions; i++) { + names[i] = constant_pool.getConstantString(exception_index_table[i], + Constants.CONSTANT_Class).replace('/', '.'); + } + return names; + } + + + /** + * @param exception_index_table the list of exception indexes + * Also redefines number_of_exceptions according to table length. + */ + public final void setExceptionIndexTable( int[] exception_index_table ) { + this.exception_index_table = exception_index_table; + number_of_exceptions = (exception_index_table == null) ? 0 : exception_index_table.length; + } + + + /** + * @return String representation, i.e., a list of thrown exceptions. + */ + public final String toString() { + StringBuilder buf = new StringBuilder(""); + String str; + for (int i = 0; i < number_of_exceptions; i++) { + str = constant_pool.getConstantString(exception_index_table[i], + Constants.CONSTANT_Class); + buf.append(Utility.compactClassName(str, false)); + if (i < number_of_exceptions - 1) { + buf.append(", "); + } + } + return buf.toString(); + } + + + /** + * @return deep copy of this attribute + */ + public Attribute copy( ConstantPool _constant_pool ) { + ExceptionTable c = (ExceptionTable) clone(); + if (exception_index_table != null) { + c.exception_index_table = new int[exception_index_table.length]; + System.arraycopy(exception_index_table, 0, c.exception_index_table, 0, + exception_index_table.length); + } + c.constant_pool = _constant_pool; + return c; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Field.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Field.java index b8253936..4fa16d6c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Field.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Field.java @@ -1,191 +1,191 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.generic.Type; -import org.apache.bcel5_2_0.util.BCELComparator; - -/** - * This class represents the field info structure, i.e., the representation - * for a variable in the class. See JVM specification for details. - * - * @version $Id: Field.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class Field extends FieldOrMethod { - - private static BCELComparator _cmp = new BCELComparator() { - - public boolean equals( Object o1, Object o2 ) { - Field THIS = (Field) o1; - Field THAT = (Field) o2; - return THIS.getName().equals(THAT.getName()) - && THIS.getSignature().equals(THAT.getSignature()); - } - - - public int hashCode( Object o ) { - Field THIS = (Field) o; - return THIS.getSignature().hashCode() ^ THIS.getName().hashCode(); - } - }; - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public Field(Field c) { - super(c); - } - - - /** - * Construct object from file stream. - * @param file Input stream - */ - Field(DataInputStream file, ConstantPool constant_pool) throws IOException, - ClassFormatException { - super(file, constant_pool); - } - - - /** - * @param access_flags Access rights of field - * @param name_index Points to field name in constant pool - * @param signature_index Points to encoded signature - * @param attributes Collection of attributes - * @param constant_pool Array of constants - */ - public Field(int access_flags, int name_index, int signature_index, Attribute[] attributes, - ConstantPool constant_pool) { - super(access_flags, name_index, signature_index, attributes, constant_pool); - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitField(this); - } - - - /** - * @return constant value associated with this field (may be null) - */ - public final ConstantValue getConstantValue() { - for (int i = 0; i < attributes_count; i++) { - if (attributes[i].getTag() == Constants.ATTR_CONSTANT_VALUE) { - return (ConstantValue) attributes[i]; - } - } - return null; - } - - - /** - * Return string representation close to declaration format, - * `public static final short MAX = 100', e.g.. - * - * @return String representation of field, including the signature. - */ - public final String toString() { - String name, signature, access; // Short cuts to constant pool - // Get names from constant pool - access = Utility.accessToString(access_flags); - access = access.equals("") ? "" : (access + " "); - signature = Utility.signatureToString(getSignature()); - name = getName(); - StringBuilder buf = new StringBuilder(64); - buf.append(access).append(signature).append(" ").append(name); - ConstantValue cv = getConstantValue(); - if (cv != null) { - buf.append(" = ").append(cv); - } - for (int i = 0; i < attributes_count; i++) { - Attribute a = attributes[i]; - if (!(a instanceof ConstantValue)) { - buf.append(" [").append(a.toString()).append("]"); - } - } - return buf.toString(); - } - - - /** - * @return deep copy of this field - */ - public final Field copy( ConstantPool _constant_pool ) { - return (Field) copy_(_constant_pool); - } - - - /** - * @return type of field - */ - public Type getType() { - return Type.getReturnType(getSignature()); - } - - - /** - * @return Comparison strategy object - */ - public static BCELComparator getComparator() { - return _cmp; - } - - - /** - * @param comparator Comparison strategy object - */ - public static void setComparator( BCELComparator comparator ) { - _cmp = comparator; - } - - - /** - * Return value as defined by given BCELComparator strategy. - * By default two Field objects are said to be equal when - * their names and signatures are equal. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals( Object obj ) { - return _cmp.equals(this, obj); - } - - - /** - * Return value as defined by given BCELComparator strategy. - * By default return the hashcode of the field's name XOR signature. - * - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return _cmp.hashCode(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.generic.Type; +import org.apache.bcel5_2_0.util.BCELComparator; + +/** + * This class represents the field info structure, i.e., the representation + * for a variable in the class. See JVM specification for details. + * + * @version $Id: Field.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public final class Field extends FieldOrMethod { + + private static BCELComparator _cmp = new BCELComparator() { + + public boolean equals( Object o1, Object o2 ) { + Field THIS = (Field) o1; + Field THAT = (Field) o2; + return THIS.getName().equals(THAT.getName()) + && THIS.getSignature().equals(THAT.getSignature()); + } + + + public int hashCode( Object o ) { + Field THIS = (Field) o; + return THIS.getSignature().hashCode() ^ THIS.getName().hashCode(); + } + }; + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use clone() for a physical copy. + */ + public Field(Field c) { + super(c); + } + + + /** + * Construct object from file stream. + * @param file Input stream + */ + Field(DataInputStream file, ConstantPool constant_pool) throws IOException, + ClassFormatException { + super(file, constant_pool); + } + + + /** + * @param access_flags Access rights of field + * @param name_index Points to field name in constant pool + * @param signature_index Points to encoded signature + * @param attributes Collection of attributes + * @param constant_pool Array of constants + */ + public Field(int access_flags, int name_index, int signature_index, Attribute[] attributes, + ConstantPool constant_pool) { + super(access_flags, name_index, signature_index, attributes, constant_pool); + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitField(this); + } + + + /** + * @return constant value associated with this field (may be null) + */ + public final ConstantValue getConstantValue() { + for (int i = 0; i < attributes_count; i++) { + if (attributes[i].getTag() == Constants.ATTR_CONSTANT_VALUE) { + return (ConstantValue) attributes[i]; + } + } + return null; + } + + + /** + * Return string representation close to declaration format, + * `public static final short MAX = 100', e.g.. + * + * @return String representation of field, including the signature. + */ + public final String toString() { + String name, signature, access; // Short cuts to constant pool + // Get names from constant pool + access = Utility.accessToString(access_flags); + access = access.equals("") ? "" : (access + " "); + signature = Utility.signatureToString(getSignature()); + name = getName(); + StringBuilder buf = new StringBuilder(64); + buf.append(access).append(signature).append(" ").append(name); + ConstantValue cv = getConstantValue(); + if (cv != null) { + buf.append(" = ").append(cv); + } + for (int i = 0; i < attributes_count; i++) { + Attribute a = attributes[i]; + if (!(a instanceof ConstantValue)) { + buf.append(" [").append(a.toString()).append("]"); + } + } + return buf.toString(); + } + + + /** + * @return deep copy of this field + */ + public final Field copy( ConstantPool _constant_pool ) { + return (Field) copy_(_constant_pool); + } + + + /** + * @return type of field + */ + public Type getType() { + return Type.getReturnType(getSignature()); + } + + + /** + * @return Comparison strategy object + */ + public static BCELComparator getComparator() { + return _cmp; + } + + + /** + * @param comparator Comparison strategy object + */ + public static void setComparator( BCELComparator comparator ) { + _cmp = comparator; + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default two Field objects are said to be equal when + * their names and signatures are equal. + * + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals( Object obj ) { + return _cmp.equals(this, obj); + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default return the hashcode of the field's name XOR signature. + * + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + return _cmp.hashCode(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/FieldOrMethod.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/FieldOrMethod.java index 6261057f..e91334b3 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/FieldOrMethod.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/FieldOrMethod.java @@ -1,207 +1,207 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * Abstract super class for fields and methods. - * - * @version $Id: FieldOrMethod.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class FieldOrMethod extends AccessFlags implements Cloneable, Node { - - protected int name_index; // Points to field name in constant pool - protected int signature_index; // Points to encoded signature - protected int attributes_count; // No. of attributes - protected Attribute[] attributes; // Collection of attributes - protected ConstantPool constant_pool; - - - FieldOrMethod() { - } - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - protected FieldOrMethod(FieldOrMethod c) { - this(c.getAccessFlags(), c.getNameIndex(), c.getSignatureIndex(), c.getAttributes(), c - .getConstantPool()); - } - - - /** - * Construct object from file stream. - * @param file Input stream - * @throws IOException - * @throws ClassFormatException - */ - protected FieldOrMethod(DataInputStream file, ConstantPool constant_pool) throws IOException, - ClassFormatException { - this(file.readUnsignedShort(), file.readUnsignedShort(), file.readUnsignedShort(), null, - constant_pool); - attributes_count = file.readUnsignedShort(); - attributes = new Attribute[attributes_count]; - for (int i = 0; i < attributes_count; i++) { - attributes[i] = Attribute.readAttribute(file, constant_pool); - } - } - - - /** - * @param access_flags Access rights of method - * @param name_index Points to field name in constant pool - * @param signature_index Points to encoded signature - * @param attributes Collection of attributes - * @param constant_pool Array of constants - */ - protected FieldOrMethod(int access_flags, int name_index, int signature_index, - Attribute[] attributes, ConstantPool constant_pool) { - this.access_flags = access_flags; - this.name_index = name_index; - this.signature_index = signature_index; - this.constant_pool = constant_pool; - setAttributes(attributes); - } - - - /** - * Dump object to file stream on binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeShort(access_flags); - file.writeShort(name_index); - file.writeShort(signature_index); - file.writeShort(attributes_count); - for (int i = 0; i < attributes_count; i++) { - attributes[i].dump(file); - } - } - - - /** - * @return Collection of object attributes. - */ - public final Attribute[] getAttributes() { - return attributes; - } - - - /** - * @param attributes Collection of object attributes. - */ - public final void setAttributes( Attribute[] attributes ) { - this.attributes = attributes; - attributes_count = (attributes == null) ? 0 : attributes.length; - } - - - /** - * @return Constant pool used by this object. - */ - public final ConstantPool getConstantPool() { - return constant_pool; - } - - - /** - * @param constant_pool Constant pool to be used for this object. - */ - public final void setConstantPool( ConstantPool constant_pool ) { - this.constant_pool = constant_pool; - } - - - /** - * @return Index in constant pool of object's name. - */ - public final int getNameIndex() { - return name_index; - } - - - /** - * @param name_index Index in constant pool of object's name. - */ - public final void setNameIndex( int name_index ) { - this.name_index = name_index; - } - - - /** - * @return Index in constant pool of field signature. - */ - public final int getSignatureIndex() { - return signature_index; - } - - - /** - * @param signature_index Index in constant pool of field signature. - */ - public final void setSignatureIndex( int signature_index ) { - this.signature_index = signature_index; - } - - - /** - * @return Name of object, i.e., method name or field name - */ - public final String getName() { - ConstantUtf8 c; - c = (ConstantUtf8) constant_pool.getConstant(name_index, Constants.CONSTANT_Utf8); - return c.getBytes(); - } - - - /** - * @return String representation of object's type signature (java style) - */ - public final String getSignature() { - ConstantUtf8 c; - c = (ConstantUtf8) constant_pool.getConstant(signature_index, Constants.CONSTANT_Utf8); - return c.getBytes(); - } - - - /** - * @return deep copy of this field - */ - protected FieldOrMethod copy_( ConstantPool _constant_pool ) { - try { - FieldOrMethod c = (FieldOrMethod) clone(); - c.constant_pool = _constant_pool; - c.attributes = new Attribute[attributes_count]; - for (int i = 0; i < attributes_count; i++) { - c.attributes[i] = attributes[i].copy(_constant_pool); - } - return c; - } catch (CloneNotSupportedException e) { - return null; - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * Abstract super class for fields and methods. + * + * @version $Id: FieldOrMethod.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class FieldOrMethod extends AccessFlags implements Cloneable, Node { + + protected int name_index; // Points to field name in constant pool + protected int signature_index; // Points to encoded signature + protected int attributes_count; // No. of attributes + protected Attribute[] attributes; // Collection of attributes + protected ConstantPool constant_pool; + + + FieldOrMethod() { + } + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use clone() for a physical copy. + */ + protected FieldOrMethod(FieldOrMethod c) { + this(c.getAccessFlags(), c.getNameIndex(), c.getSignatureIndex(), c.getAttributes(), c + .getConstantPool()); + } + + + /** + * Construct object from file stream. + * @param file Input stream + * @throws IOException + * @throws ClassFormatException + */ + protected FieldOrMethod(DataInputStream file, ConstantPool constant_pool) throws IOException, + ClassFormatException { + this(file.readUnsignedShort(), file.readUnsignedShort(), file.readUnsignedShort(), null, + constant_pool); + attributes_count = file.readUnsignedShort(); + attributes = new Attribute[attributes_count]; + for (int i = 0; i < attributes_count; i++) { + attributes[i] = Attribute.readAttribute(file, constant_pool); + } + } + + + /** + * @param access_flags Access rights of method + * @param name_index Points to field name in constant pool + * @param signature_index Points to encoded signature + * @param attributes Collection of attributes + * @param constant_pool Array of constants + */ + protected FieldOrMethod(int access_flags, int name_index, int signature_index, + Attribute[] attributes, ConstantPool constant_pool) { + this.access_flags = access_flags; + this.name_index = name_index; + this.signature_index = signature_index; + this.constant_pool = constant_pool; + setAttributes(attributes); + } + + + /** + * Dump object to file stream on binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeShort(access_flags); + file.writeShort(name_index); + file.writeShort(signature_index); + file.writeShort(attributes_count); + for (int i = 0; i < attributes_count; i++) { + attributes[i].dump(file); + } + } + + + /** + * @return Collection of object attributes. + */ + public final Attribute[] getAttributes() { + return attributes; + } + + + /** + * @param attributes Collection of object attributes. + */ + public final void setAttributes( Attribute[] attributes ) { + this.attributes = attributes; + attributes_count = (attributes == null) ? 0 : attributes.length; + } + + + /** + * @return Constant pool used by this object. + */ + public final ConstantPool getConstantPool() { + return constant_pool; + } + + + /** + * @param constant_pool Constant pool to be used for this object. + */ + public final void setConstantPool( ConstantPool constant_pool ) { + this.constant_pool = constant_pool; + } + + + /** + * @return Index in constant pool of object's name. + */ + public final int getNameIndex() { + return name_index; + } + + + /** + * @param name_index Index in constant pool of object's name. + */ + public final void setNameIndex( int name_index ) { + this.name_index = name_index; + } + + + /** + * @return Index in constant pool of field signature. + */ + public final int getSignatureIndex() { + return signature_index; + } + + + /** + * @param signature_index Index in constant pool of field signature. + */ + public final void setSignatureIndex( int signature_index ) { + this.signature_index = signature_index; + } + + + /** + * @return Name of object, i.e., method name or field name + */ + public final String getName() { + ConstantUtf8 c; + c = (ConstantUtf8) constant_pool.getConstant(name_index, Constants.CONSTANT_Utf8); + return c.getBytes(); + } + + + /** + * @return String representation of object's type signature (java style) + */ + public final String getSignature() { + ConstantUtf8 c; + c = (ConstantUtf8) constant_pool.getConstant(signature_index, Constants.CONSTANT_Utf8); + return c.getBytes(); + } + + + /** + * @return deep copy of this field + */ + protected FieldOrMethod copy_( ConstantPool _constant_pool ) { + try { + FieldOrMethod c = (FieldOrMethod) clone(); + c.constant_pool = _constant_pool; + c.attributes = new Attribute[attributes_count]; + for (int i = 0; i < attributes_count; i++) { + c.attributes[i] = attributes[i].copy(_constant_pool); + } + return c; + } catch (CloneNotSupportedException e) { + return null; + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/InnerClass.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/InnerClass.java index 825eb261..b6cc5a04 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/InnerClass.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/InnerClass.java @@ -1,215 +1,215 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class represents a inner class attribute, i.e., the class - * indices of the inner and outer classes, the name and the attributes - * of the inner class. - * - * @version $Id: InnerClass.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see InnerClasses - */ -public final class InnerClass implements Cloneable, Node, Serializable { - - private int inner_class_index; - private int outer_class_index; - private int inner_name_index; - private int inner_access_flags; - - - /** - * Initialize from another object. - */ - public InnerClass(InnerClass c) { - this(c.getInnerClassIndex(), c.getOuterClassIndex(), c.getInnerNameIndex(), c - .getInnerAccessFlags()); - } - - - /** - * Construct object from file stream. - * @param file Input stream - * @throws IOException - */ - InnerClass(DataInputStream file) throws IOException { - this(file.readUnsignedShort(), file.readUnsignedShort(), file.readUnsignedShort(), file - .readUnsignedShort()); - } - - - /** - * @param inner_class_index Class index in constant pool of inner class - * @param outer_class_index Class index in constant pool of outer class - * @param inner_name_index Name index in constant pool of inner class - * @param inner_access_flags Access flags of inner class - */ - public InnerClass(int inner_class_index, int outer_class_index, int inner_name_index, - int inner_access_flags) { - this.inner_class_index = inner_class_index; - this.outer_class_index = outer_class_index; - this.inner_name_index = inner_name_index; - this.inner_access_flags = inner_access_flags; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitInnerClass(this); - } - - - /** - * Dump inner class attribute to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeShort(inner_class_index); - file.writeShort(outer_class_index); - file.writeShort(inner_name_index); - file.writeShort(inner_access_flags); - } - - - /** - * @return access flags of inner class. - */ - public final int getInnerAccessFlags() { - return inner_access_flags; - } - - - /** - * @return class index of inner class. - */ - public final int getInnerClassIndex() { - return inner_class_index; - } - - - /** - * @return name index of inner class. - */ - public final int getInnerNameIndex() { - return inner_name_index; - } - - - /** - * @return class index of outer class. - */ - public final int getOuterClassIndex() { - return outer_class_index; - } - - - /** - * @param inner_access_flags access flags for this inner class - */ - public final void setInnerAccessFlags( int inner_access_flags ) { - this.inner_access_flags = inner_access_flags; - } - - - /** - * @param inner_class_index index into the constant pool for this class - */ - public final void setInnerClassIndex( int inner_class_index ) { - this.inner_class_index = inner_class_index; - } - - - /** - * @param inner_name_index index into the constant pool for this class's name - */ - public final void setInnerNameIndex( int inner_name_index ) { - this.inner_name_index = inner_name_index; - } - - - /** - * @param outer_class_index index into the constant pool for the owning class - */ - public final void setOuterClassIndex( int outer_class_index ) { - this.outer_class_index = outer_class_index; - } - - - /** - * @return String representation. - */ - public final String toString() { - return "InnerClass(" + inner_class_index + ", " + outer_class_index + ", " - + inner_name_index + ", " + inner_access_flags + ")"; - } - - - /** - * @return Resolved string representation - */ - public final String toString( ConstantPool constant_pool ) { - String inner_class_name, outer_class_name, inner_name, access; - inner_class_name = constant_pool.getConstantString(inner_class_index, - Constants.CONSTANT_Class); - inner_class_name = Utility.compactClassName(inner_class_name); - if (outer_class_index != 0) { - outer_class_name = constant_pool.getConstantString(outer_class_index, - Constants.CONSTANT_Class); - outer_class_name = Utility.compactClassName(outer_class_name); - } else { - outer_class_name = ""; - } - if (inner_name_index != 0) { - inner_name = ((ConstantUtf8) constant_pool.getConstant(inner_name_index, - Constants.CONSTANT_Utf8)).getBytes(); - } else { - inner_name = ""; - } - access = Utility.accessToString(inner_access_flags, true); - access = access.equals("") ? "" : (access + " "); - return "InnerClass:" + access + inner_class_name + "(\"" + outer_class_name + "\", \"" - + inner_name + "\")"; - } - - - /** - * @return deep copy of this object - */ - public InnerClass copy() { - try { - return (InnerClass) clone(); - } catch (CloneNotSupportedException e) { - } - return null; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.Serializable; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class represents a inner class attribute, i.e., the class + * indices of the inner and outer classes, the name and the attributes + * of the inner class. + * + * @version $Id: InnerClass.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see InnerClasses + */ +public final class InnerClass implements Cloneable, Node, Serializable { + + private int inner_class_index; + private int outer_class_index; + private int inner_name_index; + private int inner_access_flags; + + + /** + * Initialize from another object. + */ + public InnerClass(InnerClass c) { + this(c.getInnerClassIndex(), c.getOuterClassIndex(), c.getInnerNameIndex(), c + .getInnerAccessFlags()); + } + + + /** + * Construct object from file stream. + * @param file Input stream + * @throws IOException + */ + InnerClass(DataInputStream file) throws IOException { + this(file.readUnsignedShort(), file.readUnsignedShort(), file.readUnsignedShort(), file + .readUnsignedShort()); + } + + + /** + * @param inner_class_index Class index in constant pool of inner class + * @param outer_class_index Class index in constant pool of outer class + * @param inner_name_index Name index in constant pool of inner class + * @param inner_access_flags Access flags of inner class + */ + public InnerClass(int inner_class_index, int outer_class_index, int inner_name_index, + int inner_access_flags) { + this.inner_class_index = inner_class_index; + this.outer_class_index = outer_class_index; + this.inner_name_index = inner_name_index; + this.inner_access_flags = inner_access_flags; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitInnerClass(this); + } + + + /** + * Dump inner class attribute to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeShort(inner_class_index); + file.writeShort(outer_class_index); + file.writeShort(inner_name_index); + file.writeShort(inner_access_flags); + } + + + /** + * @return access flags of inner class. + */ + public final int getInnerAccessFlags() { + return inner_access_flags; + } + + + /** + * @return class index of inner class. + */ + public final int getInnerClassIndex() { + return inner_class_index; + } + + + /** + * @return name index of inner class. + */ + public final int getInnerNameIndex() { + return inner_name_index; + } + + + /** + * @return class index of outer class. + */ + public final int getOuterClassIndex() { + return outer_class_index; + } + + + /** + * @param inner_access_flags access flags for this inner class + */ + public final void setInnerAccessFlags( int inner_access_flags ) { + this.inner_access_flags = inner_access_flags; + } + + + /** + * @param inner_class_index index into the constant pool for this class + */ + public final void setInnerClassIndex( int inner_class_index ) { + this.inner_class_index = inner_class_index; + } + + + /** + * @param inner_name_index index into the constant pool for this class's name + */ + public final void setInnerNameIndex( int inner_name_index ) { + this.inner_name_index = inner_name_index; + } + + + /** + * @param outer_class_index index into the constant pool for the owning class + */ + public final void setOuterClassIndex( int outer_class_index ) { + this.outer_class_index = outer_class_index; + } + + + /** + * @return String representation. + */ + public final String toString() { + return "InnerClass(" + inner_class_index + ", " + outer_class_index + ", " + + inner_name_index + ", " + inner_access_flags + ")"; + } + + + /** + * @return Resolved string representation + */ + public final String toString( ConstantPool constant_pool ) { + String inner_class_name, outer_class_name, inner_name, access; + inner_class_name = constant_pool.getConstantString(inner_class_index, + Constants.CONSTANT_Class); + inner_class_name = Utility.compactClassName(inner_class_name); + if (outer_class_index != 0) { + outer_class_name = constant_pool.getConstantString(outer_class_index, + Constants.CONSTANT_Class); + outer_class_name = Utility.compactClassName(outer_class_name); + } else { + outer_class_name = ""; + } + if (inner_name_index != 0) { + inner_name = ((ConstantUtf8) constant_pool.getConstant(inner_name_index, + Constants.CONSTANT_Utf8)).getBytes(); + } else { + inner_name = ""; + } + access = Utility.accessToString(inner_access_flags, true); + access = access.equals("") ? "" : (access + " "); + return "InnerClass:" + access + inner_class_name + "(\"" + outer_class_name + "\", \"" + + inner_name + "\")"; + } + + + /** + * @return deep copy of this object + */ + public InnerClass copy() { + try { + return (InnerClass) clone(); + } catch (CloneNotSupportedException e) { + } + return null; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/InnerClasses.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/InnerClasses.java index 90c31cdc..73bb252a 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/InnerClasses.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/InnerClasses.java @@ -1,151 +1,151 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from Attribute and denotes that this class - * is an Inner class of another. - * to the source file of this class. - * It is instantiated from the Attribute.readAttribute() method. - * - * @version $Id: InnerClasses.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - */ -public final class InnerClasses extends Attribute { - - private InnerClass[] inner_classes; - private int number_of_classes; - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public InnerClasses(InnerClasses c) { - this(c.getNameIndex(), c.getLength(), c.getInnerClasses(), c.getConstantPool()); - } - - - /** - * @param name_index Index in constant pool to CONSTANT_Utf8 - * @param length Content length in bytes - * @param inner_classes array of inner classes attributes - * @param constant_pool Array of constants - */ - public InnerClasses(int name_index, int length, InnerClass[] inner_classes, - ConstantPool constant_pool) { - super(Constants.ATTR_INNER_CLASSES, name_index, length, constant_pool); - setInnerClasses(inner_classes); - } - - - /** - * Construct object from file stream. - * - * @param name_index Index in constant pool to CONSTANT_Utf8 - * @param length Content length in bytes - * @param file Input stream - * @param constant_pool Array of constants - * @throws IOException - */ - InnerClasses(int name_index, int length, DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(name_index, length, (InnerClass[]) null, constant_pool); - number_of_classes = file.readUnsignedShort(); - inner_classes = new InnerClass[number_of_classes]; - for (int i = 0; i < number_of_classes; i++) { - inner_classes[i] = new InnerClass(file); - } - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitInnerClasses(this); - } - - - /** - * Dump source file attribute to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - super.dump(file); - file.writeShort(number_of_classes); - for (int i = 0; i < number_of_classes; i++) { - inner_classes[i].dump(file); - } - } - - - /** - * @return array of inner class "records" - */ - public final InnerClass[] getInnerClasses() { - return inner_classes; - } - - - /** - * @param inner_classes the array of inner classes - */ - public final void setInnerClasses( InnerClass[] inner_classes ) { - this.inner_classes = inner_classes; - number_of_classes = (inner_classes == null) ? 0 : inner_classes.length; - } - - - /** - * @return String representation. - */ - public final String toString() { - StringBuilder buf = new StringBuilder(); - for (int i = 0; i < number_of_classes; i++) { - buf.append(inner_classes[i].toString(constant_pool)).append("\n"); - } - return buf.toString(); - } - - - /** - * @return deep copy of this attribute - */ - public Attribute copy( ConstantPool _constant_pool ) { - InnerClasses c = (InnerClasses) clone(); - c.inner_classes = new InnerClass[number_of_classes]; - for (int i = 0; i < number_of_classes; i++) { - c.inner_classes[i] = inner_classes[i].copy(); - } - c.constant_pool = _constant_pool; - return c; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from Attribute and denotes that this class + * is an Inner class of another. + * to the source file of this class. + * It is instantiated from the Attribute.readAttribute() method. + * + * @version $Id: InnerClasses.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Attribute + */ +public final class InnerClasses extends Attribute { + + private InnerClass[] inner_classes; + private int number_of_classes; + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use clone() for a physical copy. + */ + public InnerClasses(InnerClasses c) { + this(c.getNameIndex(), c.getLength(), c.getInnerClasses(), c.getConstantPool()); + } + + + /** + * @param name_index Index in constant pool to CONSTANT_Utf8 + * @param length Content length in bytes + * @param inner_classes array of inner classes attributes + * @param constant_pool Array of constants + */ + public InnerClasses(int name_index, int length, InnerClass[] inner_classes, + ConstantPool constant_pool) { + super(Constants.ATTR_INNER_CLASSES, name_index, length, constant_pool); + setInnerClasses(inner_classes); + } + + + /** + * Construct object from file stream. + * + * @param name_index Index in constant pool to CONSTANT_Utf8 + * @param length Content length in bytes + * @param file Input stream + * @param constant_pool Array of constants + * @throws IOException + */ + InnerClasses(int name_index, int length, DataInputStream file, ConstantPool constant_pool) + throws IOException { + this(name_index, length, (InnerClass[]) null, constant_pool); + number_of_classes = file.readUnsignedShort(); + inner_classes = new InnerClass[number_of_classes]; + for (int i = 0; i < number_of_classes; i++) { + inner_classes[i] = new InnerClass(file); + } + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitInnerClasses(this); + } + + + /** + * Dump source file attribute to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + super.dump(file); + file.writeShort(number_of_classes); + for (int i = 0; i < number_of_classes; i++) { + inner_classes[i].dump(file); + } + } + + + /** + * @return array of inner class "records" + */ + public final InnerClass[] getInnerClasses() { + return inner_classes; + } + + + /** + * @param inner_classes the array of inner classes + */ + public final void setInnerClasses( InnerClass[] inner_classes ) { + this.inner_classes = inner_classes; + number_of_classes = (inner_classes == null) ? 0 : inner_classes.length; + } + + + /** + * @return String representation. + */ + public final String toString() { + StringBuilder buf = new StringBuilder(); + for (int i = 0; i < number_of_classes; i++) { + buf.append(inner_classes[i].toString(constant_pool)).append("\n"); + } + return buf.toString(); + } + + + /** + * @return deep copy of this attribute + */ + public Attribute copy( ConstantPool _constant_pool ) { + InnerClasses c = (InnerClasses) clone(); + c.inner_classes = new InnerClass[number_of_classes]; + for (int i = 0; i < number_of_classes; i++) { + c.inner_classes[i] = inner_classes[i].copy(); + } + c.constant_pool = _constant_pool; + return c; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/JavaClass.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/JavaClass.java index 652a3156..b8018400 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/JavaClass.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/JavaClass.java @@ -1,867 +1,867 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import java.util.StringTokenizer; -import java.util.TreeSet; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.generic.Type; -import org.apache.bcel5_2_0.util.BCELComparator; -import org.apache.bcel5_2_0.util.ClassQueue; -import org.apache.bcel5_2_0.util.SyntheticRepository; - -/** - * Represents a Java class, i.e., the data structures, constant pool, - * fields, methods and commands contained in a Java .class file. - * See JVM specification for details. - * The intent of this class is to represent a parsed or otherwise existing - * class file. Those interested in programatically generating classes - * should see the ClassGen class. - - * @version $Id: JavaClass.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @see org.apache.bcel5_2_0.generic.ClassGen - * @author M. Dahm - */ -public class JavaClass extends AccessFlags implements Cloneable, Node, Comparable { - - private String file_name; - private String package_name; - private String source_file_name = ""; - private int class_name_index; - private int superclass_name_index; - private String class_name; - private String superclass_name; - private int major, minor; // Compiler version - private ConstantPool constant_pool; // Constant pool - private int[] interfaces; // implemented interfaces - private String[] interface_names; - private Field[] fields; // Fields, i.e., variables of class - private Method[] methods; // methods defined in the class - private Attribute[] attributes; // attributes defined in the class - private byte source = HEAP; // Generated in memory - public static final byte HEAP = 1; - public static final byte FILE = 2; - public static final byte ZIP = 3; - static boolean debug = false; // Debugging on/off - static char sep = '/'; // directory separator - private static BCELComparator _cmp = new BCELComparator() { - - public boolean equals( Object o1, Object o2 ) { - JavaClass THIS = (JavaClass) o1; - JavaClass THAT = (JavaClass) o2; - return THIS.getClassName().equals(THAT.getClassName()); - } - - - public int hashCode( Object o ) { - JavaClass THIS = (JavaClass) o; - return THIS.getClassName().hashCode(); - } - }; - /** - * In cases where we go ahead and create something, - * use the default SyntheticRepository, because we - * don't know any better. - */ - private transient org.apache.bcel5_2_0.util.Repository repository = SyntheticRepository - .getInstance(); - - - /** - * Constructor gets all contents as arguments. - * - * @param class_name_index Index into constant pool referencing a - * ConstantClass that represents this class. - * @param superclass_name_index Index into constant pool referencing a - * ConstantClass that represents this class's superclass. - * @param file_name File name - * @param major Major compiler version - * @param minor Minor compiler version - * @param access_flags Access rights defined by bit flags - * @param constant_pool Array of constants - * @param interfaces Implemented interfaces - * @param fields Class fields - * @param methods Class methods - * @param attributes Class attributes - * @param source Read from file or generated in memory? - */ - public JavaClass(int class_name_index, int superclass_name_index, String file_name, int major, - int minor, int access_flags, ConstantPool constant_pool, int[] interfaces, - Field[] fields, Method[] methods, Attribute[] attributes, byte source) { - if (interfaces == null) { - interfaces = new int[0]; - } - if (attributes == null) { - attributes = new Attribute[0]; - } - if (fields == null) { - fields = new Field[0]; - } - if (methods == null) { - methods = new Method[0]; - } - this.class_name_index = class_name_index; - this.superclass_name_index = superclass_name_index; - this.file_name = file_name; - this.major = major; - this.minor = minor; - this.access_flags = access_flags; - this.constant_pool = constant_pool; - this.interfaces = interfaces; - this.fields = fields; - this.methods = methods; - this.attributes = attributes; - this.source = source; - // Get source file name if available - for (int i = 0; i < attributes.length; i++) { - if (attributes[i] instanceof SourceFile) { - source_file_name = ((SourceFile) attributes[i]).getSourceFileName(); - break; - } - } - /* According to the specification the following entries must be of type - * `ConstantClass' but we check that anyway via the - * `ConstPool.getConstant' method. - */ - class_name = constant_pool.getConstantString(class_name_index, Constants.CONSTANT_Class); - class_name = Utility.compactClassName(class_name, false); - int index = class_name.lastIndexOf('.'); - if (index < 0) { - package_name = ""; - } else { - package_name = class_name.substring(0, index); - } - if (superclass_name_index > 0) { - // May be zero -> class is java.lang.Object - superclass_name = constant_pool.getConstantString(superclass_name_index, - Constants.CONSTANT_Class); - superclass_name = Utility.compactClassName(superclass_name, false); - } else { - superclass_name = "java.lang.Object"; - } - interface_names = new String[interfaces.length]; - for (int i = 0; i < interfaces.length; i++) { - String str = constant_pool.getConstantString(interfaces[i], Constants.CONSTANT_Class); - interface_names[i] = Utility.compactClassName(str, false); - } - } - - - /** - * Constructor gets all contents as arguments. - * - * @param class_name_index Class name - * @param superclass_name_index Superclass name - * @param file_name File name - * @param major Major compiler version - * @param minor Minor compiler version - * @param access_flags Access rights defined by bit flags - * @param constant_pool Array of constants - * @param interfaces Implemented interfaces - * @param fields Class fields - * @param methods Class methods - * @param attributes Class attributes - */ - public JavaClass(int class_name_index, int superclass_name_index, String file_name, int major, - int minor, int access_flags, ConstantPool constant_pool, int[] interfaces, - Field[] fields, Method[] methods, Attribute[] attributes) { - this(class_name_index, superclass_name_index, file_name, major, minor, access_flags, - constant_pool, interfaces, fields, methods, attributes, HEAP); - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitJavaClass(this); - } - - - /* Print debug information depending on `JavaClass.debug' - */ - static final void Debug( String str ) { - if (debug) { - System.out.println(str); - } - } - - - /** - * Dump class to a file. - * - * @param file Output file - * @throws IOException - */ - public void dump( File file ) throws IOException { - String parent = file.getParent(); - if (parent != null) { - File dir = new File(parent); - dir.mkdirs(); - } - DataOutputStream dos = null; - try { - dos = new DataOutputStream(new FileOutputStream(file)); - dump(dos); - } finally { - if (dos != null) { - dos.close(); - } - } - } - - - /** - * Dump class to a file named file_name. - * - * @param _file_name Output file name - * @exception IOException - */ - public void dump( String _file_name ) throws IOException { - dump(new File(_file_name)); - } - - - /** - * @return class in binary format - */ - public byte[] getBytes() { - ByteArrayOutputStream s = new ByteArrayOutputStream(); - DataOutputStream ds = new DataOutputStream(s); - try { - dump(ds); - } catch (IOException e) { - e.printStackTrace(); - } finally { - try { - ds.close(); - } catch (IOException e2) { - e2.printStackTrace(); - } - } - return s.toByteArray(); - } - - - /** - * Dump Java class to output stream in binary format. - * - * @param file Output stream - * @exception IOException - */ - public void dump( OutputStream file ) throws IOException { - dump(new DataOutputStream(file)); - } - - - /** - * Dump Java class to output stream in binary format. - * - * @param file Output stream - * @exception IOException - */ - public void dump( DataOutputStream file ) throws IOException { - file.writeInt(0xcafebabe); - file.writeShort(minor); - file.writeShort(major); - constant_pool.dump(file); - file.writeShort(access_flags); - file.writeShort(class_name_index); - file.writeShort(superclass_name_index); - file.writeShort(interfaces.length); - for (int i = 0; i < interfaces.length; i++) { - file.writeShort(interfaces[i]); - } - file.writeShort(fields.length); - for (int i = 0; i < fields.length; i++) { - fields[i].dump(file); - } - file.writeShort(methods.length); - for (int i = 0; i < methods.length; i++) { - methods[i].dump(file); - } - if (attributes != null) { - file.writeShort(attributes.length); - for (int i = 0; i < attributes.length; i++) { - attributes[i].dump(file); - } - } else { - file.writeShort(0); - } - file.flush(); - } - - - /** - * @return Attributes of the class. - */ - public Attribute[] getAttributes() { - return attributes; - } - - - /** - * @return Class name. - */ - public String getClassName() { - return class_name; - } - - - /** - * @return Package name. - */ - public String getPackageName() { - return package_name; - } - - - /** - * @return Class name index. - */ - public int getClassNameIndex() { - return class_name_index; - } - - - /** - * @return Constant pool. - */ - public ConstantPool getConstantPool() { - return constant_pool; - } - - - /** - * @return Fields, i.e., variables of the class. Like the JVM spec - * mandates for the classfile format, these fields are those specific to - * this class, and not those of the superclass or superinterfaces. - */ - public Field[] getFields() { - return fields; - } - - - /** - * @return File name of class, aka SourceFile attribute value - */ - public String getFileName() { - return file_name; - } - - - /** - * @return Names of implemented interfaces. - */ - public String[] getInterfaceNames() { - return interface_names; - } - - - /** - * @return Indices in constant pool of implemented interfaces. - */ - public int[] getInterfaceIndices() { - return interfaces; - } - - - /** - * @return Major number of class file version. - */ - public int getMajor() { - return major; - } - - - /** - * @return Methods of the class. - */ - public Method[] getMethods() { - return methods; - } - - - /** - * @return A org.apache.bcel.classfile.Method corresponding to - * java.lang.reflect.Method if any - */ - public Method getMethod( java.lang.reflect.Method m ) { - for (int i = 0; i < methods.length; i++) { - Method method = methods[i]; - if (m.getName().equals(method.getName()) && (m.getModifiers() == method.getModifiers()) - && Type.getSignature(m).equals(method.getSignature())) { - return method; - } - } - return null; - } - - - /** - * @return Minor number of class file version. - */ - public int getMinor() { - return minor; - } - - - /** - * @return sbsolute path to file where this class was read from - */ - public String getSourceFileName() { - return source_file_name; - } - - - /** - * @return Superclass name. - */ - public String getSuperclassName() { - return superclass_name; - } - - - /** - * @return Class name index. - */ - public int getSuperclassNameIndex() { - return superclass_name_index; - } - - static { - // Debugging ... on/off - debug = Boolean.getBoolean("JavaClass.debug"); - // Get path separator either / or \ usually - String _sep = System.getProperty("file.separator"); - if (_sep != null) { - try { - JavaClass.sep = _sep.charAt(0); - } catch (StringIndexOutOfBoundsException e) { - } // Never reached - } - } - - - /** - * @param attributes . - */ - public void setAttributes( Attribute[] attributes ) { - this.attributes = attributes; - } - - - /** - * @param class_name . - */ - public void setClassName( String class_name ) { - this.class_name = class_name; - } - - - /** - * @param class_name_index . - */ - public void setClassNameIndex( int class_name_index ) { - this.class_name_index = class_name_index; - } - - - /** - * @param constant_pool . - */ - public void setConstantPool( ConstantPool constant_pool ) { - this.constant_pool = constant_pool; - } - - - /** - * @param fields . - */ - public void setFields( Field[] fields ) { - this.fields = fields; - } - - - /** - * Set File name of class, aka SourceFile attribute value - */ - public void setFileName( String file_name ) { - this.file_name = file_name; - } - - - /** - * @param interface_names . - */ - public void setInterfaceNames( String[] interface_names ) { - this.interface_names = interface_names; - } - - - /** - * @param interfaces . - */ - public void setInterfaces( int[] interfaces ) { - this.interfaces = interfaces; - } - - - /** - * @param major . - */ - public void setMajor( int major ) { - this.major = major; - } - - - /** - * @param methods . - */ - public void setMethods( Method[] methods ) { - this.methods = methods; - } - - - /** - * @param minor . - */ - public void setMinor( int minor ) { - this.minor = minor; - } - - - /** - * Set absolute path to file this class was read from. - */ - public void setSourceFileName( String source_file_name ) { - this.source_file_name = source_file_name; - } - - - /** - * @param superclass_name . - */ - public void setSuperclassName( String superclass_name ) { - this.superclass_name = superclass_name; - } - - - /** - * @param superclass_name_index . - */ - public void setSuperclassNameIndex( int superclass_name_index ) { - this.superclass_name_index = superclass_name_index; - } - - - /** - * @return String representing class contents. - */ - public String toString() { - String access = Utility.accessToString(access_flags, true); - access = access.equals("") ? "" : (access + " "); - StringBuilder buf = new StringBuilder(128); - buf.append(access).append(Utility.classOrInterface(access_flags)).append(" ").append( - class_name).append(" extends ").append( - Utility.compactClassName(superclass_name, false)).append('\n'); - int size = interfaces.length; - if (size > 0) { - buf.append("implements\t\t"); - for (int i = 0; i < size; i++) { - buf.append(interface_names[i]); - if (i < size - 1) { - buf.append(", "); - } - } - buf.append('\n'); - } - buf.append("filename\t\t").append(file_name).append('\n'); - buf.append("compiled from\t\t").append(source_file_name).append('\n'); - buf.append("compiler version\t").append(major).append(".").append(minor).append('\n'); - buf.append("access flags\t\t").append(access_flags).append('\n'); - buf.append("constant pool\t\t").append(constant_pool.getLength()).append(" entries\n"); - buf.append("ACC_SUPER flag\t\t").append(isSuper()).append("\n"); - if (attributes.length > 0) { - buf.append("\nAttribute(s):\n"); - for (int i = 0; i < attributes.length; i++) { - buf.append(indent(attributes[i])); - } - } - if (fields.length > 0) { - buf.append("\n").append(fields.length).append(" fields:\n"); - for (int i = 0; i < fields.length; i++) { - buf.append("\t").append(fields[i]).append('\n'); - } - } - if (methods.length > 0) { - buf.append("\n").append(methods.length).append(" methods:\n"); - for (int i = 0; i < methods.length; i++) { - buf.append("\t").append(methods[i]).append('\n'); - } - } - return buf.toString(); - } - - - private static final String indent( Object obj ) { - StringTokenizer tok = new StringTokenizer(obj.toString(), "\n"); - StringBuilder buf = new StringBuilder(); - while (tok.hasMoreTokens()) { - buf.append("\t").append(tok.nextToken()).append("\n"); - } - return buf.toString(); - } - - - /** - * @return deep copy of this class - */ - public JavaClass copy() { - JavaClass c = null; - try { - c = (JavaClass) clone(); - c.constant_pool = constant_pool.copy(); - c.interfaces = (int[]) interfaces.clone(); - c.interface_names = (String[]) interface_names.clone(); - c.fields = new Field[fields.length]; - for (int i = 0; i < fields.length; i++) { - c.fields[i] = fields[i].copy(c.constant_pool); - } - c.methods = new Method[methods.length]; - for (int i = 0; i < methods.length; i++) { - c.methods[i] = methods[i].copy(c.constant_pool); - } - c.attributes = new Attribute[attributes.length]; - for (int i = 0; i < attributes.length; i++) { - c.attributes[i] = attributes[i].copy(c.constant_pool); - } - } catch (CloneNotSupportedException e) { - } - return c; - } - - - public final boolean isSuper() { - return (access_flags & Constants.ACC_SUPER) != 0; - } - - - public final boolean isClass() { - return (access_flags & Constants.ACC_INTERFACE) == 0; - } - - - /** @return returns either HEAP (generated), FILE, or ZIP - */ - public final byte getSource() { - return source; - } - - - /********************* New repository functionality *********************/ - /** - * Gets the ClassRepository which holds its definition. By default - * this is the same as SyntheticRepository.getInstance(); - */ - public org.apache.bcel5_2_0.util.Repository getRepository() { - return repository; - } - - - /** - * Sets the ClassRepository which loaded the JavaClass. - * Should be called immediately after parsing is done. - */ - public void setRepository( org.apache.bcel5_2_0.util.Repository repository ) { - this.repository = repository; - } - - - /** Equivalent to runtime "instanceof" operator. - * - * @return true if this JavaClass is derived from the super class - * @throws ClassNotFoundException if superclasses or superinterfaces - * of this object can't be found - */ - public final boolean instanceOf( JavaClass super_class ) throws ClassNotFoundException { - if (this.equals(super_class)) { - return true; - } - JavaClass[] super_classes = getSuperClasses(); - for (int i = 0; i < super_classes.length; i++) { - if (super_classes[i].equals(super_class)) { - return true; - } - } - if (super_class.isInterface()) { - return implementationOf(super_class); - } - return false; - } - - - /** - * @return true, if this class is an implementation of interface inter - * @throws ClassNotFoundException if superclasses or superinterfaces - * of this class can't be found - */ - public boolean implementationOf( JavaClass inter ) throws ClassNotFoundException { - if (!inter.isInterface()) { - throw new IllegalArgumentException(inter.getClassName() + " is no interface"); - } - if (this.equals(inter)) { - return true; - } - JavaClass[] super_interfaces = getAllInterfaces(); - for (int i = 0; i < super_interfaces.length; i++) { - if (super_interfaces[i].equals(inter)) { - return true; - } - } - return false; - } - - - /** - * @return the superclass for this JavaClass object, or null if this - * is java.lang.Object - * @throws ClassNotFoundException if the superclass can't be found - */ - public JavaClass getSuperClass() throws ClassNotFoundException { - if ("java.lang.Object".equals(getClassName())) { - return null; - } - return repository.loadClass(getSuperclassName()); - } - - - /** - * @return list of super classes of this class in ascending order, i.e., - * java.lang.Object is always the last element - * @throws ClassNotFoundException if any of the superclasses can't be found - */ - public JavaClass[] getSuperClasses() throws ClassNotFoundException { - JavaClass clazz = this; - List allSuperClasses = new ArrayList(); - for (clazz = clazz.getSuperClass(); clazz != null; clazz = clazz.getSuperClass()) { - allSuperClasses.add(clazz); - } - return (JavaClass[]) allSuperClasses.toArray(new JavaClass[allSuperClasses.size()]); - } - - - /** - * Get interfaces directly implemented by this JavaClass. - */ - public JavaClass[] getInterfaces() throws ClassNotFoundException { - String[] _interfaces = getInterfaceNames(); - JavaClass[] classes = new JavaClass[_interfaces.length]; - for (int i = 0; i < _interfaces.length; i++) { - classes[i] = repository.loadClass(_interfaces[i]); - } - return classes; - } - - - /** - * Get all interfaces implemented by this JavaClass (transitively). - */ - public JavaClass[] getAllInterfaces() throws ClassNotFoundException { - ClassQueue queue = new ClassQueue(); - Set allInterfaces = new TreeSet(); - queue.enqueue(this); - while (!queue.empty()) { - JavaClass clazz = queue.dequeue(); - JavaClass souper = clazz.getSuperClass(); - JavaClass[] _interfaces = clazz.getInterfaces(); - if (clazz.isInterface()) { - allInterfaces.add(clazz); - } else { - if (souper != null) { - queue.enqueue(souper); - } - } - for (int i = 0; i < _interfaces.length; i++) { - queue.enqueue(_interfaces[i]); - } - } - return (JavaClass[]) allInterfaces.toArray(new JavaClass[allInterfaces.size()]); - } - - - /** - * @return Comparison strategy object - */ - public static BCELComparator getComparator() { - return _cmp; - } - - - /** - * @param comparator Comparison strategy object - */ - public static void setComparator( BCELComparator comparator ) { - _cmp = comparator; - } - - - /** - * Return value as defined by given BCELComparator strategy. - * By default two JavaClass objects are said to be equal when - * their class names are equal. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals( Object obj ) { - return _cmp.equals(this, obj); - } - - - /** - * Return the natural ordering of two JavaClasses. - * This ordering is based on the class name - */ - public int compareTo( Object obj ) { - return getClassName().compareTo(((JavaClass) obj).getClassName()); - } - - - /** - * Return value as defined by given BCELComparator strategy. - * By default return the hashcode of the class name. - * - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return _cmp.hashCode(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.StringTokenizer; +import java.util.TreeSet; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.generic.Type; +import org.apache.bcel5_2_0.util.BCELComparator; +import org.apache.bcel5_2_0.util.ClassQueue; +import org.apache.bcel5_2_0.util.SyntheticRepository; + +/** + * Represents a Java class, i.e., the data structures, constant pool, + * fields, methods and commands contained in a Java .class file. + * See JVM specification for details. + * The intent of this class is to represent a parsed or otherwise existing + * class file. Those interested in programatically generating classes + * should see the ClassGen class. + + * @version $Id: JavaClass.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @see org.apache.bcel5_2_0.generic.ClassGen + * @author M. Dahm + */ +public class JavaClass extends AccessFlags implements Cloneable, Node, Comparable { + + private String file_name; + private String package_name; + private String source_file_name = ""; + private int class_name_index; + private int superclass_name_index; + private String class_name; + private String superclass_name; + private int major, minor; // Compiler version + private ConstantPool constant_pool; // Constant pool + private int[] interfaces; // implemented interfaces + private String[] interface_names; + private Field[] fields; // Fields, i.e., variables of class + private Method[] methods; // methods defined in the class + private Attribute[] attributes; // attributes defined in the class + private byte source = HEAP; // Generated in memory + public static final byte HEAP = 1; + public static final byte FILE = 2; + public static final byte ZIP = 3; + static boolean debug = false; // Debugging on/off + static char sep = '/'; // directory separator + private static BCELComparator _cmp = new BCELComparator() { + + public boolean equals( Object o1, Object o2 ) { + JavaClass THIS = (JavaClass) o1; + JavaClass THAT = (JavaClass) o2; + return THIS.getClassName().equals(THAT.getClassName()); + } + + + public int hashCode( Object o ) { + JavaClass THIS = (JavaClass) o; + return THIS.getClassName().hashCode(); + } + }; + /** + * In cases where we go ahead and create something, + * use the default SyntheticRepository, because we + * don't know any better. + */ + private transient org.apache.bcel5_2_0.util.Repository repository = SyntheticRepository + .getInstance(); + + + /** + * Constructor gets all contents as arguments. + * + * @param class_name_index Index into constant pool referencing a + * ConstantClass that represents this class. + * @param superclass_name_index Index into constant pool referencing a + * ConstantClass that represents this class's superclass. + * @param file_name File name + * @param major Major compiler version + * @param minor Minor compiler version + * @param access_flags Access rights defined by bit flags + * @param constant_pool Array of constants + * @param interfaces Implemented interfaces + * @param fields Class fields + * @param methods Class methods + * @param attributes Class attributes + * @param source Read from file or generated in memory? + */ + public JavaClass(int class_name_index, int superclass_name_index, String file_name, int major, + int minor, int access_flags, ConstantPool constant_pool, int[] interfaces, + Field[] fields, Method[] methods, Attribute[] attributes, byte source) { + if (interfaces == null) { + interfaces = new int[0]; + } + if (attributes == null) { + attributes = new Attribute[0]; + } + if (fields == null) { + fields = new Field[0]; + } + if (methods == null) { + methods = new Method[0]; + } + this.class_name_index = class_name_index; + this.superclass_name_index = superclass_name_index; + this.file_name = file_name; + this.major = major; + this.minor = minor; + this.access_flags = access_flags; + this.constant_pool = constant_pool; + this.interfaces = interfaces; + this.fields = fields; + this.methods = methods; + this.attributes = attributes; + this.source = source; + // Get source file name if available + for (int i = 0; i < attributes.length; i++) { + if (attributes[i] instanceof SourceFile) { + source_file_name = ((SourceFile) attributes[i]).getSourceFileName(); + break; + } + } + /* According to the specification the following entries must be of type + * `ConstantClass' but we check that anyway via the + * `ConstPool.getConstant' method. + */ + class_name = constant_pool.getConstantString(class_name_index, Constants.CONSTANT_Class); + class_name = Utility.compactClassName(class_name, false); + int index = class_name.lastIndexOf('.'); + if (index < 0) { + package_name = ""; + } else { + package_name = class_name.substring(0, index); + } + if (superclass_name_index > 0) { + // May be zero -> class is java.lang.Object + superclass_name = constant_pool.getConstantString(superclass_name_index, + Constants.CONSTANT_Class); + superclass_name = Utility.compactClassName(superclass_name, false); + } else { + superclass_name = "java.lang.Object"; + } + interface_names = new String[interfaces.length]; + for (int i = 0; i < interfaces.length; i++) { + String str = constant_pool.getConstantString(interfaces[i], Constants.CONSTANT_Class); + interface_names[i] = Utility.compactClassName(str, false); + } + } + + + /** + * Constructor gets all contents as arguments. + * + * @param class_name_index Class name + * @param superclass_name_index Superclass name + * @param file_name File name + * @param major Major compiler version + * @param minor Minor compiler version + * @param access_flags Access rights defined by bit flags + * @param constant_pool Array of constants + * @param interfaces Implemented interfaces + * @param fields Class fields + * @param methods Class methods + * @param attributes Class attributes + */ + public JavaClass(int class_name_index, int superclass_name_index, String file_name, int major, + int minor, int access_flags, ConstantPool constant_pool, int[] interfaces, + Field[] fields, Method[] methods, Attribute[] attributes) { + this(class_name_index, superclass_name_index, file_name, major, minor, access_flags, + constant_pool, interfaces, fields, methods, attributes, HEAP); + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitJavaClass(this); + } + + + /* Print debug information depending on `JavaClass.debug' + */ + static final void Debug( String str ) { + if (debug) { + System.out.println(str); + } + } + + + /** + * Dump class to a file. + * + * @param file Output file + * @throws IOException + */ + public void dump( File file ) throws IOException { + String parent = file.getParent(); + if (parent != null) { + File dir = new File(parent); + dir.mkdirs(); + } + DataOutputStream dos = null; + try { + dos = new DataOutputStream(new FileOutputStream(file)); + dump(dos); + } finally { + if (dos != null) { + dos.close(); + } + } + } + + + /** + * Dump class to a file named file_name. + * + * @param _file_name Output file name + * @exception IOException + */ + public void dump( String _file_name ) throws IOException { + dump(new File(_file_name)); + } + + + /** + * @return class in binary format + */ + public byte[] getBytes() { + ByteArrayOutputStream s = new ByteArrayOutputStream(); + DataOutputStream ds = new DataOutputStream(s); + try { + dump(ds); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + ds.close(); + } catch (IOException e2) { + e2.printStackTrace(); + } + } + return s.toByteArray(); + } + + + /** + * Dump Java class to output stream in binary format. + * + * @param file Output stream + * @exception IOException + */ + public void dump( OutputStream file ) throws IOException { + dump(new DataOutputStream(file)); + } + + + /** + * Dump Java class to output stream in binary format. + * + * @param file Output stream + * @exception IOException + */ + public void dump( DataOutputStream file ) throws IOException { + file.writeInt(0xcafebabe); + file.writeShort(minor); + file.writeShort(major); + constant_pool.dump(file); + file.writeShort(access_flags); + file.writeShort(class_name_index); + file.writeShort(superclass_name_index); + file.writeShort(interfaces.length); + for (int i = 0; i < interfaces.length; i++) { + file.writeShort(interfaces[i]); + } + file.writeShort(fields.length); + for (int i = 0; i < fields.length; i++) { + fields[i].dump(file); + } + file.writeShort(methods.length); + for (int i = 0; i < methods.length; i++) { + methods[i].dump(file); + } + if (attributes != null) { + file.writeShort(attributes.length); + for (int i = 0; i < attributes.length; i++) { + attributes[i].dump(file); + } + } else { + file.writeShort(0); + } + file.flush(); + } + + + /** + * @return Attributes of the class. + */ + public Attribute[] getAttributes() { + return attributes; + } + + + /** + * @return Class name. + */ + public String getClassName() { + return class_name; + } + + + /** + * @return Package name. + */ + public String getPackageName() { + return package_name; + } + + + /** + * @return Class name index. + */ + public int getClassNameIndex() { + return class_name_index; + } + + + /** + * @return Constant pool. + */ + public ConstantPool getConstantPool() { + return constant_pool; + } + + + /** + * @return Fields, i.e., variables of the class. Like the JVM spec + * mandates for the classfile format, these fields are those specific to + * this class, and not those of the superclass or superinterfaces. + */ + public Field[] getFields() { + return fields; + } + + + /** + * @return File name of class, aka SourceFile attribute value + */ + public String getFileName() { + return file_name; + } + + + /** + * @return Names of implemented interfaces. + */ + public String[] getInterfaceNames() { + return interface_names; + } + + + /** + * @return Indices in constant pool of implemented interfaces. + */ + public int[] getInterfaceIndices() { + return interfaces; + } + + + /** + * @return Major number of class file version. + */ + public int getMajor() { + return major; + } + + + /** + * @return Methods of the class. + */ + public Method[] getMethods() { + return methods; + } + + + /** + * @return A org.apache.bcel.classfile.Method corresponding to + * java.lang.reflect.Method if any + */ + public Method getMethod( java.lang.reflect.Method m ) { + for (int i = 0; i < methods.length; i++) { + Method method = methods[i]; + if (m.getName().equals(method.getName()) && (m.getModifiers() == method.getModifiers()) + && Type.getSignature(m).equals(method.getSignature())) { + return method; + } + } + return null; + } + + + /** + * @return Minor number of class file version. + */ + public int getMinor() { + return minor; + } + + + /** + * @return sbsolute path to file where this class was read from + */ + public String getSourceFileName() { + return source_file_name; + } + + + /** + * @return Superclass name. + */ + public String getSuperclassName() { + return superclass_name; + } + + + /** + * @return Class name index. + */ + public int getSuperclassNameIndex() { + return superclass_name_index; + } + + static { + // Debugging ... on/off + debug = Boolean.getBoolean("JavaClass.debug"); + // Get path separator either / or \ usually + String _sep = System.getProperty("file.separator"); + if (_sep != null) { + try { + JavaClass.sep = _sep.charAt(0); + } catch (StringIndexOutOfBoundsException e) { + } // Never reached + } + } + + + /** + * @param attributes . + */ + public void setAttributes( Attribute[] attributes ) { + this.attributes = attributes; + } + + + /** + * @param class_name . + */ + public void setClassName( String class_name ) { + this.class_name = class_name; + } + + + /** + * @param class_name_index . + */ + public void setClassNameIndex( int class_name_index ) { + this.class_name_index = class_name_index; + } + + + /** + * @param constant_pool . + */ + public void setConstantPool( ConstantPool constant_pool ) { + this.constant_pool = constant_pool; + } + + + /** + * @param fields . + */ + public void setFields( Field[] fields ) { + this.fields = fields; + } + + + /** + * Set File name of class, aka SourceFile attribute value + */ + public void setFileName( String file_name ) { + this.file_name = file_name; + } + + + /** + * @param interface_names . + */ + public void setInterfaceNames( String[] interface_names ) { + this.interface_names = interface_names; + } + + + /** + * @param interfaces . + */ + public void setInterfaces( int[] interfaces ) { + this.interfaces = interfaces; + } + + + /** + * @param major . + */ + public void setMajor( int major ) { + this.major = major; + } + + + /** + * @param methods . + */ + public void setMethods( Method[] methods ) { + this.methods = methods; + } + + + /** + * @param minor . + */ + public void setMinor( int minor ) { + this.minor = minor; + } + + + /** + * Set absolute path to file this class was read from. + */ + public void setSourceFileName( String source_file_name ) { + this.source_file_name = source_file_name; + } + + + /** + * @param superclass_name . + */ + public void setSuperclassName( String superclass_name ) { + this.superclass_name = superclass_name; + } + + + /** + * @param superclass_name_index . + */ + public void setSuperclassNameIndex( int superclass_name_index ) { + this.superclass_name_index = superclass_name_index; + } + + + /** + * @return String representing class contents. + */ + public String toString() { + String access = Utility.accessToString(access_flags, true); + access = access.equals("") ? "" : (access + " "); + StringBuilder buf = new StringBuilder(128); + buf.append(access).append(Utility.classOrInterface(access_flags)).append(" ").append( + class_name).append(" extends ").append( + Utility.compactClassName(superclass_name, false)).append('\n'); + int size = interfaces.length; + if (size > 0) { + buf.append("implements\t\t"); + for (int i = 0; i < size; i++) { + buf.append(interface_names[i]); + if (i < size - 1) { + buf.append(", "); + } + } + buf.append('\n'); + } + buf.append("filename\t\t").append(file_name).append('\n'); + buf.append("compiled from\t\t").append(source_file_name).append('\n'); + buf.append("compiler version\t").append(major).append(".").append(minor).append('\n'); + buf.append("access flags\t\t").append(access_flags).append('\n'); + buf.append("constant pool\t\t").append(constant_pool.getLength()).append(" entries\n"); + buf.append("ACC_SUPER flag\t\t").append(isSuper()).append("\n"); + if (attributes.length > 0) { + buf.append("\nAttribute(s):\n"); + for (int i = 0; i < attributes.length; i++) { + buf.append(indent(attributes[i])); + } + } + if (fields.length > 0) { + buf.append("\n").append(fields.length).append(" fields:\n"); + for (int i = 0; i < fields.length; i++) { + buf.append("\t").append(fields[i]).append('\n'); + } + } + if (methods.length > 0) { + buf.append("\n").append(methods.length).append(" methods:\n"); + for (int i = 0; i < methods.length; i++) { + buf.append("\t").append(methods[i]).append('\n'); + } + } + return buf.toString(); + } + + + private static final String indent( Object obj ) { + StringTokenizer tok = new StringTokenizer(obj.toString(), "\n"); + StringBuilder buf = new StringBuilder(); + while (tok.hasMoreTokens()) { + buf.append("\t").append(tok.nextToken()).append("\n"); + } + return buf.toString(); + } + + + /** + * @return deep copy of this class + */ + public JavaClass copy() { + JavaClass c = null; + try { + c = (JavaClass) clone(); + c.constant_pool = constant_pool.copy(); + c.interfaces = (int[]) interfaces.clone(); + c.interface_names = (String[]) interface_names.clone(); + c.fields = new Field[fields.length]; + for (int i = 0; i < fields.length; i++) { + c.fields[i] = fields[i].copy(c.constant_pool); + } + c.methods = new Method[methods.length]; + for (int i = 0; i < methods.length; i++) { + c.methods[i] = methods[i].copy(c.constant_pool); + } + c.attributes = new Attribute[attributes.length]; + for (int i = 0; i < attributes.length; i++) { + c.attributes[i] = attributes[i].copy(c.constant_pool); + } + } catch (CloneNotSupportedException e) { + } + return c; + } + + + public final boolean isSuper() { + return (access_flags & Constants.ACC_SUPER) != 0; + } + + + public final boolean isClass() { + return (access_flags & Constants.ACC_INTERFACE) == 0; + } + + + /** @return returns either HEAP (generated), FILE, or ZIP + */ + public final byte getSource() { + return source; + } + + + /********************* New repository functionality *********************/ + /** + * Gets the ClassRepository which holds its definition. By default + * this is the same as SyntheticRepository.getInstance(); + */ + public org.apache.bcel5_2_0.util.Repository getRepository() { + return repository; + } + + + /** + * Sets the ClassRepository which loaded the JavaClass. + * Should be called immediately after parsing is done. + */ + public void setRepository( org.apache.bcel5_2_0.util.Repository repository ) { + this.repository = repository; + } + + + /** Equivalent to runtime "instanceof" operator. + * + * @return true if this JavaClass is derived from the super class + * @throws ClassNotFoundException if superclasses or superinterfaces + * of this object can't be found + */ + public final boolean instanceOf( JavaClass super_class ) throws ClassNotFoundException { + if (this.equals(super_class)) { + return true; + } + JavaClass[] super_classes = getSuperClasses(); + for (int i = 0; i < super_classes.length; i++) { + if (super_classes[i].equals(super_class)) { + return true; + } + } + if (super_class.isInterface()) { + return implementationOf(super_class); + } + return false; + } + + + /** + * @return true, if this class is an implementation of interface inter + * @throws ClassNotFoundException if superclasses or superinterfaces + * of this class can't be found + */ + public boolean implementationOf( JavaClass inter ) throws ClassNotFoundException { + if (!inter.isInterface()) { + throw new IllegalArgumentException(inter.getClassName() + " is no interface"); + } + if (this.equals(inter)) { + return true; + } + JavaClass[] super_interfaces = getAllInterfaces(); + for (int i = 0; i < super_interfaces.length; i++) { + if (super_interfaces[i].equals(inter)) { + return true; + } + } + return false; + } + + + /** + * @return the superclass for this JavaClass object, or null if this + * is java.lang.Object + * @throws ClassNotFoundException if the superclass can't be found + */ + public JavaClass getSuperClass() throws ClassNotFoundException { + if ("java.lang.Object".equals(getClassName())) { + return null; + } + return repository.loadClass(getSuperclassName()); + } + + + /** + * @return list of super classes of this class in ascending order, i.e., + * java.lang.Object is always the last element + * @throws ClassNotFoundException if any of the superclasses can't be found + */ + public JavaClass[] getSuperClasses() throws ClassNotFoundException { + JavaClass clazz = this; + List allSuperClasses = new ArrayList(); + for (clazz = clazz.getSuperClass(); clazz != null; clazz = clazz.getSuperClass()) { + allSuperClasses.add(clazz); + } + return (JavaClass[]) allSuperClasses.toArray(new JavaClass[allSuperClasses.size()]); + } + + + /** + * Get interfaces directly implemented by this JavaClass. + */ + public JavaClass[] getInterfaces() throws ClassNotFoundException { + String[] _interfaces = getInterfaceNames(); + JavaClass[] classes = new JavaClass[_interfaces.length]; + for (int i = 0; i < _interfaces.length; i++) { + classes[i] = repository.loadClass(_interfaces[i]); + } + return classes; + } + + + /** + * Get all interfaces implemented by this JavaClass (transitively). + */ + public JavaClass[] getAllInterfaces() throws ClassNotFoundException { + ClassQueue queue = new ClassQueue(); + Set allInterfaces = new TreeSet(); + queue.enqueue(this); + while (!queue.empty()) { + JavaClass clazz = queue.dequeue(); + JavaClass souper = clazz.getSuperClass(); + JavaClass[] _interfaces = clazz.getInterfaces(); + if (clazz.isInterface()) { + allInterfaces.add(clazz); + } else { + if (souper != null) { + queue.enqueue(souper); + } + } + for (int i = 0; i < _interfaces.length; i++) { + queue.enqueue(_interfaces[i]); + } + } + return (JavaClass[]) allInterfaces.toArray(new JavaClass[allInterfaces.size()]); + } + + + /** + * @return Comparison strategy object + */ + public static BCELComparator getComparator() { + return _cmp; + } + + + /** + * @param comparator Comparison strategy object + */ + public static void setComparator( BCELComparator comparator ) { + _cmp = comparator; + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default two JavaClass objects are said to be equal when + * their class names are equal. + * + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals( Object obj ) { + return _cmp.equals(this, obj); + } + + + /** + * Return the natural ordering of two JavaClasses. + * This ordering is based on the class name + */ + public int compareTo( Object obj ) { + return getClassName().compareTo(((JavaClass) obj).getClassName()); + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default return the hashcode of the class name. + * + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + return _cmp.hashCode(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LineNumber.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LineNumber.java index ca59b115..11866562 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LineNumber.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LineNumber.java @@ -1,141 +1,141 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; - -/** - * This class represents a (PC offset, line number) pair, i.e., a line number in - * the source that corresponds to a relative address in the byte code. This - * is used for debugging purposes. - * - * @version $Id: LineNumber.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see LineNumberTable - */ -public final class LineNumber implements Cloneable, Node, Serializable { - - private int start_pc; // Program Counter (PC) corresponds to line - private int line_number; // number in source file - - - /** - * Initialize from another object. - */ - public LineNumber(LineNumber c) { - this(c.getStartPC(), c.getLineNumber()); - } - - - /** - * Construct object from file stream. - * @param file Input stream - * @throws IOException - */ - LineNumber(DataInputStream file) throws IOException { - this(file.readUnsignedShort(), file.readUnsignedShort()); - } - - - /** - * @param start_pc Program Counter (PC) corresponds to - * @param line_number line number in source file - */ - public LineNumber(int start_pc, int line_number) { - this.start_pc = start_pc; - this.line_number = line_number; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitLineNumber(this); - } - - - /** - * Dump line number/pc pair to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeShort(start_pc); - file.writeShort(line_number); - } - - - /** - * @return Corresponding source line - */ - public final int getLineNumber() { - return line_number; - } - - - /** - * @return PC in code - */ - public final int getStartPC() { - return start_pc; - } - - - /** - * @param line_number the source line number - */ - public final void setLineNumber( int line_number ) { - this.line_number = line_number; - } - - - /** - * @param start_pc the pc for this line number - */ - public final void setStartPC( int start_pc ) { - this.start_pc = start_pc; - } - - - /** - * @return String representation - */ - public final String toString() { - return "LineNumber(" + start_pc + ", " + line_number + ")"; - } - - - /** - * @return deep copy of this object - */ - public LineNumber copy() { - try { - return (LineNumber) clone(); - } catch (CloneNotSupportedException e) { - } - return null; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.Serializable; + +/** + * This class represents a (PC offset, line number) pair, i.e., a line number in + * the source that corresponds to a relative address in the byte code. This + * is used for debugging purposes. + * + * @version $Id: LineNumber.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see LineNumberTable + */ +public final class LineNumber implements Cloneable, Node, Serializable { + + private int start_pc; // Program Counter (PC) corresponds to line + private int line_number; // number in source file + + + /** + * Initialize from another object. + */ + public LineNumber(LineNumber c) { + this(c.getStartPC(), c.getLineNumber()); + } + + + /** + * Construct object from file stream. + * @param file Input stream + * @throws IOException + */ + LineNumber(DataInputStream file) throws IOException { + this(file.readUnsignedShort(), file.readUnsignedShort()); + } + + + /** + * @param start_pc Program Counter (PC) corresponds to + * @param line_number line number in source file + */ + public LineNumber(int start_pc, int line_number) { + this.start_pc = start_pc; + this.line_number = line_number; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitLineNumber(this); + } + + + /** + * Dump line number/pc pair to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeShort(start_pc); + file.writeShort(line_number); + } + + + /** + * @return Corresponding source line + */ + public final int getLineNumber() { + return line_number; + } + + + /** + * @return PC in code + */ + public final int getStartPC() { + return start_pc; + } + + + /** + * @param line_number the source line number + */ + public final void setLineNumber( int line_number ) { + this.line_number = line_number; + } + + + /** + * @param start_pc the pc for this line number + */ + public final void setStartPC( int start_pc ) { + this.start_pc = start_pc; + } + + + /** + * @return String representation + */ + public final String toString() { + return "LineNumber(" + start_pc + ", " + line_number + ")"; + } + + + /** + * @return deep copy of this object + */ + public LineNumber copy() { + try { + return (LineNumber) clone(); + } catch (CloneNotSupportedException e) { + } + return null; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LineNumberTable.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LineNumberTable.java index 5a92a8ab..c22c925f 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LineNumberTable.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LineNumberTable.java @@ -1,209 +1,209 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class represents a table of line numbers for debugging - * purposes. This attribute is used by the Code attribute. It - * contains pairs of PCs and line numbers. - * - * @version $Id: LineNumberTable.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Code - * @see LineNumber - */ -public final class LineNumberTable extends Attribute { - - private int line_number_table_length; - private LineNumber[] line_number_table; // Table of line/numbers pairs - - - /* - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use copy() for a physical copy. - */ - public LineNumberTable(LineNumberTable c) { - this(c.getNameIndex(), c.getLength(), c.getLineNumberTable(), c.getConstantPool()); - } - - - /* - * @param name_index Index of name - * @param length Content length in bytes - * @param line_number_table Table of line/numbers pairs - * @param constant_pool Array of constants - */ - public LineNumberTable(int name_index, int length, LineNumber[] line_number_table, - ConstantPool constant_pool) { - super(Constants.ATTR_LINE_NUMBER_TABLE, name_index, length, constant_pool); - setLineNumberTable(line_number_table); - } - - - /** - * Construct object from file stream. - * @param name_index Index of name - * @param length Content length in bytes - * @param file Input stream - * @param constant_pool Array of constants - * @throws IOException - */ - LineNumberTable(int name_index, int length, DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(name_index, length, (LineNumber[]) null, constant_pool); - line_number_table_length = (file.readUnsignedShort()); - line_number_table = new LineNumber[line_number_table_length]; - for (int i = 0; i < line_number_table_length; i++) { - line_number_table[i] = new LineNumber(file); - } - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitLineNumberTable(this); - } - - - /** - * Dump line number table attribute to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - super.dump(file); - file.writeShort(line_number_table_length); - for (int i = 0; i < line_number_table_length; i++) { - line_number_table[i].dump(file); - } - } - - - /** - * @return Array of (pc offset, line number) pairs. - */ - public final LineNumber[] getLineNumberTable() { - return line_number_table; - } - - - /** - * @param line_number_table the line number entries for this table - */ - public final void setLineNumberTable( LineNumber[] line_number_table ) { - this.line_number_table = line_number_table; - line_number_table_length = (line_number_table == null) ? 0 : line_number_table.length; - } - - - /** - * @return String representation. - */ - public final String toString() { - StringBuilder buf = new StringBuilder(); - StringBuilder line = new StringBuilder(); - String newLine = System.getProperty("line.separator", "\n"); - for (int i = 0; i < line_number_table_length; i++) { - line.append(line_number_table[i].toString()); - if (i < line_number_table_length - 1) { - line.append(", "); - } - if (line.length() > 72) { - line.append(newLine); - buf.append(line.toString()); - line.setLength(0); - } - } - buf.append(line); - return buf.toString(); - } - - - /** - * Map byte code positions to source code lines. - * - * @param pos byte code offset - * @return corresponding line in source code - */ - public int getSourceLine( int pos ) { - int l = 0, r = line_number_table_length - 1; - if (r < 0) { - return -1; - } - int min_index = -1, min = -1; - /* Do a binary search since the array is ordered. - */ - do { - int i = (l + r) / 2; - int j = line_number_table[i].getStartPC(); - if (j == pos) { - return line_number_table[i].getLineNumber(); - } else if (pos < j) { - r = i - 1; - } else { - l = i + 1; - } - /* If exact match can't be found (which is the most common case) - * return the line number that corresponds to the greatest index less - * than pos. - */ - if (j < pos && j > min) { - min = j; - min_index = i; - } - } while (l <= r); - /* It's possible that we did not find any valid entry for the bytecode - * offset we were looking for. - */ - if (min_index < 0) { - return -1; - } - return line_number_table[min_index].getLineNumber(); - } - - - /** - * @return deep copy of this attribute - */ - public Attribute copy( ConstantPool _constant_pool ) { - LineNumberTable c = (LineNumberTable) clone(); - c.line_number_table = new LineNumber[line_number_table_length]; - for (int i = 0; i < line_number_table_length; i++) { - c.line_number_table[i] = line_number_table[i].copy(); - } - c.constant_pool = _constant_pool; - return c; - } - - - public final int getTableLength() { - return line_number_table_length; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class represents a table of line numbers for debugging + * purposes. This attribute is used by the Code attribute. It + * contains pairs of PCs and line numbers. + * + * @version $Id: LineNumberTable.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Code + * @see LineNumber + */ +public final class LineNumberTable extends Attribute { + + private int line_number_table_length; + private LineNumber[] line_number_table; // Table of line/numbers pairs + + + /* + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use copy() for a physical copy. + */ + public LineNumberTable(LineNumberTable c) { + this(c.getNameIndex(), c.getLength(), c.getLineNumberTable(), c.getConstantPool()); + } + + + /* + * @param name_index Index of name + * @param length Content length in bytes + * @param line_number_table Table of line/numbers pairs + * @param constant_pool Array of constants + */ + public LineNumberTable(int name_index, int length, LineNumber[] line_number_table, + ConstantPool constant_pool) { + super(Constants.ATTR_LINE_NUMBER_TABLE, name_index, length, constant_pool); + setLineNumberTable(line_number_table); + } + + + /** + * Construct object from file stream. + * @param name_index Index of name + * @param length Content length in bytes + * @param file Input stream + * @param constant_pool Array of constants + * @throws IOException + */ + LineNumberTable(int name_index, int length, DataInputStream file, ConstantPool constant_pool) + throws IOException { + this(name_index, length, (LineNumber[]) null, constant_pool); + line_number_table_length = (file.readUnsignedShort()); + line_number_table = new LineNumber[line_number_table_length]; + for (int i = 0; i < line_number_table_length; i++) { + line_number_table[i] = new LineNumber(file); + } + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitLineNumberTable(this); + } + + + /** + * Dump line number table attribute to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + super.dump(file); + file.writeShort(line_number_table_length); + for (int i = 0; i < line_number_table_length; i++) { + line_number_table[i].dump(file); + } + } + + + /** + * @return Array of (pc offset, line number) pairs. + */ + public final LineNumber[] getLineNumberTable() { + return line_number_table; + } + + + /** + * @param line_number_table the line number entries for this table + */ + public final void setLineNumberTable( LineNumber[] line_number_table ) { + this.line_number_table = line_number_table; + line_number_table_length = (line_number_table == null) ? 0 : line_number_table.length; + } + + + /** + * @return String representation. + */ + public final String toString() { + StringBuilder buf = new StringBuilder(); + StringBuilder line = new StringBuilder(); + String newLine = System.getProperty("line.separator", "\n"); + for (int i = 0; i < line_number_table_length; i++) { + line.append(line_number_table[i].toString()); + if (i < line_number_table_length - 1) { + line.append(", "); + } + if (line.length() > 72) { + line.append(newLine); + buf.append(line.toString()); + line.setLength(0); + } + } + buf.append(line); + return buf.toString(); + } + + + /** + * Map byte code positions to source code lines. + * + * @param pos byte code offset + * @return corresponding line in source code + */ + public int getSourceLine( int pos ) { + int l = 0, r = line_number_table_length - 1; + if (r < 0) { + return -1; + } + int min_index = -1, min = -1; + /* Do a binary search since the array is ordered. + */ + do { + int i = (l + r) / 2; + int j = line_number_table[i].getStartPC(); + if (j == pos) { + return line_number_table[i].getLineNumber(); + } else if (pos < j) { + r = i - 1; + } else { + l = i + 1; + } + /* If exact match can't be found (which is the most common case) + * return the line number that corresponds to the greatest index less + * than pos. + */ + if (j < pos && j > min) { + min = j; + min_index = i; + } + } while (l <= r); + /* It's possible that we did not find any valid entry for the bytecode + * offset we were looking for. + */ + if (min_index < 0) { + return -1; + } + return line_number_table[min_index].getLineNumber(); + } + + + /** + * @return deep copy of this attribute + */ + public Attribute copy( ConstantPool _constant_pool ) { + LineNumberTable c = (LineNumberTable) clone(); + c.line_number_table = new LineNumber[line_number_table_length]; + for (int i = 0; i < line_number_table_length; i++) { + c.line_number_table[i] = line_number_table[i].copy(); + } + c.constant_pool = _constant_pool; + return c; + } + + + public final int getTableLength() { + return line_number_table_length; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LocalVariable.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LocalVariable.java index 52892885..95508aa4 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LocalVariable.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LocalVariable.java @@ -1,249 +1,249 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class represents a local variable within a method. It contains its - * scope, name, signature and index on the method's frame. - * - * @version $Id: LocalVariable.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see LocalVariableTable - */ -public final class LocalVariable implements Constants, Cloneable, Node, Serializable { - - private int start_pc; // Range in which the variable is valid - private int length; - private int name_index; // Index in constant pool of variable name - private int signature_index; // Index of variable signature - private int index; /* Variable is `index'th local variable on - * this method's frame. - */ - private ConstantPool constant_pool; - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use copy() for a physical copy. - */ - public LocalVariable(LocalVariable c) { - this(c.getStartPC(), c.getLength(), c.getNameIndex(), c.getSignatureIndex(), c.getIndex(), - c.getConstantPool()); - } - - - /** - * Construct object from file stream. - * @param file Input stream - * @throws IOException - */ - LocalVariable(DataInputStream file, ConstantPool constant_pool) throws IOException { - this(file.readUnsignedShort(), file.readUnsignedShort(), file.readUnsignedShort(), file - .readUnsignedShort(), file.readUnsignedShort(), constant_pool); - } - - - /** - * @param start_pc Range in which the variable - * @param length ... is valid - * @param name_index Index in constant pool of variable name - * @param signature_index Index of variable's signature - * @param index Variable is `index'th local variable on the method's frame - * @param constant_pool Array of constants - */ - public LocalVariable(int start_pc, int length, int name_index, int signature_index, int index, - ConstantPool constant_pool) { - this.start_pc = start_pc; - this.length = length; - this.name_index = name_index; - this.signature_index = signature_index; - this.index = index; - this.constant_pool = constant_pool; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitLocalVariable(this); - } - - - /** - * Dump local variable to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeShort(start_pc); - file.writeShort(length); - file.writeShort(name_index); - file.writeShort(signature_index); - file.writeShort(index); - } - - - /** - * @return Constant pool used by this object. - */ - public final ConstantPool getConstantPool() { - return constant_pool; - } - - - /** - * @return Variable is valid within getStartPC() .. getStartPC()+getLength() - */ - public final int getLength() { - return length; - } - - - /** - * @return Variable name. - */ - public final String getName() { - ConstantUtf8 c; - c = (ConstantUtf8) constant_pool.getConstant(name_index, CONSTANT_Utf8); - return c.getBytes(); - } - - - /** - * @return Index in constant pool of variable name. - */ - public final int getNameIndex() { - return name_index; - } - - - /** - * @return Signature. - */ - public final String getSignature() { - ConstantUtf8 c; - c = (ConstantUtf8) constant_pool.getConstant(signature_index, CONSTANT_Utf8); - return c.getBytes(); - } - - - /** - * @return Index in constant pool of variable signature. - */ - public final int getSignatureIndex() { - return signature_index; - } - - - /** - * @return index of register where variable is stored - */ - public final int getIndex() { - return index; - } - - - /** - * @return Start of range where he variable is valid - */ - public final int getStartPC() { - return start_pc; - } - - - /** - * @param constant_pool Constant pool to be used for this object. - */ - public final void setConstantPool( ConstantPool constant_pool ) { - this.constant_pool = constant_pool; - } - - - /** - * @param length the length of this local variable - */ - public final void setLength( int length ) { - this.length = length; - } - - - /** - * @param name_index the index into the constant pool for the name of this variable - */ - public final void setNameIndex( int name_index ) { - this.name_index = name_index; - } - - - /** - * @param signature_index the index into the constant pool for the signature of this variable - */ - public final void setSignatureIndex( int signature_index ) { - this.signature_index = signature_index; - } - - - /** - * @param index the index in the local variable table of this variable - */ - public final void setIndex( int index ) { - this.index = index; - } - - - /** - * @param start_pc Specify range where the local variable is valid. - */ - public final void setStartPC( int start_pc ) { - this.start_pc = start_pc; - } - - - /** - * @return string representation. - */ - public final String toString() { - String name = getName(), signature = Utility.signatureToString(getSignature()); - return "LocalVariable(start_pc = " + start_pc + ", length = " + length + ", index = " - + index + ":" + signature + " " + name + ")"; - } - - - /** - * @return deep copy of this object - */ - public LocalVariable copy() { - try { - return (LocalVariable) clone(); - } catch (CloneNotSupportedException e) { - } - return null; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.Serializable; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class represents a local variable within a method. It contains its + * scope, name, signature and index on the method's frame. + * + * @version $Id: LocalVariable.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see LocalVariableTable + */ +public final class LocalVariable implements Constants, Cloneable, Node, Serializable { + + private int start_pc; // Range in which the variable is valid + private int length; + private int name_index; // Index in constant pool of variable name + private int signature_index; // Index of variable signature + private int index; /* Variable is `index'th local variable on + * this method's frame. + */ + private ConstantPool constant_pool; + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use copy() for a physical copy. + */ + public LocalVariable(LocalVariable c) { + this(c.getStartPC(), c.getLength(), c.getNameIndex(), c.getSignatureIndex(), c.getIndex(), + c.getConstantPool()); + } + + + /** + * Construct object from file stream. + * @param file Input stream + * @throws IOException + */ + LocalVariable(DataInputStream file, ConstantPool constant_pool) throws IOException { + this(file.readUnsignedShort(), file.readUnsignedShort(), file.readUnsignedShort(), file + .readUnsignedShort(), file.readUnsignedShort(), constant_pool); + } + + + /** + * @param start_pc Range in which the variable + * @param length ... is valid + * @param name_index Index in constant pool of variable name + * @param signature_index Index of variable's signature + * @param index Variable is `index'th local variable on the method's frame + * @param constant_pool Array of constants + */ + public LocalVariable(int start_pc, int length, int name_index, int signature_index, int index, + ConstantPool constant_pool) { + this.start_pc = start_pc; + this.length = length; + this.name_index = name_index; + this.signature_index = signature_index; + this.index = index; + this.constant_pool = constant_pool; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitLocalVariable(this); + } + + + /** + * Dump local variable to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeShort(start_pc); + file.writeShort(length); + file.writeShort(name_index); + file.writeShort(signature_index); + file.writeShort(index); + } + + + /** + * @return Constant pool used by this object. + */ + public final ConstantPool getConstantPool() { + return constant_pool; + } + + + /** + * @return Variable is valid within getStartPC() .. getStartPC()+getLength() + */ + public final int getLength() { + return length; + } + + + /** + * @return Variable name. + */ + public final String getName() { + ConstantUtf8 c; + c = (ConstantUtf8) constant_pool.getConstant(name_index, CONSTANT_Utf8); + return c.getBytes(); + } + + + /** + * @return Index in constant pool of variable name. + */ + public final int getNameIndex() { + return name_index; + } + + + /** + * @return Signature. + */ + public final String getSignature() { + ConstantUtf8 c; + c = (ConstantUtf8) constant_pool.getConstant(signature_index, CONSTANT_Utf8); + return c.getBytes(); + } + + + /** + * @return Index in constant pool of variable signature. + */ + public final int getSignatureIndex() { + return signature_index; + } + + + /** + * @return index of register where variable is stored + */ + public final int getIndex() { + return index; + } + + + /** + * @return Start of range where he variable is valid + */ + public final int getStartPC() { + return start_pc; + } + + + /** + * @param constant_pool Constant pool to be used for this object. + */ + public final void setConstantPool( ConstantPool constant_pool ) { + this.constant_pool = constant_pool; + } + + + /** + * @param length the length of this local variable + */ + public final void setLength( int length ) { + this.length = length; + } + + + /** + * @param name_index the index into the constant pool for the name of this variable + */ + public final void setNameIndex( int name_index ) { + this.name_index = name_index; + } + + + /** + * @param signature_index the index into the constant pool for the signature of this variable + */ + public final void setSignatureIndex( int signature_index ) { + this.signature_index = signature_index; + } + + + /** + * @param index the index in the local variable table of this variable + */ + public final void setIndex( int index ) { + this.index = index; + } + + + /** + * @param start_pc Specify range where the local variable is valid. + */ + public final void setStartPC( int start_pc ) { + this.start_pc = start_pc; + } + + + /** + * @return string representation. + */ + public final String toString() { + String name = getName(), signature = Utility.signatureToString(getSignature()); + return "LocalVariable(start_pc = " + start_pc + ", length = " + length + ", index = " + + index + ":" + signature + " " + name + ")"; + } + + + /** + * @return deep copy of this object + */ + public LocalVariable copy() { + try { + return (LocalVariable) clone(); + } catch (CloneNotSupportedException e) { + } + return null; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LocalVariableTable.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LocalVariableTable.java index 2c9d22b8..83ebc558 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LocalVariableTable.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/LocalVariableTable.java @@ -1,198 +1,198 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class represents colection of local variables in a - * method. This attribute is contained in the Code attribute. - * - * @version $Id: LocalVariableTable.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Code - * @see LocalVariable - */ -public class LocalVariableTable extends Attribute { - - private int local_variable_table_length; // Table of local - private LocalVariable[] local_variable_table; // variables - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use copy() for a physical copy. - */ - public LocalVariableTable(LocalVariableTable c) { - this(c.getNameIndex(), c.getLength(), c.getLocalVariableTable(), c.getConstantPool()); - } - - - /** - * @param name_index Index in constant pool to `LocalVariableTable' - * @param length Content length in bytes - * @param local_variable_table Table of local variables - * @param constant_pool Array of constants - */ - public LocalVariableTable(int name_index, int length, LocalVariable[] local_variable_table, - ConstantPool constant_pool) { - super(Constants.ATTR_LOCAL_VARIABLE_TABLE, name_index, length, constant_pool); - setLocalVariableTable(local_variable_table); - } - - - /** - * Construct object from file stream. - * @param name_index Index in constant pool - * @param length Content length in bytes - * @param file Input stream - * @param constant_pool Array of constants - * @throws IOException - */ - LocalVariableTable(int name_index, int length, DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(name_index, length, (LocalVariable[]) null, constant_pool); - local_variable_table_length = (file.readUnsignedShort()); - local_variable_table = new LocalVariable[local_variable_table_length]; - for (int i = 0; i < local_variable_table_length; i++) { - local_variable_table[i] = new LocalVariable(file, constant_pool); - } - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitLocalVariableTable(this); - } - - - /** - * Dump local variable table attribute to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - super.dump(file); - file.writeShort(local_variable_table_length); - for (int i = 0; i < local_variable_table_length; i++) { - local_variable_table[i].dump(file); - } - } - - - /** - * @return Array of local variables of method. - */ - public final LocalVariable[] getLocalVariableTable() { - return local_variable_table; - } - - - /** - * @return first matching variable using index - * - * @param index the variable slot - * - * @return the first LocalVariable that matches the slot or null if not found - * - * @deprecated since 5.2 because multiple variables can share the - * same slot, use getLocalVariable(int index, int pc) instead. - */ - public final LocalVariable getLocalVariable( int index ) { - for (int i = 0; i < local_variable_table_length; i++) { - if (local_variable_table[i].getIndex() == index) { - return local_variable_table[i]; - } - } - return null; - } - - - /** - * @return matching variable using index when variable is used at supplied pc - * - * @param index the variable slot - * @param pc the current pc that this variable is alive - * - * @return the LocalVariable that matches or null if not found - */ - public final LocalVariable getLocalVariable( int index, int pc ) { - for (int i = 0; i < local_variable_table_length; i++) { - if (local_variable_table[i].getIndex() == index) { - int start_pc = local_variable_table[i].getStartPC(); - int end_pc = start_pc + local_variable_table[i].getLength(); - if ((pc >= start_pc) && (pc < end_pc)) { - return local_variable_table[i]; - } - } - } - return null; - } - - - public final void setLocalVariableTable( LocalVariable[] local_variable_table ) { - this.local_variable_table = local_variable_table; - local_variable_table_length = (local_variable_table == null) - ? 0 - : local_variable_table.length; - } - - - /** - * @return String representation. - */ - public final String toString() { - StringBuilder buf = new StringBuilder(""); - for (int i = 0; i < local_variable_table_length; i++) { - buf.append(local_variable_table[i].toString()); - if (i < local_variable_table_length - 1) { - buf.append('\n'); - } - } - return buf.toString(); - } - - - /** - * @return deep copy of this attribute - */ - public Attribute copy( ConstantPool _constant_pool ) { - LocalVariableTable c = (LocalVariableTable) clone(); - c.local_variable_table = new LocalVariable[local_variable_table_length]; - for (int i = 0; i < local_variable_table_length; i++) { - c.local_variable_table[i] = local_variable_table[i].copy(); - } - c.constant_pool = _constant_pool; - return c; - } - - - public final int getTableLength() { - return local_variable_table_length; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class represents colection of local variables in a + * method. This attribute is contained in the Code attribute. + * + * @version $Id: LocalVariableTable.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Code + * @see LocalVariable + */ +public class LocalVariableTable extends Attribute { + + private int local_variable_table_length; // Table of local + private LocalVariable[] local_variable_table; // variables + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use copy() for a physical copy. + */ + public LocalVariableTable(LocalVariableTable c) { + this(c.getNameIndex(), c.getLength(), c.getLocalVariableTable(), c.getConstantPool()); + } + + + /** + * @param name_index Index in constant pool to `LocalVariableTable' + * @param length Content length in bytes + * @param local_variable_table Table of local variables + * @param constant_pool Array of constants + */ + public LocalVariableTable(int name_index, int length, LocalVariable[] local_variable_table, + ConstantPool constant_pool) { + super(Constants.ATTR_LOCAL_VARIABLE_TABLE, name_index, length, constant_pool); + setLocalVariableTable(local_variable_table); + } + + + /** + * Construct object from file stream. + * @param name_index Index in constant pool + * @param length Content length in bytes + * @param file Input stream + * @param constant_pool Array of constants + * @throws IOException + */ + LocalVariableTable(int name_index, int length, DataInputStream file, ConstantPool constant_pool) + throws IOException { + this(name_index, length, (LocalVariable[]) null, constant_pool); + local_variable_table_length = (file.readUnsignedShort()); + local_variable_table = new LocalVariable[local_variable_table_length]; + for (int i = 0; i < local_variable_table_length; i++) { + local_variable_table[i] = new LocalVariable(file, constant_pool); + } + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitLocalVariableTable(this); + } + + + /** + * Dump local variable table attribute to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + super.dump(file); + file.writeShort(local_variable_table_length); + for (int i = 0; i < local_variable_table_length; i++) { + local_variable_table[i].dump(file); + } + } + + + /** + * @return Array of local variables of method. + */ + public final LocalVariable[] getLocalVariableTable() { + return local_variable_table; + } + + + /** + * @return first matching variable using index + * + * @param index the variable slot + * + * @return the first LocalVariable that matches the slot or null if not found + * + * @deprecated since 5.2 because multiple variables can share the + * same slot, use getLocalVariable(int index, int pc) instead. + */ + public final LocalVariable getLocalVariable( int index ) { + for (int i = 0; i < local_variable_table_length; i++) { + if (local_variable_table[i].getIndex() == index) { + return local_variable_table[i]; + } + } + return null; + } + + + /** + * @return matching variable using index when variable is used at supplied pc + * + * @param index the variable slot + * @param pc the current pc that this variable is alive + * + * @return the LocalVariable that matches or null if not found + */ + public final LocalVariable getLocalVariable( int index, int pc ) { + for (int i = 0; i < local_variable_table_length; i++) { + if (local_variable_table[i].getIndex() == index) { + int start_pc = local_variable_table[i].getStartPC(); + int end_pc = start_pc + local_variable_table[i].getLength(); + if ((pc >= start_pc) && (pc < end_pc)) { + return local_variable_table[i]; + } + } + } + return null; + } + + + public final void setLocalVariableTable( LocalVariable[] local_variable_table ) { + this.local_variable_table = local_variable_table; + local_variable_table_length = (local_variable_table == null) + ? 0 + : local_variable_table.length; + } + + + /** + * @return String representation. + */ + public final String toString() { + StringBuilder buf = new StringBuilder(""); + for (int i = 0; i < local_variable_table_length; i++) { + buf.append(local_variable_table[i].toString()); + if (i < local_variable_table_length - 1) { + buf.append('\n'); + } + } + return buf.toString(); + } + + + /** + * @return deep copy of this attribute + */ + public Attribute copy( ConstantPool _constant_pool ) { + LocalVariableTable c = (LocalVariableTable) clone(); + c.local_variable_table = new LocalVariable[local_variable_table_length]; + for (int i = 0; i < local_variable_table_length; i++) { + c.local_variable_table[i] = local_variable_table[i].copy(); + } + c.constant_pool = _constant_pool; + return c; + } + + + public final int getTableLength() { + return local_variable_table_length; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Method.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Method.java index 889e8e3b..5811bf01 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Method.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Method.java @@ -1,255 +1,255 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.generic.Type; -import org.apache.bcel5_2_0.util.BCELComparator; - -/** - * This class represents the method info structure, i.e., the representation - * for a method in the class. See JVM specification for details. - * A method has access flags, a name, a signature and a number of attributes. - * - * @version $Id: Method.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class Method extends FieldOrMethod { - - private static BCELComparator _cmp = new BCELComparator() { - - public boolean equals( Object o1, Object o2 ) { - Method THIS = (Method) o1; - Method THAT = (Method) o2; - return THIS.getName().equals(THAT.getName()) - && THIS.getSignature().equals(THAT.getSignature()); - } - - - public int hashCode( Object o ) { - Method THIS = (Method) o; - return THIS.getSignature().hashCode() ^ THIS.getName().hashCode(); - } - }; - - - /** - * Empty constructor, all attributes have to be defined via `setXXX' - * methods. Use at your own risk. - */ - public Method() { - } - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public Method(Method c) { - super(c); - } - - - /** - * Construct object from file stream. - * @param file Input stream - * @throws IOException - * @throws ClassFormatException - */ - Method(DataInputStream file, ConstantPool constant_pool) throws IOException, - ClassFormatException { - super(file, constant_pool); - } - - - /** - * @param access_flags Access rights of method - * @param name_index Points to field name in constant pool - * @param signature_index Points to encoded signature - * @param attributes Collection of attributes - * @param constant_pool Array of constants - */ - public Method(int access_flags, int name_index, int signature_index, Attribute[] attributes, - ConstantPool constant_pool) { - super(access_flags, name_index, signature_index, attributes, constant_pool); - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitMethod(this); - } - - - /** - * @return Code attribute of method, if any - */ - public final Code getCode() { - for (int i = 0; i < attributes_count; i++) { - if (attributes[i] instanceof Code) { - return (Code) attributes[i]; - } - } - return null; - } - - - /** - * @return ExceptionTable attribute of method, if any, i.e., list all - * exceptions the method may throw not exception handlers! - */ - public final ExceptionTable getExceptionTable() { - for (int i = 0; i < attributes_count; i++) { - if (attributes[i] instanceof ExceptionTable) { - return (ExceptionTable) attributes[i]; - } - } - return null; - } - - - /** @return LocalVariableTable of code attribute if any, i.e. the call is forwarded - * to the Code atribute. - */ - public final LocalVariableTable getLocalVariableTable() { - Code code = getCode(); - if (code == null) { - return null; - } - return code.getLocalVariableTable(); - } - - - /** @return LineNumberTable of code attribute if any, i.e. the call is forwarded - * to the Code atribute. - */ - public final LineNumberTable getLineNumberTable() { - Code code = getCode(); - if (code == null) { - return null; - } - return code.getLineNumberTable(); - } - - - /** - * Return string representation close to declaration format, - * `public static void main(String[] args) throws IOException', e.g. - * - * @return String representation of the method. - */ - public final String toString() { - ConstantUtf8 c; - String name, signature, access; // Short cuts to constant pool - StringBuilder buf; - access = Utility.accessToString(access_flags); - // Get name and signature from constant pool - c = (ConstantUtf8) constant_pool.getConstant(signature_index, Constants.CONSTANT_Utf8); - signature = c.getBytes(); - c = (ConstantUtf8) constant_pool.getConstant(name_index, Constants.CONSTANT_Utf8); - name = c.getBytes(); - signature = Utility.methodSignatureToString(signature, name, access, true, - getLocalVariableTable()); - buf = new StringBuilder(signature); - for (int i = 0; i < attributes_count; i++) { - Attribute a = attributes[i]; - if (!((a instanceof Code) || (a instanceof ExceptionTable))) { - buf.append(" [").append(a.toString()).append("]"); - } - } - ExceptionTable e = getExceptionTable(); - if (e != null) { - String str = e.toString(); - if (!str.equals("")) { - buf.append("\n\t\tthrows ").append(str); - } - } - return buf.toString(); - } - - - /** - * @return deep copy of this method - */ - public final Method copy( ConstantPool _constant_pool ) { - return (Method) copy_(_constant_pool); - } - - - /** - * @return return type of method - */ - public Type getReturnType() { - return Type.getReturnType(getSignature()); - } - - - /** - * @return array of method argument types - */ - public Type[] getArgumentTypes() { - return Type.getArgumentTypes(getSignature()); - } - - - /** - * @return Comparison strategy object - */ - public static BCELComparator getComparator() { - return _cmp; - } - - - /** - * @param comparator Comparison strategy object - */ - public static void setComparator( BCELComparator comparator ) { - _cmp = comparator; - } - - - /** - * Return value as defined by given BCELComparator strategy. - * By default two method objects are said to be equal when - * their names and signatures are equal. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals( Object obj ) { - return _cmp.equals(this, obj); - } - - - /** - * Return value as defined by given BCELComparator strategy. - * By default return the hashcode of the method's name XOR signature. - * - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return _cmp.hashCode(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.generic.Type; +import org.apache.bcel5_2_0.util.BCELComparator; + +/** + * This class represents the method info structure, i.e., the representation + * for a method in the class. See JVM specification for details. + * A method has access flags, a name, a signature and a number of attributes. + * + * @version $Id: Method.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public final class Method extends FieldOrMethod { + + private static BCELComparator _cmp = new BCELComparator() { + + public boolean equals( Object o1, Object o2 ) { + Method THIS = (Method) o1; + Method THAT = (Method) o2; + return THIS.getName().equals(THAT.getName()) + && THIS.getSignature().equals(THAT.getSignature()); + } + + + public int hashCode( Object o ) { + Method THIS = (Method) o; + return THIS.getSignature().hashCode() ^ THIS.getName().hashCode(); + } + }; + + + /** + * Empty constructor, all attributes have to be defined via `setXXX' + * methods. Use at your own risk. + */ + public Method() { + } + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use clone() for a physical copy. + */ + public Method(Method c) { + super(c); + } + + + /** + * Construct object from file stream. + * @param file Input stream + * @throws IOException + * @throws ClassFormatException + */ + Method(DataInputStream file, ConstantPool constant_pool) throws IOException, + ClassFormatException { + super(file, constant_pool); + } + + + /** + * @param access_flags Access rights of method + * @param name_index Points to field name in constant pool + * @param signature_index Points to encoded signature + * @param attributes Collection of attributes + * @param constant_pool Array of constants + */ + public Method(int access_flags, int name_index, int signature_index, Attribute[] attributes, + ConstantPool constant_pool) { + super(access_flags, name_index, signature_index, attributes, constant_pool); + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitMethod(this); + } + + + /** + * @return Code attribute of method, if any + */ + public final Code getCode() { + for (int i = 0; i < attributes_count; i++) { + if (attributes[i] instanceof Code) { + return (Code) attributes[i]; + } + } + return null; + } + + + /** + * @return ExceptionTable attribute of method, if any, i.e., list all + * exceptions the method may throw not exception handlers! + */ + public final ExceptionTable getExceptionTable() { + for (int i = 0; i < attributes_count; i++) { + if (attributes[i] instanceof ExceptionTable) { + return (ExceptionTable) attributes[i]; + } + } + return null; + } + + + /** @return LocalVariableTable of code attribute if any, i.e. the call is forwarded + * to the Code atribute. + */ + public final LocalVariableTable getLocalVariableTable() { + Code code = getCode(); + if (code == null) { + return null; + } + return code.getLocalVariableTable(); + } + + + /** @return LineNumberTable of code attribute if any, i.e. the call is forwarded + * to the Code atribute. + */ + public final LineNumberTable getLineNumberTable() { + Code code = getCode(); + if (code == null) { + return null; + } + return code.getLineNumberTable(); + } + + + /** + * Return string representation close to declaration format, + * `public static void main(String[] args) throws IOException', e.g. + * + * @return String representation of the method. + */ + public final String toString() { + ConstantUtf8 c; + String name, signature, access; // Short cuts to constant pool + StringBuilder buf; + access = Utility.accessToString(access_flags); + // Get name and signature from constant pool + c = (ConstantUtf8) constant_pool.getConstant(signature_index, Constants.CONSTANT_Utf8); + signature = c.getBytes(); + c = (ConstantUtf8) constant_pool.getConstant(name_index, Constants.CONSTANT_Utf8); + name = c.getBytes(); + signature = Utility.methodSignatureToString(signature, name, access, true, + getLocalVariableTable()); + buf = new StringBuilder(signature); + for (int i = 0; i < attributes_count; i++) { + Attribute a = attributes[i]; + if (!((a instanceof Code) || (a instanceof ExceptionTable))) { + buf.append(" [").append(a.toString()).append("]"); + } + } + ExceptionTable e = getExceptionTable(); + if (e != null) { + String str = e.toString(); + if (!str.equals("")) { + buf.append("\n\t\tthrows ").append(str); + } + } + return buf.toString(); + } + + + /** + * @return deep copy of this method + */ + public final Method copy( ConstantPool _constant_pool ) { + return (Method) copy_(_constant_pool); + } + + + /** + * @return return type of method + */ + public Type getReturnType() { + return Type.getReturnType(getSignature()); + } + + + /** + * @return array of method argument types + */ + public Type[] getArgumentTypes() { + return Type.getArgumentTypes(getSignature()); + } + + + /** + * @return Comparison strategy object + */ + public static BCELComparator getComparator() { + return _cmp; + } + + + /** + * @param comparator Comparison strategy object + */ + public static void setComparator( BCELComparator comparator ) { + _cmp = comparator; + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default two method objects are said to be equal when + * their names and signatures are equal. + * + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals( Object obj ) { + return _cmp.equals(this, obj); + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default return the hashcode of the method's name XOR signature. + * + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + return _cmp.hashCode(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Node.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Node.java index 59e3573f..0a2018f7 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Node.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Node.java @@ -1,28 +1,28 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -/** - * Denote class to have an accept method(); - * - * @version $Id: Node.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface Node { - - public void accept( Visitor obj ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +/** + * Denote class to have an accept method(); + * + * @version $Id: Node.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface Node { + + public void accept( Visitor obj ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/PMGClass.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/PMGClass.java index 393b5666..a4c9cb72 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/PMGClass.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/PMGClass.java @@ -1,168 +1,168 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from Attribute and represents a reference - * to a PMG attribute. - * - * @version $Id: PMGClass.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - */ -public final class PMGClass extends Attribute { - - private int pmg_class_index, pmg_index; - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public PMGClass(PMGClass c) { - this(c.getNameIndex(), c.getLength(), c.getPMGIndex(), c.getPMGClassIndex(), c - .getConstantPool()); - } - - - /** - * Construct object from file stream. - * @param name_index Index in constant pool to CONSTANT_Utf8 - * @param length Content length in bytes - * @param file Input stream - * @param constant_pool Array of constants - * @throws IOException - */ - PMGClass(int name_index, int length, DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(name_index, length, file.readUnsignedShort(), file.readUnsignedShort(), constant_pool); - } - - - /** - * @param name_index Index in constant pool to CONSTANT_Utf8 - * @param length Content length in bytes - * @param pmg_index index in constant pool for source file name - * @param pmg_class_index Index in constant pool to CONSTANT_Utf8 - * @param constant_pool Array of constants - */ - public PMGClass(int name_index, int length, int pmg_index, int pmg_class_index, - ConstantPool constant_pool) { - super(Constants.ATTR_PMG, name_index, length, constant_pool); - this.pmg_index = pmg_index; - this.pmg_class_index = pmg_class_index; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - System.err.println("Visiting non-standard PMGClass object"); - } - - - /** - * Dump source file attribute to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - super.dump(file); - file.writeShort(pmg_index); - file.writeShort(pmg_class_index); - } - - - /** - * @return Index in constant pool of source file name. - */ - public final int getPMGClassIndex() { - return pmg_class_index; - } - - - /** - * @param pmg_class_index - */ - public final void setPMGClassIndex( int pmg_class_index ) { - this.pmg_class_index = pmg_class_index; - } - - - /** - * @return Index in constant pool of source file name. - */ - public final int getPMGIndex() { - return pmg_index; - } - - - /** - * @param pmg_index - */ - public final void setPMGIndex( int pmg_index ) { - this.pmg_index = pmg_index; - } - - - /** - * @return PMG name. - */ - public final String getPMGName() { - ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant(pmg_index, - Constants.CONSTANT_Utf8); - return c.getBytes(); - } - - - /** - * @return PMG class name. - */ - public final String getPMGClassName() { - ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant(pmg_class_index, - Constants.CONSTANT_Utf8); - return c.getBytes(); - } - - - /** - * @return String representation - */ - public final String toString() { - return "PMGClass(" + getPMGName() + ", " + getPMGClassName() + ")"; - } - - - /** - * @return deep copy of this attribute - */ - public Attribute copy( ConstantPool _constant_pool ) { - return (PMGClass) clone(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from Attribute and represents a reference + * to a PMG attribute. + * + * @version $Id: PMGClass.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Attribute + */ +public final class PMGClass extends Attribute { + + private int pmg_class_index, pmg_index; + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use clone() for a physical copy. + */ + public PMGClass(PMGClass c) { + this(c.getNameIndex(), c.getLength(), c.getPMGIndex(), c.getPMGClassIndex(), c + .getConstantPool()); + } + + + /** + * Construct object from file stream. + * @param name_index Index in constant pool to CONSTANT_Utf8 + * @param length Content length in bytes + * @param file Input stream + * @param constant_pool Array of constants + * @throws IOException + */ + PMGClass(int name_index, int length, DataInputStream file, ConstantPool constant_pool) + throws IOException { + this(name_index, length, file.readUnsignedShort(), file.readUnsignedShort(), constant_pool); + } + + + /** + * @param name_index Index in constant pool to CONSTANT_Utf8 + * @param length Content length in bytes + * @param pmg_index index in constant pool for source file name + * @param pmg_class_index Index in constant pool to CONSTANT_Utf8 + * @param constant_pool Array of constants + */ + public PMGClass(int name_index, int length, int pmg_index, int pmg_class_index, + ConstantPool constant_pool) { + super(Constants.ATTR_PMG, name_index, length, constant_pool); + this.pmg_index = pmg_index; + this.pmg_class_index = pmg_class_index; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + System.err.println("Visiting non-standard PMGClass object"); + } + + + /** + * Dump source file attribute to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + super.dump(file); + file.writeShort(pmg_index); + file.writeShort(pmg_class_index); + } + + + /** + * @return Index in constant pool of source file name. + */ + public final int getPMGClassIndex() { + return pmg_class_index; + } + + + /** + * @param pmg_class_index + */ + public final void setPMGClassIndex( int pmg_class_index ) { + this.pmg_class_index = pmg_class_index; + } + + + /** + * @return Index in constant pool of source file name. + */ + public final int getPMGIndex() { + return pmg_index; + } + + + /** + * @param pmg_index + */ + public final void setPMGIndex( int pmg_index ) { + this.pmg_index = pmg_index; + } + + + /** + * @return PMG name. + */ + public final String getPMGName() { + ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant(pmg_index, + Constants.CONSTANT_Utf8); + return c.getBytes(); + } + + + /** + * @return PMG class name. + */ + public final String getPMGClassName() { + ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant(pmg_class_index, + Constants.CONSTANT_Utf8); + return c.getBytes(); + } + + + /** + * @return String representation + */ + public final String toString() { + return "PMGClass(" + getPMGName() + ", " + getPMGClassName() + ")"; + } + + + /** + * @return deep copy of this attribute + */ + public Attribute copy( ConstantPool _constant_pool ) { + return (PMGClass) clone(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Signature.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Signature.java index 1ff83396..9a166577 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Signature.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Signature.java @@ -1,274 +1,274 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from Attribute and represents a reference - * to a GJ attribute. - * - * @version $Id: Signature.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - */ -public final class Signature extends Attribute { - - private int signature_index; - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public Signature(Signature c) { - this(c.getNameIndex(), c.getLength(), c.getSignatureIndex(), c.getConstantPool()); - } - - - /** - * Construct object from file stream. - * @param name_index Index in constant pool to CONSTANT_Utf8 - * @param length Content length in bytes - * @param file Input stream - * @param constant_pool Array of constants - * @throws IOException - */ - Signature(int name_index, int length, DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(name_index, length, file.readUnsignedShort(), constant_pool); - } - - - /** - * @param name_index Index in constant pool to CONSTANT_Utf8 - * @param length Content length in bytes - * @param signature_index Index in constant pool to CONSTANT_Utf8 - * @param constant_pool Array of constants - */ - public Signature(int name_index, int length, int signature_index, ConstantPool constant_pool) { - super(Constants.ATTR_SIGNATURE, name_index, length, constant_pool); - this.signature_index = signature_index; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - //System.err.println("Visiting non-standard Signature object"); - v.visitSignature(this); - } - - - /** - * Dump source file attribute to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - super.dump(file); - file.writeShort(signature_index); - } - - - /** - * @return Index in constant pool of source file name. - */ - public final int getSignatureIndex() { - return signature_index; - } - - - /** - * @param signature_index the index info the constant pool of this signature - */ - public final void setSignatureIndex( int signature_index ) { - this.signature_index = signature_index; - } - - - /** - * @return GJ signature. - */ - public final String getSignature() { - ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant(signature_index, - Constants.CONSTANT_Utf8); - return c.getBytes(); - } - - /** - * Extends ByteArrayInputStream to make 'unreading' chars possible. - */ - private static final class MyByteArrayInputStream extends ByteArrayInputStream { - - MyByteArrayInputStream(String data) { - super(data.getBytes()); - } - - - final int mark() { - return pos; - } - - - final String getData() { - return new String(buf); - } - - - final void reset( int p ) { - pos = p; - } - - - final void unread() { - if (pos > 0) { - pos--; - } - } - } - - - private static boolean identStart( int ch ) { - return ch == 'T' || ch == 'L'; - } - - - private static final void matchIdent( MyByteArrayInputStream in, StringBuilder buf ) { - int ch; - if ((ch = in.read()) == -1) { - throw new RuntimeException("Illegal signature: " + in.getData() - + " no ident, reaching EOF"); - } - //System.out.println("return from ident:" + (char)ch); - if (!identStart(ch)) { - StringBuilder buf2 = new StringBuilder(); - int count = 1; - while (Character.isJavaIdentifierPart((char) ch)) { - buf2.append((char) ch); - count++; - ch = in.read(); - } - if (ch == ':') { // Ok, formal parameter - in.skip("Ljava/lang/Object".length()); - buf.append(buf2); - ch = in.read(); - in.unread(); - //System.out.println("so far:" + buf2 + ":next:" +(char)ch); - } else { - for (int i = 0; i < count; i++) { - in.unread(); - } - } - return; - } - StringBuilder buf2 = new StringBuilder(); - ch = in.read(); - do { - buf2.append((char) ch); - ch = in.read(); - //System.out.println("within ident:"+ (char)ch); - } while ((ch != -1) && (Character.isJavaIdentifierPart((char) ch) || (ch == '/'))); - buf.append(buf2.toString().replace('/', '.')); - //System.out.println("regular return ident:"+ (char)ch + ":" + buf2); - if (ch != -1) { - in.unread(); - } - } - - - private static final void matchGJIdent( MyByteArrayInputStream in, StringBuilder buf ) { - int ch; - matchIdent(in, buf); - ch = in.read(); - if ((ch == '<') || ch == '(') { // Parameterized or method - //System.out.println("Enter <"); - buf.append((char) ch); - matchGJIdent(in, buf); - while (((ch = in.read()) != '>') && (ch != ')')) { // List of parameters - if (ch == -1) { - throw new RuntimeException("Illegal signature: " + in.getData() - + " reaching EOF"); - } - //System.out.println("Still no >"); - buf.append(", "); - in.unread(); - matchGJIdent(in, buf); // Recursive call - } - //System.out.println("Exit >"); - buf.append((char) ch); - } else { - in.unread(); - } - ch = in.read(); - if (identStart(ch)) { - in.unread(); - matchGJIdent(in, buf); - } else if (ch == ')') { - in.unread(); - return; - } else if (ch != ';') { - throw new RuntimeException("Illegal signature: " + in.getData() + " read " + (char) ch); - } - } - - - public static String translate( String s ) { - //System.out.println("Sig:" + s); - StringBuilder buf = new StringBuilder(); - matchGJIdent(new MyByteArrayInputStream(s), buf); - return buf.toString(); - } - - - public static final boolean isFormalParameterList( String s ) { - return s.startsWith("<") && (s.indexOf(':') > 0); - } - - - public static final boolean isActualParameterList( String s ) { - return s.startsWith("L") && s.endsWith(">;"); - } - - - /** - * @return String representation - */ - public final String toString() { - String s = getSignature(); - return "Signature(" + s + ")"; - } - - - /** - * @return deep copy of this attribute - */ - public Attribute copy( ConstantPool _constant_pool ) { - return (Signature) clone(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from Attribute and represents a reference + * to a GJ attribute. + * + * @version $Id: Signature.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Attribute + */ +public final class Signature extends Attribute { + + private int signature_index; + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use clone() for a physical copy. + */ + public Signature(Signature c) { + this(c.getNameIndex(), c.getLength(), c.getSignatureIndex(), c.getConstantPool()); + } + + + /** + * Construct object from file stream. + * @param name_index Index in constant pool to CONSTANT_Utf8 + * @param length Content length in bytes + * @param file Input stream + * @param constant_pool Array of constants + * @throws IOException + */ + Signature(int name_index, int length, DataInputStream file, ConstantPool constant_pool) + throws IOException { + this(name_index, length, file.readUnsignedShort(), constant_pool); + } + + + /** + * @param name_index Index in constant pool to CONSTANT_Utf8 + * @param length Content length in bytes + * @param signature_index Index in constant pool to CONSTANT_Utf8 + * @param constant_pool Array of constants + */ + public Signature(int name_index, int length, int signature_index, ConstantPool constant_pool) { + super(Constants.ATTR_SIGNATURE, name_index, length, constant_pool); + this.signature_index = signature_index; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + //System.err.println("Visiting non-standard Signature object"); + v.visitSignature(this); + } + + + /** + * Dump source file attribute to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + super.dump(file); + file.writeShort(signature_index); + } + + + /** + * @return Index in constant pool of source file name. + */ + public final int getSignatureIndex() { + return signature_index; + } + + + /** + * @param signature_index the index info the constant pool of this signature + */ + public final void setSignatureIndex( int signature_index ) { + this.signature_index = signature_index; + } + + + /** + * @return GJ signature. + */ + public final String getSignature() { + ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant(signature_index, + Constants.CONSTANT_Utf8); + return c.getBytes(); + } + + /** + * Extends ByteArrayInputStream to make 'unreading' chars possible. + */ + private static final class MyByteArrayInputStream extends ByteArrayInputStream { + + MyByteArrayInputStream(String data) { + super(data.getBytes()); + } + + + final int mark() { + return pos; + } + + + final String getData() { + return new String(buf); + } + + + final void reset( int p ) { + pos = p; + } + + + final void unread() { + if (pos > 0) { + pos--; + } + } + } + + + private static boolean identStart( int ch ) { + return ch == 'T' || ch == 'L'; + } + + + private static final void matchIdent( MyByteArrayInputStream in, StringBuilder buf ) { + int ch; + if ((ch = in.read()) == -1) { + throw new RuntimeException("Illegal signature: " + in.getData() + + " no ident, reaching EOF"); + } + //System.out.println("return from ident:" + (char)ch); + if (!identStart(ch)) { + StringBuilder buf2 = new StringBuilder(); + int count = 1; + while (Character.isJavaIdentifierPart((char) ch)) { + buf2.append((char) ch); + count++; + ch = in.read(); + } + if (ch == ':') { // Ok, formal parameter + in.skip("Ljava/lang/Object".length()); + buf.append(buf2); + ch = in.read(); + in.unread(); + //System.out.println("so far:" + buf2 + ":next:" +(char)ch); + } else { + for (int i = 0; i < count; i++) { + in.unread(); + } + } + return; + } + StringBuilder buf2 = new StringBuilder(); + ch = in.read(); + do { + buf2.append((char) ch); + ch = in.read(); + //System.out.println("within ident:"+ (char)ch); + } while ((ch != -1) && (Character.isJavaIdentifierPart((char) ch) || (ch == '/'))); + buf.append(buf2.toString().replace('/', '.')); + //System.out.println("regular return ident:"+ (char)ch + ":" + buf2); + if (ch != -1) { + in.unread(); + } + } + + + private static final void matchGJIdent( MyByteArrayInputStream in, StringBuilder buf ) { + int ch; + matchIdent(in, buf); + ch = in.read(); + if ((ch == '<') || ch == '(') { // Parameterized or method + //System.out.println("Enter <"); + buf.append((char) ch); + matchGJIdent(in, buf); + while (((ch = in.read()) != '>') && (ch != ')')) { // List of parameters + if (ch == -1) { + throw new RuntimeException("Illegal signature: " + in.getData() + + " reaching EOF"); + } + //System.out.println("Still no >"); + buf.append(", "); + in.unread(); + matchGJIdent(in, buf); // Recursive call + } + //System.out.println("Exit >"); + buf.append((char) ch); + } else { + in.unread(); + } + ch = in.read(); + if (identStart(ch)) { + in.unread(); + matchGJIdent(in, buf); + } else if (ch == ')') { + in.unread(); + return; + } else if (ch != ';') { + throw new RuntimeException("Illegal signature: " + in.getData() + " read " + (char) ch); + } + } + + + public static String translate( String s ) { + //System.out.println("Sig:" + s); + StringBuilder buf = new StringBuilder(); + matchGJIdent(new MyByteArrayInputStream(s), buf); + return buf.toString(); + } + + + public static final boolean isFormalParameterList( String s ) { + return s.startsWith("<") && (s.indexOf(':') > 0); + } + + + public static final boolean isActualParameterList( String s ) { + return s.startsWith("L") && s.endsWith(">;"); + } + + + /** + * @return String representation + */ + public final String toString() { + String s = getSignature(); + return "Signature(" + s + ")"; + } + + + /** + * @return deep copy of this attribute + */ + public Attribute copy( ConstantPool _constant_pool ) { + return (Signature) clone(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/SourceFile.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/SourceFile.java index 3218c405..8354fc30 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/SourceFile.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/SourceFile.java @@ -1,146 +1,146 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from Attribute and represents a reference - * to the source file of this class. At most one SourceFile attribute - * should appear per classfile. The intention of this class is that it is - * instantiated from the Attribute.readAttribute() method. - * - * @version $Id: SourceFile.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - */ -public final class SourceFile extends Attribute { - - private int sourcefile_index; - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public SourceFile(SourceFile c) { - this(c.getNameIndex(), c.getLength(), c.getSourceFileIndex(), c.getConstantPool()); - } - - - /** - * Construct object from file stream. - * @param name_index Index in constant pool to CONSTANT_Utf8 - * @param length Content length in bytes - * @param file Input stream - * @param constant_pool Array of constants - * @throws IOException - */ - SourceFile(int name_index, int length, DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(name_index, length, file.readUnsignedShort(), constant_pool); - } - - - /** - * @param name_index Index in constant pool to CONSTANT_Utf8, which - * should represent the string "SourceFile". - * @param length Content length in bytes, the value should be 2. - * @param constant_pool The constant pool that this attribute is - * associated with. - * @param sourcefile_index Index in constant pool to CONSTANT_Utf8. This - * string will be interpreted as the name of the file from which this - * class was compiled. It will not be interpreted as indicating the name - * of the directory contqining the file or an absolute path; this - * information has to be supplied the consumer of this attribute - in - * many cases, the JVM. - */ - public SourceFile(int name_index, int length, int sourcefile_index, ConstantPool constant_pool) { - super(Constants.ATTR_SOURCE_FILE, name_index, length, constant_pool); - this.sourcefile_index = sourcefile_index; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitSourceFile(this); - } - - - /** - * Dump source file attribute to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - super.dump(file); - file.writeShort(sourcefile_index); - } - - - /** - * @return Index in constant pool of source file name. - */ - public final int getSourceFileIndex() { - return sourcefile_index; - } - - - /** - * @param sourcefile_index - */ - public final void setSourceFileIndex( int sourcefile_index ) { - this.sourcefile_index = sourcefile_index; - } - - - /** - * @return Source file name. - */ - public final String getSourceFileName() { - ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant(sourcefile_index, - Constants.CONSTANT_Utf8); - return c.getBytes(); - } - - - /** - * @return String representation - */ - public final String toString() { - return "SourceFile(" + getSourceFileName() + ")"; - } - - - /** - * @return deep copy of this attribute - */ - public Attribute copy( ConstantPool _constant_pool ) { - return (SourceFile) clone(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from Attribute and represents a reference + * to the source file of this class. At most one SourceFile attribute + * should appear per classfile. The intention of this class is that it is + * instantiated from the Attribute.readAttribute() method. + * + * @version $Id: SourceFile.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Attribute + */ +public final class SourceFile extends Attribute { + + private int sourcefile_index; + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use clone() for a physical copy. + */ + public SourceFile(SourceFile c) { + this(c.getNameIndex(), c.getLength(), c.getSourceFileIndex(), c.getConstantPool()); + } + + + /** + * Construct object from file stream. + * @param name_index Index in constant pool to CONSTANT_Utf8 + * @param length Content length in bytes + * @param file Input stream + * @param constant_pool Array of constants + * @throws IOException + */ + SourceFile(int name_index, int length, DataInputStream file, ConstantPool constant_pool) + throws IOException { + this(name_index, length, file.readUnsignedShort(), constant_pool); + } + + + /** + * @param name_index Index in constant pool to CONSTANT_Utf8, which + * should represent the string "SourceFile". + * @param length Content length in bytes, the value should be 2. + * @param constant_pool The constant pool that this attribute is + * associated with. + * @param sourcefile_index Index in constant pool to CONSTANT_Utf8. This + * string will be interpreted as the name of the file from which this + * class was compiled. It will not be interpreted as indicating the name + * of the directory contqining the file or an absolute path; this + * information has to be supplied the consumer of this attribute - in + * many cases, the JVM. + */ + public SourceFile(int name_index, int length, int sourcefile_index, ConstantPool constant_pool) { + super(Constants.ATTR_SOURCE_FILE, name_index, length, constant_pool); + this.sourcefile_index = sourcefile_index; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitSourceFile(this); + } + + + /** + * Dump source file attribute to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + super.dump(file); + file.writeShort(sourcefile_index); + } + + + /** + * @return Index in constant pool of source file name. + */ + public final int getSourceFileIndex() { + return sourcefile_index; + } + + + /** + * @param sourcefile_index + */ + public final void setSourceFileIndex( int sourcefile_index ) { + this.sourcefile_index = sourcefile_index; + } + + + /** + * @return Source file name. + */ + public final String getSourceFileName() { + ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant(sourcefile_index, + Constants.CONSTANT_Utf8); + return c.getBytes(); + } + + + /** + * @return String representation + */ + public final String toString() { + return "SourceFile(" + getSourceFileName() + ")"; + } + + + /** + * @return deep copy of this attribute + */ + public Attribute copy( ConstantPool _constant_pool ) { + return (SourceFile) clone(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/StackMap.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/StackMap.java index eb723569..2e1d45fe 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/StackMap.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/StackMap.java @@ -1,154 +1,154 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class represents a stack map attribute used for - * preverification of Java classes for the Java 2 Micro Edition - * (J2ME). This attribute is used by the KVM and contained - * within the Code attribute of a method. See CLDC specification - * paragraph 5.3.1.2 - * - * @version $Id: StackMap.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Code - * @see StackMapEntry - * @see StackMapType - */ -public final class StackMap extends Attribute implements Node { - - private int map_length; - private StackMapEntry[] map; // Table of stack map entries - - - /* - * @param name_index Index of name - * @param length Content length in bytes - * @param map Table of stack map entries - * @param constant_pool Array of constants - */ - public StackMap(int name_index, int length, StackMapEntry[] map, ConstantPool constant_pool) { - super(Constants.ATTR_STACK_MAP, name_index, length, constant_pool); - setStackMap(map); - } - - - /** - * Construct object from file stream. - * @param name_index Index of name - * @param length Content length in bytes - * @param file Input stream - * @param constant_pool Array of constants - * @throws IOException - */ - StackMap(int name_index, int length, DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(name_index, length, (StackMapEntry[]) null, constant_pool); - map_length = file.readUnsignedShort(); - map = new StackMapEntry[map_length]; - for (int i = 0; i < map_length; i++) { - map[i] = new StackMapEntry(file, constant_pool); - } - } - - - /** - * Dump line number table attribute to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - super.dump(file); - file.writeShort(map_length); - for (int i = 0; i < map_length; i++) { - map[i].dump(file); - } - } - - - /** - * @return Array of stack map entries - */ - public final StackMapEntry[] getStackMap() { - return map; - } - - - /** - * @param map Array of stack map entries - */ - public final void setStackMap( StackMapEntry[] map ) { - this.map = map; - map_length = (map == null) ? 0 : map.length; - } - - - /** - * @return String representation. - */ - public final String toString() { - StringBuilder buf = new StringBuilder("StackMap("); - for (int i = 0; i < map_length; i++) { - buf.append(map[i].toString()); - if (i < map_length - 1) { - buf.append(", "); - } - } - buf.append(')'); - return buf.toString(); - } - - - /** - * @return deep copy of this attribute - */ - public Attribute copy( ConstantPool _constant_pool ) { - StackMap c = (StackMap) clone(); - c.map = new StackMapEntry[map_length]; - for (int i = 0; i < map_length; i++) { - c.map[i] = map[i].copy(); - } - c.constant_pool = _constant_pool; - return c; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackMap(this); - } - - - public final int getMapLength() { - return map_length; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class represents a stack map attribute used for + * preverification of Java classes for the Java 2 Micro Edition + * (J2ME). This attribute is used by the KVM and contained + * within the Code attribute of a method. See CLDC specification + * paragraph 5.3.1.2 + * + * @version $Id: StackMap.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Code + * @see StackMapEntry + * @see StackMapType + */ +public final class StackMap extends Attribute implements Node { + + private int map_length; + private StackMapEntry[] map; // Table of stack map entries + + + /* + * @param name_index Index of name + * @param length Content length in bytes + * @param map Table of stack map entries + * @param constant_pool Array of constants + */ + public StackMap(int name_index, int length, StackMapEntry[] map, ConstantPool constant_pool) { + super(Constants.ATTR_STACK_MAP, name_index, length, constant_pool); + setStackMap(map); + } + + + /** + * Construct object from file stream. + * @param name_index Index of name + * @param length Content length in bytes + * @param file Input stream + * @param constant_pool Array of constants + * @throws IOException + */ + StackMap(int name_index, int length, DataInputStream file, ConstantPool constant_pool) + throws IOException { + this(name_index, length, (StackMapEntry[]) null, constant_pool); + map_length = file.readUnsignedShort(); + map = new StackMapEntry[map_length]; + for (int i = 0; i < map_length; i++) { + map[i] = new StackMapEntry(file, constant_pool); + } + } + + + /** + * Dump line number table attribute to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + super.dump(file); + file.writeShort(map_length); + for (int i = 0; i < map_length; i++) { + map[i].dump(file); + } + } + + + /** + * @return Array of stack map entries + */ + public final StackMapEntry[] getStackMap() { + return map; + } + + + /** + * @param map Array of stack map entries + */ + public final void setStackMap( StackMapEntry[] map ) { + this.map = map; + map_length = (map == null) ? 0 : map.length; + } + + + /** + * @return String representation. + */ + public final String toString() { + StringBuilder buf = new StringBuilder("StackMap("); + for (int i = 0; i < map_length; i++) { + buf.append(map[i].toString()); + if (i < map_length - 1) { + buf.append(", "); + } + } + buf.append(')'); + return buf.toString(); + } + + + /** + * @return deep copy of this attribute + */ + public Attribute copy( ConstantPool _constant_pool ) { + StackMap c = (StackMap) clone(); + c.map = new StackMapEntry[map_length]; + for (int i = 0; i < map_length; i++) { + c.map[i] = map[i].copy(); + } + c.constant_pool = _constant_pool; + return c; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackMap(this); + } + + + public final int getMapLength() { + return map_length; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/StackMapEntry.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/StackMapEntry.java index 4216848c..9ba32e91 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/StackMapEntry.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/StackMapEntry.java @@ -1,212 +1,212 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -/** - * This class represents a stack map entry recording the types of - * local variables and the the of stack items at a given byte code offset. - * See CLDC specification paragraph 5.3.1.2 - * - * @version $Id: StackMapEntry.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see StackMap - * @see StackMapType - */ -public final class StackMapEntry implements Cloneable { - - private int byte_code_offset; - private int number_of_locals; - private StackMapType[] types_of_locals; - private int number_of_stack_items; - private StackMapType[] types_of_stack_items; - private ConstantPool constant_pool; - - - /** - * Construct object from file stream. - * @param file Input stream - * @throws IOException - */ - StackMapEntry(DataInputStream file, ConstantPool constant_pool) throws IOException { - this(file.readShort(), file.readShort(), null, -1, null, constant_pool); - types_of_locals = new StackMapType[number_of_locals]; - for (int i = 0; i < number_of_locals; i++) { - types_of_locals[i] = new StackMapType(file, constant_pool); - } - number_of_stack_items = file.readShort(); - types_of_stack_items = new StackMapType[number_of_stack_items]; - for (int i = 0; i < number_of_stack_items; i++) { - types_of_stack_items[i] = new StackMapType(file, constant_pool); - } - } - - - public StackMapEntry(int byte_code_offset, int number_of_locals, - StackMapType[] types_of_locals, int number_of_stack_items, - StackMapType[] types_of_stack_items, ConstantPool constant_pool) { - this.byte_code_offset = byte_code_offset; - this.number_of_locals = number_of_locals; - this.types_of_locals = types_of_locals; - this.number_of_stack_items = number_of_stack_items; - this.types_of_stack_items = types_of_stack_items; - this.constant_pool = constant_pool; - } - - - /** - * Dump stack map entry - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeShort(byte_code_offset); - file.writeShort(number_of_locals); - for (int i = 0; i < number_of_locals; i++) { - types_of_locals[i].dump(file); - } - file.writeShort(number_of_stack_items); - for (int i = 0; i < number_of_stack_items; i++) { - types_of_stack_items[i].dump(file); - } - } - - - /** - * @return String representation. - */ - public final String toString() { - StringBuilder buf = new StringBuilder(64); - buf.append("(offset=").append(byte_code_offset); - if (number_of_locals > 0) { - buf.append(", locals={"); - for (int i = 0; i < number_of_locals; i++) { - buf.append(types_of_locals[i]); - if (i < number_of_locals - 1) { - buf.append(", "); - } - } - buf.append("}"); - } - if (number_of_stack_items > 0) { - buf.append(", stack items={"); - for (int i = 0; i < number_of_stack_items; i++) { - buf.append(types_of_stack_items[i]); - if (i < number_of_stack_items - 1) { - buf.append(", "); - } - } - buf.append("}"); - } - buf.append(")"); - return buf.toString(); - } - - - public void setByteCodeOffset( int b ) { - byte_code_offset = b; - } - - - public int getByteCodeOffset() { - return byte_code_offset; - } - - - public void setNumberOfLocals( int n ) { - number_of_locals = n; - } - - - public int getNumberOfLocals() { - return number_of_locals; - } - - - public void setTypesOfLocals( StackMapType[] t ) { - types_of_locals = t; - } - - - public StackMapType[] getTypesOfLocals() { - return types_of_locals; - } - - - public void setNumberOfStackItems( int n ) { - number_of_stack_items = n; - } - - - public int getNumberOfStackItems() { - return number_of_stack_items; - } - - - public void setTypesOfStackItems( StackMapType[] t ) { - types_of_stack_items = t; - } - - - public StackMapType[] getTypesOfStackItems() { - return types_of_stack_items; - } - - - /** - * @return deep copy of this object - */ - public StackMapEntry copy() { - try { - return (StackMapEntry) clone(); - } catch (CloneNotSupportedException e) { - } - return null; - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackMapEntry(this); - } - - - /** - * @return Constant pool used by this object. - */ - public final ConstantPool getConstantPool() { - return constant_pool; - } - - - /** - * @param constant_pool Constant pool to be used for this object. - */ - public final void setConstantPool( ConstantPool constant_pool ) { - this.constant_pool = constant_pool; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +/** + * This class represents a stack map entry recording the types of + * local variables and the the of stack items at a given byte code offset. + * See CLDC specification paragraph 5.3.1.2 + * + * @version $Id: StackMapEntry.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see StackMap + * @see StackMapType + */ +public final class StackMapEntry implements Cloneable { + + private int byte_code_offset; + private int number_of_locals; + private StackMapType[] types_of_locals; + private int number_of_stack_items; + private StackMapType[] types_of_stack_items; + private ConstantPool constant_pool; + + + /** + * Construct object from file stream. + * @param file Input stream + * @throws IOException + */ + StackMapEntry(DataInputStream file, ConstantPool constant_pool) throws IOException { + this(file.readShort(), file.readShort(), null, -1, null, constant_pool); + types_of_locals = new StackMapType[number_of_locals]; + for (int i = 0; i < number_of_locals; i++) { + types_of_locals[i] = new StackMapType(file, constant_pool); + } + number_of_stack_items = file.readShort(); + types_of_stack_items = new StackMapType[number_of_stack_items]; + for (int i = 0; i < number_of_stack_items; i++) { + types_of_stack_items[i] = new StackMapType(file, constant_pool); + } + } + + + public StackMapEntry(int byte_code_offset, int number_of_locals, + StackMapType[] types_of_locals, int number_of_stack_items, + StackMapType[] types_of_stack_items, ConstantPool constant_pool) { + this.byte_code_offset = byte_code_offset; + this.number_of_locals = number_of_locals; + this.types_of_locals = types_of_locals; + this.number_of_stack_items = number_of_stack_items; + this.types_of_stack_items = types_of_stack_items; + this.constant_pool = constant_pool; + } + + + /** + * Dump stack map entry + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeShort(byte_code_offset); + file.writeShort(number_of_locals); + for (int i = 0; i < number_of_locals; i++) { + types_of_locals[i].dump(file); + } + file.writeShort(number_of_stack_items); + for (int i = 0; i < number_of_stack_items; i++) { + types_of_stack_items[i].dump(file); + } + } + + + /** + * @return String representation. + */ + public final String toString() { + StringBuilder buf = new StringBuilder(64); + buf.append("(offset=").append(byte_code_offset); + if (number_of_locals > 0) { + buf.append(", locals={"); + for (int i = 0; i < number_of_locals; i++) { + buf.append(types_of_locals[i]); + if (i < number_of_locals - 1) { + buf.append(", "); + } + } + buf.append("}"); + } + if (number_of_stack_items > 0) { + buf.append(", stack items={"); + for (int i = 0; i < number_of_stack_items; i++) { + buf.append(types_of_stack_items[i]); + if (i < number_of_stack_items - 1) { + buf.append(", "); + } + } + buf.append("}"); + } + buf.append(")"); + return buf.toString(); + } + + + public void setByteCodeOffset( int b ) { + byte_code_offset = b; + } + + + public int getByteCodeOffset() { + return byte_code_offset; + } + + + public void setNumberOfLocals( int n ) { + number_of_locals = n; + } + + + public int getNumberOfLocals() { + return number_of_locals; + } + + + public void setTypesOfLocals( StackMapType[] t ) { + types_of_locals = t; + } + + + public StackMapType[] getTypesOfLocals() { + return types_of_locals; + } + + + public void setNumberOfStackItems( int n ) { + number_of_stack_items = n; + } + + + public int getNumberOfStackItems() { + return number_of_stack_items; + } + + + public void setTypesOfStackItems( StackMapType[] t ) { + types_of_stack_items = t; + } + + + public StackMapType[] getTypesOfStackItems() { + return types_of_stack_items; + } + + + /** + * @return deep copy of this object + */ + public StackMapEntry copy() { + try { + return (StackMapEntry) clone(); + } catch (CloneNotSupportedException e) { + } + return null; + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackMapEntry(this); + } + + + /** + * @return Constant pool used by this object. + */ + public final ConstantPool getConstantPool() { + return constant_pool; + } + + + /** + * @param constant_pool Constant pool to be used for this object. + */ + public final void setConstantPool( ConstantPool constant_pool ) { + this.constant_pool = constant_pool; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/StackMapType.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/StackMapType.java index 771a6742..36fc7aca 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/StackMapType.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/StackMapType.java @@ -1,162 +1,162 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class represents the type of a local variable or item on stack - * used in the StackMap entries. - * - * @version $Id: StackMapType.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see StackMapEntry - * @see StackMap - * @see Constants - */ -public final class StackMapType implements Cloneable { - - private byte type; - private int index = -1; // Index to CONSTANT_Class or offset - private ConstantPool constant_pool; - - - /** - * Construct object from file stream. - * @param file Input stream - * @throws IOException - */ - StackMapType(DataInputStream file, ConstantPool constant_pool) throws IOException { - this(file.readByte(), -1, constant_pool); - if (hasIndex()) { - setIndex(file.readShort()); - } - setConstantPool(constant_pool); - } - - - /** - * @param type type tag as defined in the Constants interface - * @param index index to constant pool, or byte code offset - */ - public StackMapType(byte type, int index, ConstantPool constant_pool) { - setType(type); - setIndex(index); - setConstantPool(constant_pool); - } - - - public void setType( byte t ) { - if ((t < Constants.ITEM_Bogus) || (t > Constants.ITEM_NewObject)) { - throw new RuntimeException("Illegal type for StackMapType: " + t); - } - type = t; - } - - - public byte getType() { - return type; - } - - - public void setIndex( int t ) { - index = t; - } - - - /** @return index to constant pool if type == ITEM_Object, or offset - * in byte code, if type == ITEM_NewObject, and -1 otherwise - */ - public int getIndex() { - return index; - } - - - /** - * Dump type entries to file. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - file.writeByte(type); - if (hasIndex()) { - file.writeShort(getIndex()); - } - } - - - /** @return true, if type is either ITEM_Object or ITEM_NewObject - */ - public final boolean hasIndex() { - return ((type == Constants.ITEM_Object) || (type == Constants.ITEM_NewObject)); - } - - - private String printIndex() { - if (type == Constants.ITEM_Object) { - if (index < 0) { - return ", class="; - } - return ", class=" + constant_pool.constantToString(index, Constants.CONSTANT_Class); - } else if (type == Constants.ITEM_NewObject) { - return ", offset=" + index; - } else { - return ""; - } - } - - - /** - * @return String representation - */ - public final String toString() { - return "(type=" + Constants.ITEM_NAMES[type] + printIndex() + ")"; - } - - - /** - * @return deep copy of this object - */ - public StackMapType copy() { - try { - return (StackMapType) clone(); - } catch (CloneNotSupportedException e) { - } - return null; - } - - - /** - * @return Constant pool used by this object. - */ - public final ConstantPool getConstantPool() { - return constant_pool; - } - - - /** - * @param constant_pool Constant pool to be used for this object. - */ - public final void setConstantPool( ConstantPool constant_pool ) { - this.constant_pool = constant_pool; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class represents the type of a local variable or item on stack + * used in the StackMap entries. + * + * @version $Id: StackMapType.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see StackMapEntry + * @see StackMap + * @see Constants + */ +public final class StackMapType implements Cloneable { + + private byte type; + private int index = -1; // Index to CONSTANT_Class or offset + private ConstantPool constant_pool; + + + /** + * Construct object from file stream. + * @param file Input stream + * @throws IOException + */ + StackMapType(DataInputStream file, ConstantPool constant_pool) throws IOException { + this(file.readByte(), -1, constant_pool); + if (hasIndex()) { + setIndex(file.readShort()); + } + setConstantPool(constant_pool); + } + + + /** + * @param type type tag as defined in the Constants interface + * @param index index to constant pool, or byte code offset + */ + public StackMapType(byte type, int index, ConstantPool constant_pool) { + setType(type); + setIndex(index); + setConstantPool(constant_pool); + } + + + public void setType( byte t ) { + if ((t < Constants.ITEM_Bogus) || (t > Constants.ITEM_NewObject)) { + throw new RuntimeException("Illegal type for StackMapType: " + t); + } + type = t; + } + + + public byte getType() { + return type; + } + + + public void setIndex( int t ) { + index = t; + } + + + /** @return index to constant pool if type == ITEM_Object, or offset + * in byte code, if type == ITEM_NewObject, and -1 otherwise + */ + public int getIndex() { + return index; + } + + + /** + * Dump type entries to file. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + file.writeByte(type); + if (hasIndex()) { + file.writeShort(getIndex()); + } + } + + + /** @return true, if type is either ITEM_Object or ITEM_NewObject + */ + public final boolean hasIndex() { + return ((type == Constants.ITEM_Object) || (type == Constants.ITEM_NewObject)); + } + + + private String printIndex() { + if (type == Constants.ITEM_Object) { + if (index < 0) { + return ", class="; + } + return ", class=" + constant_pool.constantToString(index, Constants.CONSTANT_Class); + } else if (type == Constants.ITEM_NewObject) { + return ", offset=" + index; + } else { + return ""; + } + } + + + /** + * @return String representation + */ + public final String toString() { + return "(type=" + Constants.ITEM_NAMES[type] + printIndex() + ")"; + } + + + /** + * @return deep copy of this object + */ + public StackMapType copy() { + try { + return (StackMapType) clone(); + } catch (CloneNotSupportedException e) { + } + return null; + } + + + /** + * @return Constant pool used by this object. + */ + public final ConstantPool getConstantPool() { + return constant_pool; + } + + + /** + * @param constant_pool Constant pool to be used for this object. + */ + public final void setConstantPool( ConstantPool constant_pool ) { + this.constant_pool = constant_pool; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Synthetic.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Synthetic.java index d3839cf0..ef82ad09 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Synthetic.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Synthetic.java @@ -1,151 +1,151 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class is derived from Attribute and declares this class as - * `synthetic', i.e., it needs special handling. The JVM specification - * states "A class member that does not appear in the source code must be - * marked using a Synthetic attribute." It may appear in the ClassFile - * attribute table, a field_info table or a method_info table. This class - * is intended to be instantiated from the - * Attribute.readAttribute() method. - * - * @version $Id: Synthetic.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - */ -public final class Synthetic extends Attribute { - - private byte[] bytes; - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use copy() for a physical copy. - */ - public Synthetic(Synthetic c) { - this(c.getNameIndex(), c.getLength(), c.getBytes(), c.getConstantPool()); - } - - - /** - * @param name_index Index in constant pool to CONSTANT_Utf8, which - * should represent the string "Synthetic". - * @param length Content length in bytes - should be zero. - * @param bytes Attribute contents - * @param constant_pool The constant pool this attribute is associated - * with. - */ - public Synthetic(int name_index, int length, byte[] bytes, ConstantPool constant_pool) { - super(Constants.ATTR_SYNTHETIC, name_index, length, constant_pool); - this.bytes = bytes; - } - - - /** - * Construct object from file stream. - * @param name_index Index in constant pool to CONSTANT_Utf8 - * @param length Content length in bytes - * @param file Input stream - * @param constant_pool Array of constants - * @throws IOException - */ - Synthetic(int name_index, int length, DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(name_index, length, (byte[]) null, constant_pool); - if (length > 0) { - bytes = new byte[length]; - file.readFully(bytes); - System.err.println("Synthetic attribute with length > 0"); - } - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitSynthetic(this); - } - - - /** - * Dump source file attribute to file stream in binary format. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - super.dump(file); - if (length > 0) { - file.write(bytes, 0, length); - } - } - - - /** - * @return data bytes. - */ - public final byte[] getBytes() { - return bytes; - } - - - /** - * @param bytes - */ - public final void setBytes( byte[] bytes ) { - this.bytes = bytes; - } - - - /** - * @return String representation. - */ - public final String toString() { - StringBuilder buf = new StringBuilder("Synthetic"); - if (length > 0) { - buf.append(" ").append(Utility.toHexString(bytes)); - } - return buf.toString(); - } - - - /** - * @return deep copy of this attribute - */ - public Attribute copy( ConstantPool _constant_pool ) { - Synthetic c = (Synthetic) clone(); - if (bytes != null) { - c.bytes = new byte[bytes.length]; - System.arraycopy(bytes, 0, c.bytes, 0, bytes.length); - } - c.constant_pool = _constant_pool; - return c; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class is derived from Attribute and declares this class as + * `synthetic', i.e., it needs special handling. The JVM specification + * states "A class member that does not appear in the source code must be + * marked using a Synthetic attribute." It may appear in the ClassFile + * attribute table, a field_info table or a method_info table. This class + * is intended to be instantiated from the + * Attribute.readAttribute() method. + * + * @version $Id: Synthetic.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Attribute + */ +public final class Synthetic extends Attribute { + + private byte[] bytes; + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use copy() for a physical copy. + */ + public Synthetic(Synthetic c) { + this(c.getNameIndex(), c.getLength(), c.getBytes(), c.getConstantPool()); + } + + + /** + * @param name_index Index in constant pool to CONSTANT_Utf8, which + * should represent the string "Synthetic". + * @param length Content length in bytes - should be zero. + * @param bytes Attribute contents + * @param constant_pool The constant pool this attribute is associated + * with. + */ + public Synthetic(int name_index, int length, byte[] bytes, ConstantPool constant_pool) { + super(Constants.ATTR_SYNTHETIC, name_index, length, constant_pool); + this.bytes = bytes; + } + + + /** + * Construct object from file stream. + * @param name_index Index in constant pool to CONSTANT_Utf8 + * @param length Content length in bytes + * @param file Input stream + * @param constant_pool Array of constants + * @throws IOException + */ + Synthetic(int name_index, int length, DataInputStream file, ConstantPool constant_pool) + throws IOException { + this(name_index, length, (byte[]) null, constant_pool); + if (length > 0) { + bytes = new byte[length]; + file.readFully(bytes); + System.err.println("Synthetic attribute with length > 0"); + } + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitSynthetic(this); + } + + + /** + * Dump source file attribute to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + super.dump(file); + if (length > 0) { + file.write(bytes, 0, length); + } + } + + + /** + * @return data bytes. + */ + public final byte[] getBytes() { + return bytes; + } + + + /** + * @param bytes + */ + public final void setBytes( byte[] bytes ) { + this.bytes = bytes; + } + + + /** + * @return String representation. + */ + public final String toString() { + StringBuilder buf = new StringBuilder("Synthetic"); + if (length > 0) { + buf.append(" ").append(Utility.toHexString(bytes)); + } + return buf.toString(); + } + + + /** + * @return deep copy of this attribute + */ + public Attribute copy( ConstantPool _constant_pool ) { + Synthetic c = (Synthetic) clone(); + if (bytes != null) { + c.bytes = new byte[bytes.length]; + System.arraycopy(bytes, 0, c.bytes, 0, bytes.length); + } + c.constant_pool = _constant_pool; + return c; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Unknown.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Unknown.java index 35a7c864..ec7a84b3 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Unknown.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Unknown.java @@ -1,189 +1,189 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import org.apache.bcel5_2_0.Constants; - -/** - * This class represents a reference to an unknown (i.e., - * application-specific) attribute of a class. It is instantiated from the - * Attribute.readAttribute() method. Applications that need to - * read in application-specific attributes should create an AttributeReader implementation and - * attach it via Attribute.addAttributeReader. - - * - * @version $Id: Unknown.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @see org.apache.bcel5_2_0.classfile.Attribute - * @see org.apache.bcel5_2_0.classfile.AttributeReader - * @author M. Dahm - */ -public final class Unknown extends Attribute { - - private byte[] bytes; - private String name; - private static Map unknown_attributes = new HashMap(); - - - /** @return array of unknown attributes, but just one for each kind. - */ - static Unknown[] getUnknownAttributes() { - Unknown[] unknowns = new Unknown[unknown_attributes.size()]; - Iterator entries = unknown_attributes.values().iterator(); - for (int i = 0; entries.hasNext(); i++) { - unknowns[i] = (Unknown) entries.next(); - } - unknown_attributes.clear(); - return unknowns; - } - - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public Unknown(Unknown c) { - this(c.getNameIndex(), c.getLength(), c.getBytes(), c.getConstantPool()); - } - - - /** - * Create a non-standard attribute. - * - * @param name_index Index in constant pool - * @param length Content length in bytes - * @param bytes Attribute contents - * @param constant_pool Array of constants - */ - public Unknown(int name_index, int length, byte[] bytes, ConstantPool constant_pool) { - super(Constants.ATTR_UNKNOWN, name_index, length, constant_pool); - this.bytes = bytes; - name = ((ConstantUtf8) constant_pool.getConstant(name_index, Constants.CONSTANT_Utf8)) - .getBytes(); - unknown_attributes.put(name, this); - } - - - /** - * Construct object from file stream. - * @param name_index Index in constant pool - * @param length Content length in bytes - * @param file Input stream - * @param constant_pool Array of constants - * @throws IOException - */ - Unknown(int name_index, int length, DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(name_index, length, (byte[]) null, constant_pool); - if (length > 0) { - bytes = new byte[length]; - file.readFully(bytes); - } - } - - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitUnknown(this); - } - - - /** - * Dump unknown bytes to file stream. - * - * @param file Output file stream - * @throws IOException - */ - public final void dump( DataOutputStream file ) throws IOException { - super.dump(file); - if (length > 0) { - file.write(bytes, 0, length); - } - } - - - /** - * @return data bytes. - */ - public final byte[] getBytes() { - return bytes; - } - - - /** - * @return name of attribute. - */ - public final String getName() { - return name; - } - - - /** - * @param bytes the bytes to set - */ - public final void setBytes( byte[] bytes ) { - this.bytes = bytes; - } - - - /** - * @return String representation. - */ - public final String toString() { - if (length == 0 || bytes == null) { - return "(Unknown attribute " + name + ")"; - } - String hex; - if (length > 10) { - byte[] tmp = new byte[10]; - System.arraycopy(bytes, 0, tmp, 0, 10); - hex = Utility.toHexString(tmp) + "... (truncated)"; - } else { - hex = Utility.toHexString(bytes); - } - return "(Unknown attribute " + name + ": " + hex + ")"; - } - - - /** - * @return deep copy of this attribute - */ - public Attribute copy( ConstantPool _constant_pool ) { - Unknown c = (Unknown) clone(); - if (bytes != null) { - c.bytes = new byte[bytes.length]; - System.arraycopy(bytes, 0, c.bytes, 0, bytes.length); - } - c.constant_pool = _constant_pool; - return c; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.apache.bcel5_2_0.Constants; + +/** + * This class represents a reference to an unknown (i.e., + * application-specific) attribute of a class. It is instantiated from the + * Attribute.readAttribute() method. Applications that need to + * read in application-specific attributes should create an AttributeReader implementation and + * attach it via Attribute.addAttributeReader. + + * + * @version $Id: Unknown.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @see org.apache.bcel5_2_0.classfile.Attribute + * @see org.apache.bcel5_2_0.classfile.AttributeReader + * @author M. Dahm + */ +public final class Unknown extends Attribute { + + private byte[] bytes; + private String name; + private static Map unknown_attributes = new HashMap(); + + + /** @return array of unknown attributes, but just one for each kind. + */ + static Unknown[] getUnknownAttributes() { + Unknown[] unknowns = new Unknown[unknown_attributes.size()]; + Iterator entries = unknown_attributes.values().iterator(); + for (int i = 0; entries.hasNext(); i++) { + unknowns[i] = (Unknown) entries.next(); + } + unknown_attributes.clear(); + return unknowns; + } + + + /** + * Initialize from another object. Note that both objects use the same + * references (shallow copy). Use clone() for a physical copy. + */ + public Unknown(Unknown c) { + this(c.getNameIndex(), c.getLength(), c.getBytes(), c.getConstantPool()); + } + + + /** + * Create a non-standard attribute. + * + * @param name_index Index in constant pool + * @param length Content length in bytes + * @param bytes Attribute contents + * @param constant_pool Array of constants + */ + public Unknown(int name_index, int length, byte[] bytes, ConstantPool constant_pool) { + super(Constants.ATTR_UNKNOWN, name_index, length, constant_pool); + this.bytes = bytes; + name = ((ConstantUtf8) constant_pool.getConstant(name_index, Constants.CONSTANT_Utf8)) + .getBytes(); + unknown_attributes.put(name, this); + } + + + /** + * Construct object from file stream. + * @param name_index Index in constant pool + * @param length Content length in bytes + * @param file Input stream + * @param constant_pool Array of constants + * @throws IOException + */ + Unknown(int name_index, int length, DataInputStream file, ConstantPool constant_pool) + throws IOException { + this(name_index, length, (byte[]) null, constant_pool); + if (length > 0) { + bytes = new byte[length]; + file.readFully(bytes); + } + } + + + /** + * Called by objects that are traversing the nodes of the tree implicitely + * defined by the contents of a Java class. I.e., the hierarchy of methods, + * fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitUnknown(this); + } + + + /** + * Dump unknown bytes to file stream. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump( DataOutputStream file ) throws IOException { + super.dump(file); + if (length > 0) { + file.write(bytes, 0, length); + } + } + + + /** + * @return data bytes. + */ + public final byte[] getBytes() { + return bytes; + } + + + /** + * @return name of attribute. + */ + public final String getName() { + return name; + } + + + /** + * @param bytes the bytes to set + */ + public final void setBytes( byte[] bytes ) { + this.bytes = bytes; + } + + + /** + * @return String representation. + */ + public final String toString() { + if (length == 0 || bytes == null) { + return "(Unknown attribute " + name + ")"; + } + String hex; + if (length > 10) { + byte[] tmp = new byte[10]; + System.arraycopy(bytes, 0, tmp, 0, 10); + hex = Utility.toHexString(tmp) + "... (truncated)"; + } else { + hex = Utility.toHexString(bytes); + } + return "(Unknown attribute " + name + ": " + hex + ")"; + } + + + /** + * @return deep copy of this attribute + */ + public Attribute copy( ConstantPool _constant_pool ) { + Unknown c = (Unknown) clone(); + if (bytes != null) { + c.bytes = new byte[bytes.length]; + System.arraycopy(bytes, 0, c.bytes, 0, bytes.length); + } + c.constant_pool = _constant_pool; + return c; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Utility.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Utility.java index c1cd9bd9..7da4e812 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Utility.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Utility.java @@ -1,1344 +1,1344 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.CharArrayReader; -import java.io.CharArrayWriter; -import java.io.FilterReader; -import java.io.FilterWriter; -import java.io.IOException; -import java.io.PrintStream; -import java.io.PrintWriter; -import java.io.Reader; -import java.io.Writer; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.zip.GZIPInputStream; -import java.util.zip.GZIPOutputStream; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * Utility functions that do not really belong to any class in particular. - * - * @version $Id: Utility.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class Utility { - - private static int unwrap( ThreadLocal tl ) { - return ((Integer) tl.get()).intValue(); - } - - - private static void wrap( ThreadLocal tl, int value ) { - tl.set(new Integer(value)); - } - - private static ThreadLocal consumed_chars = new ThreadLocal() { - - protected Object initialValue() { - return new Integer(0); - } - };/* How many chars have been consumed - * during parsing in signatureToString(). - * Read by methodSignatureToString(). - * Set by side effect,but only internally. - */ - private static boolean wide = false; /* The `WIDE' instruction is used in the - * byte code to allow 16-bit wide indices - * for local variables. This opcode - * precedes an `ILOAD', e.g.. The opcode - * immediately following takes an extra - * byte which is combined with the - * following byte to form a - * 16-bit value. - */ - - - /** - * Convert bit field of flags into string such as `static final'. - * - * @param access_flags Access flags - * @return String representation of flags - */ - public static final String accessToString( int access_flags ) { - return accessToString(access_flags, false); - } - - - /** - * Convert bit field of flags into string such as `static final'. - * - * Special case: Classes compiled with new compilers and with the - * `ACC_SUPER' flag would be said to be "synchronized". This is - * because SUN used the same value for the flags `ACC_SUPER' and - * `ACC_SYNCHRONIZED'. - * - * @param access_flags Access flags - * @param for_class access flags are for class qualifiers ? - * @return String representation of flags - */ - public static final String accessToString( int access_flags, boolean for_class ) { - StringBuilder buf = new StringBuilder(); - int p = 0; - for (int i = 0; p < Constants.MAX_ACC_FLAG; i++) { // Loop through known flags - p = pow2(i); - if ((access_flags & p) != 0) { - /* Special case: Classes compiled with new compilers and with the - * `ACC_SUPER' flag would be said to be "synchronized". This is - * because SUN used the same value for the flags `ACC_SUPER' and - * `ACC_SYNCHRONIZED'. - */ - if (for_class && ((p == Constants.ACC_SUPER) || (p == Constants.ACC_INTERFACE))) { - continue; - } - buf.append(Constants.ACCESS_NAMES[i]).append(" "); - } - } - return buf.toString().trim(); - } - - - /** - * @return "class" or "interface", depending on the ACC_INTERFACE flag - */ - public static final String classOrInterface( int access_flags ) { - return ((access_flags & Constants.ACC_INTERFACE) != 0) ? "interface" : "class"; - } - - - /** - * Disassemble a byte array of JVM byte codes starting from code line - * `index' and return the disassembled string representation. Decode only - * `num' opcodes (including their operands), use -1 if you want to - * decompile everything. - * - * @param code byte code array - * @param constant_pool Array of constants - * @param index offset in `code' array - * (number of opcodes, not bytes!) - * @param length number of opcodes to decompile, -1 for all - * @param verbose be verbose, e.g. print constant pool index - * @return String representation of byte codes - */ - public static final String codeToString( byte[] code, ConstantPool constant_pool, int index, - int length, boolean verbose ) { - StringBuilder buf = new StringBuilder(code.length * 20); // Should be sufficient - ByteSequence stream = new ByteSequence(code); - try { - for (int i = 0; i < index; i++) { - codeToString(stream, constant_pool, verbose); - } - for (int i = 0; stream.available() > 0; i++) { - if ((length < 0) || (i < length)) { - String indices = fillup(stream.getIndex() + ":", 6, true, ' '); - buf.append(indices).append(codeToString(stream, constant_pool, verbose)) - .append('\n'); - } - } - } catch (IOException e) { - System.out.println(buf.toString()); - e.printStackTrace(); - throw new ClassFormatException("Byte code error: " + e); - } - return buf.toString(); - } - - - public static final String codeToString( byte[] code, ConstantPool constant_pool, int index, - int length ) { - return codeToString(code, constant_pool, index, length, true); - } - - - /** - * Disassemble a stream of byte codes and return the - * string representation. - * - * @param bytes stream of bytes - * @param constant_pool Array of constants - * @param verbose be verbose, e.g. print constant pool index - * @return String representation of byte code - */ - public static final String codeToString( ByteSequence bytes, ConstantPool constant_pool, - boolean verbose ) throws IOException { - short opcode = (short) bytes.readUnsignedByte(); - int default_offset = 0, low, high, npairs; - int index, vindex, constant; - int[] match, jump_table; - int no_pad_bytes = 0, offset; - StringBuilder buf = new StringBuilder(Constants.OPCODE_NAMES[opcode]); - /* Special case: Skip (0-3) padding bytes, i.e., the - * following bytes are 4-byte-aligned - */ - if ((opcode == Constants.TABLESWITCH) || (opcode == Constants.LOOKUPSWITCH)) { - int remainder = bytes.getIndex() % 4; - no_pad_bytes = (remainder == 0) ? 0 : 4 - remainder; - for (int i = 0; i < no_pad_bytes; i++) { - byte b; - if ((b = bytes.readByte()) != 0) { - System.err.println("Warning: Padding byte != 0 in " - + Constants.OPCODE_NAMES[opcode] + ":" + b); - } - } - // Both cases have a field default_offset in common - default_offset = bytes.readInt(); - } - switch (opcode) { - /* Table switch has variable length arguments. - */ - case Constants.TABLESWITCH: - low = bytes.readInt(); - high = bytes.readInt(); - offset = bytes.getIndex() - 12 - no_pad_bytes - 1; - default_offset += offset; - buf.append("\tdefault = ").append(default_offset).append(", low = ").append(low) - .append(", high = ").append(high).append("("); - jump_table = new int[high - low + 1]; - for (int i = 0; i < jump_table.length; i++) { - jump_table[i] = offset + bytes.readInt(); - buf.append(jump_table[i]); - if (i < jump_table.length - 1) { - buf.append(", "); - } - } - buf.append(")"); - break; - /* Lookup switch has variable length arguments. - */ - case Constants.LOOKUPSWITCH: { - npairs = bytes.readInt(); - offset = bytes.getIndex() - 8 - no_pad_bytes - 1; - match = new int[npairs]; - jump_table = new int[npairs]; - default_offset += offset; - buf.append("\tdefault = ").append(default_offset).append(", npairs = ").append( - npairs).append(" ("); - for (int i = 0; i < npairs; i++) { - match[i] = bytes.readInt(); - jump_table[i] = offset + bytes.readInt(); - buf.append("(").append(match[i]).append(", ").append(jump_table[i]).append(")"); - if (i < npairs - 1) { - buf.append(", "); - } - } - buf.append(")"); - } - break; - /* Two address bytes + offset from start of byte stream form the - * jump target - */ - case Constants.GOTO: - case Constants.IFEQ: - case Constants.IFGE: - case Constants.IFGT: - case Constants.IFLE: - case Constants.IFLT: - case Constants.JSR: - case Constants.IFNE: - case Constants.IFNONNULL: - case Constants.IFNULL: - case Constants.IF_ACMPEQ: - case Constants.IF_ACMPNE: - case Constants.IF_ICMPEQ: - case Constants.IF_ICMPGE: - case Constants.IF_ICMPGT: - case Constants.IF_ICMPLE: - case Constants.IF_ICMPLT: - case Constants.IF_ICMPNE: - buf.append("\t\t#").append((bytes.getIndex() - 1) + bytes.readShort()); - break; - /* 32-bit wide jumps - */ - case Constants.GOTO_W: - case Constants.JSR_W: - buf.append("\t\t#").append(((bytes.getIndex() - 1) + bytes.readInt())); - break; - /* Index byte references local variable (register) - */ - case Constants.ALOAD: - case Constants.ASTORE: - case Constants.DLOAD: - case Constants.DSTORE: - case Constants.FLOAD: - case Constants.FSTORE: - case Constants.ILOAD: - case Constants.ISTORE: - case Constants.LLOAD: - case Constants.LSTORE: - case Constants.RET: - if (wide) { - vindex = bytes.readUnsignedShort(); - wide = false; // Clear flag - } else { - vindex = bytes.readUnsignedByte(); - } - buf.append("\t\t%").append(vindex); - break; - /* - * Remember wide byte which is used to form a 16-bit address in the - * following instruction. Relies on that the method is called again with - * the following opcode. - */ - case Constants.WIDE: - wide = true; - buf.append("\t(wide)"); - break; - /* Array of basic type. - */ - case Constants.NEWARRAY: - buf.append("\t\t<").append(Constants.TYPE_NAMES[bytes.readByte()]).append(">"); - break; - /* Access object/class fields. - */ - case Constants.GETFIELD: - case Constants.GETSTATIC: - case Constants.PUTFIELD: - case Constants.PUTSTATIC: - index = bytes.readUnsignedShort(); - buf.append("\t\t").append( - constant_pool.constantToString(index, Constants.CONSTANT_Fieldref)).append( - (verbose ? " (" + index + ")" : "")); - break; - /* Operands are references to classes in constant pool - */ - case Constants.NEW: - case Constants.CHECKCAST: - buf.append("\t"); - case Constants.INSTANCEOF: - index = bytes.readUnsignedShort(); - buf.append("\t<").append( - constant_pool.constantToString(index, Constants.CONSTANT_Class)) - .append(">").append((verbose ? " (" + index + ")" : "")); - break; - /* Operands are references to methods in constant pool - */ - case Constants.INVOKESPECIAL: - case Constants.INVOKESTATIC: - case Constants.INVOKEVIRTUAL: - index = bytes.readUnsignedShort(); - buf.append("\t").append( - constant_pool.constantToString(index, Constants.CONSTANT_Methodref)) - .append((verbose ? " (" + index + ")" : "")); - break; - case Constants.INVOKEINTERFACE: - index = bytes.readUnsignedShort(); - int nargs = bytes.readUnsignedByte(); // historical, redundant - buf.append("\t").append( - constant_pool - .constantToString(index, Constants.CONSTANT_InterfaceMethodref)) - .append(verbose ? " (" + index + ")\t" : "").append(nargs).append("\t") - .append(bytes.readUnsignedByte()); // Last byte is a reserved space - break; - /* Operands are references to items in constant pool - */ - case Constants.LDC_W: - case Constants.LDC2_W: - index = bytes.readUnsignedShort(); - buf.append("\t\t").append( - constant_pool.constantToString(index, constant_pool.getConstant(index) - .getTag())).append((verbose ? " (" + index + ")" : "")); - break; - case Constants.LDC: - index = bytes.readUnsignedByte(); - buf.append("\t\t").append( - constant_pool.constantToString(index, constant_pool.getConstant(index) - .getTag())).append((verbose ? " (" + index + ")" : "")); - break; - /* Array of references. - */ - case Constants.ANEWARRAY: - index = bytes.readUnsignedShort(); - buf.append("\t\t<").append( - compactClassName(constant_pool.getConstantString(index, - Constants.CONSTANT_Class), false)).append(">").append( - (verbose ? " (" + index + ")" : "")); - break; - /* Multidimensional array of references. - */ - case Constants.MULTIANEWARRAY: { - index = bytes.readUnsignedShort(); - int dimensions = bytes.readUnsignedByte(); - buf.append("\t<").append( - compactClassName(constant_pool.getConstantString(index, - Constants.CONSTANT_Class), false)).append(">\t").append(dimensions) - .append((verbose ? " (" + index + ")" : "")); - } - break; - /* Increment local variable. - */ - case Constants.IINC: - if (wide) { - vindex = bytes.readUnsignedShort(); - constant = bytes.readShort(); - wide = false; - } else { - vindex = bytes.readUnsignedByte(); - constant = bytes.readByte(); - } - buf.append("\t\t%").append(vindex).append("\t").append(constant); - break; - default: - if (Constants.NO_OF_OPERANDS[opcode] > 0) { - for (int i = 0; i < Constants.TYPE_OF_OPERANDS[opcode].length; i++) { - buf.append("\t\t"); - switch (Constants.TYPE_OF_OPERANDS[opcode][i]) { - case Constants.T_BYTE: - buf.append(bytes.readByte()); - break; - case Constants.T_SHORT: - buf.append(bytes.readShort()); - break; - case Constants.T_INT: - buf.append(bytes.readInt()); - break; - default: // Never reached - System.err.println("Unreachable default case reached!"); - System.exit(-1); - } - } - } - } - return buf.toString(); - } - - - public static final String codeToString( ByteSequence bytes, ConstantPool constant_pool ) - throws IOException { - return codeToString(bytes, constant_pool, true); - } - - - /** - * Shorten long class names, java/lang/String becomes - * String. - * - * @param str The long class name - * @return Compacted class name - */ - public static final String compactClassName( String str ) { - return compactClassName(str, true); - } - - - /** - * Shorten long class name str, i.e., chop off the prefix, - * if the - * class name starts with this string and the flag chopit is true. - * Slashes / are converted to dots .. - * - * @param str The long class name - * @param prefix The prefix the get rid off - * @param chopit Flag that determines whether chopping is executed or not - * @return Compacted class name - */ - public static final String compactClassName( String str, String prefix, boolean chopit ) { - int len = prefix.length(); - str = str.replace('/', '.'); // Is `/' on all systems, even DOS - if (chopit) { - // If string starts with `prefix' and contains no further dots - if (str.startsWith(prefix) && (str.substring(len).indexOf('.') == -1)) { - str = str.substring(len); - } - } - return str; - } - - - /** - * Shorten long class names, java/lang/String becomes - * java.lang.String, - * e.g.. If chopit is true the prefix java.lang - * is also removed. - * - * @param str The long class name - * @param chopit Flag that determines whether chopping is executed or not - * @return Compacted class name - */ - public static final String compactClassName( String str, boolean chopit ) { - return compactClassName(str, "java.lang.", chopit); - } - - - /** - * @return `flag' with bit `i' set to 1 - */ - public static final int setBit( int flag, int i ) { - return flag | pow2(i); - } - - - /** - * @return `flag' with bit `i' set to 0 - */ - public static final int clearBit( int flag, int i ) { - int bit = pow2(i); - return (flag & bit) == 0 ? flag : flag ^ bit; - } - - - /** - * @return true, if bit `i' in `flag' is set - */ - public static final boolean isSet( int flag, int i ) { - return (flag & pow2(i)) != 0; - } - - - /** - * Converts string containing the method return and argument types - * to a byte code method signature. - * - * @param ret Return type of method - * @param argv Types of method arguments - * @return Byte code representation of method signature - */ - public final static String methodTypeToSignature( String ret, String[] argv ) - throws ClassFormatException { - StringBuilder buf = new StringBuilder("("); - String str; - if (argv != null) { - for (int i = 0; i < argv.length; i++) { - str = getSignature(argv[i]); - if (str.endsWith("V")) { - throw new ClassFormatException("Invalid type: " + argv[i]); - } - buf.append(str); - } - } - str = getSignature(ret); - buf.append(")").append(str); - return buf.toString(); - } - - - /** - * @param signature Method signature - * @return Array of argument types - * @throws ClassFormatException - */ - public static final String[] methodSignatureArgumentTypes( String signature ) - throws ClassFormatException { - return methodSignatureArgumentTypes(signature, true); - } - - - /** - * @param signature Method signature - * @param chopit Shorten class names ? - * @return Array of argument types - * @throws ClassFormatException - */ - public static final String[] methodSignatureArgumentTypes( String signature, boolean chopit ) - throws ClassFormatException { - List vec = new ArrayList(); - int index; - try { // Read all declarations between for `(' and `)' - if (signature.charAt(0) != '(') { - throw new ClassFormatException("Invalid method signature: " + signature); - } - index = 1; // current string position - while (signature.charAt(index) != ')') { - vec.add(signatureToString(signature.substring(index), chopit)); - //corrected concurrent private static field acess - index += unwrap(consumed_chars); // update position - } - } catch (StringIndexOutOfBoundsException e) { // Should never occur - throw new ClassFormatException("Invalid method signature: " + signature); - } - return (String[]) vec.toArray(new String[vec.size()]); - } - - - /** - * @param signature Method signature - * @return return type of method - * @throws ClassFormatException - */ - public static final String methodSignatureReturnType( String signature ) - throws ClassFormatException { - return methodSignatureReturnType(signature, true); - } - - - /** - * @param signature Method signature - * @param chopit Shorten class names ? - * @return return type of method - * @throws ClassFormatException - */ - public static final String methodSignatureReturnType( String signature, boolean chopit ) - throws ClassFormatException { - int index; - String type; - try { - // Read return type after `)' - index = signature.lastIndexOf(')') + 1; - type = signatureToString(signature.substring(index), chopit); - } catch (StringIndexOutOfBoundsException e) { // Should never occur - throw new ClassFormatException("Invalid method signature: " + signature); - } - return type; - } - - - /** - * Converts method signature to string with all class names compacted. - * - * @param signature to convert - * @param name of method - * @param access flags of method - * @return Human readable signature - */ - public static final String methodSignatureToString( String signature, String name, String access ) { - return methodSignatureToString(signature, name, access, true); - } - - - public static final String methodSignatureToString( String signature, String name, - String access, boolean chopit ) { - return methodSignatureToString(signature, name, access, chopit, null); - } - - - /** - * A return type signature represents the return value from a method. - * It is a series of bytes in the following grammar: - * - * ::= | V - * - * The character V indicates that the method returns no value. Otherwise, the - * signature indicates the type of the return value. - * An argument signature represents an argument passed to a method: - * - * ::= - * - * A method signature represents the arguments that the method expects, and - * the value that it returns. - * ::= () - * ::= * - * - * This method converts such a string into a Java type declaration like - * `void main(String[])' and throws a `ClassFormatException' when the parsed - * type is invalid. - * - * @param signature Method signature - * @param name Method name - * @param access Method access rights - * @return Java type declaration - * @throws ClassFormatException - */ - public static final String methodSignatureToString( String signature, String name, - String access, boolean chopit, LocalVariableTable vars ) throws ClassFormatException { - StringBuilder buf = new StringBuilder("("); - String type; - int index; - int var_index = (access.indexOf("static") >= 0) ? 0 : 1; - try { // Read all declarations between for `(' and `)' - if (signature.charAt(0) != '(') { - throw new ClassFormatException("Invalid method signature: " + signature); - } - index = 1; // current string position - while (signature.charAt(index) != ')') { - String param_type = signatureToString(signature.substring(index), chopit); - buf.append(param_type); - if (vars != null) { - LocalVariable l = vars.getLocalVariable(var_index); - if (l != null) { - buf.append(" ").append(l.getName()); - } - } else { - buf.append(" arg").append(var_index); - } - if ("double".equals(param_type) || "long".equals(param_type)) { - var_index += 2; - } else { - var_index++; - } - buf.append(", "); - //corrected concurrent private static field acess - index += unwrap(consumed_chars); // update position - } - index++; // update position - // Read return type after `)' - type = signatureToString(signature.substring(index), chopit); - } catch (StringIndexOutOfBoundsException e) { // Should never occur - throw new ClassFormatException("Invalid method signature: " + signature); - } - if (buf.length() > 1) { - buf.setLength(buf.length() - 2); - } - buf.append(")"); - return access + ((access.length() > 0) ? " " : "") + // May be an empty string - type + " " + name + buf.toString(); - } - - - // Guess what this does - private static final int pow2( int n ) { - return 1 << n; - } - - - /** - * Replace all occurences of old in str with new. - * - * @param str String to permute - * @param old String to be replaced - * @param new_ Replacement string - * @return new String object - */ - public static final String replace( String str, String old, String new_ ) { - int index, old_index; - StringBuilder buf = new StringBuilder(); - try { - if ((index = str.indexOf(old)) != -1) { // `old' found in str - old_index = 0; // String start offset - // While we have something to replace - while ((index = str.indexOf(old, old_index)) != -1) { - buf.append(str.substring(old_index, index)); // append prefix - buf.append(new_); // append replacement - old_index = index + old.length(); // Skip `old'.length chars - } - buf.append(str.substring(old_index)); // append rest of string - str = buf.toString(); - } - } catch (StringIndexOutOfBoundsException e) { // Should not occur - System.err.println(e); - } - return str; - } - - - /** - * Converts signature to string with all class names compacted. - * - * @param signature to convert - * @return Human readable signature - */ - public static final String signatureToString( String signature ) { - return signatureToString(signature, true); - } - - - /** - * The field signature represents the value of an argument to a function or - * the value of a variable. It is a series of bytes generated by the - * following grammar: - * - *
-     *  ::= 
-     *       ::= ||
-     *        ::= B|C|D|F|I|J|S|Z
-     *      ::= L;
-     *       ::= [
-     *
-     * The meaning of the base types is as follows:
-     * B byte signed byte
-     * C char character
-     * D double double precision IEEE float
-     * F float single precision IEEE float
-     * I int integer
-     * J long long integer
-     * L; ... an object of the given class
-     * S short signed short
-     * Z boolean true or false
-     * [ ... array
-     * 
- * - * This method converts this string into a Java type declaration such as - * `String[]' and throws a `ClassFormatException' when the parsed type is - * invalid. - * - * @param signature Class signature - * @param chopit Flag that determines whether chopping is executed or not - * @return Java type declaration - * @throws ClassFormatException - */ - public static final String signatureToString( String signature, boolean chopit ) { - //corrected concurrent private static field acess - wrap(consumed_chars, 1); // This is the default, read just one char like `B' - try { - switch (signature.charAt(0)) { - case 'B': - return "byte"; - case 'C': - return "char"; - case 'D': - return "double"; - case 'F': - return "float"; - case 'I': - return "int"; - case 'J': - return "long"; - case 'L': { // Full class name - int index = signature.indexOf(';'); // Look for closing `;' - if (index < 0) { - throw new ClassFormatException("Invalid signature: " + signature); - } - //corrected concurrent private static field acess - wrap(consumed_chars, index + 1); // "Lblabla;" `L' and `;' are removed - return compactClassName(signature.substring(1, index), chopit); - } - case 'S': - return "short"; - case 'Z': - return "boolean"; - case '[': { // Array declaration - int n; - StringBuilder brackets; - String type; - int consumed_chars; // Shadows global var - brackets = new StringBuilder(); // Accumulate []'s - // Count opening brackets and look for optional size argument - for (n = 0; signature.charAt(n) == '['; n++) { - brackets.append("[]"); - } - consumed_chars = n; // Remember value - // The rest of the string denotes a `' - type = signatureToString(signature.substring(n), chopit); - //corrected concurrent private static field acess - //Utility.consumed_chars += consumed_chars; is replaced by: - int _temp = unwrap(Utility.consumed_chars) + consumed_chars; - wrap(Utility.consumed_chars, _temp); - return type + brackets.toString(); - } - case 'V': - return "void"; - default: - throw new ClassFormatException("Invalid signature: `" + signature + "'"); - } - } catch (StringIndexOutOfBoundsException e) { // Should never occur - throw new ClassFormatException("Invalid signature: " + e + ":" + signature); - } - } - - - /** Parse Java type such as "char", or "java.lang.String[]" and return the - * signature in byte code format, e.g. "C" or "[Ljava/lang/String;" respectively. - * - * @param type Java type - * @return byte code signature - */ - public static String getSignature( String type ) { - StringBuilder buf = new StringBuilder(); - char[] chars = type.toCharArray(); - boolean char_found = false, delim = false; - int index = -1; - loop: for (int i = 0; i < chars.length; i++) { - switch (chars[i]) { - case ' ': - case '\t': - case '\n': - case '\r': - case '\f': - if (char_found) { - delim = true; - } - break; - case '[': - if (!char_found) { - throw new RuntimeException("Illegal type: " + type); - } - index = i; - break loop; - default: - char_found = true; - if (!delim) { - buf.append(chars[i]); - } - } - } - int brackets = 0; - if (index > 0) { - brackets = countBrackets(type.substring(index)); - } - type = buf.toString(); - buf.setLength(0); - for (int i = 0; i < brackets; i++) { - buf.append('['); - } - boolean found = false; - for (int i = Constants.T_BOOLEAN; (i <= Constants.T_VOID) && !found; i++) { - if (Constants.TYPE_NAMES[i].equals(type)) { - found = true; - buf.append(Constants.SHORT_TYPE_NAMES[i]); - } - } - if (!found) { - buf.append('L').append(type.replace('.', '/')).append(';'); - } - return buf.toString(); - } - - - private static int countBrackets( String brackets ) { - char[] chars = brackets.toCharArray(); - int count = 0; - boolean open = false; - for (int i = 0; i < chars.length; i++) { - switch (chars[i]) { - case '[': - if (open) { - throw new RuntimeException("Illegally nested brackets:" + brackets); - } - open = true; - break; - case ']': - if (!open) { - throw new RuntimeException("Illegally nested brackets:" + brackets); - } - open = false; - count++; - break; - default: - // Don't care - } - } - if (open) { - throw new RuntimeException("Illegally nested brackets:" + brackets); - } - return count; - } - - - /** - * Return type of method signature as a byte value as defined in Constants - * - * @param signature in format described above - * @return type of method signature - * @see Constants - */ - public static final byte typeOfMethodSignature( String signature ) throws ClassFormatException { - int index; - try { - if (signature.charAt(0) != '(') { - throw new ClassFormatException("Invalid method signature: " + signature); - } - index = signature.lastIndexOf(')') + 1; - return typeOfSignature(signature.substring(index)); - } catch (StringIndexOutOfBoundsException e) { - throw new ClassFormatException("Invalid method signature: " + signature); - } - } - - - /** - * Return type of signature as a byte value as defined in Constants - * - * @param signature in format described above - * @return type of signature - * @see Constants - */ - public static final byte typeOfSignature( String signature ) throws ClassFormatException { - try { - switch (signature.charAt(0)) { - case 'B': - return Constants.T_BYTE; - case 'C': - return Constants.T_CHAR; - case 'D': - return Constants.T_DOUBLE; - case 'F': - return Constants.T_FLOAT; - case 'I': - return Constants.T_INT; - case 'J': - return Constants.T_LONG; - case 'L': - return Constants.T_REFERENCE; - case '[': - return Constants.T_ARRAY; - case 'V': - return Constants.T_VOID; - case 'Z': - return Constants.T_BOOLEAN; - case 'S': - return Constants.T_SHORT; - default: - throw new ClassFormatException("Invalid method signature: " + signature); - } - } catch (StringIndexOutOfBoundsException e) { - throw new ClassFormatException("Invalid method signature: " + signature); - } - } - - - /** Map opcode names to opcode numbers. E.g., return Constants.ALOAD for "aload" - */ - public static short searchOpcode( String name ) { - name = name.toLowerCase(Locale.ENGLISH); - for (short i = 0; i < Constants.OPCODE_NAMES.length; i++) { - if (Constants.OPCODE_NAMES[i].equals(name)) { - return i; - } - } - return -1; - } - - - /** - * Convert (signed) byte to (unsigned) short value, i.e., all negative - * values become positive. - */ - private static final short byteToShort( byte b ) { - return (b < 0) ? (short) (256 + b) : (short) b; - } - - - /** Convert bytes into hexidecimal string - * - * @return bytes as hexidecimal string, e.g. 00 FA 12 ... - */ - public static final String toHexString( byte[] bytes ) { - StringBuilder buf = new StringBuilder(); - for (int i = 0; i < bytes.length; i++) { - short b = byteToShort(bytes[i]); - String hex = Integer.toString(b, 0x10); - if (b < 0x10) { - buf.append('0'); - } - buf.append(hex); - if (i < bytes.length - 1) { - buf.append(' '); - } - } - return buf.toString(); - } - - - /** - * Return a string for an integer justified left or right and filled up with - * `fill' characters if necessary. - * - * @param i integer to format - * @param length length of desired string - * @param left_justify format left or right - * @param fill fill character - * @return formatted int - */ - public static final String format( int i, int length, boolean left_justify, char fill ) { - return fillup(Integer.toString(i), length, left_justify, fill); - } - - - /** - * Fillup char with up to length characters with char `fill' and justify it left or right. - * - * @param str string to format - * @param length length of desired string - * @param left_justify format left or right - * @param fill fill character - * @return formatted string - */ - public static final String fillup( String str, int length, boolean left_justify, char fill ) { - int len = length - str.length(); - char[] buf = new char[(len < 0) ? 0 : len]; - for (int j = 0; j < buf.length; j++) { - buf[j] = fill; - } - if (left_justify) { - return str + new String(buf); - } - return new String(buf) + str; - } - - - static final boolean equals( byte[] a, byte[] b ) { - int size; - if ((size = a.length) != b.length) { - return false; - } - for (int i = 0; i < size; i++) { - if (a[i] != b[i]) { - return false; - } - } - return true; - } - - - public static final void printArray( PrintStream out, Object[] obj ) { - out.println(printArray(obj, true)); - } - - - public static final void printArray( PrintWriter out, Object[] obj ) { - out.println(printArray(obj, true)); - } - - - public static final String printArray( Object[] obj ) { - return printArray(obj, true); - } - - - public static final String printArray( Object[] obj, boolean braces ) { - return printArray(obj, braces, false); - } - - - public static final String printArray( Object[] obj, boolean braces, boolean quote ) { - if (obj == null) { - return null; - } - StringBuilder buf = new StringBuilder(); - if (braces) { - buf.append('{'); - } - for (int i = 0; i < obj.length; i++) { - if (obj[i] != null) { - buf.append((quote ? "\"" : "")).append(obj[i].toString()).append( - (quote ? "\"" : "")); - } else { - buf.append("null"); - } - if (i < obj.length - 1) { - buf.append(", "); - } - } - if (braces) { - buf.append('}'); - } - return buf.toString(); - } - - - /** @return true, if character is one of (a, ... z, A, ... Z, 0, ... 9, _) - */ - public static boolean isJavaIdentifierPart( char ch ) { - return ((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) - || ((ch >= '0') && (ch <= '9')) || (ch == '_'); - } - - - /** Encode byte array it into Java identifier string, i.e., a string - * that only contains the following characters: (a, ... z, A, ... Z, - * 0, ... 9, _, $). The encoding algorithm itself is not too - * clever: if the current byte's ASCII value already is a valid Java - * identifier part, leave it as it is. Otherwise it writes the - * escape character($) followed by

  • the ASCII value as a - * hexadecimal string, if the value is not in the range - * 200..247
  • a Java identifier char not used in a lowercase - * hexadecimal string, if the value is in the range - * 200..247
    • - * - *

      This operation inflates the original byte array by roughly 40-50%

      - * - * @param bytes the byte array to convert - * @param compress use gzip to minimize string - */ - public static String encode( byte[] bytes, boolean compress ) throws IOException { - if (compress) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - GZIPOutputStream gos = new GZIPOutputStream(baos); - gos.write(bytes, 0, bytes.length); - gos.close(); - baos.close(); - bytes = baos.toByteArray(); - } - CharArrayWriter caw = new CharArrayWriter(); - JavaWriter jw = new JavaWriter(caw); - for (int i = 0; i < bytes.length; i++) { - int in = bytes[i] & 0x000000ff; // Normalize to unsigned - jw.write(in); - } - jw.close(); - return caw.toString(); - } - - - /** Decode a string back to a byte array. - * - * @param s the string to convert - * @param uncompress use gzip to uncompress the stream of bytes - */ - public static byte[] decode( String s, boolean uncompress ) throws IOException { - char[] chars = s.toCharArray(); - CharArrayReader car = new CharArrayReader(chars); - JavaReader jr = new JavaReader(car); - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - int ch; - while ((ch = jr.read()) >= 0) { - bos.write(ch); - } - bos.close(); - car.close(); - jr.close(); - byte[] bytes = bos.toByteArray(); - if (uncompress) { - GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(bytes)); - byte[] tmp = new byte[bytes.length * 3]; // Rough estimate - int count = 0; - int b; - while ((b = gis.read()) >= 0) { - tmp[count++] = (byte) b; - } - bytes = new byte[count]; - System.arraycopy(tmp, 0, bytes, 0, count); - } - return bytes; - } - - // A-Z, g-z, _, $ - private static final int FREE_CHARS = 48; - static int[] CHAR_MAP = new int[FREE_CHARS]; - static int[] MAP_CHAR = new int[256]; // Reverse map - private static final char ESCAPE_CHAR = '$'; - static { - int j = 0; - for (int i = 'A'; i <= 'Z'; i++) { - CHAR_MAP[j] = i; - MAP_CHAR[i] = j; - j++; - } - for (int i = 'g'; i <= 'z'; i++) { - CHAR_MAP[j] = i; - MAP_CHAR[i] = j; - j++; - } - CHAR_MAP[j] = '$'; - MAP_CHAR['$'] = j; - j++; - CHAR_MAP[j] = '_'; - MAP_CHAR['_'] = j; - } - - /** Decode characters into bytes. - * Used by decode() - */ - private static class JavaReader extends FilterReader { - - public JavaReader(Reader in) { - super(in); - } - - - public int read() throws IOException { - int b = in.read(); - if (b != ESCAPE_CHAR) { - return b; - } - int i = in.read(); - if (i < 0) { - return -1; - } - if (((i >= '0') && (i <= '9')) || ((i >= 'a') && (i <= 'f'))) { // Normal escape - int j = in.read(); - if (j < 0) { - return -1; - } - char[] tmp = { - (char) i, (char) j - }; - int s = Integer.parseInt(new String(tmp), 16); - return s; - } - return MAP_CHAR[i]; - } - - - public int read( char[] cbuf, int off, int len ) throws IOException { - for (int i = 0; i < len; i++) { - cbuf[off + i] = (char) read(); - } - return len; - } - } - - /** Encode bytes into valid java identifier characters. - * Used by encode() - */ - private static class JavaWriter extends FilterWriter { - - public JavaWriter(Writer out) { - super(out); - } - - - public void write( int b ) throws IOException { - if (isJavaIdentifierPart((char) b) && (b != ESCAPE_CHAR)) { - out.write(b); - } else { - out.write(ESCAPE_CHAR); // Escape character - // Special escape - if (b >= 0 && b < FREE_CHARS) { - out.write(CHAR_MAP[b]); - } else { // Normal escape - char[] tmp = Integer.toHexString(b).toCharArray(); - if (tmp.length == 1) { - out.write('0'); - out.write(tmp[0]); - } else { - out.write(tmp[0]); - out.write(tmp[1]); - } - } - } - } - - - public void write( char[] cbuf, int off, int len ) throws IOException { - for (int i = 0; i < len; i++) { - write(cbuf[off + i]); - } - } - - - public void write( String str, int off, int len ) throws IOException { - write(str.toCharArray(), off, len); - } - } - - - /** - * Escape all occurences of newline chars '\n', quotes \", etc. - */ - public static final String convertString( String label ) { - char[] ch = label.toCharArray(); - StringBuilder buf = new StringBuilder(); - for (int i = 0; i < ch.length; i++) { - switch (ch[i]) { - case '\n': - buf.append("\\n"); - break; - case '\r': - buf.append("\\r"); - break; - case '\"': - buf.append("\\\""); - break; - case '\'': - buf.append("\\'"); - break; - case '\\': - buf.append("\\\\"); - break; - default: - buf.append(ch[i]); - break; - } - } - return buf.toString(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.CharArrayReader; +import java.io.CharArrayWriter; +import java.io.FilterReader; +import java.io.FilterWriter; +import java.io.IOException; +import java.io.PrintStream; +import java.io.PrintWriter; +import java.io.Reader; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * Utility functions that do not really belong to any class in particular. + * + * @version $Id: Utility.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class Utility { + + private static int unwrap( ThreadLocal tl ) { + return ((Integer) tl.get()).intValue(); + } + + + private static void wrap( ThreadLocal tl, int value ) { + tl.set(new Integer(value)); + } + + private static ThreadLocal consumed_chars = new ThreadLocal() { + + protected Object initialValue() { + return new Integer(0); + } + };/* How many chars have been consumed + * during parsing in signatureToString(). + * Read by methodSignatureToString(). + * Set by side effect,but only internally. + */ + private static boolean wide = false; /* The `WIDE' instruction is used in the + * byte code to allow 16-bit wide indices + * for local variables. This opcode + * precedes an `ILOAD', e.g.. The opcode + * immediately following takes an extra + * byte which is combined with the + * following byte to form a + * 16-bit value. + */ + + + /** + * Convert bit field of flags into string such as `static final'. + * + * @param access_flags Access flags + * @return String representation of flags + */ + public static final String accessToString( int access_flags ) { + return accessToString(access_flags, false); + } + + + /** + * Convert bit field of flags into string such as `static final'. + * + * Special case: Classes compiled with new compilers and with the + * `ACC_SUPER' flag would be said to be "synchronized". This is + * because SUN used the same value for the flags `ACC_SUPER' and + * `ACC_SYNCHRONIZED'. + * + * @param access_flags Access flags + * @param for_class access flags are for class qualifiers ? + * @return String representation of flags + */ + public static final String accessToString( int access_flags, boolean for_class ) { + StringBuilder buf = new StringBuilder(); + int p = 0; + for (int i = 0; p < Constants.MAX_ACC_FLAG; i++) { // Loop through known flags + p = pow2(i); + if ((access_flags & p) != 0) { + /* Special case: Classes compiled with new compilers and with the + * `ACC_SUPER' flag would be said to be "synchronized". This is + * because SUN used the same value for the flags `ACC_SUPER' and + * `ACC_SYNCHRONIZED'. + */ + if (for_class && ((p == Constants.ACC_SUPER) || (p == Constants.ACC_INTERFACE))) { + continue; + } + buf.append(Constants.ACCESS_NAMES[i]).append(" "); + } + } + return buf.toString().trim(); + } + + + /** + * @return "class" or "interface", depending on the ACC_INTERFACE flag + */ + public static final String classOrInterface( int access_flags ) { + return ((access_flags & Constants.ACC_INTERFACE) != 0) ? "interface" : "class"; + } + + + /** + * Disassemble a byte array of JVM byte codes starting from code line + * `index' and return the disassembled string representation. Decode only + * `num' opcodes (including their operands), use -1 if you want to + * decompile everything. + * + * @param code byte code array + * @param constant_pool Array of constants + * @param index offset in `code' array + * (number of opcodes, not bytes!) + * @param length number of opcodes to decompile, -1 for all + * @param verbose be verbose, e.g. print constant pool index + * @return String representation of byte codes + */ + public static final String codeToString( byte[] code, ConstantPool constant_pool, int index, + int length, boolean verbose ) { + StringBuilder buf = new StringBuilder(code.length * 20); // Should be sufficient + ByteSequence stream = new ByteSequence(code); + try { + for (int i = 0; i < index; i++) { + codeToString(stream, constant_pool, verbose); + } + for (int i = 0; stream.available() > 0; i++) { + if ((length < 0) || (i < length)) { + String indices = fillup(stream.getIndex() + ":", 6, true, ' '); + buf.append(indices).append(codeToString(stream, constant_pool, verbose)) + .append('\n'); + } + } + } catch (IOException e) { + System.out.println(buf.toString()); + e.printStackTrace(); + throw new ClassFormatException("Byte code error: " + e); + } + return buf.toString(); + } + + + public static final String codeToString( byte[] code, ConstantPool constant_pool, int index, + int length ) { + return codeToString(code, constant_pool, index, length, true); + } + + + /** + * Disassemble a stream of byte codes and return the + * string representation. + * + * @param bytes stream of bytes + * @param constant_pool Array of constants + * @param verbose be verbose, e.g. print constant pool index + * @return String representation of byte code + */ + public static final String codeToString( ByteSequence bytes, ConstantPool constant_pool, + boolean verbose ) throws IOException { + short opcode = (short) bytes.readUnsignedByte(); + int default_offset = 0, low, high, npairs; + int index, vindex, constant; + int[] match, jump_table; + int no_pad_bytes = 0, offset; + StringBuilder buf = new StringBuilder(Constants.OPCODE_NAMES[opcode]); + /* Special case: Skip (0-3) padding bytes, i.e., the + * following bytes are 4-byte-aligned + */ + if ((opcode == Constants.TABLESWITCH) || (opcode == Constants.LOOKUPSWITCH)) { + int remainder = bytes.getIndex() % 4; + no_pad_bytes = (remainder == 0) ? 0 : 4 - remainder; + for (int i = 0; i < no_pad_bytes; i++) { + byte b; + if ((b = bytes.readByte()) != 0) { + System.err.println("Warning: Padding byte != 0 in " + + Constants.OPCODE_NAMES[opcode] + ":" + b); + } + } + // Both cases have a field default_offset in common + default_offset = bytes.readInt(); + } + switch (opcode) { + /* Table switch has variable length arguments. + */ + case Constants.TABLESWITCH: + low = bytes.readInt(); + high = bytes.readInt(); + offset = bytes.getIndex() - 12 - no_pad_bytes - 1; + default_offset += offset; + buf.append("\tdefault = ").append(default_offset).append(", low = ").append(low) + .append(", high = ").append(high).append("("); + jump_table = new int[high - low + 1]; + for (int i = 0; i < jump_table.length; i++) { + jump_table[i] = offset + bytes.readInt(); + buf.append(jump_table[i]); + if (i < jump_table.length - 1) { + buf.append(", "); + } + } + buf.append(")"); + break; + /* Lookup switch has variable length arguments. + */ + case Constants.LOOKUPSWITCH: { + npairs = bytes.readInt(); + offset = bytes.getIndex() - 8 - no_pad_bytes - 1; + match = new int[npairs]; + jump_table = new int[npairs]; + default_offset += offset; + buf.append("\tdefault = ").append(default_offset).append(", npairs = ").append( + npairs).append(" ("); + for (int i = 0; i < npairs; i++) { + match[i] = bytes.readInt(); + jump_table[i] = offset + bytes.readInt(); + buf.append("(").append(match[i]).append(", ").append(jump_table[i]).append(")"); + if (i < npairs - 1) { + buf.append(", "); + } + } + buf.append(")"); + } + break; + /* Two address bytes + offset from start of byte stream form the + * jump target + */ + case Constants.GOTO: + case Constants.IFEQ: + case Constants.IFGE: + case Constants.IFGT: + case Constants.IFLE: + case Constants.IFLT: + case Constants.JSR: + case Constants.IFNE: + case Constants.IFNONNULL: + case Constants.IFNULL: + case Constants.IF_ACMPEQ: + case Constants.IF_ACMPNE: + case Constants.IF_ICMPEQ: + case Constants.IF_ICMPGE: + case Constants.IF_ICMPGT: + case Constants.IF_ICMPLE: + case Constants.IF_ICMPLT: + case Constants.IF_ICMPNE: + buf.append("\t\t#").append((bytes.getIndex() - 1) + bytes.readShort()); + break; + /* 32-bit wide jumps + */ + case Constants.GOTO_W: + case Constants.JSR_W: + buf.append("\t\t#").append(((bytes.getIndex() - 1) + bytes.readInt())); + break; + /* Index byte references local variable (register) + */ + case Constants.ALOAD: + case Constants.ASTORE: + case Constants.DLOAD: + case Constants.DSTORE: + case Constants.FLOAD: + case Constants.FSTORE: + case Constants.ILOAD: + case Constants.ISTORE: + case Constants.LLOAD: + case Constants.LSTORE: + case Constants.RET: + if (wide) { + vindex = bytes.readUnsignedShort(); + wide = false; // Clear flag + } else { + vindex = bytes.readUnsignedByte(); + } + buf.append("\t\t%").append(vindex); + break; + /* + * Remember wide byte which is used to form a 16-bit address in the + * following instruction. Relies on that the method is called again with + * the following opcode. + */ + case Constants.WIDE: + wide = true; + buf.append("\t(wide)"); + break; + /* Array of basic type. + */ + case Constants.NEWARRAY: + buf.append("\t\t<").append(Constants.TYPE_NAMES[bytes.readByte()]).append(">"); + break; + /* Access object/class fields. + */ + case Constants.GETFIELD: + case Constants.GETSTATIC: + case Constants.PUTFIELD: + case Constants.PUTSTATIC: + index = bytes.readUnsignedShort(); + buf.append("\t\t").append( + constant_pool.constantToString(index, Constants.CONSTANT_Fieldref)).append( + (verbose ? " (" + index + ")" : "")); + break; + /* Operands are references to classes in constant pool + */ + case Constants.NEW: + case Constants.CHECKCAST: + buf.append("\t"); + case Constants.INSTANCEOF: + index = bytes.readUnsignedShort(); + buf.append("\t<").append( + constant_pool.constantToString(index, Constants.CONSTANT_Class)) + .append(">").append((verbose ? " (" + index + ")" : "")); + break; + /* Operands are references to methods in constant pool + */ + case Constants.INVOKESPECIAL: + case Constants.INVOKESTATIC: + case Constants.INVOKEVIRTUAL: + index = bytes.readUnsignedShort(); + buf.append("\t").append( + constant_pool.constantToString(index, Constants.CONSTANT_Methodref)) + .append((verbose ? " (" + index + ")" : "")); + break; + case Constants.INVOKEINTERFACE: + index = bytes.readUnsignedShort(); + int nargs = bytes.readUnsignedByte(); // historical, redundant + buf.append("\t").append( + constant_pool + .constantToString(index, Constants.CONSTANT_InterfaceMethodref)) + .append(verbose ? " (" + index + ")\t" : "").append(nargs).append("\t") + .append(bytes.readUnsignedByte()); // Last byte is a reserved space + break; + /* Operands are references to items in constant pool + */ + case Constants.LDC_W: + case Constants.LDC2_W: + index = bytes.readUnsignedShort(); + buf.append("\t\t").append( + constant_pool.constantToString(index, constant_pool.getConstant(index) + .getTag())).append((verbose ? " (" + index + ")" : "")); + break; + case Constants.LDC: + index = bytes.readUnsignedByte(); + buf.append("\t\t").append( + constant_pool.constantToString(index, constant_pool.getConstant(index) + .getTag())).append((verbose ? " (" + index + ")" : "")); + break; + /* Array of references. + */ + case Constants.ANEWARRAY: + index = bytes.readUnsignedShort(); + buf.append("\t\t<").append( + compactClassName(constant_pool.getConstantString(index, + Constants.CONSTANT_Class), false)).append(">").append( + (verbose ? " (" + index + ")" : "")); + break; + /* Multidimensional array of references. + */ + case Constants.MULTIANEWARRAY: { + index = bytes.readUnsignedShort(); + int dimensions = bytes.readUnsignedByte(); + buf.append("\t<").append( + compactClassName(constant_pool.getConstantString(index, + Constants.CONSTANT_Class), false)).append(">\t").append(dimensions) + .append((verbose ? " (" + index + ")" : "")); + } + break; + /* Increment local variable. + */ + case Constants.IINC: + if (wide) { + vindex = bytes.readUnsignedShort(); + constant = bytes.readShort(); + wide = false; + } else { + vindex = bytes.readUnsignedByte(); + constant = bytes.readByte(); + } + buf.append("\t\t%").append(vindex).append("\t").append(constant); + break; + default: + if (Constants.NO_OF_OPERANDS[opcode] > 0) { + for (int i = 0; i < Constants.TYPE_OF_OPERANDS[opcode].length; i++) { + buf.append("\t\t"); + switch (Constants.TYPE_OF_OPERANDS[opcode][i]) { + case Constants.T_BYTE: + buf.append(bytes.readByte()); + break; + case Constants.T_SHORT: + buf.append(bytes.readShort()); + break; + case Constants.T_INT: + buf.append(bytes.readInt()); + break; + default: // Never reached + System.err.println("Unreachable default case reached!"); + System.exit(-1); + } + } + } + } + return buf.toString(); + } + + + public static final String codeToString( ByteSequence bytes, ConstantPool constant_pool ) + throws IOException { + return codeToString(bytes, constant_pool, true); + } + + + /** + * Shorten long class names, java/lang/String becomes + * String. + * + * @param str The long class name + * @return Compacted class name + */ + public static final String compactClassName( String str ) { + return compactClassName(str, true); + } + + + /** + * Shorten long class name str, i.e., chop off the prefix, + * if the + * class name starts with this string and the flag chopit is true. + * Slashes / are converted to dots .. + * + * @param str The long class name + * @param prefix The prefix the get rid off + * @param chopit Flag that determines whether chopping is executed or not + * @return Compacted class name + */ + public static final String compactClassName( String str, String prefix, boolean chopit ) { + int len = prefix.length(); + str = str.replace('/', '.'); // Is `/' on all systems, even DOS + if (chopit) { + // If string starts with `prefix' and contains no further dots + if (str.startsWith(prefix) && (str.substring(len).indexOf('.') == -1)) { + str = str.substring(len); + } + } + return str; + } + + + /** + * Shorten long class names, java/lang/String becomes + * java.lang.String, + * e.g.. If chopit is true the prefix java.lang + * is also removed. + * + * @param str The long class name + * @param chopit Flag that determines whether chopping is executed or not + * @return Compacted class name + */ + public static final String compactClassName( String str, boolean chopit ) { + return compactClassName(str, "java.lang.", chopit); + } + + + /** + * @return `flag' with bit `i' set to 1 + */ + public static final int setBit( int flag, int i ) { + return flag | pow2(i); + } + + + /** + * @return `flag' with bit `i' set to 0 + */ + public static final int clearBit( int flag, int i ) { + int bit = pow2(i); + return (flag & bit) == 0 ? flag : flag ^ bit; + } + + + /** + * @return true, if bit `i' in `flag' is set + */ + public static final boolean isSet( int flag, int i ) { + return (flag & pow2(i)) != 0; + } + + + /** + * Converts string containing the method return and argument types + * to a byte code method signature. + * + * @param ret Return type of method + * @param argv Types of method arguments + * @return Byte code representation of method signature + */ + public final static String methodTypeToSignature( String ret, String[] argv ) + throws ClassFormatException { + StringBuilder buf = new StringBuilder("("); + String str; + if (argv != null) { + for (int i = 0; i < argv.length; i++) { + str = getSignature(argv[i]); + if (str.endsWith("V")) { + throw new ClassFormatException("Invalid type: " + argv[i]); + } + buf.append(str); + } + } + str = getSignature(ret); + buf.append(")").append(str); + return buf.toString(); + } + + + /** + * @param signature Method signature + * @return Array of argument types + * @throws ClassFormatException + */ + public static final String[] methodSignatureArgumentTypes( String signature ) + throws ClassFormatException { + return methodSignatureArgumentTypes(signature, true); + } + + + /** + * @param signature Method signature + * @param chopit Shorten class names ? + * @return Array of argument types + * @throws ClassFormatException + */ + public static final String[] methodSignatureArgumentTypes( String signature, boolean chopit ) + throws ClassFormatException { + List vec = new ArrayList(); + int index; + try { // Read all declarations between for `(' and `)' + if (signature.charAt(0) != '(') { + throw new ClassFormatException("Invalid method signature: " + signature); + } + index = 1; // current string position + while (signature.charAt(index) != ')') { + vec.add(signatureToString(signature.substring(index), chopit)); + //corrected concurrent private static field acess + index += unwrap(consumed_chars); // update position + } + } catch (StringIndexOutOfBoundsException e) { // Should never occur + throw new ClassFormatException("Invalid method signature: " + signature); + } + return (String[]) vec.toArray(new String[vec.size()]); + } + + + /** + * @param signature Method signature + * @return return type of method + * @throws ClassFormatException + */ + public static final String methodSignatureReturnType( String signature ) + throws ClassFormatException { + return methodSignatureReturnType(signature, true); + } + + + /** + * @param signature Method signature + * @param chopit Shorten class names ? + * @return return type of method + * @throws ClassFormatException + */ + public static final String methodSignatureReturnType( String signature, boolean chopit ) + throws ClassFormatException { + int index; + String type; + try { + // Read return type after `)' + index = signature.lastIndexOf(')') + 1; + type = signatureToString(signature.substring(index), chopit); + } catch (StringIndexOutOfBoundsException e) { // Should never occur + throw new ClassFormatException("Invalid method signature: " + signature); + } + return type; + } + + + /** + * Converts method signature to string with all class names compacted. + * + * @param signature to convert + * @param name of method + * @param access flags of method + * @return Human readable signature + */ + public static final String methodSignatureToString( String signature, String name, String access ) { + return methodSignatureToString(signature, name, access, true); + } + + + public static final String methodSignatureToString( String signature, String name, + String access, boolean chopit ) { + return methodSignatureToString(signature, name, access, chopit, null); + } + + + /** + * A return type signature represents the return value from a method. + * It is a series of bytes in the following grammar: + * + * ::= | V + * + * The character V indicates that the method returns no value. Otherwise, the + * signature indicates the type of the return value. + * An argument signature represents an argument passed to a method: + * + * ::= + * + * A method signature represents the arguments that the method expects, and + * the value that it returns. + * ::= () + * ::= * + * + * This method converts such a string into a Java type declaration like + * `void main(String[])' and throws a `ClassFormatException' when the parsed + * type is invalid. + * + * @param signature Method signature + * @param name Method name + * @param access Method access rights + * @return Java type declaration + * @throws ClassFormatException + */ + public static final String methodSignatureToString( String signature, String name, + String access, boolean chopit, LocalVariableTable vars ) throws ClassFormatException { + StringBuilder buf = new StringBuilder("("); + String type; + int index; + int var_index = (access.indexOf("static") >= 0) ? 0 : 1; + try { // Read all declarations between for `(' and `)' + if (signature.charAt(0) != '(') { + throw new ClassFormatException("Invalid method signature: " + signature); + } + index = 1; // current string position + while (signature.charAt(index) != ')') { + String param_type = signatureToString(signature.substring(index), chopit); + buf.append(param_type); + if (vars != null) { + LocalVariable l = vars.getLocalVariable(var_index); + if (l != null) { + buf.append(" ").append(l.getName()); + } + } else { + buf.append(" arg").append(var_index); + } + if ("double".equals(param_type) || "long".equals(param_type)) { + var_index += 2; + } else { + var_index++; + } + buf.append(", "); + //corrected concurrent private static field acess + index += unwrap(consumed_chars); // update position + } + index++; // update position + // Read return type after `)' + type = signatureToString(signature.substring(index), chopit); + } catch (StringIndexOutOfBoundsException e) { // Should never occur + throw new ClassFormatException("Invalid method signature: " + signature); + } + if (buf.length() > 1) { + buf.setLength(buf.length() - 2); + } + buf.append(")"); + return access + ((access.length() > 0) ? " " : "") + // May be an empty string + type + " " + name + buf.toString(); + } + + + // Guess what this does + private static final int pow2( int n ) { + return 1 << n; + } + + + /** + * Replace all occurences of old in str with new. + * + * @param str String to permute + * @param old String to be replaced + * @param new_ Replacement string + * @return new String object + */ + public static final String replace( String str, String old, String new_ ) { + int index, old_index; + StringBuilder buf = new StringBuilder(); + try { + if ((index = str.indexOf(old)) != -1) { // `old' found in str + old_index = 0; // String start offset + // While we have something to replace + while ((index = str.indexOf(old, old_index)) != -1) { + buf.append(str.substring(old_index, index)); // append prefix + buf.append(new_); // append replacement + old_index = index + old.length(); // Skip `old'.length chars + } + buf.append(str.substring(old_index)); // append rest of string + str = buf.toString(); + } + } catch (StringIndexOutOfBoundsException e) { // Should not occur + System.err.println(e); + } + return str; + } + + + /** + * Converts signature to string with all class names compacted. + * + * @param signature to convert + * @return Human readable signature + */ + public static final String signatureToString( String signature ) { + return signatureToString(signature, true); + } + + + /** + * The field signature represents the value of an argument to a function or + * the value of a variable. It is a series of bytes generated by the + * following grammar: + * + *
      +     *  ::= 
      +     *       ::= ||
      +     *        ::= B|C|D|F|I|J|S|Z
      +     *      ::= L;
      +     *       ::= [
      +     *
      +     * The meaning of the base types is as follows:
      +     * B byte signed byte
      +     * C char character
      +     * D double double precision IEEE float
      +     * F float single precision IEEE float
      +     * I int integer
      +     * J long long integer
      +     * L; ... an object of the given class
      +     * S short signed short
      +     * Z boolean true or false
      +     * [ ... array
      +     * 
      + * + * This method converts this string into a Java type declaration such as + * `String[]' and throws a `ClassFormatException' when the parsed type is + * invalid. + * + * @param signature Class signature + * @param chopit Flag that determines whether chopping is executed or not + * @return Java type declaration + * @throws ClassFormatException + */ + public static final String signatureToString( String signature, boolean chopit ) { + //corrected concurrent private static field acess + wrap(consumed_chars, 1); // This is the default, read just one char like `B' + try { + switch (signature.charAt(0)) { + case 'B': + return "byte"; + case 'C': + return "char"; + case 'D': + return "double"; + case 'F': + return "float"; + case 'I': + return "int"; + case 'J': + return "long"; + case 'L': { // Full class name + int index = signature.indexOf(';'); // Look for closing `;' + if (index < 0) { + throw new ClassFormatException("Invalid signature: " + signature); + } + //corrected concurrent private static field acess + wrap(consumed_chars, index + 1); // "Lblabla;" `L' and `;' are removed + return compactClassName(signature.substring(1, index), chopit); + } + case 'S': + return "short"; + case 'Z': + return "boolean"; + case '[': { // Array declaration + int n; + StringBuilder brackets; + String type; + int consumed_chars; // Shadows global var + brackets = new StringBuilder(); // Accumulate []'s + // Count opening brackets and look for optional size argument + for (n = 0; signature.charAt(n) == '['; n++) { + brackets.append("[]"); + } + consumed_chars = n; // Remember value + // The rest of the string denotes a `' + type = signatureToString(signature.substring(n), chopit); + //corrected concurrent private static field acess + //Utility.consumed_chars += consumed_chars; is replaced by: + int _temp = unwrap(Utility.consumed_chars) + consumed_chars; + wrap(Utility.consumed_chars, _temp); + return type + brackets.toString(); + } + case 'V': + return "void"; + default: + throw new ClassFormatException("Invalid signature: `" + signature + "'"); + } + } catch (StringIndexOutOfBoundsException e) { // Should never occur + throw new ClassFormatException("Invalid signature: " + e + ":" + signature); + } + } + + + /** Parse Java type such as "char", or "java.lang.String[]" and return the + * signature in byte code format, e.g. "C" or "[Ljava/lang/String;" respectively. + * + * @param type Java type + * @return byte code signature + */ + public static String getSignature( String type ) { + StringBuilder buf = new StringBuilder(); + char[] chars = type.toCharArray(); + boolean char_found = false, delim = false; + int index = -1; + loop: for (int i = 0; i < chars.length; i++) { + switch (chars[i]) { + case ' ': + case '\t': + case '\n': + case '\r': + case '\f': + if (char_found) { + delim = true; + } + break; + case '[': + if (!char_found) { + throw new RuntimeException("Illegal type: " + type); + } + index = i; + break loop; + default: + char_found = true; + if (!delim) { + buf.append(chars[i]); + } + } + } + int brackets = 0; + if (index > 0) { + brackets = countBrackets(type.substring(index)); + } + type = buf.toString(); + buf.setLength(0); + for (int i = 0; i < brackets; i++) { + buf.append('['); + } + boolean found = false; + for (int i = Constants.T_BOOLEAN; (i <= Constants.T_VOID) && !found; i++) { + if (Constants.TYPE_NAMES[i].equals(type)) { + found = true; + buf.append(Constants.SHORT_TYPE_NAMES[i]); + } + } + if (!found) { + buf.append('L').append(type.replace('.', '/')).append(';'); + } + return buf.toString(); + } + + + private static int countBrackets( String brackets ) { + char[] chars = brackets.toCharArray(); + int count = 0; + boolean open = false; + for (int i = 0; i < chars.length; i++) { + switch (chars[i]) { + case '[': + if (open) { + throw new RuntimeException("Illegally nested brackets:" + brackets); + } + open = true; + break; + case ']': + if (!open) { + throw new RuntimeException("Illegally nested brackets:" + brackets); + } + open = false; + count++; + break; + default: + // Don't care + } + } + if (open) { + throw new RuntimeException("Illegally nested brackets:" + brackets); + } + return count; + } + + + /** + * Return type of method signature as a byte value as defined in Constants + * + * @param signature in format described above + * @return type of method signature + * @see Constants + */ + public static final byte typeOfMethodSignature( String signature ) throws ClassFormatException { + int index; + try { + if (signature.charAt(0) != '(') { + throw new ClassFormatException("Invalid method signature: " + signature); + } + index = signature.lastIndexOf(')') + 1; + return typeOfSignature(signature.substring(index)); + } catch (StringIndexOutOfBoundsException e) { + throw new ClassFormatException("Invalid method signature: " + signature); + } + } + + + /** + * Return type of signature as a byte value as defined in Constants + * + * @param signature in format described above + * @return type of signature + * @see Constants + */ + public static final byte typeOfSignature( String signature ) throws ClassFormatException { + try { + switch (signature.charAt(0)) { + case 'B': + return Constants.T_BYTE; + case 'C': + return Constants.T_CHAR; + case 'D': + return Constants.T_DOUBLE; + case 'F': + return Constants.T_FLOAT; + case 'I': + return Constants.T_INT; + case 'J': + return Constants.T_LONG; + case 'L': + return Constants.T_REFERENCE; + case '[': + return Constants.T_ARRAY; + case 'V': + return Constants.T_VOID; + case 'Z': + return Constants.T_BOOLEAN; + case 'S': + return Constants.T_SHORT; + default: + throw new ClassFormatException("Invalid method signature: " + signature); + } + } catch (StringIndexOutOfBoundsException e) { + throw new ClassFormatException("Invalid method signature: " + signature); + } + } + + + /** Map opcode names to opcode numbers. E.g., return Constants.ALOAD for "aload" + */ + public static short searchOpcode( String name ) { + name = name.toLowerCase(Locale.ENGLISH); + for (short i = 0; i < Constants.OPCODE_NAMES.length; i++) { + if (Constants.OPCODE_NAMES[i].equals(name)) { + return i; + } + } + return -1; + } + + + /** + * Convert (signed) byte to (unsigned) short value, i.e., all negative + * values become positive. + */ + private static final short byteToShort( byte b ) { + return (b < 0) ? (short) (256 + b) : (short) b; + } + + + /** Convert bytes into hexidecimal string + * + * @return bytes as hexidecimal string, e.g. 00 FA 12 ... + */ + public static final String toHexString( byte[] bytes ) { + StringBuilder buf = new StringBuilder(); + for (int i = 0; i < bytes.length; i++) { + short b = byteToShort(bytes[i]); + String hex = Integer.toString(b, 0x10); + if (b < 0x10) { + buf.append('0'); + } + buf.append(hex); + if (i < bytes.length - 1) { + buf.append(' '); + } + } + return buf.toString(); + } + + + /** + * Return a string for an integer justified left or right and filled up with + * `fill' characters if necessary. + * + * @param i integer to format + * @param length length of desired string + * @param left_justify format left or right + * @param fill fill character + * @return formatted int + */ + public static final String format( int i, int length, boolean left_justify, char fill ) { + return fillup(Integer.toString(i), length, left_justify, fill); + } + + + /** + * Fillup char with up to length characters with char `fill' and justify it left or right. + * + * @param str string to format + * @param length length of desired string + * @param left_justify format left or right + * @param fill fill character + * @return formatted string + */ + public static final String fillup( String str, int length, boolean left_justify, char fill ) { + int len = length - str.length(); + char[] buf = new char[(len < 0) ? 0 : len]; + for (int j = 0; j < buf.length; j++) { + buf[j] = fill; + } + if (left_justify) { + return str + new String(buf); + } + return new String(buf) + str; + } + + + static final boolean equals( byte[] a, byte[] b ) { + int size; + if ((size = a.length) != b.length) { + return false; + } + for (int i = 0; i < size; i++) { + if (a[i] != b[i]) { + return false; + } + } + return true; + } + + + public static final void printArray( PrintStream out, Object[] obj ) { + out.println(printArray(obj, true)); + } + + + public static final void printArray( PrintWriter out, Object[] obj ) { + out.println(printArray(obj, true)); + } + + + public static final String printArray( Object[] obj ) { + return printArray(obj, true); + } + + + public static final String printArray( Object[] obj, boolean braces ) { + return printArray(obj, braces, false); + } + + + public static final String printArray( Object[] obj, boolean braces, boolean quote ) { + if (obj == null) { + return null; + } + StringBuilder buf = new StringBuilder(); + if (braces) { + buf.append('{'); + } + for (int i = 0; i < obj.length; i++) { + if (obj[i] != null) { + buf.append((quote ? "\"" : "")).append(obj[i].toString()).append( + (quote ? "\"" : "")); + } else { + buf.append("null"); + } + if (i < obj.length - 1) { + buf.append(", "); + } + } + if (braces) { + buf.append('}'); + } + return buf.toString(); + } + + + /** @return true, if character is one of (a, ... z, A, ... Z, 0, ... 9, _) + */ + public static boolean isJavaIdentifierPart( char ch ) { + return ((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) + || ((ch >= '0') && (ch <= '9')) || (ch == '_'); + } + + + /** Encode byte array it into Java identifier string, i.e., a string + * that only contains the following characters: (a, ... z, A, ... Z, + * 0, ... 9, _, $). The encoding algorithm itself is not too + * clever: if the current byte's ASCII value already is a valid Java + * identifier part, leave it as it is. Otherwise it writes the + * escape character($) followed by

      • the ASCII value as a + * hexadecimal string, if the value is not in the range + * 200..247
      • a Java identifier char not used in a lowercase + * hexadecimal string, if the value is in the range + * 200..247
        • + * + *

          This operation inflates the original byte array by roughly 40-50%

          + * + * @param bytes the byte array to convert + * @param compress use gzip to minimize string + */ + public static String encode( byte[] bytes, boolean compress ) throws IOException { + if (compress) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + GZIPOutputStream gos = new GZIPOutputStream(baos); + gos.write(bytes, 0, bytes.length); + gos.close(); + baos.close(); + bytes = baos.toByteArray(); + } + CharArrayWriter caw = new CharArrayWriter(); + JavaWriter jw = new JavaWriter(caw); + for (int i = 0; i < bytes.length; i++) { + int in = bytes[i] & 0x000000ff; // Normalize to unsigned + jw.write(in); + } + jw.close(); + return caw.toString(); + } + + + /** Decode a string back to a byte array. + * + * @param s the string to convert + * @param uncompress use gzip to uncompress the stream of bytes + */ + public static byte[] decode( String s, boolean uncompress ) throws IOException { + char[] chars = s.toCharArray(); + CharArrayReader car = new CharArrayReader(chars); + JavaReader jr = new JavaReader(car); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + int ch; + while ((ch = jr.read()) >= 0) { + bos.write(ch); + } + bos.close(); + car.close(); + jr.close(); + byte[] bytes = bos.toByteArray(); + if (uncompress) { + GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(bytes)); + byte[] tmp = new byte[bytes.length * 3]; // Rough estimate + int count = 0; + int b; + while ((b = gis.read()) >= 0) { + tmp[count++] = (byte) b; + } + bytes = new byte[count]; + System.arraycopy(tmp, 0, bytes, 0, count); + } + return bytes; + } + + // A-Z, g-z, _, $ + private static final int FREE_CHARS = 48; + static int[] CHAR_MAP = new int[FREE_CHARS]; + static int[] MAP_CHAR = new int[256]; // Reverse map + private static final char ESCAPE_CHAR = '$'; + static { + int j = 0; + for (int i = 'A'; i <= 'Z'; i++) { + CHAR_MAP[j] = i; + MAP_CHAR[i] = j; + j++; + } + for (int i = 'g'; i <= 'z'; i++) { + CHAR_MAP[j] = i; + MAP_CHAR[i] = j; + j++; + } + CHAR_MAP[j] = '$'; + MAP_CHAR['$'] = j; + j++; + CHAR_MAP[j] = '_'; + MAP_CHAR['_'] = j; + } + + /** Decode characters into bytes. + * Used by decode() + */ + private static class JavaReader extends FilterReader { + + public JavaReader(Reader in) { + super(in); + } + + + public int read() throws IOException { + int b = in.read(); + if (b != ESCAPE_CHAR) { + return b; + } + int i = in.read(); + if (i < 0) { + return -1; + } + if (((i >= '0') && (i <= '9')) || ((i >= 'a') && (i <= 'f'))) { // Normal escape + int j = in.read(); + if (j < 0) { + return -1; + } + char[] tmp = { + (char) i, (char) j + }; + int s = Integer.parseInt(new String(tmp), 16); + return s; + } + return MAP_CHAR[i]; + } + + + public int read( char[] cbuf, int off, int len ) throws IOException { + for (int i = 0; i < len; i++) { + cbuf[off + i] = (char) read(); + } + return len; + } + } + + /** Encode bytes into valid java identifier characters. + * Used by encode() + */ + private static class JavaWriter extends FilterWriter { + + public JavaWriter(Writer out) { + super(out); + } + + + public void write( int b ) throws IOException { + if (isJavaIdentifierPart((char) b) && (b != ESCAPE_CHAR)) { + out.write(b); + } else { + out.write(ESCAPE_CHAR); // Escape character + // Special escape + if (b >= 0 && b < FREE_CHARS) { + out.write(CHAR_MAP[b]); + } else { // Normal escape + char[] tmp = Integer.toHexString(b).toCharArray(); + if (tmp.length == 1) { + out.write('0'); + out.write(tmp[0]); + } else { + out.write(tmp[0]); + out.write(tmp[1]); + } + } + } + } + + + public void write( char[] cbuf, int off, int len ) throws IOException { + for (int i = 0; i < len; i++) { + write(cbuf[off + i]); + } + } + + + public void write( String str, int off, int len ) throws IOException { + write(str.toCharArray(), off, len); + } + } + + + /** + * Escape all occurences of newline chars '\n', quotes \", etc. + */ + public static final String convertString( String label ) { + char[] ch = label.toCharArray(); + StringBuilder buf = new StringBuilder(); + for (int i = 0; i < ch.length; i++) { + switch (ch[i]) { + case '\n': + buf.append("\\n"); + break; + case '\r': + buf.append("\\r"); + break; + case '\"': + buf.append("\\\""); + break; + case '\'': + buf.append("\\'"); + break; + case '\\': + buf.append("\\\\"); + break; + default: + buf.append(ch[i]); + break; + } + } + return buf.toString(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Visitor.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Visitor.java index 39864b90..7bd5f66a 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Visitor.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/Visitor.java @@ -1,127 +1,127 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.classfile; - -/** - * Interface to make use of the Visitor pattern programming style. - * I.e. a class that implements this interface can traverse the contents of - * a Java class just by calling the `accept' method which all classes have. - * - * @version $Id: Visitor.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface Visitor { - - //public void visitAnnotation(Annotations obj); - //public void visitParameterAnnotation(ParameterAnnotations obj); - //public void visitAnnotationEntry(AnnotationEntry obj); - //public void visitAnnotationDefault(AnnotationDefault obj); - public void visitCode( Code obj ); - - - public void visitCodeException( CodeException obj ); - - - public void visitConstantClass( ConstantClass obj ); - - - public void visitConstantDouble( ConstantDouble obj ); - - - public void visitConstantFieldref( ConstantFieldref obj ); - - - public void visitConstantFloat( ConstantFloat obj ); - - - public void visitConstantInteger( ConstantInteger obj ); - - - public void visitConstantInterfaceMethodref( ConstantInterfaceMethodref obj ); - - - public void visitConstantLong( ConstantLong obj ); - - - public void visitConstantMethodref( ConstantMethodref obj ); - - - public void visitConstantNameAndType( ConstantNameAndType obj ); - - - public void visitConstantPool( ConstantPool obj ); - - - public void visitConstantString( ConstantString obj ); - - - public void visitConstantUtf8( ConstantUtf8 obj ); - - - public void visitConstantValue( ConstantValue obj ); - - - public void visitDeprecated( Deprecated obj ); - - - public void visitExceptionTable( ExceptionTable obj ); - - - public void visitField( Field obj ); - - - public void visitInnerClass( InnerClass obj ); - - - public void visitInnerClasses( InnerClasses obj ); - - - public void visitJavaClass( JavaClass obj ); - - - public void visitLineNumber( LineNumber obj ); - - - public void visitLineNumberTable( LineNumberTable obj ); - - - public void visitLocalVariable( LocalVariable obj ); - - - public void visitLocalVariableTable( LocalVariableTable obj ); - - - public void visitMethod( Method obj ); - - - public void visitSignature( Signature obj ); - - - public void visitSourceFile( SourceFile obj ); - - - public void visitSynthetic( Synthetic obj ); - - - public void visitUnknown( Unknown obj ); - - - public void visitStackMap( StackMap obj ); - - - public void visitStackMapEntry( StackMapEntry obj ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.classfile; + +/** + * Interface to make use of the Visitor pattern programming style. + * I.e. a class that implements this interface can traverse the contents of + * a Java class just by calling the `accept' method which all classes have. + * + * @version $Id: Visitor.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface Visitor { + + //public void visitAnnotation(Annotations obj); + //public void visitParameterAnnotation(ParameterAnnotations obj); + //public void visitAnnotationEntry(AnnotationEntry obj); + //public void visitAnnotationDefault(AnnotationDefault obj); + public void visitCode( Code obj ); + + + public void visitCodeException( CodeException obj ); + + + public void visitConstantClass( ConstantClass obj ); + + + public void visitConstantDouble( ConstantDouble obj ); + + + public void visitConstantFieldref( ConstantFieldref obj ); + + + public void visitConstantFloat( ConstantFloat obj ); + + + public void visitConstantInteger( ConstantInteger obj ); + + + public void visitConstantInterfaceMethodref( ConstantInterfaceMethodref obj ); + + + public void visitConstantLong( ConstantLong obj ); + + + public void visitConstantMethodref( ConstantMethodref obj ); + + + public void visitConstantNameAndType( ConstantNameAndType obj ); + + + public void visitConstantPool( ConstantPool obj ); + + + public void visitConstantString( ConstantString obj ); + + + public void visitConstantUtf8( ConstantUtf8 obj ); + + + public void visitConstantValue( ConstantValue obj ); + + + public void visitDeprecated( Deprecated obj ); + + + public void visitExceptionTable( ExceptionTable obj ); + + + public void visitField( Field obj ); + + + public void visitInnerClass( InnerClass obj ); + + + public void visitInnerClasses( InnerClasses obj ); + + + public void visitJavaClass( JavaClass obj ); + + + public void visitLineNumber( LineNumber obj ); + + + public void visitLineNumberTable( LineNumberTable obj ); + + + public void visitLocalVariable( LocalVariable obj ); + + + public void visitLocalVariableTable( LocalVariableTable obj ); + + + public void visitMethod( Method obj ); + + + public void visitSignature( Signature obj ); + + + public void visitSourceFile( SourceFile obj ); + + + public void visitSynthetic( Synthetic obj ); + + + public void visitUnknown( Unknown obj ); + + + public void visitStackMap( StackMap obj ); + + + public void visitStackMapEntry( StackMapEntry obj ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/package.html b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/package.html index 472c3999..de977fd8 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/package.html +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/classfile/package.html @@ -1,14 +1,14 @@ - - - - - - -

          -This package contains the classes that describe the structure of a -Java class file and a class file parser. -

          - - + + + + + + +

          +This package contains the classes that describe the structure of a +Java class file and a class file parser. +

          + + diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/AALOAD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/AALOAD.java index b3634ca9..38034c9a 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/AALOAD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/AALOAD.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * AALOAD - Load reference from array - *
          Stack: ..., arrayref, index -> value
          - * - * @version $Id: AALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class AALOAD extends ArrayInstruction implements StackProducer { - - /** Load reference from array - */ - public AALOAD() { - super(org.apache.bcel5_2_0.Constants.AALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitAALOAD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * AALOAD - Load reference from array + *
          Stack: ..., arrayref, index -> value
          + * + * @version $Id: AALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class AALOAD extends ArrayInstruction implements StackProducer { + + /** Load reference from array + */ + public AALOAD() { + super(org.apache.bcel5_2_0.Constants.AALOAD); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitAALOAD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/AASTORE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/AASTORE.java index b2acbb05..498fcb81 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/AASTORE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/AASTORE.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * AASTORE - Store into reference array - *
          Stack: ..., arrayref, index, value -> ...
          - * - * @version $Id: AASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class AASTORE extends ArrayInstruction implements StackConsumer { - - /** Store into reference array - */ - public AASTORE() { - super(org.apache.bcel5_2_0.Constants.AASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitAASTORE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * AASTORE - Store into reference array + *
          Stack: ..., arrayref, index, value -> ...
          + * + * @version $Id: AASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class AASTORE extends ArrayInstruction implements StackConsumer { + + /** Store into reference array + */ + public AASTORE() { + super(org.apache.bcel5_2_0.Constants.AASTORE); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitAASTORE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ACONST_NULL.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ACONST_NULL.java index eff64a88..ca9cf3ff 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ACONST_NULL.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ACONST_NULL.java @@ -1,57 +1,57 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * ACONST_NULL - Push null reference - *
          Stack: ... -> ..., null
          - * - * @version $Id: ACONST_NULL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ACONST_NULL extends Instruction implements PushInstruction, TypedInstruction { - - /** - * Push null reference - */ - public ACONST_NULL() { - super(org.apache.bcel5_2_0.Constants.ACONST_NULL, (short) 1); - } - - - /** @return Type.NULL - */ - public Type getType( ConstantPoolGen cp ) { - return Type.NULL; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitTypedInstruction(this); - v.visitACONST_NULL(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * ACONST_NULL - Push null reference + *
          Stack: ... -> ..., null
          + * + * @version $Id: ACONST_NULL.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ACONST_NULL extends Instruction implements PushInstruction, TypedInstruction { + + /** + * Push null reference + */ + public ACONST_NULL() { + super(org.apache.bcel5_2_0.Constants.ACONST_NULL, (short) 1); + } + + + /** @return Type.NULL + */ + public Type getType( ConstantPoolGen cp ) { + return Type.NULL; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitPushInstruction(this); + v.visitTypedInstruction(this); + v.visitACONST_NULL(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ALOAD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ALOAD.java index ac937127..42d5ca6b 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ALOAD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ALOAD.java @@ -1,57 +1,57 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * ALOAD - Load reference from local variable - *
          Stack: ... -> ..., objectref
          - * - * @version $Id: ALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ALOAD extends LoadInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ALOAD() { - super(org.apache.bcel5_2_0.Constants.ALOAD, org.apache.bcel5_2_0.Constants.ALOAD_0); - } - - - /** Load reference from local variable - * @param n index of local variable - */ - public ALOAD(int n) { - super(org.apache.bcel5_2_0.Constants.ALOAD, org.apache.bcel5_2_0.Constants.ALOAD_0, n); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - super.accept(v); - v.visitALOAD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * ALOAD - Load reference from local variable + *
          Stack: ... -> ..., objectref
          + * + * @version $Id: ALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ALOAD extends LoadInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + ALOAD() { + super(org.apache.bcel5_2_0.Constants.ALOAD, org.apache.bcel5_2_0.Constants.ALOAD_0); + } + + + /** Load reference from local variable + * @param n index of local variable + */ + public ALOAD(int n) { + super(org.apache.bcel5_2_0.Constants.ALOAD, org.apache.bcel5_2_0.Constants.ALOAD_0, n); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + super.accept(v); + v.visitALOAD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ANEWARRAY.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ANEWARRAY.java index 12701b68..6430ce11 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ANEWARRAY.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ANEWARRAY.java @@ -1,79 +1,79 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.ExceptionConstants; - -/** - * ANEWARRAY - Create new array of references - *
          Stack: ..., count -> ..., arrayref
          - * - * @version $Id: ANEWARRAY.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ANEWARRAY extends CPInstruction implements LoadClass, AllocationInstruction, - ExceptionThrower, StackConsumer, StackProducer { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ANEWARRAY() { - } - - - public ANEWARRAY(int index) { - super(org.apache.bcel5_2_0.Constants.ANEWARRAY, index); - } - - - public Class[] getExceptions() { - Class[] cs = new Class[1 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, cs, 0, - ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = ExceptionConstants.NEGATIVE_ARRAY_SIZE_EXCEPTION; - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitLoadClass(this); - v.visitAllocationInstruction(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitANEWARRAY(this); - } - - - public ObjectType getLoadClassType( ConstantPoolGen cpg ) { - Type t = getType(cpg); - if (t instanceof ArrayType) { - t = ((ArrayType) t).getBasicType(); - } - return (t instanceof ObjectType) ? (ObjectType) t : null; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.ExceptionConstants; + +/** + * ANEWARRAY - Create new array of references + *
          Stack: ..., count -> ..., arrayref
          + * + * @version $Id: ANEWARRAY.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ANEWARRAY extends CPInstruction implements LoadClass, AllocationInstruction, + ExceptionThrower, StackConsumer, StackProducer { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + ANEWARRAY() { + } + + + public ANEWARRAY(int index) { + super(org.apache.bcel5_2_0.Constants.ANEWARRAY, index); + } + + + public Class[] getExceptions() { + Class[] cs = new Class[1 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; + System.arraycopy(ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, cs, 0, + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); + cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = ExceptionConstants.NEGATIVE_ARRAY_SIZE_EXCEPTION; + return cs; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitLoadClass(this); + v.visitAllocationInstruction(this); + v.visitExceptionThrower(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitCPInstruction(this); + v.visitANEWARRAY(this); + } + + + public ObjectType getLoadClassType( ConstantPoolGen cpg ) { + Type t = getType(cpg); + if (t instanceof ArrayType) { + t = ((ArrayType) t).getBasicType(); + } + return (t instanceof ObjectType) ? (ObjectType) t : null; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ARETURN.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ARETURN.java index a7d69069..59f56e9d 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ARETURN.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ARETURN.java @@ -1,51 +1,51 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * ARETURN - Return reference from method - *
          Stack: ..., objectref -> <empty>
          - * - * @version $Id: ARETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ARETURN extends ReturnInstruction { - - /** - * Return reference from method - */ - public ARETURN() { - super(org.apache.bcel5_2_0.Constants.ARETURN); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitARETURN(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * ARETURN - Return reference from method + *
          Stack: ..., objectref -> <empty>
          + * + * @version $Id: ARETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ARETURN extends ReturnInstruction { + + /** + * Return reference from method + */ + public ARETURN() { + super(org.apache.bcel5_2_0.Constants.ARETURN); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackConsumer(this); + v.visitReturnInstruction(this); + v.visitARETURN(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ARRAYLENGTH.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ARRAYLENGTH.java index e1dbd474..6844ac26 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ARRAYLENGTH.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ARRAYLENGTH.java @@ -1,57 +1,57 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * ARRAYLENGTH - Get length of array - *
          Stack: ..., arrayref -> ..., length
          - * - * @version $Id: ARRAYLENGTH.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ARRAYLENGTH extends Instruction implements ExceptionThrower, StackProducer { - - /** Get length of array - */ - public ARRAYLENGTH() { - super(org.apache.bcel5_2_0.Constants.ARRAYLENGTH, (short) 1); - } - - - /** @return exceptions this instruction may cause - */ - public Class[] getExceptions() { - return new Class[] { - org.apache.bcel5_2_0.ExceptionConstants.NULL_POINTER_EXCEPTION - }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitARRAYLENGTH(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * ARRAYLENGTH - Get length of array + *
          Stack: ..., arrayref -> ..., length
          + * + * @version $Id: ARRAYLENGTH.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ARRAYLENGTH extends Instruction implements ExceptionThrower, StackProducer { + + /** Get length of array + */ + public ARRAYLENGTH() { + super(org.apache.bcel5_2_0.Constants.ARRAYLENGTH, (short) 1); + } + + + /** @return exceptions this instruction may cause + */ + public Class[] getExceptions() { + return new Class[] { + org.apache.bcel5_2_0.ExceptionConstants.NULL_POINTER_EXCEPTION + }; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitStackProducer(this); + v.visitARRAYLENGTH(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ASTORE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ASTORE.java index ded7e342..237d2430 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ASTORE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ASTORE.java @@ -1,57 +1,57 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * ASTORE - Store reference into local variable - *
          Stack ..., objectref -> ... 
          - * - * @version $Id: ASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ASTORE extends StoreInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ASTORE() { - super(org.apache.bcel5_2_0.Constants.ASTORE, org.apache.bcel5_2_0.Constants.ASTORE_0); - } - - - /** Store reference into local variable - * @param n index of local variable - */ - public ASTORE(int n) { - super(org.apache.bcel5_2_0.Constants.ASTORE, org.apache.bcel5_2_0.Constants.ASTORE_0, n); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - super.accept(v); - v.visitASTORE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * ASTORE - Store reference into local variable + *
          Stack ..., objectref -> ... 
          + * + * @version $Id: ASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ASTORE extends StoreInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + ASTORE() { + super(org.apache.bcel5_2_0.Constants.ASTORE, org.apache.bcel5_2_0.Constants.ASTORE_0); + } + + + /** Store reference into local variable + * @param n index of local variable + */ + public ASTORE(int n) { + super(org.apache.bcel5_2_0.Constants.ASTORE, org.apache.bcel5_2_0.Constants.ASTORE_0, n); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + super.accept(v); + v.visitASTORE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ATHROW.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ATHROW.java index 4f42f6d7..e719ccac 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ATHROW.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ATHROW.java @@ -1,58 +1,58 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * ATHROW - Throw exception - *
          Stack: ..., objectref -> objectref
          - * - * @version $Id: ATHROW.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ATHROW extends Instruction implements UnconditionalBranch, ExceptionThrower { - - /** - * Throw exception - */ - public ATHROW() { - super(org.apache.bcel5_2_0.Constants.ATHROW, (short) 1); - } - - - /** @return exceptions this instruction may cause - */ - public Class[] getExceptions() { - return new Class[] { - org.apache.bcel5_2_0.ExceptionConstants.THROWABLE - }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitUnconditionalBranch(this); - v.visitExceptionThrower(this); - v.visitATHROW(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * ATHROW - Throw exception + *
          Stack: ..., objectref -> objectref
          + * + * @version $Id: ATHROW.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ATHROW extends Instruction implements UnconditionalBranch, ExceptionThrower { + + /** + * Throw exception + */ + public ATHROW() { + super(org.apache.bcel5_2_0.Constants.ATHROW, (short) 1); + } + + + /** @return exceptions this instruction may cause + */ + public Class[] getExceptions() { + return new Class[] { + org.apache.bcel5_2_0.ExceptionConstants.THROWABLE + }; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitUnconditionalBranch(this); + v.visitExceptionThrower(this); + v.visitATHROW(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/AllocationInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/AllocationInstruction.java index 15ef7d69..2cde49e4 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/AllocationInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/AllocationInstruction.java @@ -1,26 +1,26 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denote family of instructions that allocates space in the heap. - * - * @version $Id: AllocationInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface AllocationInstruction { -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denote family of instructions that allocates space in the heap. + * + * @version $Id: AllocationInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface AllocationInstruction { +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ArithmeticInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ArithmeticInstruction.java index 834117ad..ae56568a 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ArithmeticInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ArithmeticInstruction.java @@ -1,94 +1,94 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; - -/** - * Super class for the family of arithmetic instructions. - * - * @version $Id: ArithmeticInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class ArithmeticInstruction extends Instruction implements TypedInstruction, - StackProducer, StackConsumer { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ArithmeticInstruction() { - } - - - /** - * @param opcode of instruction - */ - protected ArithmeticInstruction(short opcode) { - super(opcode, (short) 1); - } - - - /** @return type associated with the instruction - */ - public Type getType( ConstantPoolGen cp ) { - switch (opcode) { - case Constants.DADD: - case Constants.DDIV: - case Constants.DMUL: - case Constants.DNEG: - case Constants.DREM: - case Constants.DSUB: - return Type.DOUBLE; - case Constants.FADD: - case Constants.FDIV: - case Constants.FMUL: - case Constants.FNEG: - case Constants.FREM: - case Constants.FSUB: - return Type.FLOAT; - case Constants.IADD: - case Constants.IAND: - case Constants.IDIV: - case Constants.IMUL: - case Constants.INEG: - case Constants.IOR: - case Constants.IREM: - case Constants.ISHL: - case Constants.ISHR: - case Constants.ISUB: - case Constants.IUSHR: - case Constants.IXOR: - return Type.INT; - case Constants.LADD: - case Constants.LAND: - case Constants.LDIV: - case Constants.LMUL: - case Constants.LNEG: - case Constants.LOR: - case Constants.LREM: - case Constants.LSHL: - case Constants.LSHR: - case Constants.LSUB: - case Constants.LUSHR: - case Constants.LXOR: - return Type.LONG; - default: // Never reached - throw new ClassGenException("Unknown type " + opcode); - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; + +/** + * Super class for the family of arithmetic instructions. + * + * @version $Id: ArithmeticInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class ArithmeticInstruction extends Instruction implements TypedInstruction, + StackProducer, StackConsumer { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + ArithmeticInstruction() { + } + + + /** + * @param opcode of instruction + */ + protected ArithmeticInstruction(short opcode) { + super(opcode, (short) 1); + } + + + /** @return type associated with the instruction + */ + public Type getType( ConstantPoolGen cp ) { + switch (opcode) { + case Constants.DADD: + case Constants.DDIV: + case Constants.DMUL: + case Constants.DNEG: + case Constants.DREM: + case Constants.DSUB: + return Type.DOUBLE; + case Constants.FADD: + case Constants.FDIV: + case Constants.FMUL: + case Constants.FNEG: + case Constants.FREM: + case Constants.FSUB: + return Type.FLOAT; + case Constants.IADD: + case Constants.IAND: + case Constants.IDIV: + case Constants.IMUL: + case Constants.INEG: + case Constants.IOR: + case Constants.IREM: + case Constants.ISHL: + case Constants.ISHR: + case Constants.ISUB: + case Constants.IUSHR: + case Constants.IXOR: + return Type.INT; + case Constants.LADD: + case Constants.LAND: + case Constants.LDIV: + case Constants.LMUL: + case Constants.LNEG: + case Constants.LOR: + case Constants.LREM: + case Constants.LSHL: + case Constants.LSHR: + case Constants.LSUB: + case Constants.LUSHR: + case Constants.LXOR: + return Type.LONG; + default: // Never reached + throw new ClassGenException("Unknown type " + opcode); + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ArrayInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ArrayInstruction.java index f43aeb6f..2f5bed14 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ArrayInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ArrayInstruction.java @@ -1,81 +1,81 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Super class for instructions dealing with array access such as IALOAD. - * - * @version $Id: ArrayInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class ArrayInstruction extends Instruction implements ExceptionThrower, - TypedInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ArrayInstruction() { - } - - - /** - * @param opcode of instruction - */ - protected ArrayInstruction(short opcode) { - super(opcode, (short) 1); - } - - - public Class[] getExceptions() { - return org.apache.bcel5_2_0.ExceptionConstants.EXCS_ARRAY_EXCEPTION; - } - - - /** @return type associated with the instruction - */ - public Type getType( ConstantPoolGen cp ) { - switch (opcode) { - case org.apache.bcel5_2_0.Constants.IALOAD: - case org.apache.bcel5_2_0.Constants.IASTORE: - return Type.INT; - case org.apache.bcel5_2_0.Constants.CALOAD: - case org.apache.bcel5_2_0.Constants.CASTORE: - return Type.CHAR; - case org.apache.bcel5_2_0.Constants.BALOAD: - case org.apache.bcel5_2_0.Constants.BASTORE: - return Type.BYTE; - case org.apache.bcel5_2_0.Constants.SALOAD: - case org.apache.bcel5_2_0.Constants.SASTORE: - return Type.SHORT; - case org.apache.bcel5_2_0.Constants.LALOAD: - case org.apache.bcel5_2_0.Constants.LASTORE: - return Type.LONG; - case org.apache.bcel5_2_0.Constants.DALOAD: - case org.apache.bcel5_2_0.Constants.DASTORE: - return Type.DOUBLE; - case org.apache.bcel5_2_0.Constants.FALOAD: - case org.apache.bcel5_2_0.Constants.FASTORE: - return Type.FLOAT; - case org.apache.bcel5_2_0.Constants.AALOAD: - case org.apache.bcel5_2_0.Constants.AASTORE: - return Type.OBJECT; - default: - throw new ClassGenException("Oops: unknown case in switch" + opcode); - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Super class for instructions dealing with array access such as IALOAD. + * + * @version $Id: ArrayInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class ArrayInstruction extends Instruction implements ExceptionThrower, + TypedInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + ArrayInstruction() { + } + + + /** + * @param opcode of instruction + */ + protected ArrayInstruction(short opcode) { + super(opcode, (short) 1); + } + + + public Class[] getExceptions() { + return org.apache.bcel5_2_0.ExceptionConstants.EXCS_ARRAY_EXCEPTION; + } + + + /** @return type associated with the instruction + */ + public Type getType( ConstantPoolGen cp ) { + switch (opcode) { + case org.apache.bcel5_2_0.Constants.IALOAD: + case org.apache.bcel5_2_0.Constants.IASTORE: + return Type.INT; + case org.apache.bcel5_2_0.Constants.CALOAD: + case org.apache.bcel5_2_0.Constants.CASTORE: + return Type.CHAR; + case org.apache.bcel5_2_0.Constants.BALOAD: + case org.apache.bcel5_2_0.Constants.BASTORE: + return Type.BYTE; + case org.apache.bcel5_2_0.Constants.SALOAD: + case org.apache.bcel5_2_0.Constants.SASTORE: + return Type.SHORT; + case org.apache.bcel5_2_0.Constants.LALOAD: + case org.apache.bcel5_2_0.Constants.LASTORE: + return Type.LONG; + case org.apache.bcel5_2_0.Constants.DALOAD: + case org.apache.bcel5_2_0.Constants.DASTORE: + return Type.DOUBLE; + case org.apache.bcel5_2_0.Constants.FALOAD: + case org.apache.bcel5_2_0.Constants.FASTORE: + return Type.FLOAT; + case org.apache.bcel5_2_0.Constants.AALOAD: + case org.apache.bcel5_2_0.Constants.AASTORE: + return Type.OBJECT; + default: + throw new ClassGenException("Oops: unknown case in switch" + opcode); + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ArrayType.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ArrayType.java index f368a3d1..7f44248c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ArrayType.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ArrayType.java @@ -1,127 +1,127 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; - -/** - * Denotes array type, such as int[][] - * - * @version $Id: ArrayType.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class ArrayType extends ReferenceType { - - private int dimensions; - private Type basic_type; - - - /** - * Convenience constructor for array type, e.g. int[] - * - * @param type array type, e.g. T_INT - */ - public ArrayType(byte type, int dimensions) { - this(BasicType.getType(type), dimensions); - } - - - /** - * Convenience constructor for reference array type, e.g. Object[] - * - * @param class_name complete name of class (java.lang.String, e.g.) - */ - public ArrayType(String class_name, int dimensions) { - this(new ObjectType(class_name), dimensions); - } - - - /** - * Constructor for array of given type - * - * @param type type of array (may be an array itself) - */ - public ArrayType(Type type, int dimensions) { - super(Constants.T_ARRAY, ""); - if ((dimensions < 1) || (dimensions > Constants.MAX_BYTE)) { - throw new ClassGenException("Invalid number of dimensions: " + dimensions); - } - switch (type.getType()) { - case Constants.T_ARRAY: - ArrayType array = (ArrayType) type; - this.dimensions = dimensions + array.dimensions; - basic_type = array.basic_type; - break; - case Constants.T_VOID: - throw new ClassGenException("Invalid type: void[]"); - default: // Basic type or reference - this.dimensions = dimensions; - basic_type = type; - break; - } - StringBuilder buf = new StringBuilder(); - for (int i = 0; i < this.dimensions; i++) { - buf.append('['); - } - buf.append(basic_type.getSignature()); - signature = buf.toString(); - } - - - /** - * @return basic type of array, i.e., for int[][][] the basic type is int - */ - public Type getBasicType() { - return basic_type; - } - - - /** - * @return element type of array, i.e., for int[][][] the element type is int[][] - */ - public Type getElementType() { - if (dimensions == 1) { - return basic_type; - } - return new ArrayType(basic_type, dimensions - 1); - } - - - /** @return number of dimensions of array - */ - public int getDimensions() { - return dimensions; - } - - - /** @return a hash code value for the object. - */ - public int hashCode() { - return basic_type.hashCode() ^ dimensions; - } - - - /** @return true if both type objects refer to the same array type. - */ - public boolean equals( Object _type ) { - if (_type instanceof ArrayType) { - ArrayType array = (ArrayType) _type; - return (array.dimensions == dimensions) && array.basic_type.equals(basic_type); - } - return false; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; + +/** + * Denotes array type, such as int[][] + * + * @version $Id: ArrayType.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public final class ArrayType extends ReferenceType { + + private int dimensions; + private Type basic_type; + + + /** + * Convenience constructor for array type, e.g. int[] + * + * @param type array type, e.g. T_INT + */ + public ArrayType(byte type, int dimensions) { + this(BasicType.getType(type), dimensions); + } + + + /** + * Convenience constructor for reference array type, e.g. Object[] + * + * @param class_name complete name of class (java.lang.String, e.g.) + */ + public ArrayType(String class_name, int dimensions) { + this(new ObjectType(class_name), dimensions); + } + + + /** + * Constructor for array of given type + * + * @param type type of array (may be an array itself) + */ + public ArrayType(Type type, int dimensions) { + super(Constants.T_ARRAY, ""); + if ((dimensions < 1) || (dimensions > Constants.MAX_BYTE)) { + throw new ClassGenException("Invalid number of dimensions: " + dimensions); + } + switch (type.getType()) { + case Constants.T_ARRAY: + ArrayType array = (ArrayType) type; + this.dimensions = dimensions + array.dimensions; + basic_type = array.basic_type; + break; + case Constants.T_VOID: + throw new ClassGenException("Invalid type: void[]"); + default: // Basic type or reference + this.dimensions = dimensions; + basic_type = type; + break; + } + StringBuilder buf = new StringBuilder(); + for (int i = 0; i < this.dimensions; i++) { + buf.append('['); + } + buf.append(basic_type.getSignature()); + signature = buf.toString(); + } + + + /** + * @return basic type of array, i.e., for int[][][] the basic type is int + */ + public Type getBasicType() { + return basic_type; + } + + + /** + * @return element type of array, i.e., for int[][][] the element type is int[][] + */ + public Type getElementType() { + if (dimensions == 1) { + return basic_type; + } + return new ArrayType(basic_type, dimensions - 1); + } + + + /** @return number of dimensions of array + */ + public int getDimensions() { + return dimensions; + } + + + /** @return a hash code value for the object. + */ + public int hashCode() { + return basic_type.hashCode() ^ dimensions; + } + + + /** @return true if both type objects refer to the same array type. + */ + public boolean equals( Object _type ) { + if (_type instanceof ArrayType) { + ArrayType array = (ArrayType) _type; + return (array.dimensions == dimensions) && array.basic_type.equals(basic_type); + } + return false; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BALOAD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BALOAD.java index 7bc9c794..3a8b1f4c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BALOAD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BALOAD.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * BALOAD - Load byte or boolean from array - *
          Stack: ..., arrayref, index -> ..., value
          - * - * @version $Id: BALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class BALOAD extends ArrayInstruction implements StackProducer { - - /** Load byte or boolean from array - */ - public BALOAD() { - super(org.apache.bcel5_2_0.Constants.BALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitBALOAD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * BALOAD - Load byte or boolean from array + *
          Stack: ..., arrayref, index -> ..., value
          + * + * @version $Id: BALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class BALOAD extends ArrayInstruction implements StackProducer { + + /** Load byte or boolean from array + */ + public BALOAD() { + super(org.apache.bcel5_2_0.Constants.BALOAD); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitBALOAD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BASTORE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BASTORE.java index 0e42aac7..17c1a60c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BASTORE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BASTORE.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * BASTORE - Store into byte or boolean array - *
          Stack: ..., arrayref, index, value -> ...
          - * - * @version $Id: BASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class BASTORE extends ArrayInstruction implements StackConsumer { - - /** Store byte or boolean into array - */ - public BASTORE() { - super(org.apache.bcel5_2_0.Constants.BASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitBASTORE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * BASTORE - Store into byte or boolean array + *
          Stack: ..., arrayref, index, value -> ...
          + * + * @version $Id: BASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class BASTORE extends ArrayInstruction implements StackConsumer { + + /** Store byte or boolean into array + */ + public BASTORE() { + super(org.apache.bcel5_2_0.Constants.BASTORE); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitBASTORE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BIPUSH.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BIPUSH.java index a3f18f35..ca38d794 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BIPUSH.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BIPUSH.java @@ -1,106 +1,106 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * BIPUSH - Push byte on stack - * - *
          Stack: ... -> ..., value
          - * - * @version $Id: BIPUSH.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class BIPUSH extends Instruction implements ConstantPushInstruction { - - private byte b; - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - BIPUSH() { - } - - - /** Push byte on stack - */ - public BIPUSH(byte b) { - super(org.apache.bcel5_2_0.Constants.BIPUSH, (short) 2); - this.b = b; - } - - - /** - * Dump instruction as byte code to stream out. - */ - public void dump( DataOutputStream out ) throws IOException { - super.dump(out); - out.writeByte(b); - } - - - /** - * @return mnemonic for instruction - */ - public String toString( boolean verbose ) { - return super.toString(verbose) + " " + b; - } - - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - length = 2; - b = bytes.readByte(); - } - - - public Number getValue() { - return new Integer(b); - } - - - /** @return Type.BYTE - */ - public Type getType( ConstantPoolGen cp ) { - return Type.BYTE; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitBIPUSH(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * BIPUSH - Push byte on stack + * + *
          Stack: ... -> ..., value
          + * + * @version $Id: BIPUSH.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class BIPUSH extends Instruction implements ConstantPushInstruction { + + private byte b; + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + BIPUSH() { + } + + + /** Push byte on stack + */ + public BIPUSH(byte b) { + super(org.apache.bcel5_2_0.Constants.BIPUSH, (short) 2); + this.b = b; + } + + + /** + * Dump instruction as byte code to stream out. + */ + public void dump( DataOutputStream out ) throws IOException { + super.dump(out); + out.writeByte(b); + } + + + /** + * @return mnemonic for instruction + */ + public String toString( boolean verbose ) { + return super.toString(verbose) + " " + b; + } + + + /** + * Read needed data (e.g. index) from file. + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + length = 2; + b = bytes.readByte(); + } + + + public Number getValue() { + return new Integer(b); + } + + + /** @return Type.BYTE + */ + public Type getType( ConstantPoolGen cp ) { + return Type.BYTE; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitPushInstruction(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitConstantPushInstruction(this); + v.visitBIPUSH(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BREAKPOINT.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BREAKPOINT.java index 4029192f..39c567fa 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BREAKPOINT.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BREAKPOINT.java @@ -1,43 +1,43 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * BREAKPOINT, JVM dependent, ignored by default - * - * @version $Id: BREAKPOINT.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class BREAKPOINT extends Instruction { - - public BREAKPOINT() { - super(org.apache.bcel5_2_0.Constants.BREAKPOINT, (short) 1); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitBREAKPOINT(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * BREAKPOINT, JVM dependent, ignored by default + * + * @version $Id: BREAKPOINT.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class BREAKPOINT extends Instruction { + + public BREAKPOINT() { + super(org.apache.bcel5_2_0.Constants.BREAKPOINT, (short) 1); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitBREAKPOINT(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BasicType.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BasicType.java index 8869f455..a43541ac 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BasicType.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BasicType.java @@ -1,81 +1,81 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; - -/** - * Denotes basic type such as int. - * - * @version $Id: BasicType.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class BasicType extends Type { - - /** - * Constructor for basic types such as int, long, `void' - * - * @param type one of T_INT, T_BOOLEAN, ..., T_VOID - * @see org.apache.bcel5_2_0.Constants - */ - BasicType(byte type) { - super(type, Constants.SHORT_TYPE_NAMES[type]); - if ((type < Constants.T_BOOLEAN) || (type > Constants.T_VOID)) { - throw new ClassGenException("Invalid type: " + type); - } - } - - - public static final BasicType getType( byte type ) { - switch (type) { - case Constants.T_VOID: - return VOID; - case Constants.T_BOOLEAN: - return BOOLEAN; - case Constants.T_BYTE: - return BYTE; - case Constants.T_SHORT: - return SHORT; - case Constants.T_CHAR: - return CHAR; - case Constants.T_INT: - return INT; - case Constants.T_LONG: - return LONG; - case Constants.T_DOUBLE: - return DOUBLE; - case Constants.T_FLOAT: - return FLOAT; - default: - throw new ClassGenException("Invalid type: " + type); - } - } - - - /** @return a hash code value for the object. - */ - public int hashCode() { - return type; - } - - - /** @return true if both type objects refer to the same type - */ - public boolean equals( Object _type ) { - return (_type instanceof BasicType) ? ((BasicType) _type).type == this.type : false; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; + +/** + * Denotes basic type such as int. + * + * @version $Id: BasicType.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public final class BasicType extends Type { + + /** + * Constructor for basic types such as int, long, `void' + * + * @param type one of T_INT, T_BOOLEAN, ..., T_VOID + * @see org.apache.bcel5_2_0.Constants + */ + BasicType(byte type) { + super(type, Constants.SHORT_TYPE_NAMES[type]); + if ((type < Constants.T_BOOLEAN) || (type > Constants.T_VOID)) { + throw new ClassGenException("Invalid type: " + type); + } + } + + + public static final BasicType getType( byte type ) { + switch (type) { + case Constants.T_VOID: + return VOID; + case Constants.T_BOOLEAN: + return BOOLEAN; + case Constants.T_BYTE: + return BYTE; + case Constants.T_SHORT: + return SHORT; + case Constants.T_CHAR: + return CHAR; + case Constants.T_INT: + return INT; + case Constants.T_LONG: + return LONG; + case Constants.T_DOUBLE: + return DOUBLE; + case Constants.T_FLOAT: + return FLOAT; + default: + throw new ClassGenException("Invalid type: " + type); + } + } + + + /** @return a hash code value for the object. + */ + public int hashCode() { + return type; + } + + + /** @return true if both type objects refer to the same type + */ + public boolean equals( Object _type ) { + return (_type instanceof BasicType) ? ((BasicType) _type).type == this.type : false; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BranchHandle.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BranchHandle.java index 04e4de55..75cc67b9 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BranchHandle.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BranchHandle.java @@ -1,121 +1,121 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * BranchHandle is returned by specialized InstructionList.append() whenever a - * BranchInstruction is appended. This is useful when the target of this - * instruction is not known at time of creation and must be set later - * via setTarget(). - * - * @see InstructionHandle - * @see Instruction - * @see InstructionList - * @version $Id: BranchHandle.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class BranchHandle extends InstructionHandle { - - private BranchInstruction bi; // An alias in fact, but saves lots of casts - - - private BranchHandle(BranchInstruction i) { - super(i); - bi = i; - } - - /** Factory methods. - */ - private static BranchHandle bh_list = null; // List of reusable handles - - - static final BranchHandle getBranchHandle( BranchInstruction i ) { - if (bh_list == null) { - return new BranchHandle(i); - } - BranchHandle bh = bh_list; - bh_list = (BranchHandle) bh.next; - bh.setInstruction(i); - return bh; - } - - - /** Handle adds itself to the list of resuable handles. - */ - protected void addHandle() { - next = bh_list; - bh_list = this; - } - - - /* Override InstructionHandle methods: delegate to branch instruction. - * Through this overriding all access to the private i_position field should - * be prevented. - */ - public int getPosition() { - return bi.position; - } - - - void setPosition( int pos ) { - i_position = bi.position = pos; - } - - - protected int updatePosition( int offset, int max_offset ) { - int x = bi.updatePosition(offset, max_offset); - i_position = bi.position; - return x; - } - - - /** - * Pass new target to instruction. - */ - public void setTarget( InstructionHandle ih ) { - bi.setTarget(ih); - } - - - /** - * Update target of instruction. - */ - public void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih ) { - bi.updateTarget(old_ih, new_ih); - } - - - /** - * @return target of instruction. - */ - public InstructionHandle getTarget() { - return bi.getTarget(); - } - - - /** - * Set new contents. Old instruction is disposed and may not be used anymore. - */ - public void setInstruction( Instruction i ) { - super.setInstruction(i); - if (!(i instanceof BranchInstruction)) { - throw new ClassGenException("Assigning " + i - + " to branch handle which is not a branch instruction"); - } - bi = (BranchInstruction) i; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * BranchHandle is returned by specialized InstructionList.append() whenever a + * BranchInstruction is appended. This is useful when the target of this + * instruction is not known at time of creation and must be set later + * via setTarget(). + * + * @see InstructionHandle + * @see Instruction + * @see InstructionList + * @version $Id: BranchHandle.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public final class BranchHandle extends InstructionHandle { + + private BranchInstruction bi; // An alias in fact, but saves lots of casts + + + private BranchHandle(BranchInstruction i) { + super(i); + bi = i; + } + + /** Factory methods. + */ + private static BranchHandle bh_list = null; // List of reusable handles + + + static final BranchHandle getBranchHandle( BranchInstruction i ) { + if (bh_list == null) { + return new BranchHandle(i); + } + BranchHandle bh = bh_list; + bh_list = (BranchHandle) bh.next; + bh.setInstruction(i); + return bh; + } + + + /** Handle adds itself to the list of resuable handles. + */ + protected void addHandle() { + next = bh_list; + bh_list = this; + } + + + /* Override InstructionHandle methods: delegate to branch instruction. + * Through this overriding all access to the private i_position field should + * be prevented. + */ + public int getPosition() { + return bi.position; + } + + + void setPosition( int pos ) { + i_position = bi.position = pos; + } + + + protected int updatePosition( int offset, int max_offset ) { + int x = bi.updatePosition(offset, max_offset); + i_position = bi.position; + return x; + } + + + /** + * Pass new target to instruction. + */ + public void setTarget( InstructionHandle ih ) { + bi.setTarget(ih); + } + + + /** + * Update target of instruction. + */ + public void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih ) { + bi.updateTarget(old_ih, new_ih); + } + + + /** + * @return target of instruction. + */ + public InstructionHandle getTarget() { + return bi.getTarget(); + } + + + /** + * Set new contents. Old instruction is disposed and may not be used anymore. + */ + public void setInstruction( Instruction i ) { + super.setInstruction(i); + if (!(i instanceof BranchInstruction)) { + throw new ClassGenException("Assigning " + i + + " to branch handle which is not a branch instruction"); + } + bi = (BranchInstruction) i; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BranchInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BranchInstruction.java index 2da2ac4c..2bac9663 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BranchInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/BranchInstruction.java @@ -1,231 +1,231 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * Abstract super class for branching instructions like GOTO, IFEQ, etc.. - * Branch instructions may have a variable length, namely GOTO, JSR, - * LOOKUPSWITCH and TABLESWITCH. - * - * @see InstructionList - * @version $Id: BranchInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class BranchInstruction extends Instruction implements InstructionTargeter { - - protected int index; // Branch target relative to this instruction - protected InstructionHandle target; // Target object in instruction list - protected int position; // Byte code offset - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - BranchInstruction() { - } - - - /** Common super constructor - * @param opcode Instruction opcode - * @param target instruction to branch to - */ - protected BranchInstruction(short opcode, InstructionHandle target) { - super(opcode, (short) 3); - setTarget(target); - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - out.writeByte(opcode); - index = getTargetOffset(); - if (Math.abs(index) >= 32767) { - throw new ClassGenException("Branch target offset too large for short"); - } - out.writeShort(index); // May be negative, i.e., point backwards - } - - - /** - * @param _target branch target - * @return the offset to `target' relative to this instruction - */ - protected int getTargetOffset( InstructionHandle _target ) { - if (_target == null) { - throw new ClassGenException("Target of " + super.toString(true) - + " is invalid null handle"); - } - int t = _target.getPosition(); - if (t < 0) { - throw new ClassGenException("Invalid branch target position offset for " - + super.toString(true) + ":" + t + ":" + _target); - } - return t - position; - } - - - /** - * @return the offset to this instruction's target - */ - protected int getTargetOffset() { - return getTargetOffset(target); - } - - - /** - * Called by InstructionList.setPositions when setting the position for every - * instruction. In the presence of variable length instructions `setPositions' - * performs multiple passes over the instruction list to calculate the - * correct (byte) positions and offsets by calling this function. - * - * @param offset additional offset caused by preceding (variable length) instructions - * @param max_offset the maximum offset that may be caused by these instructions - * @return additional offset caused by possible change of this instruction's length - */ - protected int updatePosition( int offset, int max_offset ) { - position += offset; - return 0; - } - - - /** - * Long output format: - * - * <position in byte code> - * <name of opcode> "["<opcode number>"]" - * "("<length of instruction>")" - * "<"<target instruction>">" "@"<branch target offset> - * - * @param verbose long/short format switch - * @return mnemonic for instruction - */ - public String toString( boolean verbose ) { - String s = super.toString(verbose); - String t = "null"; - if (verbose) { - if (target != null) { - if (target.getInstruction() == this) { - t = ""; - } else if (target.getInstruction() == null) { - t = ""; - } else { - t = target.getInstruction().toString(false); // Avoid circles - } - } - } else { - if (target != null) { - index = getTargetOffset(); - t = "" + (index + position); - } - } - return s + " -> " + t; - } - - - /** - * Read needed data (e.g. index) from file. Conversion to a InstructionHandle - * is done in InstructionList(byte[]). - * - * @param bytes input stream - * @param wide wide prefix? - * @see InstructionList - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - length = 3; - index = bytes.readShort(); - } - - - /** - * @return target offset in byte code - */ - public final int getIndex() { - return index; - } - - - /** - * @return target of branch instruction - */ - public InstructionHandle getTarget() { - return target; - } - - - /** - * Set branch target - * @param target branch target - */ - public void setTarget( InstructionHandle target ) { - notifyTarget(this.target, target, this); - this.target = target; - } - - - /** - * Used by BranchInstruction, LocalVariableGen, CodeExceptionGen - */ - static final void notifyTarget( InstructionHandle old_ih, InstructionHandle new_ih, - InstructionTargeter t ) { - if (old_ih != null) { - old_ih.removeTargeter(t); - } - if (new_ih != null) { - new_ih.addTargeter(t); - } - } - - - /** - * @param old_ih old target - * @param new_ih new target - */ - public void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih ) { - if (target == old_ih) { - setTarget(new_ih); - } else { - throw new ClassGenException("Not targeting " + old_ih + ", but " + target); - } - } - - - /** - * @return true, if ih is target of this instruction - */ - public boolean containsTarget( InstructionHandle ih ) { - return (target == ih); - } - - - /** - * Inform target that it's not targeted anymore. - */ - void dispose() { - setTarget(null); - index = -1; - position = -1; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * Abstract super class for branching instructions like GOTO, IFEQ, etc.. + * Branch instructions may have a variable length, namely GOTO, JSR, + * LOOKUPSWITCH and TABLESWITCH. + * + * @see InstructionList + * @version $Id: BranchInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class BranchInstruction extends Instruction implements InstructionTargeter { + + protected int index; // Branch target relative to this instruction + protected InstructionHandle target; // Target object in instruction list + protected int position; // Byte code offset + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + BranchInstruction() { + } + + + /** Common super constructor + * @param opcode Instruction opcode + * @param target instruction to branch to + */ + protected BranchInstruction(short opcode, InstructionHandle target) { + super(opcode, (short) 3); + setTarget(target); + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + out.writeByte(opcode); + index = getTargetOffset(); + if (Math.abs(index) >= 32767) { + throw new ClassGenException("Branch target offset too large for short"); + } + out.writeShort(index); // May be negative, i.e., point backwards + } + + + /** + * @param _target branch target + * @return the offset to `target' relative to this instruction + */ + protected int getTargetOffset( InstructionHandle _target ) { + if (_target == null) { + throw new ClassGenException("Target of " + super.toString(true) + + " is invalid null handle"); + } + int t = _target.getPosition(); + if (t < 0) { + throw new ClassGenException("Invalid branch target position offset for " + + super.toString(true) + ":" + t + ":" + _target); + } + return t - position; + } + + + /** + * @return the offset to this instruction's target + */ + protected int getTargetOffset() { + return getTargetOffset(target); + } + + + /** + * Called by InstructionList.setPositions when setting the position for every + * instruction. In the presence of variable length instructions `setPositions' + * performs multiple passes over the instruction list to calculate the + * correct (byte) positions and offsets by calling this function. + * + * @param offset additional offset caused by preceding (variable length) instructions + * @param max_offset the maximum offset that may be caused by these instructions + * @return additional offset caused by possible change of this instruction's length + */ + protected int updatePosition( int offset, int max_offset ) { + position += offset; + return 0; + } + + + /** + * Long output format: + * + * <position in byte code> + * <name of opcode> "["<opcode number>"]" + * "("<length of instruction>")" + * "<"<target instruction>">" "@"<branch target offset> + * + * @param verbose long/short format switch + * @return mnemonic for instruction + */ + public String toString( boolean verbose ) { + String s = super.toString(verbose); + String t = "null"; + if (verbose) { + if (target != null) { + if (target.getInstruction() == this) { + t = ""; + } else if (target.getInstruction() == null) { + t = ""; + } else { + t = target.getInstruction().toString(false); // Avoid circles + } + } + } else { + if (target != null) { + index = getTargetOffset(); + t = "" + (index + position); + } + } + return s + " -> " + t; + } + + + /** + * Read needed data (e.g. index) from file. Conversion to a InstructionHandle + * is done in InstructionList(byte[]). + * + * @param bytes input stream + * @param wide wide prefix? + * @see InstructionList + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + length = 3; + index = bytes.readShort(); + } + + + /** + * @return target offset in byte code + */ + public final int getIndex() { + return index; + } + + + /** + * @return target of branch instruction + */ + public InstructionHandle getTarget() { + return target; + } + + + /** + * Set branch target + * @param target branch target + */ + public void setTarget( InstructionHandle target ) { + notifyTarget(this.target, target, this); + this.target = target; + } + + + /** + * Used by BranchInstruction, LocalVariableGen, CodeExceptionGen + */ + static final void notifyTarget( InstructionHandle old_ih, InstructionHandle new_ih, + InstructionTargeter t ) { + if (old_ih != null) { + old_ih.removeTargeter(t); + } + if (new_ih != null) { + new_ih.addTargeter(t); + } + } + + + /** + * @param old_ih old target + * @param new_ih new target + */ + public void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih ) { + if (target == old_ih) { + setTarget(new_ih); + } else { + throw new ClassGenException("Not targeting " + old_ih + ", but " + target); + } + } + + + /** + * @return true, if ih is target of this instruction + */ + public boolean containsTarget( InstructionHandle ih ) { + return (target == ih); + } + + + /** + * Inform target that it's not targeted anymore. + */ + void dispose() { + setTarget(null); + index = -1; + position = -1; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CALOAD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CALOAD.java index c9b9cc7b..d23c135e 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CALOAD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CALOAD.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * CALOAD - Load char from array - *
          Stack: ..., arrayref, index -> ..., value
          - * - * @version $Id: CALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class CALOAD extends ArrayInstruction implements StackProducer { - - /** Load char from array - */ - public CALOAD() { - super(org.apache.bcel5_2_0.Constants.CALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitCALOAD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * CALOAD - Load char from array + *
          Stack: ..., arrayref, index -> ..., value
          + * + * @version $Id: CALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class CALOAD extends ArrayInstruction implements StackProducer { + + /** Load char from array + */ + public CALOAD() { + super(org.apache.bcel5_2_0.Constants.CALOAD); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitCALOAD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CASTORE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CASTORE.java index 4713588f..7e327535 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CASTORE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CASTORE.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * CASTORE - Store into char array - *
          Stack: ..., arrayref, index, value -> ...
          - * - * @version $Id: CASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class CASTORE extends ArrayInstruction implements StackConsumer { - - /** Store char into array - */ - public CASTORE() { - super(org.apache.bcel5_2_0.Constants.CASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitCASTORE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * CASTORE - Store into char array + *
          Stack: ..., arrayref, index, value -> ...
          + * + * @version $Id: CASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class CASTORE extends ArrayInstruction implements StackConsumer { + + /** Store char into array + */ + public CASTORE() { + super(org.apache.bcel5_2_0.Constants.CASTORE); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitCASTORE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CHECKCAST.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CHECKCAST.java index bc2983ee..108a224b 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CHECKCAST.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CHECKCAST.java @@ -1,84 +1,84 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.ExceptionConstants; - -/** - * CHECKCAST - Check whether object is of given type - *
          Stack: ..., objectref -> ..., objectref
          - * - * @version $Id: CHECKCAST.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class CHECKCAST extends CPInstruction implements LoadClass, ExceptionThrower, StackProducer, - StackConsumer { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - CHECKCAST() { - } - - - /** Check whether object is of given type - * @param index index to class in constant pool - */ - public CHECKCAST(int index) { - super(org.apache.bcel5_2_0.Constants.CHECKCAST, index); - } - - - /** @return exceptions this instruction may cause - */ - public Class[] getExceptions() { - Class[] cs = new Class[1 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, cs, 0, - ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = ExceptionConstants.CLASS_CAST_EXCEPTION; - return cs; - } - - - public ObjectType getLoadClassType( ConstantPoolGen cpg ) { - Type t = getType(cpg); - if (t instanceof ArrayType) { - t = ((ArrayType) t).getBasicType(); - } - return (t instanceof ObjectType) ? (ObjectType) t : null; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitLoadClass(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitCHECKCAST(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.ExceptionConstants; + +/** + * CHECKCAST - Check whether object is of given type + *
          Stack: ..., objectref -> ..., objectref
          + * + * @version $Id: CHECKCAST.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class CHECKCAST extends CPInstruction implements LoadClass, ExceptionThrower, StackProducer, + StackConsumer { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + CHECKCAST() { + } + + + /** Check whether object is of given type + * @param index index to class in constant pool + */ + public CHECKCAST(int index) { + super(org.apache.bcel5_2_0.Constants.CHECKCAST, index); + } + + + /** @return exceptions this instruction may cause + */ + public Class[] getExceptions() { + Class[] cs = new Class[1 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; + System.arraycopy(ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, cs, 0, + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); + cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = ExceptionConstants.CLASS_CAST_EXCEPTION; + return cs; + } + + + public ObjectType getLoadClassType( ConstantPoolGen cpg ) { + Type t = getType(cpg); + if (t instanceof ArrayType) { + t = ((ArrayType) t).getBasicType(); + } + return (t instanceof ObjectType) ? (ObjectType) t : null; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitLoadClass(this); + v.visitExceptionThrower(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitTypedInstruction(this); + v.visitCPInstruction(this); + v.visitCHECKCAST(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CPInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CPInstruction.java index e70a27e9..15f8047d 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CPInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CPInstruction.java @@ -1,139 +1,139 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.classfile.Constant; -import org.apache.bcel5_2_0.classfile.ConstantClass; -import org.apache.bcel5_2_0.classfile.ConstantPool; -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * Abstract super class for instructions that use an index into the - * constant pool such as LDC, INVOKEVIRTUAL, etc. - * - * @see ConstantPoolGen - * @see LDC - * @see INVOKEVIRTUAL - * - * @version $Id: CPInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class CPInstruction extends Instruction implements TypedInstruction, - IndexedInstruction { - - protected int index; // index to constant pool - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - CPInstruction() { - } - - - /** - * @param index to constant pool - */ - protected CPInstruction(short opcode, int index) { - super(opcode, (short) 3); - setIndex(index); - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - out.writeByte(opcode); - out.writeShort(index); - } - - - /** - * Long output format: - * - * <name of opcode> "["<opcode number>"]" - * "("<length of instruction>")" "<"< constant pool index>">" - * - * @param verbose long/short format switch - * @return mnemonic for instruction - */ - public String toString( boolean verbose ) { - return super.toString(verbose) + " " + index; - } - - - /** - * @return mnemonic for instruction with symbolic references resolved - */ - public String toString( ConstantPool cp ) { - Constant c = cp.getConstant(index); - String str = cp.constantToString(c); - if (c instanceof ConstantClass) { - str = str.replace('.', '/'); - } - return org.apache.bcel5_2_0.Constants.OPCODE_NAMES[opcode] + " " + str; - } - - - /** - * Read needed data (i.e., index) from file. - * @param bytes input stream - * @param wide wide prefix? - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - setIndex(bytes.readUnsignedShort()); - length = 3; - } - - - /** - * @return index in constant pool referred by this instruction. - */ - public final int getIndex() { - return index; - } - - - /** - * Set the index to constant pool. - * @param index in constant pool. - */ - public void setIndex( int index ) { - if (index < 0) { - throw new ClassGenException("Negative index value: " + index); - } - this.index = index; - } - - - /** @return type related with this instruction. - */ - public Type getType( ConstantPoolGen cpg ) { - ConstantPool cp = cpg.getConstantPool(); - String name = cp.getConstantString(index, org.apache.bcel5_2_0.Constants.CONSTANT_Class); - if (!name.startsWith("[")) { - name = "L" + name + ";"; - } - return Type.getType(name); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.classfile.Constant; +import org.apache.bcel5_2_0.classfile.ConstantClass; +import org.apache.bcel5_2_0.classfile.ConstantPool; +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * Abstract super class for instructions that use an index into the + * constant pool such as LDC, INVOKEVIRTUAL, etc. + * + * @see ConstantPoolGen + * @see LDC + * @see INVOKEVIRTUAL + * + * @version $Id: CPInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class CPInstruction extends Instruction implements TypedInstruction, + IndexedInstruction { + + protected int index; // index to constant pool + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + CPInstruction() { + } + + + /** + * @param index to constant pool + */ + protected CPInstruction(short opcode, int index) { + super(opcode, (short) 3); + setIndex(index); + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + out.writeByte(opcode); + out.writeShort(index); + } + + + /** + * Long output format: + * + * <name of opcode> "["<opcode number>"]" + * "("<length of instruction>")" "<"< constant pool index>">" + * + * @param verbose long/short format switch + * @return mnemonic for instruction + */ + public String toString( boolean verbose ) { + return super.toString(verbose) + " " + index; + } + + + /** + * @return mnemonic for instruction with symbolic references resolved + */ + public String toString( ConstantPool cp ) { + Constant c = cp.getConstant(index); + String str = cp.constantToString(c); + if (c instanceof ConstantClass) { + str = str.replace('.', '/'); + } + return org.apache.bcel5_2_0.Constants.OPCODE_NAMES[opcode] + " " + str; + } + + + /** + * Read needed data (i.e., index) from file. + * @param bytes input stream + * @param wide wide prefix? + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + setIndex(bytes.readUnsignedShort()); + length = 3; + } + + + /** + * @return index in constant pool referred by this instruction. + */ + public final int getIndex() { + return index; + } + + + /** + * Set the index to constant pool. + * @param index in constant pool. + */ + public void setIndex( int index ) { + if (index < 0) { + throw new ClassGenException("Negative index value: " + index); + } + this.index = index; + } + + + /** @return type related with this instruction. + */ + public Type getType( ConstantPoolGen cpg ) { + ConstantPool cp = cpg.getConstantPool(); + String name = cp.getConstantString(index, org.apache.bcel5_2_0.Constants.CONSTANT_Class); + if (!name.startsWith("[")) { + name = "L" + name + ";"; + } + return Type.getType(name); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ClassGen.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ClassGen.java index 803be1cd..5c7f404c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ClassGen.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ClassGen.java @@ -1,542 +1,542 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.classfile.AccessFlags; -import org.apache.bcel5_2_0.classfile.Attribute; -import org.apache.bcel5_2_0.classfile.ConstantPool; -import org.apache.bcel5_2_0.classfile.Field; -import org.apache.bcel5_2_0.classfile.JavaClass; -import org.apache.bcel5_2_0.classfile.Method; -import org.apache.bcel5_2_0.classfile.SourceFile; -import org.apache.bcel5_2_0.util.BCELComparator; - -/** - * Template class for building up a java class. May be initialized with an - * existing java class (file). - * - * @see JavaClass - * @version $Id: ClassGen.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ClassGen extends AccessFlags implements Cloneable { - - /* Corresponds to the fields found in a JavaClass object. - */ - private String class_name, super_class_name, file_name; - private int class_name_index = -1, superclass_name_index = -1; - private int major = Constants.MAJOR_1_1, minor = Constants.MINOR_1_1; - private ConstantPoolGen cp; // Template for building up constant pool - // ArrayLists instead of arrays to gather fields, methods, etc. - private List field_vec = new ArrayList(); - private List method_vec = new ArrayList(); - private List attribute_vec = new ArrayList(); - private List interface_vec = new ArrayList(); - private static BCELComparator _cmp = new BCELComparator() { - - public boolean equals( Object o1, Object o2 ) { - ClassGen THIS = (ClassGen) o1; - ClassGen THAT = (ClassGen) o2; - return THIS.getClassName().equals(THAT.getClassName()); - } - - - public int hashCode( Object o ) { - ClassGen THIS = (ClassGen) o; - return THIS.getClassName().hashCode(); - } - }; - - - /** Convenience constructor to set up some important values initially. - * - * @param class_name fully qualified class name - * @param super_class_name fully qualified superclass name - * @param file_name source file name - * @param access_flags access qualifiers - * @param interfaces implemented interfaces - * @param cp constant pool to use - */ - public ClassGen(String class_name, String super_class_name, String file_name, int access_flags, - String[] interfaces, ConstantPoolGen cp) { - this.class_name = class_name; - this.super_class_name = super_class_name; - this.file_name = file_name; - this.access_flags = access_flags; - this.cp = cp; - // Put everything needed by default into the constant pool and the vectors - if (file_name != null) { - addAttribute(new SourceFile(cp.addUtf8("SourceFile"), 2, cp.addUtf8(file_name), cp - .getConstantPool())); - } - class_name_index = cp.addClass(class_name); - superclass_name_index = cp.addClass(super_class_name); - if (interfaces != null) { - for (int i = 0; i < interfaces.length; i++) { - addInterface(interfaces[i]); - } - } - } - - - /** Convenience constructor to set up some important values initially. - * - * @param class_name fully qualified class name - * @param super_class_name fully qualified superclass name - * @param file_name source file name - * @param access_flags access qualifiers - * @param interfaces implemented interfaces - */ - public ClassGen(String class_name, String super_class_name, String file_name, int access_flags, - String[] interfaces) { - this(class_name, super_class_name, file_name, access_flags, interfaces, - new ConstantPoolGen()); - } - - - /** - * Initialize with existing class. - * @param clazz JavaClass object (e.g. read from file) - */ - public ClassGen(JavaClass clazz) { - class_name_index = clazz.getClassNameIndex(); - superclass_name_index = clazz.getSuperclassNameIndex(); - class_name = clazz.getClassName(); - super_class_name = clazz.getSuperclassName(); - file_name = clazz.getSourceFileName(); - access_flags = clazz.getAccessFlags(); - cp = new ConstantPoolGen(clazz.getConstantPool()); - major = clazz.getMajor(); - minor = clazz.getMinor(); - Attribute[] attributes = clazz.getAttributes(); - Method[] methods = clazz.getMethods(); - Field[] fields = clazz.getFields(); - String[] interfaces = clazz.getInterfaceNames(); - for (int i = 0; i < interfaces.length; i++) { - addInterface(interfaces[i]); - } - for (int i = 0; i < attributes.length; i++) { - addAttribute(attributes[i]); - } - for (int i = 0; i < methods.length; i++) { - addMethod(methods[i]); - } - for (int i = 0; i < fields.length; i++) { - addField(fields[i]); - } - } - - - /** - * @return the (finally) built up Java class object. - */ - public JavaClass getJavaClass() { - int[] interfaces = getInterfaces(); - Field[] fields = getFields(); - Method[] methods = getMethods(); - Attribute[] attributes = getAttributes(); - // Must be last since the above calls may still add something to it - ConstantPool _cp = this.cp.getFinalConstantPool(); - return new JavaClass(class_name_index, superclass_name_index, file_name, major, minor, - access_flags, _cp, interfaces, fields, methods, attributes); - } - - - /** - * Add an interface to this class, i.e., this class has to implement it. - * @param name interface to implement (fully qualified class name) - */ - public void addInterface( String name ) { - interface_vec.add(name); - } - - - /** - * Remove an interface from this class. - * @param name interface to remove (fully qualified name) - */ - public void removeInterface( String name ) { - interface_vec.remove(name); - } - - - /** - * @return major version number of class file - */ - public int getMajor() { - return major; - } - - - /** Set major version number of class file, default value is 45 (JDK 1.1) - * @param major major version number - */ - public void setMajor( int major ) { - this.major = major; - } - - - /** Set minor version number of class file, default value is 3 (JDK 1.1) - * @param minor minor version number - */ - public void setMinor( int minor ) { - this.minor = minor; - } - - - /** - * @return minor version number of class file - */ - public int getMinor() { - return minor; - } - - - /** - * Add an attribute to this class. - * @param a attribute to add - */ - public void addAttribute( Attribute a ) { - attribute_vec.add(a); - } - - - /** - * Add a method to this class. - * @param m method to add - */ - public void addMethod( Method m ) { - method_vec.add(m); - } - - - /** - * Convenience method. - * - * Add an empty constructor to this class that does nothing but calling super(). - * @param access_flags rights for constructor - */ - public void addEmptyConstructor( int access_flags ) { - InstructionList il = new InstructionList(); - il.append(InstructionConstants.THIS); // Push `this' - il.append(new INVOKESPECIAL(cp.addMethodref(super_class_name, "", "()V"))); - il.append(InstructionConstants.RETURN); - MethodGen mg = new MethodGen(access_flags, Type.VOID, Type.NO_ARGS, null, "", - class_name, il, cp); - mg.setMaxStack(1); - addMethod(mg.getMethod()); - } - - - /** - * Add a field to this class. - * @param f field to add - */ - public void addField( Field f ) { - field_vec.add(f); - } - - - public boolean containsField( Field f ) { - return field_vec.contains(f); - } - - - /** @return field object with given name, or null - */ - public Field containsField( String name ) { - for (Iterator e = field_vec.iterator(); e.hasNext();) { - Field f = (Field) e.next(); - if (f.getName().equals(name)) { - return f; - } - } - return null; - } - - - /** @return method object with given name and signature, or null - */ - public Method containsMethod( String name, String signature ) { - for (Iterator e = method_vec.iterator(); e.hasNext();) { - Method m = (Method) e.next(); - if (m.getName().equals(name) && m.getSignature().equals(signature)) { - return m; - } - } - return null; - } - - - /** - * Remove an attribute from this class. - * @param a attribute to remove - */ - public void removeAttribute( Attribute a ) { - attribute_vec.remove(a); - } - - - /** - * Remove a method from this class. - * @param m method to remove - */ - public void removeMethod( Method m ) { - method_vec.remove(m); - } - - - /** Replace given method with new one. If the old one does not exist - * add the new_ method to the class anyway. - */ - public void replaceMethod( Method old, Method new_ ) { - if (new_ == null) { - throw new ClassGenException("Replacement method must not be null"); - } - int i = method_vec.indexOf(old); - if (i < 0) { - method_vec.add(new_); - } else { - method_vec.set(i, new_); - } - } - - - /** Replace given field with new one. If the old one does not exist - * add the new_ field to the class anyway. - */ - public void replaceField( Field old, Field new_ ) { - if (new_ == null) { - throw new ClassGenException("Replacement method must not be null"); - } - int i = field_vec.indexOf(old); - if (i < 0) { - field_vec.add(new_); - } else { - field_vec.set(i, new_); - } - } - - - /** - * Remove a field to this class. - * @param f field to remove - */ - public void removeField( Field f ) { - field_vec.remove(f); - } - - - public String getClassName() { - return class_name; - } - - - public String getSuperclassName() { - return super_class_name; - } - - - public String getFileName() { - return file_name; - } - - - public void setClassName( String name ) { - class_name = name.replace('/', '.'); - class_name_index = cp.addClass(name); - } - - - public void setSuperclassName( String name ) { - super_class_name = name.replace('/', '.'); - superclass_name_index = cp.addClass(name); - } - - - public Method[] getMethods() { - return (Method[]) method_vec.toArray(new Method[method_vec.size()]); - } - - - public void setMethods( Method[] methods ) { - method_vec.clear(); - for (int m = 0; m < methods.length; m++) { - addMethod(methods[m]); - } - } - - - public void setMethodAt( Method method, int pos ) { - method_vec.set(pos, method); - } - - - public Method getMethodAt( int pos ) { - return (Method) method_vec.get(pos); - } - - - public String[] getInterfaceNames() { - int size = interface_vec.size(); - String[] interfaces = new String[size]; - interface_vec.toArray(interfaces); - return interfaces; - } - - - public int[] getInterfaces() { - int size = interface_vec.size(); - int[] interfaces = new int[size]; - for (int i = 0; i < size; i++) { - interfaces[i] = cp.addClass((String) interface_vec.get(i)); - } - return interfaces; - } - - - public Field[] getFields() { - return (Field[]) field_vec.toArray(new Field[field_vec.size()]); - } - - - public Attribute[] getAttributes() { - return (Attribute[]) attribute_vec.toArray(new Attribute[attribute_vec.size()]); - } - - - public ConstantPoolGen getConstantPool() { - return cp; - } - - - public void setConstantPool( ConstantPoolGen constant_pool ) { - cp = constant_pool; - } - - - public void setClassNameIndex( int class_name_index ) { - this.class_name_index = class_name_index; - class_name = cp.getConstantPool().getConstantString(class_name_index, - Constants.CONSTANT_Class).replace('/', '.'); - } - - - public void setSuperclassNameIndex( int superclass_name_index ) { - this.superclass_name_index = superclass_name_index; - super_class_name = cp.getConstantPool().getConstantString(superclass_name_index, - Constants.CONSTANT_Class).replace('/', '.'); - } - - - public int getSuperclassNameIndex() { - return superclass_name_index; - } - - - public int getClassNameIndex() { - return class_name_index; - } - - private ArrayList observers; - - - /** Add observer for this object. - */ - public void addObserver( ClassObserver o ) { - if (observers == null) { - observers = new ArrayList(); - } - observers.add(o); - } - - - /** Remove observer for this object. - */ - public void removeObserver( ClassObserver o ) { - if (observers != null) { - observers.remove(o); - } - } - - - /** Call notify() method on all observers. This method is not called - * automatically whenever the state has changed, but has to be - * called by the user after he has finished editing the object. - */ - public void update() { - if (observers != null) { - for (Iterator e = observers.iterator(); e.hasNext();) { - ((ClassObserver) e.next()).notify(this); - } - } - } - - - public Object clone() { - try { - return super.clone(); - } catch (CloneNotSupportedException e) { - System.err.println(e); - return null; - } - } - - - /** - * @return Comparison strategy object - */ - public static BCELComparator getComparator() { - return _cmp; - } - - - /** - * @param comparator Comparison strategy object - */ - public static void setComparator( BCELComparator comparator ) { - _cmp = comparator; - } - - - /** - * Return value as defined by given BCELComparator strategy. - * By default two ClassGen objects are said to be equal when - * their class names are equal. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals( Object obj ) { - return _cmp.equals(this, obj); - } - - - /** - * Return value as defined by given BCELComparator strategy. - * By default return the hashcode of the class name. - * - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return _cmp.hashCode(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.classfile.AccessFlags; +import org.apache.bcel5_2_0.classfile.Attribute; +import org.apache.bcel5_2_0.classfile.ConstantPool; +import org.apache.bcel5_2_0.classfile.Field; +import org.apache.bcel5_2_0.classfile.JavaClass; +import org.apache.bcel5_2_0.classfile.Method; +import org.apache.bcel5_2_0.classfile.SourceFile; +import org.apache.bcel5_2_0.util.BCELComparator; + +/** + * Template class for building up a java class. May be initialized with an + * existing java class (file). + * + * @see JavaClass + * @version $Id: ClassGen.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ClassGen extends AccessFlags implements Cloneable { + + /* Corresponds to the fields found in a JavaClass object. + */ + private String class_name, super_class_name, file_name; + private int class_name_index = -1, superclass_name_index = -1; + private int major = Constants.MAJOR_1_1, minor = Constants.MINOR_1_1; + private ConstantPoolGen cp; // Template for building up constant pool + // ArrayLists instead of arrays to gather fields, methods, etc. + private List field_vec = new ArrayList(); + private List method_vec = new ArrayList(); + private List attribute_vec = new ArrayList(); + private List interface_vec = new ArrayList(); + private static BCELComparator _cmp = new BCELComparator() { + + public boolean equals( Object o1, Object o2 ) { + ClassGen THIS = (ClassGen) o1; + ClassGen THAT = (ClassGen) o2; + return THIS.getClassName().equals(THAT.getClassName()); + } + + + public int hashCode( Object o ) { + ClassGen THIS = (ClassGen) o; + return THIS.getClassName().hashCode(); + } + }; + + + /** Convenience constructor to set up some important values initially. + * + * @param class_name fully qualified class name + * @param super_class_name fully qualified superclass name + * @param file_name source file name + * @param access_flags access qualifiers + * @param interfaces implemented interfaces + * @param cp constant pool to use + */ + public ClassGen(String class_name, String super_class_name, String file_name, int access_flags, + String[] interfaces, ConstantPoolGen cp) { + this.class_name = class_name; + this.super_class_name = super_class_name; + this.file_name = file_name; + this.access_flags = access_flags; + this.cp = cp; + // Put everything needed by default into the constant pool and the vectors + if (file_name != null) { + addAttribute(new SourceFile(cp.addUtf8("SourceFile"), 2, cp.addUtf8(file_name), cp + .getConstantPool())); + } + class_name_index = cp.addClass(class_name); + superclass_name_index = cp.addClass(super_class_name); + if (interfaces != null) { + for (int i = 0; i < interfaces.length; i++) { + addInterface(interfaces[i]); + } + } + } + + + /** Convenience constructor to set up some important values initially. + * + * @param class_name fully qualified class name + * @param super_class_name fully qualified superclass name + * @param file_name source file name + * @param access_flags access qualifiers + * @param interfaces implemented interfaces + */ + public ClassGen(String class_name, String super_class_name, String file_name, int access_flags, + String[] interfaces) { + this(class_name, super_class_name, file_name, access_flags, interfaces, + new ConstantPoolGen()); + } + + + /** + * Initialize with existing class. + * @param clazz JavaClass object (e.g. read from file) + */ + public ClassGen(JavaClass clazz) { + class_name_index = clazz.getClassNameIndex(); + superclass_name_index = clazz.getSuperclassNameIndex(); + class_name = clazz.getClassName(); + super_class_name = clazz.getSuperclassName(); + file_name = clazz.getSourceFileName(); + access_flags = clazz.getAccessFlags(); + cp = new ConstantPoolGen(clazz.getConstantPool()); + major = clazz.getMajor(); + minor = clazz.getMinor(); + Attribute[] attributes = clazz.getAttributes(); + Method[] methods = clazz.getMethods(); + Field[] fields = clazz.getFields(); + String[] interfaces = clazz.getInterfaceNames(); + for (int i = 0; i < interfaces.length; i++) { + addInterface(interfaces[i]); + } + for (int i = 0; i < attributes.length; i++) { + addAttribute(attributes[i]); + } + for (int i = 0; i < methods.length; i++) { + addMethod(methods[i]); + } + for (int i = 0; i < fields.length; i++) { + addField(fields[i]); + } + } + + + /** + * @return the (finally) built up Java class object. + */ + public JavaClass getJavaClass() { + int[] interfaces = getInterfaces(); + Field[] fields = getFields(); + Method[] methods = getMethods(); + Attribute[] attributes = getAttributes(); + // Must be last since the above calls may still add something to it + ConstantPool _cp = this.cp.getFinalConstantPool(); + return new JavaClass(class_name_index, superclass_name_index, file_name, major, minor, + access_flags, _cp, interfaces, fields, methods, attributes); + } + + + /** + * Add an interface to this class, i.e., this class has to implement it. + * @param name interface to implement (fully qualified class name) + */ + public void addInterface( String name ) { + interface_vec.add(name); + } + + + /** + * Remove an interface from this class. + * @param name interface to remove (fully qualified name) + */ + public void removeInterface( String name ) { + interface_vec.remove(name); + } + + + /** + * @return major version number of class file + */ + public int getMajor() { + return major; + } + + + /** Set major version number of class file, default value is 45 (JDK 1.1) + * @param major major version number + */ + public void setMajor( int major ) { + this.major = major; + } + + + /** Set minor version number of class file, default value is 3 (JDK 1.1) + * @param minor minor version number + */ + public void setMinor( int minor ) { + this.minor = minor; + } + + + /** + * @return minor version number of class file + */ + public int getMinor() { + return minor; + } + + + /** + * Add an attribute to this class. + * @param a attribute to add + */ + public void addAttribute( Attribute a ) { + attribute_vec.add(a); + } + + + /** + * Add a method to this class. + * @param m method to add + */ + public void addMethod( Method m ) { + method_vec.add(m); + } + + + /** + * Convenience method. + * + * Add an empty constructor to this class that does nothing but calling super(). + * @param access_flags rights for constructor + */ + public void addEmptyConstructor( int access_flags ) { + InstructionList il = new InstructionList(); + il.append(InstructionConstants.THIS); // Push `this' + il.append(new INVOKESPECIAL(cp.addMethodref(super_class_name, "", "()V"))); + il.append(InstructionConstants.RETURN); + MethodGen mg = new MethodGen(access_flags, Type.VOID, Type.NO_ARGS, null, "", + class_name, il, cp); + mg.setMaxStack(1); + addMethod(mg.getMethod()); + } + + + /** + * Add a field to this class. + * @param f field to add + */ + public void addField( Field f ) { + field_vec.add(f); + } + + + public boolean containsField( Field f ) { + return field_vec.contains(f); + } + + + /** @return field object with given name, or null + */ + public Field containsField( String name ) { + for (Iterator e = field_vec.iterator(); e.hasNext();) { + Field f = (Field) e.next(); + if (f.getName().equals(name)) { + return f; + } + } + return null; + } + + + /** @return method object with given name and signature, or null + */ + public Method containsMethod( String name, String signature ) { + for (Iterator e = method_vec.iterator(); e.hasNext();) { + Method m = (Method) e.next(); + if (m.getName().equals(name) && m.getSignature().equals(signature)) { + return m; + } + } + return null; + } + + + /** + * Remove an attribute from this class. + * @param a attribute to remove + */ + public void removeAttribute( Attribute a ) { + attribute_vec.remove(a); + } + + + /** + * Remove a method from this class. + * @param m method to remove + */ + public void removeMethod( Method m ) { + method_vec.remove(m); + } + + + /** Replace given method with new one. If the old one does not exist + * add the new_ method to the class anyway. + */ + public void replaceMethod( Method old, Method new_ ) { + if (new_ == null) { + throw new ClassGenException("Replacement method must not be null"); + } + int i = method_vec.indexOf(old); + if (i < 0) { + method_vec.add(new_); + } else { + method_vec.set(i, new_); + } + } + + + /** Replace given field with new one. If the old one does not exist + * add the new_ field to the class anyway. + */ + public void replaceField( Field old, Field new_ ) { + if (new_ == null) { + throw new ClassGenException("Replacement method must not be null"); + } + int i = field_vec.indexOf(old); + if (i < 0) { + field_vec.add(new_); + } else { + field_vec.set(i, new_); + } + } + + + /** + * Remove a field to this class. + * @param f field to remove + */ + public void removeField( Field f ) { + field_vec.remove(f); + } + + + public String getClassName() { + return class_name; + } + + + public String getSuperclassName() { + return super_class_name; + } + + + public String getFileName() { + return file_name; + } + + + public void setClassName( String name ) { + class_name = name.replace('/', '.'); + class_name_index = cp.addClass(name); + } + + + public void setSuperclassName( String name ) { + super_class_name = name.replace('/', '.'); + superclass_name_index = cp.addClass(name); + } + + + public Method[] getMethods() { + return (Method[]) method_vec.toArray(new Method[method_vec.size()]); + } + + + public void setMethods( Method[] methods ) { + method_vec.clear(); + for (int m = 0; m < methods.length; m++) { + addMethod(methods[m]); + } + } + + + public void setMethodAt( Method method, int pos ) { + method_vec.set(pos, method); + } + + + public Method getMethodAt( int pos ) { + return (Method) method_vec.get(pos); + } + + + public String[] getInterfaceNames() { + int size = interface_vec.size(); + String[] interfaces = new String[size]; + interface_vec.toArray(interfaces); + return interfaces; + } + + + public int[] getInterfaces() { + int size = interface_vec.size(); + int[] interfaces = new int[size]; + for (int i = 0; i < size; i++) { + interfaces[i] = cp.addClass((String) interface_vec.get(i)); + } + return interfaces; + } + + + public Field[] getFields() { + return (Field[]) field_vec.toArray(new Field[field_vec.size()]); + } + + + public Attribute[] getAttributes() { + return (Attribute[]) attribute_vec.toArray(new Attribute[attribute_vec.size()]); + } + + + public ConstantPoolGen getConstantPool() { + return cp; + } + + + public void setConstantPool( ConstantPoolGen constant_pool ) { + cp = constant_pool; + } + + + public void setClassNameIndex( int class_name_index ) { + this.class_name_index = class_name_index; + class_name = cp.getConstantPool().getConstantString(class_name_index, + Constants.CONSTANT_Class).replace('/', '.'); + } + + + public void setSuperclassNameIndex( int superclass_name_index ) { + this.superclass_name_index = superclass_name_index; + super_class_name = cp.getConstantPool().getConstantString(superclass_name_index, + Constants.CONSTANT_Class).replace('/', '.'); + } + + + public int getSuperclassNameIndex() { + return superclass_name_index; + } + + + public int getClassNameIndex() { + return class_name_index; + } + + private ArrayList observers; + + + /** Add observer for this object. + */ + public void addObserver( ClassObserver o ) { + if (observers == null) { + observers = new ArrayList(); + } + observers.add(o); + } + + + /** Remove observer for this object. + */ + public void removeObserver( ClassObserver o ) { + if (observers != null) { + observers.remove(o); + } + } + + + /** Call notify() method on all observers. This method is not called + * automatically whenever the state has changed, but has to be + * called by the user after he has finished editing the object. + */ + public void update() { + if (observers != null) { + for (Iterator e = observers.iterator(); e.hasNext();) { + ((ClassObserver) e.next()).notify(this); + } + } + } + + + public Object clone() { + try { + return super.clone(); + } catch (CloneNotSupportedException e) { + System.err.println(e); + return null; + } + } + + + /** + * @return Comparison strategy object + */ + public static BCELComparator getComparator() { + return _cmp; + } + + + /** + * @param comparator Comparison strategy object + */ + public static void setComparator( BCELComparator comparator ) { + _cmp = comparator; + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default two ClassGen objects are said to be equal when + * their class names are equal. + * + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals( Object obj ) { + return _cmp.equals(this, obj); + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default return the hashcode of the class name. + * + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + return _cmp.hashCode(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ClassGenException.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ClassGenException.java index 696b31a6..316a7cb5 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ClassGenException.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ClassGenException.java @@ -1,36 +1,36 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Thrown on internal errors. Extends RuntimeException so it hasn't to be declared - * in the throws clause every time. - * - * @version $Id: ClassGenException.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ClassGenException extends RuntimeException { - - public ClassGenException() { - super(); - } - - - public ClassGenException(String s) { - super(s); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Thrown on internal errors. Extends RuntimeException so it hasn't to be declared + * in the throws clause every time. + * + * @version $Id: ClassGenException.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ClassGenException extends RuntimeException { + + public ClassGenException() { + super(); + } + + + public ClassGenException(String s) { + super(s); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ClassObserver.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ClassObserver.java index 37bcb2e5..de664b57 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ClassObserver.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ClassObserver.java @@ -1,29 +1,29 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Implement this interface if you're interested in changes to a ClassGen object - * and register yourself with addObserver(). - * - * @version $Id: ClassObserver.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface ClassObserver { - - public void notify( ClassGen clazz ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Implement this interface if you're interested in changes to a ClassGen object + * and register yourself with addObserver(). + * + * @version $Id: ClassObserver.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface ClassObserver { + + public void notify( ClassGen clazz ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CodeExceptionGen.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CodeExceptionGen.java index 070be6a1..890c356c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CodeExceptionGen.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CodeExceptionGen.java @@ -1,184 +1,184 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.classfile.CodeException; - -/** - * This class represents an exception handler, i.e., specifies the region where - * a handler is active and an instruction where the actual handling is done. - * pool as parameters. Opposed to the JVM specification the end of the handled - * region is set to be inclusive, i.e. all instructions between start and end - * are protected including the start and end instructions (handles) themselves. - * The end of the region is automatically mapped to be exclusive when calling - * getCodeException(), i.e., there is no difference semantically. - * - * @version $Id: CodeExceptionGen.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see MethodGen - * @see CodeException - * @see InstructionHandle - */ -public final class CodeExceptionGen implements InstructionTargeter, Cloneable, java.io.Serializable { - - private InstructionHandle start_pc; - private InstructionHandle end_pc; - private InstructionHandle handler_pc; - private ObjectType catch_type; - - - /** - * Add an exception handler, i.e., specify region where a handler is active and an - * instruction where the actual handling is done. - * - * @param start_pc Start of handled region (inclusive) - * @param end_pc End of handled region (inclusive) - * @param handler_pc Where handling is done - * @param catch_type which exception is handled, null for ANY - */ - public CodeExceptionGen(InstructionHandle start_pc, InstructionHandle end_pc, - InstructionHandle handler_pc, ObjectType catch_type) { - setStartPC(start_pc); - setEndPC(end_pc); - setHandlerPC(handler_pc); - this.catch_type = catch_type; - } - - - /** - * Get CodeException object.
          - * - * This relies on that the instruction list has already been dumped - * to byte code or or that the `setPositions' methods has been - * called for the instruction list. - * - * @param cp constant pool - */ - public CodeException getCodeException( ConstantPoolGen cp ) { - return new CodeException(start_pc.getPosition(), end_pc.getPosition() - + end_pc.getInstruction().getLength(), handler_pc.getPosition(), - (catch_type == null) ? 0 : cp.addClass(catch_type)); - } - - - /* Set start of handler - * @param start_pc Start of handled region (inclusive) - */ - public void setStartPC( InstructionHandle start_pc ) { - BranchInstruction.notifyTarget(this.start_pc, start_pc, this); - this.start_pc = start_pc; - } - - - /* Set end of handler - * @param end_pc End of handled region (inclusive) - */ - public void setEndPC( InstructionHandle end_pc ) { - BranchInstruction.notifyTarget(this.end_pc, end_pc, this); - this.end_pc = end_pc; - } - - - /* Set handler code - * @param handler_pc Start of handler - */ - public void setHandlerPC( InstructionHandle handler_pc ) { - BranchInstruction.notifyTarget(this.handler_pc, handler_pc, this); - this.handler_pc = handler_pc; - } - - - /** - * @param old_ih old target, either start or end - * @param new_ih new target - */ - public void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih ) { - boolean targeted = false; - if (start_pc == old_ih) { - targeted = true; - setStartPC(new_ih); - } - if (end_pc == old_ih) { - targeted = true; - setEndPC(new_ih); - } - if (handler_pc == old_ih) { - targeted = true; - setHandlerPC(new_ih); - } - if (!targeted) { - throw new ClassGenException("Not targeting " + old_ih + ", but {" + start_pc + ", " - + end_pc + ", " + handler_pc + "}"); - } - } - - - /** - * @return true, if ih is target of this handler - */ - public boolean containsTarget( InstructionHandle ih ) { - return (start_pc == ih) || (end_pc == ih) || (handler_pc == ih); - } - - - /** Sets the type of the Exception to catch. Set 'null' for ANY. */ - public void setCatchType( ObjectType catch_type ) { - this.catch_type = catch_type; - } - - - /** Gets the type of the Exception to catch, 'null' for ANY. */ - public ObjectType getCatchType() { - return catch_type; - } - - - /** @return start of handled region (inclusive) - */ - public InstructionHandle getStartPC() { - return start_pc; - } - - - /** @return end of handled region (inclusive) - */ - public InstructionHandle getEndPC() { - return end_pc; - } - - - /** @return start of handler - */ - public InstructionHandle getHandlerPC() { - return handler_pc; - } - - - public String toString() { - return "CodeExceptionGen(" + start_pc + ", " + end_pc + ", " + handler_pc + ")"; - } - - - public Object clone() { - try { - return super.clone(); - } catch (CloneNotSupportedException e) { - System.err.println(e); - return null; - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.classfile.CodeException; + +/** + * This class represents an exception handler, i.e., specifies the region where + * a handler is active and an instruction where the actual handling is done. + * pool as parameters. Opposed to the JVM specification the end of the handled + * region is set to be inclusive, i.e. all instructions between start and end + * are protected including the start and end instructions (handles) themselves. + * The end of the region is automatically mapped to be exclusive when calling + * getCodeException(), i.e., there is no difference semantically. + * + * @version $Id: CodeExceptionGen.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see MethodGen + * @see CodeException + * @see InstructionHandle + */ +public final class CodeExceptionGen implements InstructionTargeter, Cloneable, java.io.Serializable { + + private InstructionHandle start_pc; + private InstructionHandle end_pc; + private InstructionHandle handler_pc; + private ObjectType catch_type; + + + /** + * Add an exception handler, i.e., specify region where a handler is active and an + * instruction where the actual handling is done. + * + * @param start_pc Start of handled region (inclusive) + * @param end_pc End of handled region (inclusive) + * @param handler_pc Where handling is done + * @param catch_type which exception is handled, null for ANY + */ + public CodeExceptionGen(InstructionHandle start_pc, InstructionHandle end_pc, + InstructionHandle handler_pc, ObjectType catch_type) { + setStartPC(start_pc); + setEndPC(end_pc); + setHandlerPC(handler_pc); + this.catch_type = catch_type; + } + + + /** + * Get CodeException object.
          + * + * This relies on that the instruction list has already been dumped + * to byte code or or that the `setPositions' methods has been + * called for the instruction list. + * + * @param cp constant pool + */ + public CodeException getCodeException( ConstantPoolGen cp ) { + return new CodeException(start_pc.getPosition(), end_pc.getPosition() + + end_pc.getInstruction().getLength(), handler_pc.getPosition(), + (catch_type == null) ? 0 : cp.addClass(catch_type)); + } + + + /* Set start of handler + * @param start_pc Start of handled region (inclusive) + */ + public void setStartPC( InstructionHandle start_pc ) { + BranchInstruction.notifyTarget(this.start_pc, start_pc, this); + this.start_pc = start_pc; + } + + + /* Set end of handler + * @param end_pc End of handled region (inclusive) + */ + public void setEndPC( InstructionHandle end_pc ) { + BranchInstruction.notifyTarget(this.end_pc, end_pc, this); + this.end_pc = end_pc; + } + + + /* Set handler code + * @param handler_pc Start of handler + */ + public void setHandlerPC( InstructionHandle handler_pc ) { + BranchInstruction.notifyTarget(this.handler_pc, handler_pc, this); + this.handler_pc = handler_pc; + } + + + /** + * @param old_ih old target, either start or end + * @param new_ih new target + */ + public void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih ) { + boolean targeted = false; + if (start_pc == old_ih) { + targeted = true; + setStartPC(new_ih); + } + if (end_pc == old_ih) { + targeted = true; + setEndPC(new_ih); + } + if (handler_pc == old_ih) { + targeted = true; + setHandlerPC(new_ih); + } + if (!targeted) { + throw new ClassGenException("Not targeting " + old_ih + ", but {" + start_pc + ", " + + end_pc + ", " + handler_pc + "}"); + } + } + + + /** + * @return true, if ih is target of this handler + */ + public boolean containsTarget( InstructionHandle ih ) { + return (start_pc == ih) || (end_pc == ih) || (handler_pc == ih); + } + + + /** Sets the type of the Exception to catch. Set 'null' for ANY. */ + public void setCatchType( ObjectType catch_type ) { + this.catch_type = catch_type; + } + + + /** Gets the type of the Exception to catch, 'null' for ANY. */ + public ObjectType getCatchType() { + return catch_type; + } + + + /** @return start of handled region (inclusive) + */ + public InstructionHandle getStartPC() { + return start_pc; + } + + + /** @return end of handled region (inclusive) + */ + public InstructionHandle getEndPC() { + return end_pc; + } + + + /** @return start of handler + */ + public InstructionHandle getHandlerPC() { + return handler_pc; + } + + + public String toString() { + return "CodeExceptionGen(" + start_pc + ", " + end_pc + ", " + handler_pc + ")"; + } + + + public Object clone() { + try { + return super.clone(); + } catch (CloneNotSupportedException e) { + System.err.println(e); + return null; + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CompoundInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CompoundInstruction.java index 4116cc0a..f8d9b7c2 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CompoundInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/CompoundInstruction.java @@ -1,38 +1,38 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Wrapper class for `compound' operations, virtual instructions that - * don't exist as byte code, but give a useful meaning. For example, - * the (virtual) PUSH instruction takes an arbitray argument and produces the - * appropiate code at dump time (ICONST, LDC, BIPUSH, ...). Also you can use the - * SWITCH instruction as a useful template for either LOOKUPSWITCH or - * TABLESWITCH. - * - * The interface provides the possibilty for the user to write - * `templates' or `macros' for such reuseable code patterns. - * - * @version $Id: CompoundInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see PUSH - * @see SWITCH - */ -public interface CompoundInstruction { - - public InstructionList getInstructionList(); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Wrapper class for `compound' operations, virtual instructions that + * don't exist as byte code, but give a useful meaning. For example, + * the (virtual) PUSH instruction takes an arbitray argument and produces the + * appropiate code at dump time (ICONST, LDC, BIPUSH, ...). Also you can use the + * SWITCH instruction as a useful template for either LOOKUPSWITCH or + * TABLESWITCH. + * + * The interface provides the possibilty for the user to write + * `templates' or `macros' for such reuseable code patterns. + * + * @version $Id: CompoundInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see PUSH + * @see SWITCH + */ +public interface CompoundInstruction { + + public InstructionList getInstructionList(); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ConstantPoolGen.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ConstantPoolGen.java index 5ae20528..99218949 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ConstantPoolGen.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ConstantPoolGen.java @@ -1,765 +1,765 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.classfile.Constant; -import org.apache.bcel5_2_0.classfile.ConstantCP; -import org.apache.bcel5_2_0.classfile.ConstantClass; -import org.apache.bcel5_2_0.classfile.ConstantDouble; -import org.apache.bcel5_2_0.classfile.ConstantFieldref; -import org.apache.bcel5_2_0.classfile.ConstantFloat; -import org.apache.bcel5_2_0.classfile.ConstantInteger; -import org.apache.bcel5_2_0.classfile.ConstantInterfaceMethodref; -import org.apache.bcel5_2_0.classfile.ConstantLong; -import org.apache.bcel5_2_0.classfile.ConstantMethodref; -import org.apache.bcel5_2_0.classfile.ConstantNameAndType; -import org.apache.bcel5_2_0.classfile.ConstantPool; -import org.apache.bcel5_2_0.classfile.ConstantString; -import org.apache.bcel5_2_0.classfile.ConstantUtf8; - -/** - * This class is used to build up a constant pool. The user adds - * constants via `addXXX' methods, `addString', `addClass', - * etc.. These methods return an index into the constant - * pool. Finally, `getFinalConstantPool()' returns the constant pool - * built up. Intermediate versions of the constant pool can be - * obtained with `getConstantPool()'. A constant pool has capacity for - * Constants.MAX_SHORT entries. Note that the first (0) is used by the - * JVM and that Double and Long constants need two slots. - * - * @version $Id: ConstantPoolGen.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public class ConstantPoolGen implements java.io.Serializable { - - protected int size = 1024; // Inital size, sufficient in most cases - protected Constant[] constants = new Constant[size]; - protected int index = 1; // First entry (0) used by JVM - private static final String METHODREF_DELIM = ":"; - private static final String IMETHODREF_DELIM = "#"; - private static final String FIELDREF_DELIM = "&"; - private static final String NAT_DELIM = "%"; - - private static class Index implements java.io.Serializable { - - int index; - - - Index(int i) { - index = i; - } - } - - - /** - * Initialize with given array of constants. - * - * @param cs array of given constants, new ones will be appended - */ - public ConstantPoolGen(Constant[] cs) { - if (cs.length > size) { - size = cs.length; - constants = new Constant[size]; - } - System.arraycopy(cs, 0, constants, 0, cs.length); - if (cs.length > 0) { - index = cs.length; - } - for (int i = 1; i < index; i++) { - Constant c = constants[i]; - if (c instanceof ConstantString) { - ConstantString s = (ConstantString) c; - ConstantUtf8 u8 = (ConstantUtf8) constants[s.getStringIndex()]; - String key = u8.getBytes(); - if (!string_table.containsKey(key)) { - string_table.put(key, new Index(i)); - } - } else if (c instanceof ConstantClass) { - ConstantClass s = (ConstantClass) c; - ConstantUtf8 u8 = (ConstantUtf8) constants[s.getNameIndex()]; - String key = u8.getBytes(); - if (!class_table.containsKey(key)) { - class_table.put(key, new Index(i)); - } - } else if (c instanceof ConstantNameAndType) { - ConstantNameAndType n = (ConstantNameAndType) c; - ConstantUtf8 u8 = (ConstantUtf8) constants[n.getNameIndex()]; - ConstantUtf8 u8_2 = (ConstantUtf8) constants[n.getSignatureIndex()]; - String key = u8.getBytes() + NAT_DELIM + u8_2.getBytes(); - if (!n_a_t_table.containsKey(key)) { - n_a_t_table.put(key, new Index(i)); - } - } else if (c instanceof ConstantUtf8) { - ConstantUtf8 u = (ConstantUtf8) c; - String key = u.getBytes(); - if (!utf8_table.containsKey(key)) { - utf8_table.put(key, new Index(i)); - } - } else if (c instanceof ConstantCP) { - ConstantCP m = (ConstantCP) c; - ConstantClass clazz = (ConstantClass) constants[m.getClassIndex()]; - ConstantNameAndType n = (ConstantNameAndType) constants[m.getNameAndTypeIndex()]; - ConstantUtf8 u8 = (ConstantUtf8) constants[clazz.getNameIndex()]; - String class_name = u8.getBytes().replace('/', '.'); - u8 = (ConstantUtf8) constants[n.getNameIndex()]; - String method_name = u8.getBytes(); - u8 = (ConstantUtf8) constants[n.getSignatureIndex()]; - String signature = u8.getBytes(); - String delim = METHODREF_DELIM; - if (c instanceof ConstantInterfaceMethodref) { - delim = IMETHODREF_DELIM; - } else if (c instanceof ConstantFieldref) { - delim = FIELDREF_DELIM; - } - String key = class_name + delim + method_name + delim + signature; - if (!cp_table.containsKey(key)) { - cp_table.put(key, new Index(i)); - } - } - } - } - - - /** - * Initialize with given constant pool. - */ - public ConstantPoolGen(ConstantPool cp) { - this(cp.getConstantPool()); - } - - - /** - * Create empty constant pool. - */ - public ConstantPoolGen() { - } - - - /** Resize internal array of constants. - */ - protected void adjustSize() { - if (index + 3 >= size) { - Constant[] cs = constants; - size *= 2; - constants = new Constant[size]; - System.arraycopy(cs, 0, constants, 0, index); - } - } - - private Map string_table = new HashMap(); - - - /** - * Look for ConstantString in ConstantPool containing String `str'. - * - * @param str String to search for - * @return index on success, -1 otherwise - */ - public int lookupString( String str ) { - Index index = (Index) string_table.get(str); - return (index != null) ? index.index : -1; - } - - - /** - * Add a new String constant to the ConstantPool, if it is not already in there. - * - * @param str String to add - * @return index of entry - */ - public int addString( String str ) { - int ret; - if ((ret = lookupString(str)) != -1) { - return ret; // Already in CP - } - int utf8 = addUtf8(str); - adjustSize(); - ConstantString s = new ConstantString(utf8); - ret = index; - constants[index++] = s; - if (!string_table.containsKey(str)) { - string_table.put(str, new Index(ret)); - } - return ret; - } - - private Map class_table = new HashMap(); - - - /** - * Look for ConstantClass in ConstantPool named `str'. - * - * @param str String to search for - * @return index on success, -1 otherwise - */ - public int lookupClass( String str ) { - Index index = (Index) class_table.get(str.replace('.', '/')); - return (index != null) ? index.index : -1; - } - - - private int addClass_( String clazz ) { - int ret; - if ((ret = lookupClass(clazz)) != -1) { - return ret; // Already in CP - } - adjustSize(); - ConstantClass c = new ConstantClass(addUtf8(clazz)); - ret = index; - constants[index++] = c; - if (!class_table.containsKey(clazz)) { - class_table.put(clazz, new Index(ret)); - } - return ret; - } - - - /** - * Add a new Class reference to the ConstantPool, if it is not already in there. - * - * @param str Class to add - * @return index of entry - */ - public int addClass( String str ) { - return addClass_(str.replace('.', '/')); - } - - - /** - * Add a new Class reference to the ConstantPool for a given type. - * - * @param type Class to add - * @return index of entry - */ - public int addClass( ObjectType type ) { - return addClass(type.getClassName()); - } - - - /** - * Add a reference to an array class (e.g. String[][]) as needed by MULTIANEWARRAY - * instruction, e.g. to the ConstantPool. - * - * @param type type of array class - * @return index of entry - */ - public int addArrayClass( ArrayType type ) { - return addClass_(type.getSignature()); - } - - - /** - * Look for ConstantInteger in ConstantPool. - * - * @param n integer number to look for - * @return index on success, -1 otherwise - */ - public int lookupInteger( int n ) { - for (int i = 1; i < index; i++) { - if (constants[i] instanceof ConstantInteger) { - ConstantInteger c = (ConstantInteger) constants[i]; - if (c.getBytes() == n) { - return i; - } - } - } - return -1; - } - - - /** - * Add a new Integer constant to the ConstantPool, if it is not already in there. - * - * @param n integer number to add - * @return index of entry - */ - public int addInteger( int n ) { - int ret; - if ((ret = lookupInteger(n)) != -1) { - return ret; // Already in CP - } - adjustSize(); - ret = index; - constants[index++] = new ConstantInteger(n); - return ret; - } - - - /** - * Look for ConstantFloat in ConstantPool. - * - * @param n Float number to look for - * @return index on success, -1 otherwise - */ - public int lookupFloat( float n ) { - int bits = Float.floatToIntBits(n); - for (int i = 1; i < index; i++) { - if (constants[i] instanceof ConstantFloat) { - ConstantFloat c = (ConstantFloat) constants[i]; - if (Float.floatToIntBits(c.getBytes()) == bits) { - return i; - } - } - } - return -1; - } - - - /** - * Add a new Float constant to the ConstantPool, if it is not already in there. - * - * @param n Float number to add - * @return index of entry - */ - public int addFloat( float n ) { - int ret; - if ((ret = lookupFloat(n)) != -1) { - return ret; // Already in CP - } - adjustSize(); - ret = index; - constants[index++] = new ConstantFloat(n); - return ret; - } - - private Map utf8_table = new HashMap(); - - - /** - * Look for ConstantUtf8 in ConstantPool. - * - * @param n Utf8 string to look for - * @return index on success, -1 otherwise - */ - public int lookupUtf8( String n ) { - Index index = (Index) utf8_table.get(n); - return (index != null) ? index.index : -1; - } - - - /** - * Add a new Utf8 constant to the ConstantPool, if it is not already in there. - * - * @param n Utf8 string to add - * @return index of entry - */ - public int addUtf8( String n ) { - int ret; - if ((ret = lookupUtf8(n)) != -1) { - return ret; // Already in CP - } - adjustSize(); - ret = index; - constants[index++] = new ConstantUtf8(n); - if (!utf8_table.containsKey(n)) { - utf8_table.put(n, new Index(ret)); - } - return ret; - } - - - /** - * Look for ConstantLong in ConstantPool. - * - * @param n Long number to look for - * @return index on success, -1 otherwise - */ - public int lookupLong( long n ) { - for (int i = 1; i < index; i++) { - if (constants[i] instanceof ConstantLong) { - ConstantLong c = (ConstantLong) constants[i]; - if (c.getBytes() == n) { - return i; - } - } - } - return -1; - } - - - /** - * Add a new long constant to the ConstantPool, if it is not already in there. - * - * @param n Long number to add - * @return index of entry - */ - public int addLong( long n ) { - int ret; - if ((ret = lookupLong(n)) != -1) { - return ret; // Already in CP - } - adjustSize(); - ret = index; - constants[index] = new ConstantLong(n); - index += 2; // Wastes one entry according to spec - return ret; - } - - - /** - * Look for ConstantDouble in ConstantPool. - * - * @param n Double number to look for - * @return index on success, -1 otherwise - */ - public int lookupDouble( double n ) { - long bits = Double.doubleToLongBits(n); - for (int i = 1; i < index; i++) { - if (constants[i] instanceof ConstantDouble) { - ConstantDouble c = (ConstantDouble) constants[i]; - if (Double.doubleToLongBits(c.getBytes()) == bits) { - return i; - } - } - } - return -1; - } - - - /** - * Add a new double constant to the ConstantPool, if it is not already in there. - * - * @param n Double number to add - * @return index of entry - */ - public int addDouble( double n ) { - int ret; - if ((ret = lookupDouble(n)) != -1) { - return ret; // Already in CP - } - adjustSize(); - ret = index; - constants[index] = new ConstantDouble(n); - index += 2; // Wastes one entry according to spec - return ret; - } - - private Map n_a_t_table = new HashMap(); - - - /** - * Look for ConstantNameAndType in ConstantPool. - * - * @param name of variable/method - * @param signature of variable/method - * @return index on success, -1 otherwise - */ - public int lookupNameAndType( String name, String signature ) { - Index _index = (Index) n_a_t_table.get(name + NAT_DELIM + signature); - return (_index != null) ? _index.index : -1; - } - - - /** - * Add a new NameAndType constant to the ConstantPool if it is not already - * in there. - * - * @param name Name string to add - * @param signature signature string to add - * @return index of entry - */ - public int addNameAndType( String name, String signature ) { - int ret; - int name_index, signature_index; - if ((ret = lookupNameAndType(name, signature)) != -1) { - return ret; // Already in CP - } - adjustSize(); - name_index = addUtf8(name); - signature_index = addUtf8(signature); - ret = index; - constants[index++] = new ConstantNameAndType(name_index, signature_index); - String key = name + NAT_DELIM + signature; - if (!n_a_t_table.containsKey(key)) { - n_a_t_table.put(key, new Index(ret)); - } - return ret; - } - - private Map cp_table = new HashMap(); - - - /** - * Look for ConstantMethodref in ConstantPool. - * - * @param class_name Where to find method - * @param method_name Guess what - * @param signature return and argument types - * @return index on success, -1 otherwise - */ - public int lookupMethodref( String class_name, String method_name, String signature ) { - Index index = (Index) cp_table.get(class_name + METHODREF_DELIM + method_name - + METHODREF_DELIM + signature); - return (index != null) ? index.index : -1; - } - - - public int lookupMethodref( MethodGen method ) { - return lookupMethodref(method.getClassName(), method.getName(), method.getSignature()); - } - - - /** - * Add a new Methodref constant to the ConstantPool, if it is not already - * in there. - * - * @param class_name class name string to add - * @param method_name method name string to add - * @param signature method signature string to add - * @return index of entry - */ - public int addMethodref( String class_name, String method_name, String signature ) { - int ret, class_index, name_and_type_index; - if ((ret = lookupMethodref(class_name, method_name, signature)) != -1) { - return ret; // Already in CP - } - adjustSize(); - name_and_type_index = addNameAndType(method_name, signature); - class_index = addClass(class_name); - ret = index; - constants[index++] = new ConstantMethodref(class_index, name_and_type_index); - String key = class_name + METHODREF_DELIM + method_name + METHODREF_DELIM + signature; - if (!cp_table.containsKey(key)) { - cp_table.put(key, new Index(ret)); - } - return ret; - } - - - public int addMethodref( MethodGen method ) { - return addMethodref(method.getClassName(), method.getName(), method.getSignature()); - } - - - /** - * Look for ConstantInterfaceMethodref in ConstantPool. - * - * @param class_name Where to find method - * @param method_name Guess what - * @param signature return and argument types - * @return index on success, -1 otherwise - */ - public int lookupInterfaceMethodref( String class_name, String method_name, String signature ) { - Index index = (Index) cp_table.get(class_name + IMETHODREF_DELIM + method_name - + IMETHODREF_DELIM + signature); - return (index != null) ? index.index : -1; - } - - - public int lookupInterfaceMethodref( MethodGen method ) { - return lookupInterfaceMethodref(method.getClassName(), method.getName(), method - .getSignature()); - } - - - /** - * Add a new InterfaceMethodref constant to the ConstantPool, if it is not already - * in there. - * - * @param class_name class name string to add - * @param method_name method name string to add - * @param signature signature string to add - * @return index of entry - */ - public int addInterfaceMethodref( String class_name, String method_name, String signature ) { - int ret, class_index, name_and_type_index; - if ((ret = lookupInterfaceMethodref(class_name, method_name, signature)) != -1) { - return ret; // Already in CP - } - adjustSize(); - class_index = addClass(class_name); - name_and_type_index = addNameAndType(method_name, signature); - ret = index; - constants[index++] = new ConstantInterfaceMethodref(class_index, name_and_type_index); - String key = class_name + IMETHODREF_DELIM + method_name + IMETHODREF_DELIM + signature; - if (!cp_table.containsKey(key)) { - cp_table.put(key, new Index(ret)); - } - return ret; - } - - - public int addInterfaceMethodref( MethodGen method ) { - return addInterfaceMethodref(method.getClassName(), method.getName(), method.getSignature()); - } - - - /** - * Look for ConstantFieldref in ConstantPool. - * - * @param class_name Where to find method - * @param field_name Guess what - * @param signature return and argument types - * @return index on success, -1 otherwise - */ - public int lookupFieldref( String class_name, String field_name, String signature ) { - Index index = (Index) cp_table.get(class_name + FIELDREF_DELIM + field_name - + FIELDREF_DELIM + signature); - return (index != null) ? index.index : -1; - } - - - /** - * Add a new Fieldref constant to the ConstantPool, if it is not already - * in there. - * - * @param class_name class name string to add - * @param field_name field name string to add - * @param signature signature string to add - * @return index of entry - */ - public int addFieldref( String class_name, String field_name, String signature ) { - int ret; - int class_index, name_and_type_index; - if ((ret = lookupFieldref(class_name, field_name, signature)) != -1) { - return ret; // Already in CP - } - adjustSize(); - class_index = addClass(class_name); - name_and_type_index = addNameAndType(field_name, signature); - ret = index; - constants[index++] = new ConstantFieldref(class_index, name_and_type_index); - String key = class_name + FIELDREF_DELIM + field_name + FIELDREF_DELIM + signature; - if (!cp_table.containsKey(key)) { - cp_table.put(key, new Index(ret)); - } - return ret; - } - - - /** - * @param i index in constant pool - * @return constant pool entry at index i - */ - public Constant getConstant( int i ) { - return constants[i]; - } - - - /** - * Use with care! - * - * @param i index in constant pool - * @param c new constant pool entry at index i - */ - public void setConstant( int i, Constant c ) { - constants[i] = c; - } - - - /** - * @return intermediate constant pool - */ - public ConstantPool getConstantPool() { - return new ConstantPool(constants); - } - - - /** - * @return current size of constant pool - */ - public int getSize() { - return index; - } - - - /** - * @return constant pool with proper length - */ - public ConstantPool getFinalConstantPool() { - Constant[] cs = new Constant[index]; - System.arraycopy(constants, 0, cs, 0, index); - return new ConstantPool(cs); - } - - - /** - * @return String representation. - */ - public String toString() { - StringBuilder buf = new StringBuilder(); - for (int i = 1; i < index; i++) { - buf.append(i).append(")").append(constants[i]).append("\n"); - } - return buf.toString(); - } - - - /** Import constant from another ConstantPool and return new index. - */ - public int addConstant( Constant c, ConstantPoolGen cp ) { - Constant[] constants = cp.getConstantPool().getConstantPool(); - switch (c.getTag()) { - case Constants.CONSTANT_String: { - ConstantString s = (ConstantString) c; - ConstantUtf8 u8 = (ConstantUtf8) constants[s.getStringIndex()]; - return addString(u8.getBytes()); - } - case Constants.CONSTANT_Class: { - ConstantClass s = (ConstantClass) c; - ConstantUtf8 u8 = (ConstantUtf8) constants[s.getNameIndex()]; - return addClass(u8.getBytes()); - } - case Constants.CONSTANT_NameAndType: { - ConstantNameAndType n = (ConstantNameAndType) c; - ConstantUtf8 u8 = (ConstantUtf8) constants[n.getNameIndex()]; - ConstantUtf8 u8_2 = (ConstantUtf8) constants[n.getSignatureIndex()]; - return addNameAndType(u8.getBytes(), u8_2.getBytes()); - } - case Constants.CONSTANT_Utf8: - return addUtf8(((ConstantUtf8) c).getBytes()); - case Constants.CONSTANT_Double: - return addDouble(((ConstantDouble) c).getBytes()); - case Constants.CONSTANT_Float: - return addFloat(((ConstantFloat) c).getBytes()); - case Constants.CONSTANT_Long: - return addLong(((ConstantLong) c).getBytes()); - case Constants.CONSTANT_Integer: - return addInteger(((ConstantInteger) c).getBytes()); - case Constants.CONSTANT_InterfaceMethodref: - case Constants.CONSTANT_Methodref: - case Constants.CONSTANT_Fieldref: { - ConstantCP m = (ConstantCP) c; - ConstantClass clazz = (ConstantClass) constants[m.getClassIndex()]; - ConstantNameAndType n = (ConstantNameAndType) constants[m.getNameAndTypeIndex()]; - ConstantUtf8 u8 = (ConstantUtf8) constants[clazz.getNameIndex()]; - String class_name = u8.getBytes().replace('/', '.'); - u8 = (ConstantUtf8) constants[n.getNameIndex()]; - String name = u8.getBytes(); - u8 = (ConstantUtf8) constants[n.getSignatureIndex()]; - String signature = u8.getBytes(); - switch (c.getTag()) { - case Constants.CONSTANT_InterfaceMethodref: - return addInterfaceMethodref(class_name, name, signature); - case Constants.CONSTANT_Methodref: - return addMethodref(class_name, name, signature); - case Constants.CONSTANT_Fieldref: - return addFieldref(class_name, name, signature); - default: // Never reached - throw new RuntimeException("Unknown constant type " + c); - } - } - default: // Never reached - throw new RuntimeException("Unknown constant type " + c); - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.classfile.Constant; +import org.apache.bcel5_2_0.classfile.ConstantCP; +import org.apache.bcel5_2_0.classfile.ConstantClass; +import org.apache.bcel5_2_0.classfile.ConstantDouble; +import org.apache.bcel5_2_0.classfile.ConstantFieldref; +import org.apache.bcel5_2_0.classfile.ConstantFloat; +import org.apache.bcel5_2_0.classfile.ConstantInteger; +import org.apache.bcel5_2_0.classfile.ConstantInterfaceMethodref; +import org.apache.bcel5_2_0.classfile.ConstantLong; +import org.apache.bcel5_2_0.classfile.ConstantMethodref; +import org.apache.bcel5_2_0.classfile.ConstantNameAndType; +import org.apache.bcel5_2_0.classfile.ConstantPool; +import org.apache.bcel5_2_0.classfile.ConstantString; +import org.apache.bcel5_2_0.classfile.ConstantUtf8; + +/** + * This class is used to build up a constant pool. The user adds + * constants via `addXXX' methods, `addString', `addClass', + * etc.. These methods return an index into the constant + * pool. Finally, `getFinalConstantPool()' returns the constant pool + * built up. Intermediate versions of the constant pool can be + * obtained with `getConstantPool()'. A constant pool has capacity for + * Constants.MAX_SHORT entries. Note that the first (0) is used by the + * JVM and that Double and Long constants need two slots. + * + * @version $Id: ConstantPoolGen.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Constant + */ +public class ConstantPoolGen implements java.io.Serializable { + + protected int size = 1024; // Inital size, sufficient in most cases + protected Constant[] constants = new Constant[size]; + protected int index = 1; // First entry (0) used by JVM + private static final String METHODREF_DELIM = ":"; + private static final String IMETHODREF_DELIM = "#"; + private static final String FIELDREF_DELIM = "&"; + private static final String NAT_DELIM = "%"; + + private static class Index implements java.io.Serializable { + + int index; + + + Index(int i) { + index = i; + } + } + + + /** + * Initialize with given array of constants. + * + * @param cs array of given constants, new ones will be appended + */ + public ConstantPoolGen(Constant[] cs) { + if (cs.length > size) { + size = cs.length; + constants = new Constant[size]; + } + System.arraycopy(cs, 0, constants, 0, cs.length); + if (cs.length > 0) { + index = cs.length; + } + for (int i = 1; i < index; i++) { + Constant c = constants[i]; + if (c instanceof ConstantString) { + ConstantString s = (ConstantString) c; + ConstantUtf8 u8 = (ConstantUtf8) constants[s.getStringIndex()]; + String key = u8.getBytes(); + if (!string_table.containsKey(key)) { + string_table.put(key, new Index(i)); + } + } else if (c instanceof ConstantClass) { + ConstantClass s = (ConstantClass) c; + ConstantUtf8 u8 = (ConstantUtf8) constants[s.getNameIndex()]; + String key = u8.getBytes(); + if (!class_table.containsKey(key)) { + class_table.put(key, new Index(i)); + } + } else if (c instanceof ConstantNameAndType) { + ConstantNameAndType n = (ConstantNameAndType) c; + ConstantUtf8 u8 = (ConstantUtf8) constants[n.getNameIndex()]; + ConstantUtf8 u8_2 = (ConstantUtf8) constants[n.getSignatureIndex()]; + String key = u8.getBytes() + NAT_DELIM + u8_2.getBytes(); + if (!n_a_t_table.containsKey(key)) { + n_a_t_table.put(key, new Index(i)); + } + } else if (c instanceof ConstantUtf8) { + ConstantUtf8 u = (ConstantUtf8) c; + String key = u.getBytes(); + if (!utf8_table.containsKey(key)) { + utf8_table.put(key, new Index(i)); + } + } else if (c instanceof ConstantCP) { + ConstantCP m = (ConstantCP) c; + ConstantClass clazz = (ConstantClass) constants[m.getClassIndex()]; + ConstantNameAndType n = (ConstantNameAndType) constants[m.getNameAndTypeIndex()]; + ConstantUtf8 u8 = (ConstantUtf8) constants[clazz.getNameIndex()]; + String class_name = u8.getBytes().replace('/', '.'); + u8 = (ConstantUtf8) constants[n.getNameIndex()]; + String method_name = u8.getBytes(); + u8 = (ConstantUtf8) constants[n.getSignatureIndex()]; + String signature = u8.getBytes(); + String delim = METHODREF_DELIM; + if (c instanceof ConstantInterfaceMethodref) { + delim = IMETHODREF_DELIM; + } else if (c instanceof ConstantFieldref) { + delim = FIELDREF_DELIM; + } + String key = class_name + delim + method_name + delim + signature; + if (!cp_table.containsKey(key)) { + cp_table.put(key, new Index(i)); + } + } + } + } + + + /** + * Initialize with given constant pool. + */ + public ConstantPoolGen(ConstantPool cp) { + this(cp.getConstantPool()); + } + + + /** + * Create empty constant pool. + */ + public ConstantPoolGen() { + } + + + /** Resize internal array of constants. + */ + protected void adjustSize() { + if (index + 3 >= size) { + Constant[] cs = constants; + size *= 2; + constants = new Constant[size]; + System.arraycopy(cs, 0, constants, 0, index); + } + } + + private Map string_table = new HashMap(); + + + /** + * Look for ConstantString in ConstantPool containing String `str'. + * + * @param str String to search for + * @return index on success, -1 otherwise + */ + public int lookupString( String str ) { + Index index = (Index) string_table.get(str); + return (index != null) ? index.index : -1; + } + + + /** + * Add a new String constant to the ConstantPool, if it is not already in there. + * + * @param str String to add + * @return index of entry + */ + public int addString( String str ) { + int ret; + if ((ret = lookupString(str)) != -1) { + return ret; // Already in CP + } + int utf8 = addUtf8(str); + adjustSize(); + ConstantString s = new ConstantString(utf8); + ret = index; + constants[index++] = s; + if (!string_table.containsKey(str)) { + string_table.put(str, new Index(ret)); + } + return ret; + } + + private Map class_table = new HashMap(); + + + /** + * Look for ConstantClass in ConstantPool named `str'. + * + * @param str String to search for + * @return index on success, -1 otherwise + */ + public int lookupClass( String str ) { + Index index = (Index) class_table.get(str.replace('.', '/')); + return (index != null) ? index.index : -1; + } + + + private int addClass_( String clazz ) { + int ret; + if ((ret = lookupClass(clazz)) != -1) { + return ret; // Already in CP + } + adjustSize(); + ConstantClass c = new ConstantClass(addUtf8(clazz)); + ret = index; + constants[index++] = c; + if (!class_table.containsKey(clazz)) { + class_table.put(clazz, new Index(ret)); + } + return ret; + } + + + /** + * Add a new Class reference to the ConstantPool, if it is not already in there. + * + * @param str Class to add + * @return index of entry + */ + public int addClass( String str ) { + return addClass_(str.replace('.', '/')); + } + + + /** + * Add a new Class reference to the ConstantPool for a given type. + * + * @param type Class to add + * @return index of entry + */ + public int addClass( ObjectType type ) { + return addClass(type.getClassName()); + } + + + /** + * Add a reference to an array class (e.g. String[][]) as needed by MULTIANEWARRAY + * instruction, e.g. to the ConstantPool. + * + * @param type type of array class + * @return index of entry + */ + public int addArrayClass( ArrayType type ) { + return addClass_(type.getSignature()); + } + + + /** + * Look for ConstantInteger in ConstantPool. + * + * @param n integer number to look for + * @return index on success, -1 otherwise + */ + public int lookupInteger( int n ) { + for (int i = 1; i < index; i++) { + if (constants[i] instanceof ConstantInteger) { + ConstantInteger c = (ConstantInteger) constants[i]; + if (c.getBytes() == n) { + return i; + } + } + } + return -1; + } + + + /** + * Add a new Integer constant to the ConstantPool, if it is not already in there. + * + * @param n integer number to add + * @return index of entry + */ + public int addInteger( int n ) { + int ret; + if ((ret = lookupInteger(n)) != -1) { + return ret; // Already in CP + } + adjustSize(); + ret = index; + constants[index++] = new ConstantInteger(n); + return ret; + } + + + /** + * Look for ConstantFloat in ConstantPool. + * + * @param n Float number to look for + * @return index on success, -1 otherwise + */ + public int lookupFloat( float n ) { + int bits = Float.floatToIntBits(n); + for (int i = 1; i < index; i++) { + if (constants[i] instanceof ConstantFloat) { + ConstantFloat c = (ConstantFloat) constants[i]; + if (Float.floatToIntBits(c.getBytes()) == bits) { + return i; + } + } + } + return -1; + } + + + /** + * Add a new Float constant to the ConstantPool, if it is not already in there. + * + * @param n Float number to add + * @return index of entry + */ + public int addFloat( float n ) { + int ret; + if ((ret = lookupFloat(n)) != -1) { + return ret; // Already in CP + } + adjustSize(); + ret = index; + constants[index++] = new ConstantFloat(n); + return ret; + } + + private Map utf8_table = new HashMap(); + + + /** + * Look for ConstantUtf8 in ConstantPool. + * + * @param n Utf8 string to look for + * @return index on success, -1 otherwise + */ + public int lookupUtf8( String n ) { + Index index = (Index) utf8_table.get(n); + return (index != null) ? index.index : -1; + } + + + /** + * Add a new Utf8 constant to the ConstantPool, if it is not already in there. + * + * @param n Utf8 string to add + * @return index of entry + */ + public int addUtf8( String n ) { + int ret; + if ((ret = lookupUtf8(n)) != -1) { + return ret; // Already in CP + } + adjustSize(); + ret = index; + constants[index++] = new ConstantUtf8(n); + if (!utf8_table.containsKey(n)) { + utf8_table.put(n, new Index(ret)); + } + return ret; + } + + + /** + * Look for ConstantLong in ConstantPool. + * + * @param n Long number to look for + * @return index on success, -1 otherwise + */ + public int lookupLong( long n ) { + for (int i = 1; i < index; i++) { + if (constants[i] instanceof ConstantLong) { + ConstantLong c = (ConstantLong) constants[i]; + if (c.getBytes() == n) { + return i; + } + } + } + return -1; + } + + + /** + * Add a new long constant to the ConstantPool, if it is not already in there. + * + * @param n Long number to add + * @return index of entry + */ + public int addLong( long n ) { + int ret; + if ((ret = lookupLong(n)) != -1) { + return ret; // Already in CP + } + adjustSize(); + ret = index; + constants[index] = new ConstantLong(n); + index += 2; // Wastes one entry according to spec + return ret; + } + + + /** + * Look for ConstantDouble in ConstantPool. + * + * @param n Double number to look for + * @return index on success, -1 otherwise + */ + public int lookupDouble( double n ) { + long bits = Double.doubleToLongBits(n); + for (int i = 1; i < index; i++) { + if (constants[i] instanceof ConstantDouble) { + ConstantDouble c = (ConstantDouble) constants[i]; + if (Double.doubleToLongBits(c.getBytes()) == bits) { + return i; + } + } + } + return -1; + } + + + /** + * Add a new double constant to the ConstantPool, if it is not already in there. + * + * @param n Double number to add + * @return index of entry + */ + public int addDouble( double n ) { + int ret; + if ((ret = lookupDouble(n)) != -1) { + return ret; // Already in CP + } + adjustSize(); + ret = index; + constants[index] = new ConstantDouble(n); + index += 2; // Wastes one entry according to spec + return ret; + } + + private Map n_a_t_table = new HashMap(); + + + /** + * Look for ConstantNameAndType in ConstantPool. + * + * @param name of variable/method + * @param signature of variable/method + * @return index on success, -1 otherwise + */ + public int lookupNameAndType( String name, String signature ) { + Index _index = (Index) n_a_t_table.get(name + NAT_DELIM + signature); + return (_index != null) ? _index.index : -1; + } + + + /** + * Add a new NameAndType constant to the ConstantPool if it is not already + * in there. + * + * @param name Name string to add + * @param signature signature string to add + * @return index of entry + */ + public int addNameAndType( String name, String signature ) { + int ret; + int name_index, signature_index; + if ((ret = lookupNameAndType(name, signature)) != -1) { + return ret; // Already in CP + } + adjustSize(); + name_index = addUtf8(name); + signature_index = addUtf8(signature); + ret = index; + constants[index++] = new ConstantNameAndType(name_index, signature_index); + String key = name + NAT_DELIM + signature; + if (!n_a_t_table.containsKey(key)) { + n_a_t_table.put(key, new Index(ret)); + } + return ret; + } + + private Map cp_table = new HashMap(); + + + /** + * Look for ConstantMethodref in ConstantPool. + * + * @param class_name Where to find method + * @param method_name Guess what + * @param signature return and argument types + * @return index on success, -1 otherwise + */ + public int lookupMethodref( String class_name, String method_name, String signature ) { + Index index = (Index) cp_table.get(class_name + METHODREF_DELIM + method_name + + METHODREF_DELIM + signature); + return (index != null) ? index.index : -1; + } + + + public int lookupMethodref( MethodGen method ) { + return lookupMethodref(method.getClassName(), method.getName(), method.getSignature()); + } + + + /** + * Add a new Methodref constant to the ConstantPool, if it is not already + * in there. + * + * @param class_name class name string to add + * @param method_name method name string to add + * @param signature method signature string to add + * @return index of entry + */ + public int addMethodref( String class_name, String method_name, String signature ) { + int ret, class_index, name_and_type_index; + if ((ret = lookupMethodref(class_name, method_name, signature)) != -1) { + return ret; // Already in CP + } + adjustSize(); + name_and_type_index = addNameAndType(method_name, signature); + class_index = addClass(class_name); + ret = index; + constants[index++] = new ConstantMethodref(class_index, name_and_type_index); + String key = class_name + METHODREF_DELIM + method_name + METHODREF_DELIM + signature; + if (!cp_table.containsKey(key)) { + cp_table.put(key, new Index(ret)); + } + return ret; + } + + + public int addMethodref( MethodGen method ) { + return addMethodref(method.getClassName(), method.getName(), method.getSignature()); + } + + + /** + * Look for ConstantInterfaceMethodref in ConstantPool. + * + * @param class_name Where to find method + * @param method_name Guess what + * @param signature return and argument types + * @return index on success, -1 otherwise + */ + public int lookupInterfaceMethodref( String class_name, String method_name, String signature ) { + Index index = (Index) cp_table.get(class_name + IMETHODREF_DELIM + method_name + + IMETHODREF_DELIM + signature); + return (index != null) ? index.index : -1; + } + + + public int lookupInterfaceMethodref( MethodGen method ) { + return lookupInterfaceMethodref(method.getClassName(), method.getName(), method + .getSignature()); + } + + + /** + * Add a new InterfaceMethodref constant to the ConstantPool, if it is not already + * in there. + * + * @param class_name class name string to add + * @param method_name method name string to add + * @param signature signature string to add + * @return index of entry + */ + public int addInterfaceMethodref( String class_name, String method_name, String signature ) { + int ret, class_index, name_and_type_index; + if ((ret = lookupInterfaceMethodref(class_name, method_name, signature)) != -1) { + return ret; // Already in CP + } + adjustSize(); + class_index = addClass(class_name); + name_and_type_index = addNameAndType(method_name, signature); + ret = index; + constants[index++] = new ConstantInterfaceMethodref(class_index, name_and_type_index); + String key = class_name + IMETHODREF_DELIM + method_name + IMETHODREF_DELIM + signature; + if (!cp_table.containsKey(key)) { + cp_table.put(key, new Index(ret)); + } + return ret; + } + + + public int addInterfaceMethodref( MethodGen method ) { + return addInterfaceMethodref(method.getClassName(), method.getName(), method.getSignature()); + } + + + /** + * Look for ConstantFieldref in ConstantPool. + * + * @param class_name Where to find method + * @param field_name Guess what + * @param signature return and argument types + * @return index on success, -1 otherwise + */ + public int lookupFieldref( String class_name, String field_name, String signature ) { + Index index = (Index) cp_table.get(class_name + FIELDREF_DELIM + field_name + + FIELDREF_DELIM + signature); + return (index != null) ? index.index : -1; + } + + + /** + * Add a new Fieldref constant to the ConstantPool, if it is not already + * in there. + * + * @param class_name class name string to add + * @param field_name field name string to add + * @param signature signature string to add + * @return index of entry + */ + public int addFieldref( String class_name, String field_name, String signature ) { + int ret; + int class_index, name_and_type_index; + if ((ret = lookupFieldref(class_name, field_name, signature)) != -1) { + return ret; // Already in CP + } + adjustSize(); + class_index = addClass(class_name); + name_and_type_index = addNameAndType(field_name, signature); + ret = index; + constants[index++] = new ConstantFieldref(class_index, name_and_type_index); + String key = class_name + FIELDREF_DELIM + field_name + FIELDREF_DELIM + signature; + if (!cp_table.containsKey(key)) { + cp_table.put(key, new Index(ret)); + } + return ret; + } + + + /** + * @param i index in constant pool + * @return constant pool entry at index i + */ + public Constant getConstant( int i ) { + return constants[i]; + } + + + /** + * Use with care! + * + * @param i index in constant pool + * @param c new constant pool entry at index i + */ + public void setConstant( int i, Constant c ) { + constants[i] = c; + } + + + /** + * @return intermediate constant pool + */ + public ConstantPool getConstantPool() { + return new ConstantPool(constants); + } + + + /** + * @return current size of constant pool + */ + public int getSize() { + return index; + } + + + /** + * @return constant pool with proper length + */ + public ConstantPool getFinalConstantPool() { + Constant[] cs = new Constant[index]; + System.arraycopy(constants, 0, cs, 0, index); + return new ConstantPool(cs); + } + + + /** + * @return String representation. + */ + public String toString() { + StringBuilder buf = new StringBuilder(); + for (int i = 1; i < index; i++) { + buf.append(i).append(")").append(constants[i]).append("\n"); + } + return buf.toString(); + } + + + /** Import constant from another ConstantPool and return new index. + */ + public int addConstant( Constant c, ConstantPoolGen cp ) { + Constant[] constants = cp.getConstantPool().getConstantPool(); + switch (c.getTag()) { + case Constants.CONSTANT_String: { + ConstantString s = (ConstantString) c; + ConstantUtf8 u8 = (ConstantUtf8) constants[s.getStringIndex()]; + return addString(u8.getBytes()); + } + case Constants.CONSTANT_Class: { + ConstantClass s = (ConstantClass) c; + ConstantUtf8 u8 = (ConstantUtf8) constants[s.getNameIndex()]; + return addClass(u8.getBytes()); + } + case Constants.CONSTANT_NameAndType: { + ConstantNameAndType n = (ConstantNameAndType) c; + ConstantUtf8 u8 = (ConstantUtf8) constants[n.getNameIndex()]; + ConstantUtf8 u8_2 = (ConstantUtf8) constants[n.getSignatureIndex()]; + return addNameAndType(u8.getBytes(), u8_2.getBytes()); + } + case Constants.CONSTANT_Utf8: + return addUtf8(((ConstantUtf8) c).getBytes()); + case Constants.CONSTANT_Double: + return addDouble(((ConstantDouble) c).getBytes()); + case Constants.CONSTANT_Float: + return addFloat(((ConstantFloat) c).getBytes()); + case Constants.CONSTANT_Long: + return addLong(((ConstantLong) c).getBytes()); + case Constants.CONSTANT_Integer: + return addInteger(((ConstantInteger) c).getBytes()); + case Constants.CONSTANT_InterfaceMethodref: + case Constants.CONSTANT_Methodref: + case Constants.CONSTANT_Fieldref: { + ConstantCP m = (ConstantCP) c; + ConstantClass clazz = (ConstantClass) constants[m.getClassIndex()]; + ConstantNameAndType n = (ConstantNameAndType) constants[m.getNameAndTypeIndex()]; + ConstantUtf8 u8 = (ConstantUtf8) constants[clazz.getNameIndex()]; + String class_name = u8.getBytes().replace('/', '.'); + u8 = (ConstantUtf8) constants[n.getNameIndex()]; + String name = u8.getBytes(); + u8 = (ConstantUtf8) constants[n.getSignatureIndex()]; + String signature = u8.getBytes(); + switch (c.getTag()) { + case Constants.CONSTANT_InterfaceMethodref: + return addInterfaceMethodref(class_name, name, signature); + case Constants.CONSTANT_Methodref: + return addMethodref(class_name, name, signature); + case Constants.CONSTANT_Fieldref: + return addFieldref(class_name, name, signature); + default: // Never reached + throw new RuntimeException("Unknown constant type " + c); + } + } + default: // Never reached + throw new RuntimeException("Unknown constant type " + c); + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ConstantPushInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ConstantPushInstruction.java index 91fa45d5..e0848e8c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ConstantPushInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ConstantPushInstruction.java @@ -1,32 +1,32 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denotes a push instruction that produces a literal on the stack - * such as SIPUSH, BIPUSH, ICONST, etc. - * - * @version $Id: ConstantPushInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - - * @see ICONST - * @see SIPUSH - */ -public interface ConstantPushInstruction extends PushInstruction, TypedInstruction { - - public Number getValue(); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denotes a push instruction that produces a literal on the stack + * such as SIPUSH, BIPUSH, ICONST, etc. + * + * @version $Id: ConstantPushInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + + * @see ICONST + * @see SIPUSH + */ +public interface ConstantPushInstruction extends PushInstruction, TypedInstruction { + + public Number getValue(); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ConversionInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ConversionInstruction.java index a89347f2..84c959c7 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ConversionInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ConversionInstruction.java @@ -1,76 +1,76 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; - -/** - * Super class for the x2y family of instructions. - * - * @version $Id: ConversionInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class ConversionInstruction extends Instruction implements TypedInstruction, - StackProducer, StackConsumer { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ConversionInstruction() { - } - - - /** - * @param opcode opcode of instruction - */ - protected ConversionInstruction(short opcode) { - super(opcode, (short) 1); - } - - - /** @return type associated with the instruction - */ - public Type getType( ConstantPoolGen cp ) { - switch (opcode) { - case Constants.D2I: - case Constants.F2I: - case Constants.L2I: - return Type.INT; - case Constants.D2F: - case Constants.I2F: - case Constants.L2F: - return Type.FLOAT; - case Constants.D2L: - case Constants.F2L: - case Constants.I2L: - return Type.LONG; - case Constants.F2D: - case Constants.I2D: - case Constants.L2D: - return Type.DOUBLE; - case Constants.I2B: - return Type.BYTE; - case Constants.I2C: - return Type.CHAR; - case Constants.I2S: - return Type.SHORT; - default: // Never reached - throw new ClassGenException("Unknown type " + opcode); - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; + +/** + * Super class for the x2y family of instructions. + * + * @version $Id: ConversionInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class ConversionInstruction extends Instruction implements TypedInstruction, + StackProducer, StackConsumer { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + ConversionInstruction() { + } + + + /** + * @param opcode opcode of instruction + */ + protected ConversionInstruction(short opcode) { + super(opcode, (short) 1); + } + + + /** @return type associated with the instruction + */ + public Type getType( ConstantPoolGen cp ) { + switch (opcode) { + case Constants.D2I: + case Constants.F2I: + case Constants.L2I: + return Type.INT; + case Constants.D2F: + case Constants.I2F: + case Constants.L2F: + return Type.FLOAT; + case Constants.D2L: + case Constants.F2L: + case Constants.I2L: + return Type.LONG; + case Constants.F2D: + case Constants.I2D: + case Constants.L2D: + return Type.DOUBLE; + case Constants.I2B: + return Type.BYTE; + case Constants.I2C: + return Type.CHAR; + case Constants.I2S: + return Type.SHORT; + default: // Never reached + throw new ClassGenException("Unknown type " + opcode); + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/D2F.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/D2F.java index 363ebd10..097be804 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/D2F.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/D2F.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * D2F - Convert double to float - *
          Stack: ..., value.word1, value.word2 -> ..., result
          - * - * @version $Id: D2F.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class D2F extends ConversionInstruction { - - /** Convert double to float - */ - public D2F() { - super(org.apache.bcel5_2_0.Constants.D2F); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitD2F(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * D2F - Convert double to float + *
          Stack: ..., value.word1, value.word2 -> ..., result
          + * + * @version $Id: D2F.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class D2F extends ConversionInstruction { + + /** Convert double to float + */ + public D2F() { + super(org.apache.bcel5_2_0.Constants.D2F); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitD2F(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/D2I.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/D2I.java index 12f4ef2a..5a729a2f 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/D2I.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/D2I.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * D2I - Convert double to int - *
          Stack: ..., value.word1, value.word2 -> ..., result
          - * - * @version $Id: D2I.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class D2I extends ConversionInstruction { - - /** Convert double to int - */ - public D2I() { - super(org.apache.bcel5_2_0.Constants.D2I); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitD2I(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * D2I - Convert double to int + *
          Stack: ..., value.word1, value.word2 -> ..., result
          + * + * @version $Id: D2I.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class D2I extends ConversionInstruction { + + /** Convert double to int + */ + public D2I() { + super(org.apache.bcel5_2_0.Constants.D2I); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitD2I(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/D2L.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/D2L.java index cee5473d..3e6f9aa2 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/D2L.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/D2L.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * D2L - Convert double to long - *
          Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
          - * - * @version $Id: D2L.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class D2L extends ConversionInstruction { - - /** Convert double to long - */ - public D2L() { - super(org.apache.bcel5_2_0.Constants.D2L); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitD2L(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * D2L - Convert double to long + *
          Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
          + * + * @version $Id: D2L.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class D2L extends ConversionInstruction { + + /** Convert double to long + */ + public D2L() { + super(org.apache.bcel5_2_0.Constants.D2L); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitD2L(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DADD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DADD.java index 518d16ef..f69f1264 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DADD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DADD.java @@ -1,51 +1,51 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DADD - Add doubles - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result1.word2 - * - * @version $Id: DADD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DADD extends ArithmeticInstruction { - - /** Add doubles - */ - public DADD() { - super(org.apache.bcel5_2_0.Constants.DADD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDADD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DADD - Add doubles + *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          + * ..., result.word1, result1.word2 + * + * @version $Id: DADD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DADD extends ArithmeticInstruction { + + /** Add doubles + */ + public DADD() { + super(org.apache.bcel5_2_0.Constants.DADD); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitDADD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DALOAD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DALOAD.java index b789be53..3365ed71 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DALOAD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DALOAD.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DALOAD - Load double from array - *
          Stack: ..., arrayref, index -> ..., result.word1, result.word2
          - * - * @version $Id: DALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DALOAD extends ArrayInstruction implements StackProducer { - - /** Load double from array - */ - public DALOAD() { - super(org.apache.bcel5_2_0.Constants.DALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitDALOAD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DALOAD - Load double from array + *
          Stack: ..., arrayref, index -> ..., result.word1, result.word2
          + * + * @version $Id: DALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DALOAD extends ArrayInstruction implements StackProducer { + + /** Load double from array + */ + public DALOAD() { + super(org.apache.bcel5_2_0.Constants.DALOAD); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitDALOAD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DASTORE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DASTORE.java index 7464b6ed..c4438068 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DASTORE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DASTORE.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DASTORE - Store into double array - *
          Stack: ..., arrayref, index, value.word1, value.word2 -> ...
          - * - * @version $Id: DASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DASTORE extends ArrayInstruction implements StackConsumer { - - /** Store double into array - */ - public DASTORE() { - super(org.apache.bcel5_2_0.Constants.DASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitDASTORE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DASTORE - Store into double array + *
          Stack: ..., arrayref, index, value.word1, value.word2 -> ...
          + * + * @version $Id: DASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DASTORE extends ArrayInstruction implements StackConsumer { + + /** Store double into array + */ + public DASTORE() { + super(org.apache.bcel5_2_0.Constants.DASTORE); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitDASTORE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DCMPG.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DCMPG.java index 90132254..e899bfb5 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DCMPG.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DCMPG.java @@ -1,55 +1,55 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DCMPG - Compare doubles: value1 > value2 - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result - * - * @version $Id: DCMPG.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DCMPG extends Instruction implements TypedInstruction, StackProducer, StackConsumer { - - public DCMPG() { - super(org.apache.bcel5_2_0.Constants.DCMPG, (short) 1); - } - - - /** @return Type.DOUBLE - */ - public Type getType( ConstantPoolGen cp ) { - return Type.DOUBLE; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitDCMPG(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DCMPG - Compare doubles: value1 > value2 + *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          + * ..., result + * + * @version $Id: DCMPG.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DCMPG extends Instruction implements TypedInstruction, StackProducer, StackConsumer { + + public DCMPG() { + super(org.apache.bcel5_2_0.Constants.DCMPG, (short) 1); + } + + + /** @return Type.DOUBLE + */ + public Type getType( ConstantPoolGen cp ) { + return Type.DOUBLE; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitDCMPG(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DCMPL.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DCMPL.java index c3cbb6a7..0046e67e 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DCMPL.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DCMPL.java @@ -1,55 +1,55 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DCMPL - Compare doubles: value1 < value2 - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result - * - * @version $Id: DCMPL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DCMPL extends Instruction implements TypedInstruction, StackProducer, StackConsumer { - - public DCMPL() { - super(org.apache.bcel5_2_0.Constants.DCMPL, (short) 1); - } - - - /** @return Type.DOUBLE - */ - public Type getType( ConstantPoolGen cp ) { - return Type.DOUBLE; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitDCMPL(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DCMPL - Compare doubles: value1 < value2 + *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          + * ..., result + * + * @version $Id: DCMPL.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DCMPL extends Instruction implements TypedInstruction, StackProducer, StackConsumer { + + public DCMPL() { + super(org.apache.bcel5_2_0.Constants.DCMPL, (short) 1); + } + + + /** @return Type.DOUBLE + */ + public Type getType( ConstantPoolGen cp ) { + return Type.DOUBLE; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitDCMPL(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DCONST.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DCONST.java index 71fba77f..6e52cd8b 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DCONST.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DCONST.java @@ -1,80 +1,80 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DCONST - Push 0.0 or 1.0, other values cause an exception - * - *
          Stack: ... -> ..., 
          - * - * @version $Id: DCONST.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DCONST extends Instruction implements ConstantPushInstruction, TypedInstruction { - - private double value; - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - DCONST() { - } - - - public DCONST(double f) { - super(org.apache.bcel5_2_0.Constants.DCONST_0, (short) 1); - if (f == 0.0) { - opcode = org.apache.bcel5_2_0.Constants.DCONST_0; - } else if (f == 1.0) { - opcode = org.apache.bcel5_2_0.Constants.DCONST_1; - } else { - throw new ClassGenException("DCONST can be used only for 0.0 and 1.0: " + f); - } - value = f; - } - - - public Number getValue() { - return new Double(value); - } - - - /** @return Type.DOUBLE - */ - public Type getType( ConstantPoolGen cp ) { - return Type.DOUBLE; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitDCONST(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DCONST - Push 0.0 or 1.0, other values cause an exception + * + *
          Stack: ... -> ..., 
          + * + * @version $Id: DCONST.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DCONST extends Instruction implements ConstantPushInstruction, TypedInstruction { + + private double value; + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + DCONST() { + } + + + public DCONST(double f) { + super(org.apache.bcel5_2_0.Constants.DCONST_0, (short) 1); + if (f == 0.0) { + opcode = org.apache.bcel5_2_0.Constants.DCONST_0; + } else if (f == 1.0) { + opcode = org.apache.bcel5_2_0.Constants.DCONST_1; + } else { + throw new ClassGenException("DCONST can be used only for 0.0 and 1.0: " + f); + } + value = f; + } + + + public Number getValue() { + return new Double(value); + } + + + /** @return Type.DOUBLE + */ + public Type getType( ConstantPoolGen cp ) { + return Type.DOUBLE; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitPushInstruction(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitConstantPushInstruction(this); + v.visitDCONST(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DDIV.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DDIV.java index 402408d5..cf4db179 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DDIV.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DDIV.java @@ -1,51 +1,51 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DDIV - Divide doubles - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: DDIV.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DDIV extends ArithmeticInstruction { - - /** Divide doubles - */ - public DDIV() { - super(org.apache.bcel5_2_0.Constants.DDIV); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDDIV(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DDIV - Divide doubles + *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          + * ..., result.word1, result.word2 + * + * @version $Id: DDIV.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DDIV extends ArithmeticInstruction { + + /** Divide doubles + */ + public DDIV() { + super(org.apache.bcel5_2_0.Constants.DDIV); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitDDIV(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DLOAD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DLOAD.java index 47609f74..599b7d80 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DLOAD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DLOAD.java @@ -1,57 +1,57 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DLOAD - Load double from local variable - *
          Stack ... -> ..., result.word1, result.word2
          - * - * @version $Id: DLOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DLOAD extends LoadInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - DLOAD() { - super(org.apache.bcel5_2_0.Constants.DLOAD, org.apache.bcel5_2_0.Constants.DLOAD_0); - } - - - /** Load double from local variable - * @param n index of local variable - */ - public DLOAD(int n) { - super(org.apache.bcel5_2_0.Constants.DLOAD, org.apache.bcel5_2_0.Constants.DLOAD_0, n); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - super.accept(v); - v.visitDLOAD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DLOAD - Load double from local variable + *
          Stack ... -> ..., result.word1, result.word2
          + * + * @version $Id: DLOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DLOAD extends LoadInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + DLOAD() { + super(org.apache.bcel5_2_0.Constants.DLOAD, org.apache.bcel5_2_0.Constants.DLOAD_0); + } + + + /** Load double from local variable + * @param n index of local variable + */ + public DLOAD(int n) { + super(org.apache.bcel5_2_0.Constants.DLOAD, org.apache.bcel5_2_0.Constants.DLOAD_0, n); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + super.accept(v); + v.visitDLOAD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DMUL.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DMUL.java index 6aba328f..844b37e9 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DMUL.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DMUL.java @@ -1,51 +1,51 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DMUL - Multiply doubles - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: DMUL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DMUL extends ArithmeticInstruction { - - /** Multiply doubles - */ - public DMUL() { - super(org.apache.bcel5_2_0.Constants.DMUL); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDMUL(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DMUL - Multiply doubles + *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          + * ..., result.word1, result.word2 + * + * @version $Id: DMUL.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DMUL extends ArithmeticInstruction { + + /** Multiply doubles + */ + public DMUL() { + super(org.apache.bcel5_2_0.Constants.DMUL); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitDMUL(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DNEG.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DNEG.java index 639ac38d..9ed8e67a 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DNEG.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DNEG.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DNEG - Negate double - *
          Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
          - * - * @version $Id: DNEG.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DNEG extends ArithmeticInstruction { - - public DNEG() { - super(org.apache.bcel5_2_0.Constants.DNEG); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDNEG(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DNEG - Negate double + *
          Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
          + * + * @version $Id: DNEG.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DNEG extends ArithmeticInstruction { + + public DNEG() { + super(org.apache.bcel5_2_0.Constants.DNEG); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitDNEG(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DREM.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DREM.java index 909f06eb..05aa2ec9 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DREM.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DREM.java @@ -1,51 +1,51 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DREM - Remainder of doubles - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: DREM.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DREM extends ArithmeticInstruction { - - /** Remainder of doubles - */ - public DREM() { - super(org.apache.bcel5_2_0.Constants.DREM); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDREM(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DREM - Remainder of doubles + *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          + * ..., result.word1, result.word2 + * + * @version $Id: DREM.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DREM extends ArithmeticInstruction { + + /** Remainder of doubles + */ + public DREM() { + super(org.apache.bcel5_2_0.Constants.DREM); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitDREM(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DRETURN.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DRETURN.java index 3f76bff1..dbc53a1b 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DRETURN.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DRETURN.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DRETURN - Return double from method - *
          Stack: ..., value.word1, value.word2 -> <empty>
          - * - * @version $Id: DRETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DRETURN extends ReturnInstruction { - - /** Return double from method - */ - public DRETURN() { - super(org.apache.bcel5_2_0.Constants.DRETURN); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitDRETURN(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DRETURN - Return double from method + *
          Stack: ..., value.word1, value.word2 -> <empty>
          + * + * @version $Id: DRETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DRETURN extends ReturnInstruction { + + /** Return double from method + */ + public DRETURN() { + super(org.apache.bcel5_2_0.Constants.DRETURN); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackConsumer(this); + v.visitReturnInstruction(this); + v.visitDRETURN(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DSTORE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DSTORE.java index fe25a259..da16d8ff 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DSTORE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DSTORE.java @@ -1,57 +1,57 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DSTORE - Store double into local variable - *
          Stack: ..., value.word1, value.word2 -> ... 
          - * - * @version $Id: DSTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DSTORE extends StoreInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - DSTORE() { - super(org.apache.bcel5_2_0.Constants.DSTORE, org.apache.bcel5_2_0.Constants.DSTORE_0); - } - - - /** Store double into local variable - * @param n index of local variable - */ - public DSTORE(int n) { - super(org.apache.bcel5_2_0.Constants.DSTORE, org.apache.bcel5_2_0.Constants.DSTORE_0, n); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - super.accept(v); - v.visitDSTORE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DSTORE - Store double into local variable + *
          Stack: ..., value.word1, value.word2 -> ... 
          + * + * @version $Id: DSTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DSTORE extends StoreInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + DSTORE() { + super(org.apache.bcel5_2_0.Constants.DSTORE, org.apache.bcel5_2_0.Constants.DSTORE_0); + } + + + /** Store double into local variable + * @param n index of local variable + */ + public DSTORE(int n) { + super(org.apache.bcel5_2_0.Constants.DSTORE, org.apache.bcel5_2_0.Constants.DSTORE_0, n); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + super.accept(v); + v.visitDSTORE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DSUB.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DSUB.java index 4d56b1ba..81cb2252 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DSUB.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DSUB.java @@ -1,51 +1,51 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DSUB - Substract doubles - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: DSUB.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DSUB extends ArithmeticInstruction { - - /** Substract doubles - */ - public DSUB() { - super(org.apache.bcel5_2_0.Constants.DSUB); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDSUB(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DSUB - Substract doubles + *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          + * ..., result.word1, result.word2 + * + * @version $Id: DSUB.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DSUB extends ArithmeticInstruction { + + /** Substract doubles + */ + public DSUB() { + super(org.apache.bcel5_2_0.Constants.DSUB); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitDSUB(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP.java index d9ef76b1..ad948f10 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP.java @@ -1,47 +1,47 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DUP - Duplicate top operand stack word - *
          Stack: ..., word -> ..., word, word
          - * - * @version $Id: DUP.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DUP extends StackInstruction implements PushInstruction { - - public DUP() { - super(org.apache.bcel5_2_0.Constants.DUP); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitStackInstruction(this); - v.visitDUP(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DUP - Duplicate top operand stack word + *
          Stack: ..., word -> ..., word, word
          + * + * @version $Id: DUP.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DUP extends StackInstruction implements PushInstruction { + + public DUP() { + super(org.apache.bcel5_2_0.Constants.DUP); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitPushInstruction(this); + v.visitStackInstruction(this); + v.visitDUP(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP2.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP2.java index 6f1076be..914ce9a5 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP2.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP2.java @@ -1,47 +1,47 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DUP2 - Duplicate two top operand stack words - *
          Stack: ..., word2, word1 -> ..., word2, word1, word2, word1
          - * - * @version $Id: DUP2.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DUP2 extends StackInstruction implements PushInstruction { - - public DUP2() { - super(org.apache.bcel5_2_0.Constants.DUP2); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitStackInstruction(this); - v.visitDUP2(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DUP2 - Duplicate two top operand stack words + *
          Stack: ..., word2, word1 -> ..., word2, word1, word2, word1
          + * + * @version $Id: DUP2.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DUP2 extends StackInstruction implements PushInstruction { + + public DUP2() { + super(org.apache.bcel5_2_0.Constants.DUP2); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitPushInstruction(this); + v.visitStackInstruction(this); + v.visitDUP2(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP2_X1.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP2_X1.java index c8a2e1d3..6e5890ec 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP2_X1.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP2_X1.java @@ -1,45 +1,45 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DUP2_X1 - Duplicate two top operand stack words and put three down - *
          Stack: ..., word3, word2, word1 -> ..., word2, word1, word3, word2, word1
          - * - * @version $Id: DUP2_X1.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DUP2_X1 extends StackInstruction { - - public DUP2_X1() { - super(org.apache.bcel5_2_0.Constants.DUP2_X1); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackInstruction(this); - v.visitDUP2_X1(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DUP2_X1 - Duplicate two top operand stack words and put three down + *
          Stack: ..., word3, word2, word1 -> ..., word2, word1, word3, word2, word1
          + * + * @version $Id: DUP2_X1.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DUP2_X1 extends StackInstruction { + + public DUP2_X1() { + super(org.apache.bcel5_2_0.Constants.DUP2_X1); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackInstruction(this); + v.visitDUP2_X1(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP2_X2.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP2_X2.java index 4dfc8026..3128c2b0 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP2_X2.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP2_X2.java @@ -1,45 +1,45 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DUP2_X2 - Duplicate two top operand stack words and put four down - *
          Stack: ..., word4, word3, word2, word1 -> ..., word2, word1, word4, word3, word2, word1
          - * - * @version $Id: DUP2_X2.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DUP2_X2 extends StackInstruction { - - public DUP2_X2() { - super(org.apache.bcel5_2_0.Constants.DUP2_X2); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackInstruction(this); - v.visitDUP2_X2(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DUP2_X2 - Duplicate two top operand stack words and put four down + *
          Stack: ..., word4, word3, word2, word1 -> ..., word2, word1, word4, word3, word2, word1
          + * + * @version $Id: DUP2_X2.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DUP2_X2 extends StackInstruction { + + public DUP2_X2() { + super(org.apache.bcel5_2_0.Constants.DUP2_X2); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackInstruction(this); + v.visitDUP2_X2(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP_X1.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP_X1.java index 9afc3e87..8390c99c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP_X1.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP_X1.java @@ -1,45 +1,45 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DUP_X1 - Duplicate top operand stack word and put two down - *
          Stack: ..., word2, word1 -> ..., word1, word2, word1
          - * - * @version $Id: DUP_X1.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DUP_X1 extends StackInstruction { - - public DUP_X1() { - super(org.apache.bcel5_2_0.Constants.DUP_X1); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackInstruction(this); - v.visitDUP_X1(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DUP_X1 - Duplicate top operand stack word and put two down + *
          Stack: ..., word2, word1 -> ..., word1, word2, word1
          + * + * @version $Id: DUP_X1.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DUP_X1 extends StackInstruction { + + public DUP_X1() { + super(org.apache.bcel5_2_0.Constants.DUP_X1); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackInstruction(this); + v.visitDUP_X1(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP_X2.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP_X2.java index 9b66559f..5d34136f 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP_X2.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/DUP_X2.java @@ -1,45 +1,45 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * DUP_X2 - Duplicate top operand stack word and put three down - *
          Stack: ..., word3, word2, word1 -> ..., word1, word3, word2, word1
          - * - * @version $Id: DUP_X2.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DUP_X2 extends StackInstruction { - - public DUP_X2() { - super(org.apache.bcel5_2_0.Constants.DUP_X2); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackInstruction(this); - v.visitDUP_X2(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * DUP_X2 - Duplicate top operand stack word and put three down + *
          Stack: ..., word3, word2, word1 -> ..., word1, word3, word2, word1
          + * + * @version $Id: DUP_X2.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class DUP_X2 extends StackInstruction { + + public DUP_X2() { + super(org.apache.bcel5_2_0.Constants.DUP_X2); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackInstruction(this); + v.visitDUP_X2(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/EmptyVisitor.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/EmptyVisitor.java index ff2f111b..f7b182b8 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/EmptyVisitor.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/EmptyVisitor.java @@ -1,745 +1,745 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Supplies empty method bodies to be overridden by subclasses. - * - * @version $Id: EmptyVisitor.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class EmptyVisitor implements Visitor { - - public void visitStackInstruction( StackInstruction obj ) { - } - - - public void visitLocalVariableInstruction( LocalVariableInstruction obj ) { - } - - - public void visitBranchInstruction( BranchInstruction obj ) { - } - - - public void visitLoadClass( LoadClass obj ) { - } - - - public void visitFieldInstruction( FieldInstruction obj ) { - } - - - public void visitIfInstruction( IfInstruction obj ) { - } - - - public void visitConversionInstruction( ConversionInstruction obj ) { - } - - - public void visitPopInstruction( PopInstruction obj ) { - } - - - public void visitJsrInstruction( JsrInstruction obj ) { - } - - - public void visitGotoInstruction( GotoInstruction obj ) { - } - - - public void visitStoreInstruction( StoreInstruction obj ) { - } - - - public void visitTypedInstruction( TypedInstruction obj ) { - } - - - public void visitSelect( Select obj ) { - } - - - public void visitUnconditionalBranch( UnconditionalBranch obj ) { - } - - - public void visitPushInstruction( PushInstruction obj ) { - } - - - public void visitArithmeticInstruction( ArithmeticInstruction obj ) { - } - - - public void visitCPInstruction( CPInstruction obj ) { - } - - - public void visitInvokeInstruction( InvokeInstruction obj ) { - } - - - public void visitArrayInstruction( ArrayInstruction obj ) { - } - - - public void visitAllocationInstruction( AllocationInstruction obj ) { - } - - - public void visitReturnInstruction( ReturnInstruction obj ) { - } - - - public void visitFieldOrMethod( FieldOrMethod obj ) { - } - - - public void visitConstantPushInstruction( ConstantPushInstruction obj ) { - } - - - public void visitExceptionThrower( ExceptionThrower obj ) { - } - - - public void visitLoadInstruction( LoadInstruction obj ) { - } - - - public void visitVariableLengthInstruction( VariableLengthInstruction obj ) { - } - - - public void visitStackProducer( StackProducer obj ) { - } - - - public void visitStackConsumer( StackConsumer obj ) { - } - - - public void visitACONST_NULL( ACONST_NULL obj ) { - } - - - public void visitGETSTATIC( GETSTATIC obj ) { - } - - - public void visitIF_ICMPLT( IF_ICMPLT obj ) { - } - - - public void visitMONITOREXIT( MONITOREXIT obj ) { - } - - - public void visitIFLT( IFLT obj ) { - } - - - public void visitLSTORE( LSTORE obj ) { - } - - - public void visitPOP2( POP2 obj ) { - } - - - public void visitBASTORE( BASTORE obj ) { - } - - - public void visitISTORE( ISTORE obj ) { - } - - - public void visitCHECKCAST( CHECKCAST obj ) { - } - - - public void visitFCMPG( FCMPG obj ) { - } - - - public void visitI2F( I2F obj ) { - } - - - public void visitATHROW( ATHROW obj ) { - } - - - public void visitDCMPL( DCMPL obj ) { - } - - - public void visitARRAYLENGTH( ARRAYLENGTH obj ) { - } - - - public void visitDUP( DUP obj ) { - } - - - public void visitINVOKESTATIC( INVOKESTATIC obj ) { - } - - - public void visitLCONST( LCONST obj ) { - } - - - public void visitDREM( DREM obj ) { - } - - - public void visitIFGE( IFGE obj ) { - } - - - public void visitCALOAD( CALOAD obj ) { - } - - - public void visitLASTORE( LASTORE obj ) { - } - - - public void visitI2D( I2D obj ) { - } - - - public void visitDADD( DADD obj ) { - } - - - public void visitINVOKESPECIAL( INVOKESPECIAL obj ) { - } - - - public void visitIAND( IAND obj ) { - } - - - public void visitPUTFIELD( PUTFIELD obj ) { - } - - - public void visitILOAD( ILOAD obj ) { - } - - - public void visitDLOAD( DLOAD obj ) { - } - - - public void visitDCONST( DCONST obj ) { - } - - - public void visitNEW( NEW obj ) { - } - - - public void visitIFNULL( IFNULL obj ) { - } - - - public void visitLSUB( LSUB obj ) { - } - - - public void visitL2I( L2I obj ) { - } - - - public void visitISHR( ISHR obj ) { - } - - - public void visitTABLESWITCH( TABLESWITCH obj ) { - } - - - public void visitIINC( IINC obj ) { - } - - - public void visitDRETURN( DRETURN obj ) { - } - - - public void visitFSTORE( FSTORE obj ) { - } - - - public void visitDASTORE( DASTORE obj ) { - } - - - public void visitIALOAD( IALOAD obj ) { - } - - - public void visitDDIV( DDIV obj ) { - } - - - public void visitIF_ICMPGE( IF_ICMPGE obj ) { - } - - - public void visitLAND( LAND obj ) { - } - - - public void visitIDIV( IDIV obj ) { - } - - - public void visitLOR( LOR obj ) { - } - - - public void visitCASTORE( CASTORE obj ) { - } - - - public void visitFREM( FREM obj ) { - } - - - public void visitLDC( LDC obj ) { - } - - - public void visitBIPUSH( BIPUSH obj ) { - } - - - public void visitDSTORE( DSTORE obj ) { - } - - - public void visitF2L( F2L obj ) { - } - - - public void visitFMUL( FMUL obj ) { - } - - - public void visitLLOAD( LLOAD obj ) { - } - - - public void visitJSR( JSR obj ) { - } - - - public void visitFSUB( FSUB obj ) { - } - - - public void visitSASTORE( SASTORE obj ) { - } - - - public void visitALOAD( ALOAD obj ) { - } - - - public void visitDUP2_X2( DUP2_X2 obj ) { - } - - - public void visitRETURN( RETURN obj ) { - } - - - public void visitDALOAD( DALOAD obj ) { - } - - - public void visitSIPUSH( SIPUSH obj ) { - } - - - public void visitDSUB( DSUB obj ) { - } - - - public void visitL2F( L2F obj ) { - } - - - public void visitIF_ICMPGT( IF_ICMPGT obj ) { - } - - - public void visitF2D( F2D obj ) { - } - - - public void visitI2L( I2L obj ) { - } - - - public void visitIF_ACMPNE( IF_ACMPNE obj ) { - } - - - public void visitPOP( POP obj ) { - } - - - public void visitI2S( I2S obj ) { - } - - - public void visitIFEQ( IFEQ obj ) { - } - - - public void visitSWAP( SWAP obj ) { - } - - - public void visitIOR( IOR obj ) { - } - - - public void visitIREM( IREM obj ) { - } - - - public void visitIASTORE( IASTORE obj ) { - } - - - public void visitNEWARRAY( NEWARRAY obj ) { - } - - - public void visitINVOKEINTERFACE( INVOKEINTERFACE obj ) { - } - - - public void visitINEG( INEG obj ) { - } - - - public void visitLCMP( LCMP obj ) { - } - - - public void visitJSR_W( JSR_W obj ) { - } - - - public void visitMULTIANEWARRAY( MULTIANEWARRAY obj ) { - } - - - public void visitDUP_X2( DUP_X2 obj ) { - } - - - public void visitSALOAD( SALOAD obj ) { - } - - - public void visitIFNONNULL( IFNONNULL obj ) { - } - - - public void visitDMUL( DMUL obj ) { - } - - - public void visitIFNE( IFNE obj ) { - } - - - public void visitIF_ICMPLE( IF_ICMPLE obj ) { - } - - - public void visitLDC2_W( LDC2_W obj ) { - } - - - public void visitGETFIELD( GETFIELD obj ) { - } - - - public void visitLADD( LADD obj ) { - } - - - public void visitNOP( NOP obj ) { - } - - - public void visitFALOAD( FALOAD obj ) { - } - - - public void visitINSTANCEOF( INSTANCEOF obj ) { - } - - - public void visitIFLE( IFLE obj ) { - } - - - public void visitLXOR( LXOR obj ) { - } - - - public void visitLRETURN( LRETURN obj ) { - } - - - public void visitFCONST( FCONST obj ) { - } - - - public void visitIUSHR( IUSHR obj ) { - } - - - public void visitBALOAD( BALOAD obj ) { - } - - - public void visitDUP2( DUP2 obj ) { - } - - - public void visitIF_ACMPEQ( IF_ACMPEQ obj ) { - } - - - public void visitIMPDEP1( IMPDEP1 obj ) { - } - - - public void visitMONITORENTER( MONITORENTER obj ) { - } - - - public void visitLSHL( LSHL obj ) { - } - - - public void visitDCMPG( DCMPG obj ) { - } - - - public void visitD2L( D2L obj ) { - } - - - public void visitIMPDEP2( IMPDEP2 obj ) { - } - - - public void visitL2D( L2D obj ) { - } - - - public void visitRET( RET obj ) { - } - - - public void visitIFGT( IFGT obj ) { - } - - - public void visitIXOR( IXOR obj ) { - } - - - public void visitINVOKEVIRTUAL( INVOKEVIRTUAL obj ) { - } - - - public void visitFASTORE( FASTORE obj ) { - } - - - public void visitIRETURN( IRETURN obj ) { - } - - - public void visitIF_ICMPNE( IF_ICMPNE obj ) { - } - - - public void visitFLOAD( FLOAD obj ) { - } - - - public void visitLDIV( LDIV obj ) { - } - - - public void visitPUTSTATIC( PUTSTATIC obj ) { - } - - - public void visitAALOAD( AALOAD obj ) { - } - - - public void visitD2I( D2I obj ) { - } - - - public void visitIF_ICMPEQ( IF_ICMPEQ obj ) { - } - - - public void visitAASTORE( AASTORE obj ) { - } - - - public void visitARETURN( ARETURN obj ) { - } - - - public void visitDUP2_X1( DUP2_X1 obj ) { - } - - - public void visitFNEG( FNEG obj ) { - } - - - public void visitGOTO_W( GOTO_W obj ) { - } - - - public void visitD2F( D2F obj ) { - } - - - public void visitGOTO( GOTO obj ) { - } - - - public void visitISUB( ISUB obj ) { - } - - - public void visitF2I( F2I obj ) { - } - - - public void visitDNEG( DNEG obj ) { - } - - - public void visitICONST( ICONST obj ) { - } - - - public void visitFDIV( FDIV obj ) { - } - - - public void visitI2B( I2B obj ) { - } - - - public void visitLNEG( LNEG obj ) { - } - - - public void visitLREM( LREM obj ) { - } - - - public void visitIMUL( IMUL obj ) { - } - - - public void visitIADD( IADD obj ) { - } - - - public void visitLSHR( LSHR obj ) { - } - - - public void visitLOOKUPSWITCH( LOOKUPSWITCH obj ) { - } - - - public void visitDUP_X1( DUP_X1 obj ) { - } - - - public void visitFCMPL( FCMPL obj ) { - } - - - public void visitI2C( I2C obj ) { - } - - - public void visitLMUL( LMUL obj ) { - } - - - public void visitLUSHR( LUSHR obj ) { - } - - - public void visitISHL( ISHL obj ) { - } - - - public void visitLALOAD( LALOAD obj ) { - } - - - public void visitASTORE( ASTORE obj ) { - } - - - public void visitANEWARRAY( ANEWARRAY obj ) { - } - - - public void visitFRETURN( FRETURN obj ) { - } - - - public void visitFADD( FADD obj ) { - } - - - public void visitBREAKPOINT( BREAKPOINT obj ) { - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Supplies empty method bodies to be overridden by subclasses. + * + * @version $Id: EmptyVisitor.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class EmptyVisitor implements Visitor { + + public void visitStackInstruction( StackInstruction obj ) { + } + + + public void visitLocalVariableInstruction( LocalVariableInstruction obj ) { + } + + + public void visitBranchInstruction( BranchInstruction obj ) { + } + + + public void visitLoadClass( LoadClass obj ) { + } + + + public void visitFieldInstruction( FieldInstruction obj ) { + } + + + public void visitIfInstruction( IfInstruction obj ) { + } + + + public void visitConversionInstruction( ConversionInstruction obj ) { + } + + + public void visitPopInstruction( PopInstruction obj ) { + } + + + public void visitJsrInstruction( JsrInstruction obj ) { + } + + + public void visitGotoInstruction( GotoInstruction obj ) { + } + + + public void visitStoreInstruction( StoreInstruction obj ) { + } + + + public void visitTypedInstruction( TypedInstruction obj ) { + } + + + public void visitSelect( Select obj ) { + } + + + public void visitUnconditionalBranch( UnconditionalBranch obj ) { + } + + + public void visitPushInstruction( PushInstruction obj ) { + } + + + public void visitArithmeticInstruction( ArithmeticInstruction obj ) { + } + + + public void visitCPInstruction( CPInstruction obj ) { + } + + + public void visitInvokeInstruction( InvokeInstruction obj ) { + } + + + public void visitArrayInstruction( ArrayInstruction obj ) { + } + + + public void visitAllocationInstruction( AllocationInstruction obj ) { + } + + + public void visitReturnInstruction( ReturnInstruction obj ) { + } + + + public void visitFieldOrMethod( FieldOrMethod obj ) { + } + + + public void visitConstantPushInstruction( ConstantPushInstruction obj ) { + } + + + public void visitExceptionThrower( ExceptionThrower obj ) { + } + + + public void visitLoadInstruction( LoadInstruction obj ) { + } + + + public void visitVariableLengthInstruction( VariableLengthInstruction obj ) { + } + + + public void visitStackProducer( StackProducer obj ) { + } + + + public void visitStackConsumer( StackConsumer obj ) { + } + + + public void visitACONST_NULL( ACONST_NULL obj ) { + } + + + public void visitGETSTATIC( GETSTATIC obj ) { + } + + + public void visitIF_ICMPLT( IF_ICMPLT obj ) { + } + + + public void visitMONITOREXIT( MONITOREXIT obj ) { + } + + + public void visitIFLT( IFLT obj ) { + } + + + public void visitLSTORE( LSTORE obj ) { + } + + + public void visitPOP2( POP2 obj ) { + } + + + public void visitBASTORE( BASTORE obj ) { + } + + + public void visitISTORE( ISTORE obj ) { + } + + + public void visitCHECKCAST( CHECKCAST obj ) { + } + + + public void visitFCMPG( FCMPG obj ) { + } + + + public void visitI2F( I2F obj ) { + } + + + public void visitATHROW( ATHROW obj ) { + } + + + public void visitDCMPL( DCMPL obj ) { + } + + + public void visitARRAYLENGTH( ARRAYLENGTH obj ) { + } + + + public void visitDUP( DUP obj ) { + } + + + public void visitINVOKESTATIC( INVOKESTATIC obj ) { + } + + + public void visitLCONST( LCONST obj ) { + } + + + public void visitDREM( DREM obj ) { + } + + + public void visitIFGE( IFGE obj ) { + } + + + public void visitCALOAD( CALOAD obj ) { + } + + + public void visitLASTORE( LASTORE obj ) { + } + + + public void visitI2D( I2D obj ) { + } + + + public void visitDADD( DADD obj ) { + } + + + public void visitINVOKESPECIAL( INVOKESPECIAL obj ) { + } + + + public void visitIAND( IAND obj ) { + } + + + public void visitPUTFIELD( PUTFIELD obj ) { + } + + + public void visitILOAD( ILOAD obj ) { + } + + + public void visitDLOAD( DLOAD obj ) { + } + + + public void visitDCONST( DCONST obj ) { + } + + + public void visitNEW( NEW obj ) { + } + + + public void visitIFNULL( IFNULL obj ) { + } + + + public void visitLSUB( LSUB obj ) { + } + + + public void visitL2I( L2I obj ) { + } + + + public void visitISHR( ISHR obj ) { + } + + + public void visitTABLESWITCH( TABLESWITCH obj ) { + } + + + public void visitIINC( IINC obj ) { + } + + + public void visitDRETURN( DRETURN obj ) { + } + + + public void visitFSTORE( FSTORE obj ) { + } + + + public void visitDASTORE( DASTORE obj ) { + } + + + public void visitIALOAD( IALOAD obj ) { + } + + + public void visitDDIV( DDIV obj ) { + } + + + public void visitIF_ICMPGE( IF_ICMPGE obj ) { + } + + + public void visitLAND( LAND obj ) { + } + + + public void visitIDIV( IDIV obj ) { + } + + + public void visitLOR( LOR obj ) { + } + + + public void visitCASTORE( CASTORE obj ) { + } + + + public void visitFREM( FREM obj ) { + } + + + public void visitLDC( LDC obj ) { + } + + + public void visitBIPUSH( BIPUSH obj ) { + } + + + public void visitDSTORE( DSTORE obj ) { + } + + + public void visitF2L( F2L obj ) { + } + + + public void visitFMUL( FMUL obj ) { + } + + + public void visitLLOAD( LLOAD obj ) { + } + + + public void visitJSR( JSR obj ) { + } + + + public void visitFSUB( FSUB obj ) { + } + + + public void visitSASTORE( SASTORE obj ) { + } + + + public void visitALOAD( ALOAD obj ) { + } + + + public void visitDUP2_X2( DUP2_X2 obj ) { + } + + + public void visitRETURN( RETURN obj ) { + } + + + public void visitDALOAD( DALOAD obj ) { + } + + + public void visitSIPUSH( SIPUSH obj ) { + } + + + public void visitDSUB( DSUB obj ) { + } + + + public void visitL2F( L2F obj ) { + } + + + public void visitIF_ICMPGT( IF_ICMPGT obj ) { + } + + + public void visitF2D( F2D obj ) { + } + + + public void visitI2L( I2L obj ) { + } + + + public void visitIF_ACMPNE( IF_ACMPNE obj ) { + } + + + public void visitPOP( POP obj ) { + } + + + public void visitI2S( I2S obj ) { + } + + + public void visitIFEQ( IFEQ obj ) { + } + + + public void visitSWAP( SWAP obj ) { + } + + + public void visitIOR( IOR obj ) { + } + + + public void visitIREM( IREM obj ) { + } + + + public void visitIASTORE( IASTORE obj ) { + } + + + public void visitNEWARRAY( NEWARRAY obj ) { + } + + + public void visitINVOKEINTERFACE( INVOKEINTERFACE obj ) { + } + + + public void visitINEG( INEG obj ) { + } + + + public void visitLCMP( LCMP obj ) { + } + + + public void visitJSR_W( JSR_W obj ) { + } + + + public void visitMULTIANEWARRAY( MULTIANEWARRAY obj ) { + } + + + public void visitDUP_X2( DUP_X2 obj ) { + } + + + public void visitSALOAD( SALOAD obj ) { + } + + + public void visitIFNONNULL( IFNONNULL obj ) { + } + + + public void visitDMUL( DMUL obj ) { + } + + + public void visitIFNE( IFNE obj ) { + } + + + public void visitIF_ICMPLE( IF_ICMPLE obj ) { + } + + + public void visitLDC2_W( LDC2_W obj ) { + } + + + public void visitGETFIELD( GETFIELD obj ) { + } + + + public void visitLADD( LADD obj ) { + } + + + public void visitNOP( NOP obj ) { + } + + + public void visitFALOAD( FALOAD obj ) { + } + + + public void visitINSTANCEOF( INSTANCEOF obj ) { + } + + + public void visitIFLE( IFLE obj ) { + } + + + public void visitLXOR( LXOR obj ) { + } + + + public void visitLRETURN( LRETURN obj ) { + } + + + public void visitFCONST( FCONST obj ) { + } + + + public void visitIUSHR( IUSHR obj ) { + } + + + public void visitBALOAD( BALOAD obj ) { + } + + + public void visitDUP2( DUP2 obj ) { + } + + + public void visitIF_ACMPEQ( IF_ACMPEQ obj ) { + } + + + public void visitIMPDEP1( IMPDEP1 obj ) { + } + + + public void visitMONITORENTER( MONITORENTER obj ) { + } + + + public void visitLSHL( LSHL obj ) { + } + + + public void visitDCMPG( DCMPG obj ) { + } + + + public void visitD2L( D2L obj ) { + } + + + public void visitIMPDEP2( IMPDEP2 obj ) { + } + + + public void visitL2D( L2D obj ) { + } + + + public void visitRET( RET obj ) { + } + + + public void visitIFGT( IFGT obj ) { + } + + + public void visitIXOR( IXOR obj ) { + } + + + public void visitINVOKEVIRTUAL( INVOKEVIRTUAL obj ) { + } + + + public void visitFASTORE( FASTORE obj ) { + } + + + public void visitIRETURN( IRETURN obj ) { + } + + + public void visitIF_ICMPNE( IF_ICMPNE obj ) { + } + + + public void visitFLOAD( FLOAD obj ) { + } + + + public void visitLDIV( LDIV obj ) { + } + + + public void visitPUTSTATIC( PUTSTATIC obj ) { + } + + + public void visitAALOAD( AALOAD obj ) { + } + + + public void visitD2I( D2I obj ) { + } + + + public void visitIF_ICMPEQ( IF_ICMPEQ obj ) { + } + + + public void visitAASTORE( AASTORE obj ) { + } + + + public void visitARETURN( ARETURN obj ) { + } + + + public void visitDUP2_X1( DUP2_X1 obj ) { + } + + + public void visitFNEG( FNEG obj ) { + } + + + public void visitGOTO_W( GOTO_W obj ) { + } + + + public void visitD2F( D2F obj ) { + } + + + public void visitGOTO( GOTO obj ) { + } + + + public void visitISUB( ISUB obj ) { + } + + + public void visitF2I( F2I obj ) { + } + + + public void visitDNEG( DNEG obj ) { + } + + + public void visitICONST( ICONST obj ) { + } + + + public void visitFDIV( FDIV obj ) { + } + + + public void visitI2B( I2B obj ) { + } + + + public void visitLNEG( LNEG obj ) { + } + + + public void visitLREM( LREM obj ) { + } + + + public void visitIMUL( IMUL obj ) { + } + + + public void visitIADD( IADD obj ) { + } + + + public void visitLSHR( LSHR obj ) { + } + + + public void visitLOOKUPSWITCH( LOOKUPSWITCH obj ) { + } + + + public void visitDUP_X1( DUP_X1 obj ) { + } + + + public void visitFCMPL( FCMPL obj ) { + } + + + public void visitI2C( I2C obj ) { + } + + + public void visitLMUL( LMUL obj ) { + } + + + public void visitLUSHR( LUSHR obj ) { + } + + + public void visitISHL( ISHL obj ) { + } + + + public void visitLALOAD( LALOAD obj ) { + } + + + public void visitASTORE( ASTORE obj ) { + } + + + public void visitANEWARRAY( ANEWARRAY obj ) { + } + + + public void visitFRETURN( FRETURN obj ) { + } + + + public void visitFADD( FADD obj ) { + } + + + public void visitBREAKPOINT( BREAKPOINT obj ) { + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ExceptionThrower.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ExceptionThrower.java index 6a3f92c3..4a6973ff 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ExceptionThrower.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ExceptionThrower.java @@ -1,42 +1,42 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denote an instruction that may throw a run-time or a linking - * exception (or both) during execution. This is not quite the truth - * as such; because all instructions may throw an - * java.lang.VirtualMachineError. These exceptions are omitted. - * - * The Lava Language Specification specifies exactly which - * RUN-TIME and which LINKING exceptions each - * instruction may throw which is reflected by the implementers. Due - * to the structure of the JVM specification, it may be possible that - * an Instruction implementing this interface returns a Class[] of - * size 0. - * - * Please note that we speak of an "exception" here when we mean any - * "Throwable" object; so this term is equally used for "Exception" - * and "Error" objects. - * - * @version $Id: ExceptionThrower.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author Enver Haase - */ -public interface ExceptionThrower { - - public java.lang.Class[] getExceptions(); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denote an instruction that may throw a run-time or a linking + * exception (or both) during execution. This is not quite the truth + * as such; because all instructions may throw an + * java.lang.VirtualMachineError. These exceptions are omitted. + * + * The Lava Language Specification specifies exactly which + * RUN-TIME and which LINKING exceptions each + * instruction may throw which is reflected by the implementers. Due + * to the structure of the JVM specification, it may be possible that + * an Instruction implementing this interface returns a Class[] of + * size 0. + * + * Please note that we speak of an "exception" here when we mean any + * "Throwable" object; so this term is equally used for "Exception" + * and "Error" objects. + * + * @version $Id: ExceptionThrower.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author Enver Haase + */ +public interface ExceptionThrower { + + public java.lang.Class[] getExceptions(); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/F2D.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/F2D.java index 8bd545ee..89af7665 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/F2D.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/F2D.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * F2D - Convert float to double - *
          Stack: ..., value -> ..., result.word1, result.word2
          - * - * @version $Id: F2D.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class F2D extends ConversionInstruction { - - /** Convert float to double - */ - public F2D() { - super(org.apache.bcel5_2_0.Constants.F2D); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitF2D(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * F2D - Convert float to double + *
          Stack: ..., value -> ..., result.word1, result.word2
          + * + * @version $Id: F2D.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class F2D extends ConversionInstruction { + + /** Convert float to double + */ + public F2D() { + super(org.apache.bcel5_2_0.Constants.F2D); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitF2D(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/F2I.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/F2I.java index 863b2750..7095b318 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/F2I.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/F2I.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * F2I - Convert float to int - *
          Stack: ..., value -> ..., result
          - * - * @version $Id: F2I.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class F2I extends ConversionInstruction { - - /** Convert float to int - */ - public F2I() { - super(org.apache.bcel5_2_0.Constants.F2I); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitF2I(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * F2I - Convert float to int + *
          Stack: ..., value -> ..., result
          + * + * @version $Id: F2I.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class F2I extends ConversionInstruction { + + /** Convert float to int + */ + public F2I() { + super(org.apache.bcel5_2_0.Constants.F2I); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitF2I(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/F2L.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/F2L.java index baa1ed67..816c4a25 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/F2L.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/F2L.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * F2L - Convert float to long - *
          Stack: ..., value -> ..., result.word1, result.word2
          - * - * @version $Id: F2L.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class F2L extends ConversionInstruction { - - /** Convert float to long - */ - public F2L() { - super(org.apache.bcel5_2_0.Constants.F2L); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitF2L(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * F2L - Convert float to long + *
          Stack: ..., value -> ..., result.word1, result.word2
          + * + * @version $Id: F2L.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class F2L extends ConversionInstruction { + + /** Convert float to long + */ + public F2L() { + super(org.apache.bcel5_2_0.Constants.F2L); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitF2L(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FADD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FADD.java index 394dc524..e9336f0c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FADD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FADD.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * FADD - Add floats - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: FADD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FADD extends ArithmeticInstruction { - - /** Add floats - */ - public FADD() { - super(org.apache.bcel5_2_0.Constants.FADD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFADD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * FADD - Add floats + *
          Stack: ..., value1, value2 -> result
          + * + * @version $Id: FADD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class FADD extends ArithmeticInstruction { + + /** Add floats + */ + public FADD() { + super(org.apache.bcel5_2_0.Constants.FADD); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitFADD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FALOAD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FALOAD.java index 42e77efa..d58a047b 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FALOAD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FALOAD.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * FALOAD - Load float from array - *
          Stack: ..., arrayref, index -> ..., value
          - * - * @version $Id: FALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FALOAD extends ArrayInstruction implements StackProducer { - - /** Load float from array - */ - public FALOAD() { - super(org.apache.bcel5_2_0.Constants.FALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitFALOAD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * FALOAD - Load float from array + *
          Stack: ..., arrayref, index -> ..., value
          + * + * @version $Id: FALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class FALOAD extends ArrayInstruction implements StackProducer { + + /** Load float from array + */ + public FALOAD() { + super(org.apache.bcel5_2_0.Constants.FALOAD); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitFALOAD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FASTORE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FASTORE.java index f0c3b544..656a36d4 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FASTORE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FASTORE.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * FASTORE - Store into float array - *
          Stack: ..., arrayref, index, value -> ...
          - * - * @version $Id: FASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FASTORE extends ArrayInstruction implements StackConsumer { - - /** Store float into array - */ - public FASTORE() { - super(org.apache.bcel5_2_0.Constants.FASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitFASTORE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * FASTORE - Store into float array + *
          Stack: ..., arrayref, index, value -> ...
          + * + * @version $Id: FASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class FASTORE extends ArrayInstruction implements StackConsumer { + + /** Store float into array + */ + public FASTORE() { + super(org.apache.bcel5_2_0.Constants.FASTORE); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitFASTORE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FCMPG.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FCMPG.java index ee4c4d03..ef4dedc1 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FCMPG.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FCMPG.java @@ -1,54 +1,54 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * FCMPG - Compare floats: value1 > value2 - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: FCMPG.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FCMPG extends Instruction implements TypedInstruction, StackProducer, StackConsumer { - - public FCMPG() { - super(org.apache.bcel5_2_0.Constants.FCMPG, (short) 1); - } - - - /** @return Type.FLOAT - */ - public Type getType( ConstantPoolGen cp ) { - return Type.FLOAT; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitFCMPG(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * FCMPG - Compare floats: value1 > value2 + *
          Stack: ..., value1, value2 -> ..., result
          + * + * @version $Id: FCMPG.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class FCMPG extends Instruction implements TypedInstruction, StackProducer, StackConsumer { + + public FCMPG() { + super(org.apache.bcel5_2_0.Constants.FCMPG, (short) 1); + } + + + /** @return Type.FLOAT + */ + public Type getType( ConstantPoolGen cp ) { + return Type.FLOAT; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitFCMPG(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FCMPL.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FCMPL.java index 35d93891..c8b7c179 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FCMPL.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FCMPL.java @@ -1,54 +1,54 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * FCMPL - Compare floats: value1 < value2 - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: FCMPL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FCMPL extends Instruction implements TypedInstruction, StackProducer, StackConsumer { - - public FCMPL() { - super(org.apache.bcel5_2_0.Constants.FCMPL, (short) 1); - } - - - /** @return Type.FLOAT - */ - public Type getType( ConstantPoolGen cp ) { - return Type.FLOAT; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitFCMPL(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * FCMPL - Compare floats: value1 < value2 + *
          Stack: ..., value1, value2 -> ..., result
          + * + * @version $Id: FCMPL.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class FCMPL extends Instruction implements TypedInstruction, StackProducer, StackConsumer { + + public FCMPL() { + super(org.apache.bcel5_2_0.Constants.FCMPL, (short) 1); + } + + + /** @return Type.FLOAT + */ + public Type getType( ConstantPoolGen cp ) { + return Type.FLOAT; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitFCMPL(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FCONST.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FCONST.java index e339dcec..d1025e2c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FCONST.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FCONST.java @@ -1,82 +1,82 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * FCONST - Push 0.0, 1.0 or 2.0, other values cause an exception - * - *
          Stack: ... -> ..., 
          - * - * @version $Id: FCONST.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FCONST extends Instruction implements ConstantPushInstruction, TypedInstruction { - - private float value; - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FCONST() { - } - - - public FCONST(float f) { - super(org.apache.bcel5_2_0.Constants.FCONST_0, (short) 1); - if (f == 0.0) { - opcode = org.apache.bcel5_2_0.Constants.FCONST_0; - } else if (f == 1.0) { - opcode = org.apache.bcel5_2_0.Constants.FCONST_1; - } else if (f == 2.0) { - opcode = org.apache.bcel5_2_0.Constants.FCONST_2; - } else { - throw new ClassGenException("FCONST can be used only for 0.0, 1.0 and 2.0: " + f); - } - value = f; - } - - - public Number getValue() { - return new Float(value); - } - - - /** @return Type.FLOAT - */ - public Type getType( ConstantPoolGen cp ) { - return Type.FLOAT; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitFCONST(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * FCONST - Push 0.0, 1.0 or 2.0, other values cause an exception + * + *
          Stack: ... -> ..., 
          + * + * @version $Id: FCONST.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class FCONST extends Instruction implements ConstantPushInstruction, TypedInstruction { + + private float value; + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + FCONST() { + } + + + public FCONST(float f) { + super(org.apache.bcel5_2_0.Constants.FCONST_0, (short) 1); + if (f == 0.0) { + opcode = org.apache.bcel5_2_0.Constants.FCONST_0; + } else if (f == 1.0) { + opcode = org.apache.bcel5_2_0.Constants.FCONST_1; + } else if (f == 2.0) { + opcode = org.apache.bcel5_2_0.Constants.FCONST_2; + } else { + throw new ClassGenException("FCONST can be used only for 0.0, 1.0 and 2.0: " + f); + } + value = f; + } + + + public Number getValue() { + return new Float(value); + } + + + /** @return Type.FLOAT + */ + public Type getType( ConstantPoolGen cp ) { + return Type.FLOAT; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitPushInstruction(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitConstantPushInstruction(this); + v.visitFCONST(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FDIV.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FDIV.java index d28ef766..b47744e2 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FDIV.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FDIV.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * FDIV - Divide floats - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: FDIV.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FDIV extends ArithmeticInstruction { - - /** Divide floats - */ - public FDIV() { - super(org.apache.bcel5_2_0.Constants.FDIV); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFDIV(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * FDIV - Divide floats + *
          Stack: ..., value1, value2 -> result
          + * + * @version $Id: FDIV.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class FDIV extends ArithmeticInstruction { + + /** Divide floats + */ + public FDIV() { + super(org.apache.bcel5_2_0.Constants.FDIV); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitFDIV(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FLOAD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FLOAD.java index 75099cc0..e532f510 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FLOAD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FLOAD.java @@ -1,57 +1,57 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * FLOAD - Load float from local variable - *
          Stack ... -> ..., result
          - * - * @version $Id: FLOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FLOAD extends LoadInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FLOAD() { - super(org.apache.bcel5_2_0.Constants.FLOAD, org.apache.bcel5_2_0.Constants.FLOAD_0); - } - - - /** Load float from local variable - * @param n index of local variable - */ - public FLOAD(int n) { - super(org.apache.bcel5_2_0.Constants.FLOAD, org.apache.bcel5_2_0.Constants.FLOAD_0, n); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - super.accept(v); - v.visitFLOAD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * FLOAD - Load float from local variable + *
          Stack ... -> ..., result
          + * + * @version $Id: FLOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class FLOAD extends LoadInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + FLOAD() { + super(org.apache.bcel5_2_0.Constants.FLOAD, org.apache.bcel5_2_0.Constants.FLOAD_0); + } + + + /** Load float from local variable + * @param n index of local variable + */ + public FLOAD(int n) { + super(org.apache.bcel5_2_0.Constants.FLOAD, org.apache.bcel5_2_0.Constants.FLOAD_0, n); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + super.accept(v); + v.visitFLOAD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FMUL.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FMUL.java index 5c8d382c..be524051 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FMUL.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FMUL.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * FMUL - Multiply floats - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: FMUL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FMUL extends ArithmeticInstruction { - - /** Multiply floats - */ - public FMUL() { - super(org.apache.bcel5_2_0.Constants.FMUL); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFMUL(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * FMUL - Multiply floats + *
          Stack: ..., value1, value2 -> result
          + * + * @version $Id: FMUL.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class FMUL extends ArithmeticInstruction { + + /** Multiply floats + */ + public FMUL() { + super(org.apache.bcel5_2_0.Constants.FMUL); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitFMUL(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FNEG.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FNEG.java index d7f8e012..8185d746 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FNEG.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FNEG.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * FNEG - Negate float - *
          Stack: ..., value -> ..., result
          - * - * @version $Id: FNEG.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FNEG extends ArithmeticInstruction { - - public FNEG() { - super(org.apache.bcel5_2_0.Constants.FNEG); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFNEG(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * FNEG - Negate float + *
          Stack: ..., value -> ..., result
          + * + * @version $Id: FNEG.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class FNEG extends ArithmeticInstruction { + + public FNEG() { + super(org.apache.bcel5_2_0.Constants.FNEG); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitFNEG(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FREM.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FREM.java index 35f57da3..25b60cfe 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FREM.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FREM.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * FREM - Remainder of floats - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: FREM.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FREM extends ArithmeticInstruction { - - /** Remainder of floats - */ - public FREM() { - super(org.apache.bcel5_2_0.Constants.FREM); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFREM(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * FREM - Remainder of floats + *
          Stack: ..., value1, value2 -> result
          + * + * @version $Id: FREM.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class FREM extends ArithmeticInstruction { + + /** Remainder of floats + */ + public FREM() { + super(org.apache.bcel5_2_0.Constants.FREM); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitFREM(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FRETURN.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FRETURN.java index e487c498..56476abb 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FRETURN.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FRETURN.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * FRETURN - Return float from method - *
          Stack: ..., value -> <empty>
          - * - * @version $Id: FRETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FRETURN extends ReturnInstruction { - - /** Return float from method - */ - public FRETURN() { - super(org.apache.bcel5_2_0.Constants.FRETURN); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitFRETURN(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * FRETURN - Return float from method + *
          Stack: ..., value -> <empty>
          + * + * @version $Id: FRETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class FRETURN extends ReturnInstruction { + + /** Return float from method + */ + public FRETURN() { + super(org.apache.bcel5_2_0.Constants.FRETURN); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackConsumer(this); + v.visitReturnInstruction(this); + v.visitFRETURN(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FSTORE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FSTORE.java index e34af929..8118e1bf 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FSTORE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FSTORE.java @@ -1,57 +1,57 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * FSTORE - Store float into local variable - *
          Stack: ..., value -> ... 
          - * - * @version $Id: FSTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FSTORE extends StoreInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FSTORE() { - super(org.apache.bcel5_2_0.Constants.FSTORE, org.apache.bcel5_2_0.Constants.FSTORE_0); - } - - - /** Store float into local variable - * @param n index of local variable - */ - public FSTORE(int n) { - super(org.apache.bcel5_2_0.Constants.FSTORE, org.apache.bcel5_2_0.Constants.FSTORE_0, n); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - super.accept(v); - v.visitFSTORE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * FSTORE - Store float into local variable + *
          Stack: ..., value -> ... 
          + * + * @version $Id: FSTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class FSTORE extends StoreInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + FSTORE() { + super(org.apache.bcel5_2_0.Constants.FSTORE, org.apache.bcel5_2_0.Constants.FSTORE_0); + } + + + /** Store float into local variable + * @param n index of local variable + */ + public FSTORE(int n) { + super(org.apache.bcel5_2_0.Constants.FSTORE, org.apache.bcel5_2_0.Constants.FSTORE_0, n); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + super.accept(v); + v.visitFSTORE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FSUB.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FSUB.java index 431f9064..21f46224 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FSUB.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FSUB.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * FSUB - Substract floats - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: FSUB.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FSUB extends ArithmeticInstruction { - - /** Substract floats - */ - public FSUB() { - super(org.apache.bcel5_2_0.Constants.FSUB); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFSUB(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * FSUB - Substract floats + *
          Stack: ..., value1, value2 -> result
          + * + * @version $Id: FSUB.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class FSUB extends ArithmeticInstruction { + + /** Substract floats + */ + public FSUB() { + super(org.apache.bcel5_2_0.Constants.FSUB); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitFSUB(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldGen.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldGen.java index 88718658..a991f61d 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldGen.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldGen.java @@ -1,358 +1,358 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.classfile.Attribute; -import org.apache.bcel5_2_0.classfile.Constant; -import org.apache.bcel5_2_0.classfile.ConstantObject; -import org.apache.bcel5_2_0.classfile.ConstantPool; -import org.apache.bcel5_2_0.classfile.ConstantValue; -import org.apache.bcel5_2_0.classfile.Field; -import org.apache.bcel5_2_0.classfile.Utility; -import org.apache.bcel5_2_0.util.BCELComparator; - -/** - * Template class for building up a field. The only extraordinary thing - * one can do is to add a constant value attribute to a field (which must of - * course be compatible with to the declared type). - * - * @version $Id: FieldGen.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Field - */ -public class FieldGen extends FieldGenOrMethodGen { - - private Object value = null; - private static BCELComparator _cmp = new BCELComparator() { - - public boolean equals( Object o1, Object o2 ) { - FieldGen THIS = (FieldGen) o1; - FieldGen THAT = (FieldGen) o2; - return THIS.getName().equals(THAT.getName()) - && THIS.getSignature().equals(THAT.getSignature()); - } - - - public int hashCode( Object o ) { - FieldGen THIS = (FieldGen) o; - return THIS.getSignature().hashCode() ^ THIS.getName().hashCode(); - } - }; - - - /** - * Declare a field. If it is static (isStatic() == true) and has a - * basic type like int or String it may have an initial value - * associated with it as defined by setInitValue(). - * - * @param access_flags access qualifiers - * @param type field type - * @param name field name - * @param cp constant pool - */ - public FieldGen(int access_flags, Type type, String name, ConstantPoolGen cp) { - setAccessFlags(access_flags); - setType(type); - setName(name); - setConstantPool(cp); - } - - - /** - * Instantiate from existing field. - * - * @param field Field object - * @param cp constant pool (must contain the same entries as the field's constant pool) - */ - public FieldGen(Field field, ConstantPoolGen cp) { - this(field.getAccessFlags(), Type.getType(field.getSignature()), field.getName(), cp); - Attribute[] attrs = field.getAttributes(); - for (int i = 0; i < attrs.length; i++) { - if (attrs[i] instanceof ConstantValue) { - setValue(((ConstantValue) attrs[i]).getConstantValueIndex()); - } else { - addAttribute(attrs[i]); - } - } - } - - - private void setValue( int index ) { - ConstantPool cp = this.cp.getConstantPool(); - Constant c = cp.getConstant(index); - value = ((ConstantObject) c).getConstantValue(cp); - } - - - /** - * Set (optional) initial value of field, otherwise it will be set to null/0/false - * by the JVM automatically. - */ - public void setInitValue( String str ) { - checkType(new ObjectType("java.lang.String")); - if (str != null) { - value = str; - } - } - - - public void setInitValue( long l ) { - checkType(Type.LONG); - if (l != 0L) { - value = new Long(l); - } - } - - - public void setInitValue( int i ) { - checkType(Type.INT); - if (i != 0) { - value = new Integer(i); - } - } - - - public void setInitValue( short s ) { - checkType(Type.SHORT); - if (s != 0) { - value = new Integer(s); - } - } - - - public void setInitValue( char c ) { - checkType(Type.CHAR); - if (c != 0) { - value = new Integer(c); - } - } - - - public void setInitValue( byte b ) { - checkType(Type.BYTE); - if (b != 0) { - value = new Integer(b); - } - } - - - public void setInitValue( boolean b ) { - checkType(Type.BOOLEAN); - if (b) { - value = new Integer(1); - } - } - - - public void setInitValue( float f ) { - checkType(Type.FLOAT); - if (f != 0.0) { - value = new Float(f); - } - } - - - public void setInitValue( double d ) { - checkType(Type.DOUBLE); - if (d != 0.0) { - value = new Double(d); - } - } - - - /** Remove any initial value. - */ - public void cancelInitValue() { - value = null; - } - - - private void checkType( Type atype ) { - if (type == null) { - throw new ClassGenException("You haven't defined the type of the field yet"); - } - if (!isFinal()) { - throw new ClassGenException("Only final fields may have an initial value!"); - } - if (!type.equals(atype)) { - throw new ClassGenException("Types are not compatible: " + type + " vs. " + atype); - } - } - - - /** - * Get field object after having set up all necessary values. - */ - public Field getField() { - String signature = getSignature(); - int name_index = cp.addUtf8(name); - int signature_index = cp.addUtf8(signature); - if (value != null) { - checkType(type); - int index = addConstant(); - addAttribute(new ConstantValue(cp.addUtf8("ConstantValue"), 2, index, cp - .getConstantPool())); - } - return new Field(access_flags, name_index, signature_index, getAttributes(), cp - .getConstantPool()); - } - - - private int addConstant() { - switch (type.getType()) { - case Constants.T_INT: - case Constants.T_CHAR: - case Constants.T_BYTE: - case Constants.T_BOOLEAN: - case Constants.T_SHORT: - return cp.addInteger(((Integer) value).intValue()); - case Constants.T_FLOAT: - return cp.addFloat(((Float) value).floatValue()); - case Constants.T_DOUBLE: - return cp.addDouble(((Double) value).doubleValue()); - case Constants.T_LONG: - return cp.addLong(((Long) value).longValue()); - case Constants.T_REFERENCE: - return cp.addString(((String) value)); - default: - throw new RuntimeException("Oops: Unhandled : " + type.getType()); - } - } - - - public String getSignature() { - return type.getSignature(); - } - - private List observers; - - - /** Add observer for this object. - */ - public void addObserver( FieldObserver o ) { - if (observers == null) { - observers = new ArrayList(); - } - observers.add(o); - } - - - /** Remove observer for this object. - */ - public void removeObserver( FieldObserver o ) { - if (observers != null) { - observers.remove(o); - } - } - - - /** Call notify() method on all observers. This method is not called - * automatically whenever the state has changed, but has to be - * called by the user after he has finished editing the object. - */ - public void update() { - if (observers != null) { - for (Iterator e = observers.iterator(); e.hasNext();) { - ((FieldObserver) e.next()).notify(this); - } - } - } - - - public String getInitValue() { - if (value != null) { - return value.toString(); - } else { - return null; - } - } - - - /** - * Return string representation close to declaration format, - * `public static final short MAX = 100', e.g.. - * - * @return String representation of field - */ - public final String toString() { - String name, signature, access; // Short cuts to constant pool - access = Utility.accessToString(access_flags); - access = access.equals("") ? "" : (access + " "); - signature = type.toString(); - name = getName(); - StringBuilder buf = new StringBuilder(32); - buf.append(access).append(signature).append(" ").append(name); - String value = getInitValue(); - if (value != null) { - buf.append(" = ").append(value); - } - return buf.toString(); - } - - - /** @return deep copy of this field - */ - public FieldGen copy( ConstantPoolGen cp ) { - FieldGen fg = (FieldGen) clone(); - fg.setConstantPool(cp); - return fg; - } - - - /** - * @return Comparison strategy object - */ - public static BCELComparator getComparator() { - return _cmp; - } - - - /** - * @param comparator Comparison strategy object - */ - public static void setComparator( BCELComparator comparator ) { - _cmp = comparator; - } - - - /** - * Return value as defined by given BCELComparator strategy. - * By default two FieldGen objects are said to be equal when - * their names and signatures are equal. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals( Object obj ) { - return _cmp.equals(this, obj); - } - - - /** - * Return value as defined by given BCELComparator strategy. - * By default return the hashcode of the field's name XOR signature. - * - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return _cmp.hashCode(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.classfile.Attribute; +import org.apache.bcel5_2_0.classfile.Constant; +import org.apache.bcel5_2_0.classfile.ConstantObject; +import org.apache.bcel5_2_0.classfile.ConstantPool; +import org.apache.bcel5_2_0.classfile.ConstantValue; +import org.apache.bcel5_2_0.classfile.Field; +import org.apache.bcel5_2_0.classfile.Utility; +import org.apache.bcel5_2_0.util.BCELComparator; + +/** + * Template class for building up a field. The only extraordinary thing + * one can do is to add a constant value attribute to a field (which must of + * course be compatible with to the declared type). + * + * @version $Id: FieldGen.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Field + */ +public class FieldGen extends FieldGenOrMethodGen { + + private Object value = null; + private static BCELComparator _cmp = new BCELComparator() { + + public boolean equals( Object o1, Object o2 ) { + FieldGen THIS = (FieldGen) o1; + FieldGen THAT = (FieldGen) o2; + return THIS.getName().equals(THAT.getName()) + && THIS.getSignature().equals(THAT.getSignature()); + } + + + public int hashCode( Object o ) { + FieldGen THIS = (FieldGen) o; + return THIS.getSignature().hashCode() ^ THIS.getName().hashCode(); + } + }; + + + /** + * Declare a field. If it is static (isStatic() == true) and has a + * basic type like int or String it may have an initial value + * associated with it as defined by setInitValue(). + * + * @param access_flags access qualifiers + * @param type field type + * @param name field name + * @param cp constant pool + */ + public FieldGen(int access_flags, Type type, String name, ConstantPoolGen cp) { + setAccessFlags(access_flags); + setType(type); + setName(name); + setConstantPool(cp); + } + + + /** + * Instantiate from existing field. + * + * @param field Field object + * @param cp constant pool (must contain the same entries as the field's constant pool) + */ + public FieldGen(Field field, ConstantPoolGen cp) { + this(field.getAccessFlags(), Type.getType(field.getSignature()), field.getName(), cp); + Attribute[] attrs = field.getAttributes(); + for (int i = 0; i < attrs.length; i++) { + if (attrs[i] instanceof ConstantValue) { + setValue(((ConstantValue) attrs[i]).getConstantValueIndex()); + } else { + addAttribute(attrs[i]); + } + } + } + + + private void setValue( int index ) { + ConstantPool cp = this.cp.getConstantPool(); + Constant c = cp.getConstant(index); + value = ((ConstantObject) c).getConstantValue(cp); + } + + + /** + * Set (optional) initial value of field, otherwise it will be set to null/0/false + * by the JVM automatically. + */ + public void setInitValue( String str ) { + checkType(new ObjectType("java.lang.String")); + if (str != null) { + value = str; + } + } + + + public void setInitValue( long l ) { + checkType(Type.LONG); + if (l != 0L) { + value = new Long(l); + } + } + + + public void setInitValue( int i ) { + checkType(Type.INT); + if (i != 0) { + value = new Integer(i); + } + } + + + public void setInitValue( short s ) { + checkType(Type.SHORT); + if (s != 0) { + value = new Integer(s); + } + } + + + public void setInitValue( char c ) { + checkType(Type.CHAR); + if (c != 0) { + value = new Integer(c); + } + } + + + public void setInitValue( byte b ) { + checkType(Type.BYTE); + if (b != 0) { + value = new Integer(b); + } + } + + + public void setInitValue( boolean b ) { + checkType(Type.BOOLEAN); + if (b) { + value = new Integer(1); + } + } + + + public void setInitValue( float f ) { + checkType(Type.FLOAT); + if (f != 0.0) { + value = new Float(f); + } + } + + + public void setInitValue( double d ) { + checkType(Type.DOUBLE); + if (d != 0.0) { + value = new Double(d); + } + } + + + /** Remove any initial value. + */ + public void cancelInitValue() { + value = null; + } + + + private void checkType( Type atype ) { + if (type == null) { + throw new ClassGenException("You haven't defined the type of the field yet"); + } + if (!isFinal()) { + throw new ClassGenException("Only final fields may have an initial value!"); + } + if (!type.equals(atype)) { + throw new ClassGenException("Types are not compatible: " + type + " vs. " + atype); + } + } + + + /** + * Get field object after having set up all necessary values. + */ + public Field getField() { + String signature = getSignature(); + int name_index = cp.addUtf8(name); + int signature_index = cp.addUtf8(signature); + if (value != null) { + checkType(type); + int index = addConstant(); + addAttribute(new ConstantValue(cp.addUtf8("ConstantValue"), 2, index, cp + .getConstantPool())); + } + return new Field(access_flags, name_index, signature_index, getAttributes(), cp + .getConstantPool()); + } + + + private int addConstant() { + switch (type.getType()) { + case Constants.T_INT: + case Constants.T_CHAR: + case Constants.T_BYTE: + case Constants.T_BOOLEAN: + case Constants.T_SHORT: + return cp.addInteger(((Integer) value).intValue()); + case Constants.T_FLOAT: + return cp.addFloat(((Float) value).floatValue()); + case Constants.T_DOUBLE: + return cp.addDouble(((Double) value).doubleValue()); + case Constants.T_LONG: + return cp.addLong(((Long) value).longValue()); + case Constants.T_REFERENCE: + return cp.addString(((String) value)); + default: + throw new RuntimeException("Oops: Unhandled : " + type.getType()); + } + } + + + public String getSignature() { + return type.getSignature(); + } + + private List observers; + + + /** Add observer for this object. + */ + public void addObserver( FieldObserver o ) { + if (observers == null) { + observers = new ArrayList(); + } + observers.add(o); + } + + + /** Remove observer for this object. + */ + public void removeObserver( FieldObserver o ) { + if (observers != null) { + observers.remove(o); + } + } + + + /** Call notify() method on all observers. This method is not called + * automatically whenever the state has changed, but has to be + * called by the user after he has finished editing the object. + */ + public void update() { + if (observers != null) { + for (Iterator e = observers.iterator(); e.hasNext();) { + ((FieldObserver) e.next()).notify(this); + } + } + } + + + public String getInitValue() { + if (value != null) { + return value.toString(); + } else { + return null; + } + } + + + /** + * Return string representation close to declaration format, + * `public static final short MAX = 100', e.g.. + * + * @return String representation of field + */ + public final String toString() { + String name, signature, access; // Short cuts to constant pool + access = Utility.accessToString(access_flags); + access = access.equals("") ? "" : (access + " "); + signature = type.toString(); + name = getName(); + StringBuilder buf = new StringBuilder(32); + buf.append(access).append(signature).append(" ").append(name); + String value = getInitValue(); + if (value != null) { + buf.append(" = ").append(value); + } + return buf.toString(); + } + + + /** @return deep copy of this field + */ + public FieldGen copy( ConstantPoolGen cp ) { + FieldGen fg = (FieldGen) clone(); + fg.setConstantPool(cp); + return fg; + } + + + /** + * @return Comparison strategy object + */ + public static BCELComparator getComparator() { + return _cmp; + } + + + /** + * @param comparator Comparison strategy object + */ + public static void setComparator( BCELComparator comparator ) { + _cmp = comparator; + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default two FieldGen objects are said to be equal when + * their names and signatures are equal. + * + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals( Object obj ) { + return _cmp.equals(this, obj); + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default return the hashcode of the field's name XOR signature. + * + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + return _cmp.hashCode(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldGenOrMethodGen.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldGenOrMethodGen.java index 3fa734ee..43a58bc9 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldGenOrMethodGen.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldGenOrMethodGen.java @@ -1,132 +1,132 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.classfile.AccessFlags; -import org.apache.bcel5_2_0.classfile.Attribute; - -/** - * Super class for FieldGen and MethodGen objects, since they have - * some methods in common! - * - * @version $Id: FieldGenOrMethodGen.java 410087 2006-05-29 12:12:19Z tcurdt $ - * @author M. Dahm - */ -public abstract class FieldGenOrMethodGen extends AccessFlags implements NamedAndTyped, Cloneable { - - protected String name; - protected Type type; - protected ConstantPoolGen cp; - private List attribute_vec = new ArrayList(); - - - protected FieldGenOrMethodGen() { - } - - - public void setType( Type type ) { - if (type.getType() == Constants.T_ADDRESS) { - throw new IllegalArgumentException("Type can not be " + type); - } - this.type = type; - } - - - public Type getType() { - return type; - } - - - /** @return name of method/field. - */ - public String getName() { - return name; - } - - - public void setName( String name ) { - this.name = name; - } - - - public ConstantPoolGen getConstantPool() { - return cp; - } - - - public void setConstantPool( ConstantPoolGen cp ) { - this.cp = cp; - } - - - /** - * Add an attribute to this method. Currently, the JVM knows about - * the `Code', `ConstantValue', `Synthetic' and `Exceptions' - * attributes. Other attributes will be ignored by the JVM but do no - * harm. - * - * @param a attribute to be added - */ - public void addAttribute( Attribute a ) { - attribute_vec.add(a); - } - - - /** - * Remove an attribute. - */ - public void removeAttribute( Attribute a ) { - attribute_vec.remove(a); - } - - - /** - * Remove all attributes. - */ - public void removeAttributes() { - attribute_vec.clear(); - } - - - /** - * @return all attributes of this method. - */ - public Attribute[] getAttributes() { - Attribute[] attributes = new Attribute[attribute_vec.size()]; - attribute_vec.toArray(attributes); - return attributes; - } - - - /** @return signature of method/field. - */ - public abstract String getSignature(); - - - public Object clone() { - try { - return super.clone(); - } catch (CloneNotSupportedException e) { - System.err.println(e); - return null; - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.classfile.AccessFlags; +import org.apache.bcel5_2_0.classfile.Attribute; + +/** + * Super class for FieldGen and MethodGen objects, since they have + * some methods in common! + * + * @version $Id: FieldGenOrMethodGen.java 410087 2006-05-29 12:12:19Z tcurdt $ + * @author M. Dahm + */ +public abstract class FieldGenOrMethodGen extends AccessFlags implements NamedAndTyped, Cloneable { + + protected String name; + protected Type type; + protected ConstantPoolGen cp; + private List attribute_vec = new ArrayList(); + + + protected FieldGenOrMethodGen() { + } + + + public void setType( Type type ) { + if (type.getType() == Constants.T_ADDRESS) { + throw new IllegalArgumentException("Type can not be " + type); + } + this.type = type; + } + + + public Type getType() { + return type; + } + + + /** @return name of method/field. + */ + public String getName() { + return name; + } + + + public void setName( String name ) { + this.name = name; + } + + + public ConstantPoolGen getConstantPool() { + return cp; + } + + + public void setConstantPool( ConstantPoolGen cp ) { + this.cp = cp; + } + + + /** + * Add an attribute to this method. Currently, the JVM knows about + * the `Code', `ConstantValue', `Synthetic' and `Exceptions' + * attributes. Other attributes will be ignored by the JVM but do no + * harm. + * + * @param a attribute to be added + */ + public void addAttribute( Attribute a ) { + attribute_vec.add(a); + } + + + /** + * Remove an attribute. + */ + public void removeAttribute( Attribute a ) { + attribute_vec.remove(a); + } + + + /** + * Remove all attributes. + */ + public void removeAttributes() { + attribute_vec.clear(); + } + + + /** + * @return all attributes of this method. + */ + public Attribute[] getAttributes() { + Attribute[] attributes = new Attribute[attribute_vec.size()]; + attribute_vec.toArray(attributes); + return attributes; + } + + + /** @return signature of method/field. + */ + public abstract String getSignature(); + + + public Object clone() { + try { + return super.clone(); + } catch (CloneNotSupportedException e) { + System.err.println(e); + return null; + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldInstruction.java index d76b99b0..2b41bcf3 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldInstruction.java @@ -1,80 +1,80 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.classfile.ConstantPool; - -/** - * Super class for the GET/PUTxxx family of instructions. - * - * @version $Id: FieldInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class FieldInstruction extends FieldOrMethod implements TypedInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FieldInstruction() { - } - - - /** - * @param index to constant pool - */ - protected FieldInstruction(short opcode, int index) { - super(opcode, index); - } - - - /** - * @return mnemonic for instruction with symbolic references resolved - */ - public String toString( ConstantPool cp ) { - return org.apache.bcel5_2_0.Constants.OPCODE_NAMES[opcode] + " " - + cp.constantToString(index, org.apache.bcel5_2_0.Constants.CONSTANT_Fieldref); - } - - - /** @return size of field (1 or 2) - */ - protected int getFieldSize( ConstantPoolGen cpg ) { - return getType(cpg).getSize(); - } - - - /** @return return type of referenced field - */ - public Type getType( ConstantPoolGen cpg ) { - return getFieldType(cpg); - } - - - /** @return type of field - */ - public Type getFieldType( ConstantPoolGen cpg ) { - return Type.getType(getSignature(cpg)); - } - - - /** @return name of referenced field. - */ - public String getFieldName( ConstantPoolGen cpg ) { - return getName(cpg); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.classfile.ConstantPool; + +/** + * Super class for the GET/PUTxxx family of instructions. + * + * @version $Id: FieldInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class FieldInstruction extends FieldOrMethod implements TypedInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + FieldInstruction() { + } + + + /** + * @param index to constant pool + */ + protected FieldInstruction(short opcode, int index) { + super(opcode, index); + } + + + /** + * @return mnemonic for instruction with symbolic references resolved + */ + public String toString( ConstantPool cp ) { + return org.apache.bcel5_2_0.Constants.OPCODE_NAMES[opcode] + " " + + cp.constantToString(index, org.apache.bcel5_2_0.Constants.CONSTANT_Fieldref); + } + + + /** @return size of field (1 or 2) + */ + protected int getFieldSize( ConstantPoolGen cpg ) { + return getType(cpg).getSize(); + } + + + /** @return return type of referenced field + */ + public Type getType( ConstantPoolGen cpg ) { + return getFieldType(cpg); + } + + + /** @return type of field + */ + public Type getFieldType( ConstantPoolGen cpg ) { + return Type.getType(getSignature(cpg)); + } + + + /** @return name of referenced field. + */ + public String getFieldName( ConstantPoolGen cpg ) { + return getName(cpg); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldObserver.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldObserver.java index 1200110c..336e59cd 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldObserver.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldObserver.java @@ -1,29 +1,29 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Imnplement this interface if you're interested in changes to a FieldGen object - * and register yourself with addObserver(). - * - * @version $Id: FieldObserver.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface FieldObserver { - - public void notify( FieldGen field ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Imnplement this interface if you're interested in changes to a FieldGen object + * and register yourself with addObserver(). + * + * @version $Id: FieldObserver.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface FieldObserver { + + public void notify( FieldGen field ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldOrMethod.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldOrMethod.java index 5ae63226..63d9c59a 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldOrMethod.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/FieldOrMethod.java @@ -1,128 +1,128 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.classfile.ConstantCP; -import org.apache.bcel5_2_0.classfile.ConstantNameAndType; -import org.apache.bcel5_2_0.classfile.ConstantPool; -import org.apache.bcel5_2_0.classfile.ConstantUtf8; - -/** - * Super class for InvokeInstruction and FieldInstruction, since they have - * some methods in common! - * - * @version $Id: FieldOrMethod.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class FieldOrMethod extends CPInstruction implements LoadClass { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FieldOrMethod() { - } - - - /** - * @param index to constant pool - */ - protected FieldOrMethod(short opcode, int index) { - super(opcode, index); - } - - - /** @return signature of referenced method/field. - */ - public String getSignature( ConstantPoolGen cpg ) { - ConstantPool cp = cpg.getConstantPool(); - ConstantCP cmr = (ConstantCP) cp.getConstant(index); - ConstantNameAndType cnat = (ConstantNameAndType) cp.getConstant(cmr.getNameAndTypeIndex()); - return ((ConstantUtf8) cp.getConstant(cnat.getSignatureIndex())).getBytes(); - } - - - /** @return name of referenced method/field. - */ - public String getName( ConstantPoolGen cpg ) { - ConstantPool cp = cpg.getConstantPool(); - ConstantCP cmr = (ConstantCP) cp.getConstant(index); - ConstantNameAndType cnat = (ConstantNameAndType) cp.getConstant(cmr.getNameAndTypeIndex()); - return ((ConstantUtf8) cp.getConstant(cnat.getNameIndex())).getBytes(); - } - - - /** @return name of the referenced class/interface - * @deprecated If the instruction references an array class, - * this method will return "java.lang.Object". - * For code generated by Java 1.5, this answer is - * sometimes wrong (e.g., if the "clone()" method is - * called on an array). A better idea is to use - * the getReferenceType() method, which correctly distinguishes - * between class types and array types. - */ - public String getClassName( ConstantPoolGen cpg ) { - ConstantPool cp = cpg.getConstantPool(); - ConstantCP cmr = (ConstantCP) cp.getConstant(index); - String className = cp.getConstantString(cmr.getClassIndex(), - org.apache.bcel5_2_0.Constants.CONSTANT_Class); - if (className.startsWith("[")) { - // Turn array classes into java.lang.Object. - return "java.lang.Object"; - } - return className.replace('/', '.'); - } - - - /** @return type of the referenced class/interface - * @deprecated If the instruction references an array class, - * the ObjectType returned will be invalid. Use - * getReferenceType() instead. - */ - public ObjectType getClassType( ConstantPoolGen cpg ) { - return new ObjectType(getClassName(cpg)); - } - - - /** - * Return the reference type representing the class, interface, - * or array class referenced by the instruction. - * @param cpg the ConstantPoolGen used to create the instruction - * @return an ObjectType (if the referenced class type is a class - * or interface), or an ArrayType (if the referenced class - * type is an array class) - */ - public ReferenceType getReferenceType( ConstantPoolGen cpg ) { - ConstantPool cp = cpg.getConstantPool(); - ConstantCP cmr = (ConstantCP) cp.getConstant(index); - String className = cp.getConstantString(cmr.getClassIndex(), - org.apache.bcel5_2_0.Constants.CONSTANT_Class); - if (className.startsWith("[")) { - return (ArrayType) Type.getType(className); - } else { - className = className.replace('/', '.'); - return new ObjectType(className); - } - } - - - /** @return type of the referenced class/interface - */ - public ObjectType getLoadClassType( ConstantPoolGen cpg ) { - return getClassType(cpg); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.classfile.ConstantCP; +import org.apache.bcel5_2_0.classfile.ConstantNameAndType; +import org.apache.bcel5_2_0.classfile.ConstantPool; +import org.apache.bcel5_2_0.classfile.ConstantUtf8; + +/** + * Super class for InvokeInstruction and FieldInstruction, since they have + * some methods in common! + * + * @version $Id: FieldOrMethod.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class FieldOrMethod extends CPInstruction implements LoadClass { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + FieldOrMethod() { + } + + + /** + * @param index to constant pool + */ + protected FieldOrMethod(short opcode, int index) { + super(opcode, index); + } + + + /** @return signature of referenced method/field. + */ + public String getSignature( ConstantPoolGen cpg ) { + ConstantPool cp = cpg.getConstantPool(); + ConstantCP cmr = (ConstantCP) cp.getConstant(index); + ConstantNameAndType cnat = (ConstantNameAndType) cp.getConstant(cmr.getNameAndTypeIndex()); + return ((ConstantUtf8) cp.getConstant(cnat.getSignatureIndex())).getBytes(); + } + + + /** @return name of referenced method/field. + */ + public String getName( ConstantPoolGen cpg ) { + ConstantPool cp = cpg.getConstantPool(); + ConstantCP cmr = (ConstantCP) cp.getConstant(index); + ConstantNameAndType cnat = (ConstantNameAndType) cp.getConstant(cmr.getNameAndTypeIndex()); + return ((ConstantUtf8) cp.getConstant(cnat.getNameIndex())).getBytes(); + } + + + /** @return name of the referenced class/interface + * @deprecated If the instruction references an array class, + * this method will return "java.lang.Object". + * For code generated by Java 1.5, this answer is + * sometimes wrong (e.g., if the "clone()" method is + * called on an array). A better idea is to use + * the getReferenceType() method, which correctly distinguishes + * between class types and array types. + */ + public String getClassName( ConstantPoolGen cpg ) { + ConstantPool cp = cpg.getConstantPool(); + ConstantCP cmr = (ConstantCP) cp.getConstant(index); + String className = cp.getConstantString(cmr.getClassIndex(), + org.apache.bcel5_2_0.Constants.CONSTANT_Class); + if (className.startsWith("[")) { + // Turn array classes into java.lang.Object. + return "java.lang.Object"; + } + return className.replace('/', '.'); + } + + + /** @return type of the referenced class/interface + * @deprecated If the instruction references an array class, + * the ObjectType returned will be invalid. Use + * getReferenceType() instead. + */ + public ObjectType getClassType( ConstantPoolGen cpg ) { + return new ObjectType(getClassName(cpg)); + } + + + /** + * Return the reference type representing the class, interface, + * or array class referenced by the instruction. + * @param cpg the ConstantPoolGen used to create the instruction + * @return an ObjectType (if the referenced class type is a class + * or interface), or an ArrayType (if the referenced class + * type is an array class) + */ + public ReferenceType getReferenceType( ConstantPoolGen cpg ) { + ConstantPool cp = cpg.getConstantPool(); + ConstantCP cmr = (ConstantCP) cp.getConstant(index); + String className = cp.getConstantString(cmr.getClassIndex(), + org.apache.bcel5_2_0.Constants.CONSTANT_Class); + if (className.startsWith("[")) { + return (ArrayType) Type.getType(className); + } else { + className = className.replace('/', '.'); + return new ObjectType(className); + } + } + + + /** @return type of the referenced class/interface + */ + public ObjectType getLoadClassType( ConstantPoolGen cpg ) { + return getClassType(cpg); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GETFIELD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GETFIELD.java index 42d9cef1..f8c57ae3 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GETFIELD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GETFIELD.java @@ -1,81 +1,81 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.ExceptionConstants; - -/** - * GETFIELD - Fetch field from object - *
          Stack: ..., objectref -> ..., value
          - * OR - *
          Stack: ..., objectref -> ..., value.word1, value.word2
          - * - * @version $Id: GETFIELD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class GETFIELD extends FieldInstruction implements ExceptionThrower, StackConsumer, - StackProducer { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GETFIELD() { - } - - - public GETFIELD(int index) { - super(Constants.GETFIELD, index); - } - - - public int produceStack( ConstantPoolGen cpg ) { - return getFieldSize(cpg); - } - - - public Class[] getExceptions() { - Class[] cs = new Class[2 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, cs, 0, - ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitFieldInstruction(this); - v.visitGETFIELD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.ExceptionConstants; + +/** + * GETFIELD - Fetch field from object + *
          Stack: ..., objectref -> ..., value
          + * OR + *
          Stack: ..., objectref -> ..., value.word1, value.word2
          + * + * @version $Id: GETFIELD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class GETFIELD extends FieldInstruction implements ExceptionThrower, StackConsumer, + StackProducer { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + GETFIELD() { + } + + + public GETFIELD(int index) { + super(Constants.GETFIELD, index); + } + + + public int produceStack( ConstantPoolGen cpg ) { + return getFieldSize(cpg); + } + + + public Class[] getExceptions() { + Class[] cs = new Class[2 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; + System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, cs, 0, + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; + return cs; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitStackConsumer(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitLoadClass(this); + v.visitCPInstruction(this); + v.visitFieldOrMethod(this); + v.visitFieldInstruction(this); + v.visitGETFIELD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GETSTATIC.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GETSTATIC.java index 60e435ce..0037483f 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GETSTATIC.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GETSTATIC.java @@ -1,79 +1,79 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.ExceptionConstants; - -/** - * GETSTATIC - Fetch static field from class - *
          Stack: ..., -> ..., value
          - * OR - *
          Stack: ..., -> ..., value.word1, value.word2
          - * - * @version $Id: GETSTATIC.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class GETSTATIC extends FieldInstruction implements PushInstruction, ExceptionThrower { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GETSTATIC() { - } - - - public GETSTATIC(int index) { - super(Constants.GETSTATIC, index); - } - - - public int produceStack( ConstantPoolGen cpg ) { - return getFieldSize(cpg); - } - - - public Class[] getExceptions() { - Class[] cs = new Class[1 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, cs, 0, - ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitFieldInstruction(this); - v.visitGETSTATIC(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.ExceptionConstants; + +/** + * GETSTATIC - Fetch static field from class + *
          Stack: ..., -> ..., value
          + * OR + *
          Stack: ..., -> ..., value.word1, value.word2
          + * + * @version $Id: GETSTATIC.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class GETSTATIC extends FieldInstruction implements PushInstruction, ExceptionThrower { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + GETSTATIC() { + } + + + public GETSTATIC(int index) { + super(Constants.GETSTATIC, index); + } + + + public int produceStack( ConstantPoolGen cpg ) { + return getFieldSize(cpg); + } + + + public Class[] getExceptions() { + Class[] cs = new Class[1 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; + System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, cs, 0, + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; + return cs; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitPushInstruction(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitLoadClass(this); + v.visitCPInstruction(this); + v.visitFieldOrMethod(this); + v.visitFieldInstruction(this); + v.visitGETSTATIC(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GOTO.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GOTO.java index 83a86a1e..018afa15 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GOTO.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GOTO.java @@ -1,89 +1,89 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -/** - * GOTO - Branch always (to relative offset, not absolute address) - * - * @version $Id: GOTO.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class GOTO extends GotoInstruction implements VariableLengthInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GOTO() { - } - - - public GOTO(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.GOTO, target); - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - index = getTargetOffset(); - if (opcode == org.apache.bcel5_2_0.Constants.GOTO) { - super.dump(out); - } else { // GOTO_W - index = getTargetOffset(); - out.writeByte(opcode); - out.writeInt(index); - } - } - - - /** Called in pass 2 of InstructionList.setPositions() in order to update - * the branch target, that may shift due to variable length instructions. - */ - protected int updatePosition( int offset, int max_offset ) { - int i = getTargetOffset(); // Depending on old position value - position += offset; // Position may be shifted by preceding expansions - if (Math.abs(i) >= (32767 - max_offset)) { // to large for short (estimate) - opcode = org.apache.bcel5_2_0.Constants.GOTO_W; - length = 5; - return 2; // 5 - 3 - } - return 0; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitVariableLengthInstruction(this); - v.visitUnconditionalBranch(this); - v.visitBranchInstruction(this); - v.visitGotoInstruction(this); - v.visitGOTO(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +/** + * GOTO - Branch always (to relative offset, not absolute address) + * + * @version $Id: GOTO.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class GOTO extends GotoInstruction implements VariableLengthInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + GOTO() { + } + + + public GOTO(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.GOTO, target); + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + index = getTargetOffset(); + if (opcode == org.apache.bcel5_2_0.Constants.GOTO) { + super.dump(out); + } else { // GOTO_W + index = getTargetOffset(); + out.writeByte(opcode); + out.writeInt(index); + } + } + + + /** Called in pass 2 of InstructionList.setPositions() in order to update + * the branch target, that may shift due to variable length instructions. + */ + protected int updatePosition( int offset, int max_offset ) { + int i = getTargetOffset(); // Depending on old position value + position += offset; // Position may be shifted by preceding expansions + if (Math.abs(i) >= (32767 - max_offset)) { // to large for short (estimate) + opcode = org.apache.bcel5_2_0.Constants.GOTO_W; + length = 5; + return 2; // 5 - 3 + } + return 0; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitVariableLengthInstruction(this); + v.visitUnconditionalBranch(this); + v.visitBranchInstruction(this); + v.visitGotoInstruction(this); + v.visitGOTO(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GOTO_W.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GOTO_W.java index 392d16cf..4cd665a2 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GOTO_W.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GOTO_W.java @@ -1,80 +1,80 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * GOTO_W - Branch always (to relative offset, not absolute address) - * - * @version $Id: GOTO_W.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class GOTO_W extends GotoInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GOTO_W() { - } - - - public GOTO_W(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.GOTO_W, target); - length = 5; - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - index = getTargetOffset(); - out.writeByte(opcode); - out.writeInt(index); - } - - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - index = bytes.readInt(); - length = 5; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitUnconditionalBranch(this); - v.visitBranchInstruction(this); - v.visitGotoInstruction(this); - v.visitGOTO_W(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * GOTO_W - Branch always (to relative offset, not absolute address) + * + * @version $Id: GOTO_W.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class GOTO_W extends GotoInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + GOTO_W() { + } + + + public GOTO_W(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.GOTO_W, target); + length = 5; + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + index = getTargetOffset(); + out.writeByte(opcode); + out.writeInt(index); + } + + + /** + * Read needed data (e.g. index) from file. + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + index = bytes.readInt(); + length = 5; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitUnconditionalBranch(this); + v.visitBranchInstruction(this); + v.visitGotoInstruction(this); + v.visitGOTO_W(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GotoInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GotoInstruction.java index ccd1a3d5..b8c5faa7 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GotoInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/GotoInstruction.java @@ -1,38 +1,38 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Super class for GOTO - * - * @version $Id: GotoInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class GotoInstruction extends BranchInstruction implements UnconditionalBranch { - - GotoInstruction(short opcode, InstructionHandle target) { - super(opcode, target); - } - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GotoInstruction() { - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Super class for GOTO + * + * @version $Id: GotoInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class GotoInstruction extends BranchInstruction implements UnconditionalBranch { + + GotoInstruction(short opcode, InstructionHandle target) { + super(opcode, target); + } + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + GotoInstruction() { + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2B.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2B.java index baafe8bb..b44dd492 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2B.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2B.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * I2B - Convert int to byte - *
          Stack: ..., value -> ..., result
          - * - * @version $Id: I2B.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class I2B extends ConversionInstruction { - - /** Convert int to byte - */ - public I2B() { - super(org.apache.bcel5_2_0.Constants.I2B); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2B(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * I2B - Convert int to byte + *
          Stack: ..., value -> ..., result
          + * + * @version $Id: I2B.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class I2B extends ConversionInstruction { + + /** Convert int to byte + */ + public I2B() { + super(org.apache.bcel5_2_0.Constants.I2B); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitI2B(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2C.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2C.java index 9c22b6b2..d14ba4be 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2C.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2C.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * I2C - Convert int to char - *
          Stack: ..., value -> ..., result
          - * - * @version $Id: I2C.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class I2C extends ConversionInstruction { - - /** Convert int to char - */ - public I2C() { - super(org.apache.bcel5_2_0.Constants.I2C); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2C(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * I2C - Convert int to char + *
          Stack: ..., value -> ..., result
          + * + * @version $Id: I2C.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class I2C extends ConversionInstruction { + + /** Convert int to char + */ + public I2C() { + super(org.apache.bcel5_2_0.Constants.I2C); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitI2C(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2D.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2D.java index 116f15e6..f6bdde00 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2D.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2D.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * I2D - Convert int to double - *
          Stack: ..., value -> ..., result.word1, result.word2
          - * - * @version $Id: I2D.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class I2D extends ConversionInstruction { - - /** Convert int to double - */ - public I2D() { - super(org.apache.bcel5_2_0.Constants.I2D); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2D(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * I2D - Convert int to double + *
          Stack: ..., value -> ..., result.word1, result.word2
          + * + * @version $Id: I2D.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class I2D extends ConversionInstruction { + + /** Convert int to double + */ + public I2D() { + super(org.apache.bcel5_2_0.Constants.I2D); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitI2D(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2F.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2F.java index 4920cca9..3ca7f602 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2F.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2F.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * I2F - Convert int to float - *
          Stack: ..., value -> ..., result
          - * - * @version $Id: I2F.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class I2F extends ConversionInstruction { - - /** Convert int to float - */ - public I2F() { - super(org.apache.bcel5_2_0.Constants.I2F); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2F(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * I2F - Convert int to float + *
          Stack: ..., value -> ..., result
          + * + * @version $Id: I2F.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class I2F extends ConversionInstruction { + + /** Convert int to float + */ + public I2F() { + super(org.apache.bcel5_2_0.Constants.I2F); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitI2F(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2L.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2L.java index 987bb494..1fc0767c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2L.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2L.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * I2L - Convert int to long - *
          Stack: ..., value -> ..., result.word1, result.word2
          - * - * @version $Id: I2L.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class I2L extends ConversionInstruction { - - /** Convert int to long - */ - public I2L() { - super(org.apache.bcel5_2_0.Constants.I2L); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2L(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * I2L - Convert int to long + *
          Stack: ..., value -> ..., result.word1, result.word2
          + * + * @version $Id: I2L.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class I2L extends ConversionInstruction { + + /** Convert int to long + */ + public I2L() { + super(org.apache.bcel5_2_0.Constants.I2L); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitI2L(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2S.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2S.java index d25dc6c2..282b9f08 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2S.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/I2S.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * I2S - Convert int to short - *
          Stack: ..., value -> ..., result
          - * - * @version $Id: I2S.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class I2S extends ConversionInstruction { - - public I2S() { - super(org.apache.bcel5_2_0.Constants.I2S); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2S(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * I2S - Convert int to short + *
          Stack: ..., value -> ..., result
          + * + * @version $Id: I2S.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class I2S extends ConversionInstruction { + + public I2S() { + super(org.apache.bcel5_2_0.Constants.I2S); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitI2S(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IADD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IADD.java index c1923921..51bcc19c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IADD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IADD.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IADD - Add ints - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: IADD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IADD extends ArithmeticInstruction { - - /** Add ints - */ - public IADD() { - super(org.apache.bcel5_2_0.Constants.IADD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIADD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IADD - Add ints + *
          Stack: ..., value1, value2 -> result
          + * + * @version $Id: IADD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IADD extends ArithmeticInstruction { + + /** Add ints + */ + public IADD() { + super(org.apache.bcel5_2_0.Constants.IADD); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitIADD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IALOAD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IALOAD.java index 02b9f5f6..57fbfd72 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IALOAD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IALOAD.java @@ -1,51 +1,51 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IALOAD - Load int from array - *
          Stack: ..., arrayref, index -> ..., value
          - * - * @version $Id: IALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IALOAD extends ArrayInstruction implements StackProducer { - - /** - * Load int from array - */ - public IALOAD() { - super(org.apache.bcel5_2_0.Constants.IALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitIALOAD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IALOAD - Load int from array + *
          Stack: ..., arrayref, index -> ..., value
          + * + * @version $Id: IALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IALOAD extends ArrayInstruction implements StackProducer { + + /** + * Load int from array + */ + public IALOAD() { + super(org.apache.bcel5_2_0.Constants.IALOAD); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitIALOAD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IAND.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IAND.java index 89b0121d..ba64e2a9 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IAND.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IAND.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IAND - Bitwise AND int - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: IAND.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IAND extends ArithmeticInstruction { - - public IAND() { - super(org.apache.bcel5_2_0.Constants.IAND); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIAND(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IAND - Bitwise AND int + *
          Stack: ..., value1, value2 -> ..., result
          + * + * @version $Id: IAND.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IAND extends ArithmeticInstruction { + + public IAND() { + super(org.apache.bcel5_2_0.Constants.IAND); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitIAND(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IASTORE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IASTORE.java index 065e544e..9f650c84 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IASTORE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IASTORE.java @@ -1,51 +1,51 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IASTORE - Store into int array - *
          Stack: ..., arrayref, index, value -> ...
          - * - * @version $Id: IASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IASTORE extends ArrayInstruction implements StackConsumer { - - /** - * Store into int array - */ - public IASTORE() { - super(org.apache.bcel5_2_0.Constants.IASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitIASTORE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IASTORE - Store into int array + *
          Stack: ..., arrayref, index, value -> ...
          + * + * @version $Id: IASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IASTORE extends ArrayInstruction implements StackConsumer { + + /** + * Store into int array + */ + public IASTORE() { + super(org.apache.bcel5_2_0.Constants.IASTORE); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitIASTORE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ICONST.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ICONST.java index efe7d25f..865d93c5 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ICONST.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ICONST.java @@ -1,78 +1,78 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * ICONST - Push value between -1, ..., 5, other values cause an exception - * - *
          Stack: ... -> ..., 
          - * - * @version $Id: ICONST.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ICONST extends Instruction implements ConstantPushInstruction, TypedInstruction { - - private int value; - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ICONST() { - } - - - public ICONST(int i) { - super(org.apache.bcel5_2_0.Constants.ICONST_0, (short) 1); - if ((i >= -1) && (i <= 5)) { - opcode = (short) (org.apache.bcel5_2_0.Constants.ICONST_0 + i); // Even works for i == -1 - } else { - throw new ClassGenException("ICONST can be used only for value between -1 and 5: " + i); - } - value = i; - } - - - public Number getValue() { - return new Integer(value); - } - - - /** @return Type.INT - */ - public Type getType( ConstantPoolGen cp ) { - return Type.INT; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitICONST(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * ICONST - Push value between -1, ..., 5, other values cause an exception + * + *
          Stack: ... -> ..., 
          + * + * @version $Id: ICONST.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ICONST extends Instruction implements ConstantPushInstruction, TypedInstruction { + + private int value; + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + ICONST() { + } + + + public ICONST(int i) { + super(org.apache.bcel5_2_0.Constants.ICONST_0, (short) 1); + if ((i >= -1) && (i <= 5)) { + opcode = (short) (org.apache.bcel5_2_0.Constants.ICONST_0 + i); // Even works for i == -1 + } else { + throw new ClassGenException("ICONST can be used only for value between -1 and 5: " + i); + } + value = i; + } + + + public Number getValue() { + return new Integer(value); + } + + + /** @return Type.INT + */ + public Type getType( ConstantPoolGen cp ) { + return Type.INT; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitPushInstruction(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitConstantPushInstruction(this); + v.visitICONST(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IDIV.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IDIV.java index 5182cb1c..46373a37 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IDIV.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IDIV.java @@ -1,60 +1,60 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IDIV - Divide ints - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: IDIV.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IDIV extends ArithmeticInstruction implements ExceptionThrower { - - /** Divide ints - */ - public IDIV() { - super(org.apache.bcel5_2_0.Constants.IDIV); - } - - - /** @return exceptions this instruction may cause - */ - public Class[] getExceptions() { - return new Class[] { - org.apache.bcel5_2_0.ExceptionConstants.ARITHMETIC_EXCEPTION - }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIDIV(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IDIV - Divide ints + *
          Stack: ..., value1, value2 -> result
          + * + * @version $Id: IDIV.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IDIV extends ArithmeticInstruction implements ExceptionThrower { + + /** Divide ints + */ + public IDIV() { + super(org.apache.bcel5_2_0.Constants.IDIV); + } + + + /** @return exceptions this instruction may cause + */ + public Class[] getExceptions() { + return new Class[] { + org.apache.bcel5_2_0.ExceptionConstants.ARITHMETIC_EXCEPTION + }; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitIDIV(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFEQ.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFEQ.java index eda70a65..3db9c373 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFEQ.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFEQ.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IFEQ - Branch if int comparison with zero succeeds - * - *
          Stack: ..., value -> ...
          - * - * @version $Id: IFEQ.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFEQ extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFEQ() { - } - - - public IFEQ(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IFEQ, target); - } - - - /** - * @return negation of instruction, e.g. IFEQ.negate() == IFNE - */ - public IfInstruction negate() { - return new IFNE(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFEQ(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IFEQ - Branch if int comparison with zero succeeds + * + *
          Stack: ..., value -> ...
          + * + * @version $Id: IFEQ.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IFEQ extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IFEQ() { + } + + + public IFEQ(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IFEQ, target); + } + + + /** + * @return negation of instruction, e.g. IFEQ.negate() == IFNE + */ + public IfInstruction negate() { + return new IFNE(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIFEQ(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFGE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFGE.java index ff392234..d85d1afe 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFGE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFGE.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IFGE - Branch if int comparison with zero succeeds - * - *
          Stack: ..., value -> ...
          - * - * @version $Id: IFGE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFGE extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFGE() { - } - - - public IFGE(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IFGE, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IFLT(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFGE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IFGE - Branch if int comparison with zero succeeds + * + *
          Stack: ..., value -> ...
          + * + * @version $Id: IFGE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IFGE extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IFGE() { + } + + + public IFGE(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IFGE, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IFLT(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIFGE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFGT.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFGT.java index 9762316c..14a75e38 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFGT.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFGT.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IFGT - Branch if int comparison with zero succeeds - * - *
          Stack: ..., value -> ...
          - * - * @version $Id: IFGT.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFGT extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFGT() { - } - - - public IFGT(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IFGT, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IFLE(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFGT(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IFGT - Branch if int comparison with zero succeeds + * + *
          Stack: ..., value -> ...
          + * + * @version $Id: IFGT.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IFGT extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IFGT() { + } + + + public IFGT(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IFGT, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IFLE(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIFGT(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFLE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFLE.java index bf97deac..f41c8242 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFLE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFLE.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IFLE - Branch if int comparison with zero succeeds - * - *
          Stack: ..., value -> ...
          - * - * @version $Id: IFLE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFLE extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFLE() { - } - - - public IFLE(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IFLE, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IFGT(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFLE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IFLE - Branch if int comparison with zero succeeds + * + *
          Stack: ..., value -> ...
          + * + * @version $Id: IFLE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IFLE extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IFLE() { + } + + + public IFLE(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IFLE, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IFGT(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIFLE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFLT.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFLT.java index a8a98bd3..55cc695c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFLT.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFLT.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IFLT - Branch if int comparison with zero succeeds - * - *
          Stack: ..., value -> ...
          - * - * @version $Id: IFLT.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFLT extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFLT() { - } - - - public IFLT(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IFLT, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IFGE(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFLT(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IFLT - Branch if int comparison with zero succeeds + * + *
          Stack: ..., value -> ...
          + * + * @version $Id: IFLT.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IFLT extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IFLT() { + } + + + public IFLT(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IFLT, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IFGE(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIFLT(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFNE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFNE.java index 4b480086..df4e2e0e 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFNE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFNE.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IFNE - Branch if int comparison with zero succeeds - * - *
          Stack: ..., value -> ...
          - * - * @version $Id: IFNE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFNE extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFNE() { - } - - - public IFNE(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IFNE, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IFEQ(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFNE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IFNE - Branch if int comparison with zero succeeds + * + *
          Stack: ..., value -> ...
          + * + * @version $Id: IFNE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IFNE extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IFNE() { + } + + + public IFNE(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IFNE, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IFEQ(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIFNE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFNONNULL.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFNONNULL.java index 9cc2ba44..4753248a 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFNONNULL.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFNONNULL.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IFNONNULL - Branch if reference is not null - * - *
          Stack: ..., reference -> ...
          - * - * @version $Id: IFNONNULL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFNONNULL extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFNONNULL() { - } - - - public IFNONNULL(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IFNONNULL, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IFNULL(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFNONNULL(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IFNONNULL - Branch if reference is not null + * + *
          Stack: ..., reference -> ...
          + * + * @version $Id: IFNONNULL.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IFNONNULL extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IFNONNULL() { + } + + + public IFNONNULL(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IFNONNULL, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IFNULL(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIFNONNULL(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFNULL.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFNULL.java index 4e3bd88d..d2475bbf 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFNULL.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IFNULL.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IFNULL - Branch if reference is not null - * - *
          Stack: ..., reference -> ...
          - * - * @version $Id: IFNULL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFNULL extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFNULL() { - } - - - public IFNULL(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IFNULL, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IFNONNULL(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFNULL(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IFNULL - Branch if reference is not null + * + *
          Stack: ..., reference -> ...
          + * + * @version $Id: IFNULL.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IFNULL extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IFNULL() { + } + + + public IFNULL(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IFNULL, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IFNONNULL(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIFNULL(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ACMPEQ.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ACMPEQ.java index 9977b477..0868adc5 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ACMPEQ.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ACMPEQ.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IF_ACMPEQ - Branch if reference comparison succeeds - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ACMPEQ.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ACMPEQ extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ACMPEQ() { - } - - - public IF_ACMPEQ(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IF_ACMPEQ, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ACMPNE(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ACMPEQ(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IF_ACMPEQ - Branch if reference comparison succeeds + * + *
          Stack: ..., value1, value2 -> ...
          + * + * @version $Id: IF_ACMPEQ.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IF_ACMPEQ extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IF_ACMPEQ() { + } + + + public IF_ACMPEQ(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IF_ACMPEQ, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IF_ACMPNE(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIF_ACMPEQ(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ACMPNE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ACMPNE.java index 3ec803fb..626c5b33 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ACMPNE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ACMPNE.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IF_ACMPNE - Branch if reference comparison doesn't succeed - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ACMPNE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ACMPNE extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ACMPNE() { - } - - - public IF_ACMPNE(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IF_ACMPNE, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ACMPEQ(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ACMPNE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IF_ACMPNE - Branch if reference comparison doesn't succeed + * + *
          Stack: ..., value1, value2 -> ...
          + * + * @version $Id: IF_ACMPNE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IF_ACMPNE extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IF_ACMPNE() { + } + + + public IF_ACMPNE(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IF_ACMPNE, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IF_ACMPEQ(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIF_ACMPNE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPEQ.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPEQ.java index 73a7d6f9..5fac7a28 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPEQ.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPEQ.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IF_ICMPEQ - Branch if int comparison succeeds - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ICMPEQ.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ICMPEQ extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPEQ() { - } - - - public IF_ICMPEQ(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IF_ICMPEQ, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ICMPNE(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPEQ(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IF_ICMPEQ - Branch if int comparison succeeds + * + *
          Stack: ..., value1, value2 -> ...
          + * + * @version $Id: IF_ICMPEQ.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IF_ICMPEQ extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IF_ICMPEQ() { + } + + + public IF_ICMPEQ(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IF_ICMPEQ, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IF_ICMPNE(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIF_ICMPEQ(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPGE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPGE.java index 96034c2e..2c298bc3 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPGE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPGE.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IF_ICMPGE - Branch if int comparison succeeds - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ICMPGE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ICMPGE extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPGE() { - } - - - public IF_ICMPGE(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IF_ICMPGE, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ICMPLT(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPGE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IF_ICMPGE - Branch if int comparison succeeds + * + *
          Stack: ..., value1, value2 -> ...
          + * + * @version $Id: IF_ICMPGE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IF_ICMPGE extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IF_ICMPGE() { + } + + + public IF_ICMPGE(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IF_ICMPGE, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IF_ICMPLT(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIF_ICMPGE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPGT.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPGT.java index 3ea29a5a..5e5273b1 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPGT.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPGT.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IF_ICMPGT - Branch if int comparison succeeds - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ICMPGT.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ICMPGT extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPGT() { - } - - - public IF_ICMPGT(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IF_ICMPGT, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ICMPLE(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPGT(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IF_ICMPGT - Branch if int comparison succeeds + * + *
          Stack: ..., value1, value2 -> ...
          + * + * @version $Id: IF_ICMPGT.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IF_ICMPGT extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IF_ICMPGT() { + } + + + public IF_ICMPGT(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IF_ICMPGT, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IF_ICMPLE(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIF_ICMPGT(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPLE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPLE.java index 08e803f9..49c0cf0f 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPLE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPLE.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IF_ICMPLE - Branch if int comparison succeeds - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ICMPLE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ICMPLE extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPLE() { - } - - - public IF_ICMPLE(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IF_ICMPLE, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ICMPGT(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPLE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IF_ICMPLE - Branch if int comparison succeeds + * + *
          Stack: ..., value1, value2 -> ...
          + * + * @version $Id: IF_ICMPLE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IF_ICMPLE extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IF_ICMPLE() { + } + + + public IF_ICMPLE(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IF_ICMPLE, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IF_ICMPGT(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIF_ICMPLE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPLT.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPLT.java index 14374d95..00d02bc3 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPLT.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPLT.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IF_ICMPLT - Branch if int comparison succeeds - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ICMPLT.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ICMPLT extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPLT() { - } - - - public IF_ICMPLT(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IF_ICMPLT, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ICMPGE(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPLT(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IF_ICMPLT - Branch if int comparison succeeds + * + *
          Stack: ..., value1, value2 -> ...
          + * + * @version $Id: IF_ICMPLT.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IF_ICMPLT extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IF_ICMPLT() { + } + + + public IF_ICMPLT(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IF_ICMPLT, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IF_ICMPGE(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIF_ICMPLT(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPNE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPNE.java index d8c407f3..7b3bbd10 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPNE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IF_ICMPNE.java @@ -1,64 +1,64 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IF_ICMPNE - Branch if int comparison doesn't succeed - * - *
          Stack: ..., value1, value2 -> ...
          - * - * @version $Id: IF_ICMPNE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ICMPNE extends IfInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPNE() { - } - - - public IF_ICMPNE(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.IF_ICMPNE, target); - } - - - /** - * @return negation of instruction - */ - public IfInstruction negate() { - return new IF_ICMPEQ(target); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPNE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IF_ICMPNE - Branch if int comparison doesn't succeed + * + *
          Stack: ..., value1, value2 -> ...
          + * + * @version $Id: IF_ICMPNE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IF_ICMPNE extends IfInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IF_ICMPNE() { + } + + + public IF_ICMPNE(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.IF_ICMPNE, target); + } + + + /** + * @return negation of instruction + */ + public IfInstruction negate() { + return new IF_ICMPEQ(target); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitBranchInstruction(this); + v.visitIfInstruction(this); + v.visitIF_ICMPNE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IINC.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IINC.java index 22669130..4a09d2e5 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IINC.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IINC.java @@ -1,159 +1,159 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * IINC - Increment local variable by constant - * - * @version $Id: IINC.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IINC extends LocalVariableInstruction { - - private boolean wide; - private int c; - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IINC() { - } - - - /** - * @param n index of local variable - * @param c increment factor - */ - public IINC(int n, int c) { - super(); // Default behaviour of LocalVariableInstruction causes error - this.opcode = org.apache.bcel5_2_0.Constants.IINC; - this.length = (short) 3; - setIndex(n); // May set wide as side effect - setIncrement(c); - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - if (wide) { - out.writeByte(org.apache.bcel5_2_0.Constants.WIDE); - } - out.writeByte(opcode); - if (wide) { - out.writeShort(n); - out.writeShort(c); - } else { - out.writeByte(n); - out.writeByte(c); - } - } - - - private final void setWide() { - wide = (n > org.apache.bcel5_2_0.Constants.MAX_BYTE) || (Math.abs(c) > Byte.MAX_VALUE); - if (wide) { - length = 6; // wide byte included - } else { - length = 3; - } - } - - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - this.wide = wide; - if (wide) { - length = 6; - n = bytes.readUnsignedShort(); - c = bytes.readShort(); - } else { - length = 3; - n = bytes.readUnsignedByte(); - c = bytes.readByte(); - } - } - - - /** - * @return mnemonic for instruction - */ - public String toString( boolean verbose ) { - return super.toString(verbose) + " " + c; - } - - - /** - * Set index of local variable. - */ - public final void setIndex( int n ) { - if (n < 0) { - throw new ClassGenException("Negative index value: " + n); - } - this.n = n; - setWide(); - } - - - /** - * @return increment factor - */ - public final int getIncrement() { - return c; - } - - - /** - * Set increment factor. - */ - public final void setIncrement( int c ) { - this.c = c; - setWide(); - } - - - /** @return int type - */ - public Type getType( ConstantPoolGen cp ) { - return Type.INT; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitLocalVariableInstruction(this); - v.visitIINC(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * IINC - Increment local variable by constant + * + * @version $Id: IINC.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IINC extends LocalVariableInstruction { + + private boolean wide; + private int c; + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IINC() { + } + + + /** + * @param n index of local variable + * @param c increment factor + */ + public IINC(int n, int c) { + super(); // Default behaviour of LocalVariableInstruction causes error + this.opcode = org.apache.bcel5_2_0.Constants.IINC; + this.length = (short) 3; + setIndex(n); // May set wide as side effect + setIncrement(c); + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + if (wide) { + out.writeByte(org.apache.bcel5_2_0.Constants.WIDE); + } + out.writeByte(opcode); + if (wide) { + out.writeShort(n); + out.writeShort(c); + } else { + out.writeByte(n); + out.writeByte(c); + } + } + + + private final void setWide() { + wide = (n > org.apache.bcel5_2_0.Constants.MAX_BYTE) || (Math.abs(c) > Byte.MAX_VALUE); + if (wide) { + length = 6; // wide byte included + } else { + length = 3; + } + } + + + /** + * Read needed data (e.g. index) from file. + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + this.wide = wide; + if (wide) { + length = 6; + n = bytes.readUnsignedShort(); + c = bytes.readShort(); + } else { + length = 3; + n = bytes.readUnsignedByte(); + c = bytes.readByte(); + } + } + + + /** + * @return mnemonic for instruction + */ + public String toString( boolean verbose ) { + return super.toString(verbose) + " " + c; + } + + + /** + * Set index of local variable. + */ + public final void setIndex( int n ) { + if (n < 0) { + throw new ClassGenException("Negative index value: " + n); + } + this.n = n; + setWide(); + } + + + /** + * @return increment factor + */ + public final int getIncrement() { + return c; + } + + + /** + * Set increment factor. + */ + public final void setIncrement( int c ) { + this.c = c; + setWide(); + } + + + /** @return int type + */ + public Type getType( ConstantPoolGen cp ) { + return Type.INT; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitLocalVariableInstruction(this); + v.visitIINC(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ILOAD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ILOAD.java index 2430ed11..c44c5b8a 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ILOAD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ILOAD.java @@ -1,57 +1,57 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * ILOAD - Load int from local variable onto stack - *
          Stack: ... -> ..., result
          - * - * @version $Id: ILOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ILOAD extends LoadInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ILOAD() { - super(org.apache.bcel5_2_0.Constants.ILOAD, org.apache.bcel5_2_0.Constants.ILOAD_0); - } - - - /** Load int from local variable - * @param n index of local variable - */ - public ILOAD(int n) { - super(org.apache.bcel5_2_0.Constants.ILOAD, org.apache.bcel5_2_0.Constants.ILOAD_0, n); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - super.accept(v); - v.visitILOAD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * ILOAD - Load int from local variable onto stack + *
          Stack: ... -> ..., result
          + * + * @version $Id: ILOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ILOAD extends LoadInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + ILOAD() { + super(org.apache.bcel5_2_0.Constants.ILOAD, org.apache.bcel5_2_0.Constants.ILOAD_0); + } + + + /** Load int from local variable + * @param n index of local variable + */ + public ILOAD(int n) { + super(org.apache.bcel5_2_0.Constants.ILOAD, org.apache.bcel5_2_0.Constants.ILOAD_0, n); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + super.accept(v); + v.visitILOAD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IMPDEP1.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IMPDEP1.java index 88b3a021..16390757 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IMPDEP1.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IMPDEP1.java @@ -1,43 +1,43 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IMPDEP1 - Implementation dependent - * - * @version $Id: IMPDEP1.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IMPDEP1 extends Instruction { - - public IMPDEP1() { - super(org.apache.bcel5_2_0.Constants.IMPDEP1, (short) 1); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitIMPDEP1(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IMPDEP1 - Implementation dependent + * + * @version $Id: IMPDEP1.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IMPDEP1 extends Instruction { + + public IMPDEP1() { + super(org.apache.bcel5_2_0.Constants.IMPDEP1, (short) 1); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitIMPDEP1(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IMPDEP2.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IMPDEP2.java index 16cf3b4c..75d9a9ef 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IMPDEP2.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IMPDEP2.java @@ -1,43 +1,43 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IMPDEP2 - Implementation dependent - * - * @version $Id: IMPDEP2.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IMPDEP2 extends Instruction { - - public IMPDEP2() { - super(org.apache.bcel5_2_0.Constants.IMPDEP2, (short) 1); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitIMPDEP2(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IMPDEP2 - Implementation dependent + * + * @version $Id: IMPDEP2.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IMPDEP2 extends Instruction { + + public IMPDEP2() { + super(org.apache.bcel5_2_0.Constants.IMPDEP2, (short) 1); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitIMPDEP2(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IMUL.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IMUL.java index f9ae5876..fc76e444 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IMUL.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IMUL.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IMUL - Multiply ints - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: IMUL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IMUL extends ArithmeticInstruction { - - /** Multiply ints - */ - public IMUL() { - super(org.apache.bcel5_2_0.Constants.IMUL); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIMUL(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IMUL - Multiply ints + *
          Stack: ..., value1, value2 -> result
          + * + * @version $Id: IMUL.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IMUL extends ArithmeticInstruction { + + /** Multiply ints + */ + public IMUL() { + super(org.apache.bcel5_2_0.Constants.IMUL); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitIMUL(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INEG.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INEG.java index 5d839665..409f36e9 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INEG.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INEG.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * INEG - Negate int - *
          Stack: ..., value -> ..., result
          - * - * @version $Id: INEG.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class INEG extends ArithmeticInstruction { - - public INEG() { - super(org.apache.bcel5_2_0.Constants.INEG); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitINEG(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * INEG - Negate int + *
          Stack: ..., value -> ..., result
          + * + * @version $Id: INEG.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class INEG extends ArithmeticInstruction { + + public INEG() { + super(org.apache.bcel5_2_0.Constants.INEG); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitINEG(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INSTANCEOF.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INSTANCEOF.java index c1ef93dc..99a676aa 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INSTANCEOF.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INSTANCEOF.java @@ -1,73 +1,73 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * INSTANCEOF - Determine if object is of given type - *
          Stack: ..., objectref -> ..., result
          - * - * @version $Id: INSTANCEOF.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class INSTANCEOF extends CPInstruction implements LoadClass, ExceptionThrower, - StackProducer, StackConsumer { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INSTANCEOF() { - } - - - public INSTANCEOF(int index) { - super(org.apache.bcel5_2_0.Constants.INSTANCEOF, index); - } - - - public Class[] getExceptions() { - return org.apache.bcel5_2_0.ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION; - } - - - public ObjectType getLoadClassType( ConstantPoolGen cpg ) { - Type t = getType(cpg); - if (t instanceof ArrayType) { - t = ((ArrayType) t).getBasicType(); - } - return (t instanceof ObjectType) ? (ObjectType) t : null; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitLoadClass(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitINSTANCEOF(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * INSTANCEOF - Determine if object is of given type + *
          Stack: ..., objectref -> ..., result
          + * + * @version $Id: INSTANCEOF.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class INSTANCEOF extends CPInstruction implements LoadClass, ExceptionThrower, + StackProducer, StackConsumer { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + INSTANCEOF() { + } + + + public INSTANCEOF(int index) { + super(org.apache.bcel5_2_0.Constants.INSTANCEOF, index); + } + + + public Class[] getExceptions() { + return org.apache.bcel5_2_0.ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION; + } + + + public ObjectType getLoadClassType( ConstantPoolGen cpg ) { + Type t = getType(cpg); + if (t instanceof ArrayType) { + t = ((ArrayType) t).getBasicType(); + } + return (t instanceof ObjectType) ? (ObjectType) t : null; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitLoadClass(this); + v.visitExceptionThrower(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitTypedInstruction(this); + v.visitCPInstruction(this); + v.visitINSTANCEOF(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKEINTERFACE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKEINTERFACE.java index 72d9959c..af69c14a 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKEINTERFACE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKEINTERFACE.java @@ -1,133 +1,133 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.ExceptionConstants; -import org.apache.bcel5_2_0.classfile.ConstantPool; -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * INVOKEINTERFACE - Invoke interface method - *
          Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
          - * - * @version $Id: INVOKEINTERFACE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class INVOKEINTERFACE extends InvokeInstruction { - - private int nargs; // Number of arguments on stack (number of stack slots), called "count" in vmspec2 - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INVOKEINTERFACE() { - } - - - public INVOKEINTERFACE(int index, int nargs) { - super(Constants.INVOKEINTERFACE, index); - length = 5; - if (nargs < 1) { - throw new ClassGenException("Number of arguments must be > 0 " + nargs); - } - this.nargs = nargs; - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - out.writeByte(opcode); - out.writeShort(index); - out.writeByte(nargs); - out.writeByte(0); - } - - - /** - * The count argument according to the Java Language Specification, - * Second Edition. - */ - public int getCount() { - return nargs; - } - - - /** - * Read needed data (i.e., index) from file. - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - super.initFromFile(bytes, wide); - length = 5; - nargs = bytes.readUnsignedByte(); - bytes.readByte(); // Skip 0 byte - } - - - /** - * @return mnemonic for instruction with symbolic references resolved - */ - public String toString( ConstantPool cp ) { - return super.toString(cp) + " " + nargs; - } - - - public int consumeStack( ConstantPoolGen cpg ) { // nargs is given in byte-code - return nargs; // nargs includes this reference - } - - - public Class[] getExceptions() { - Class[] cs = new Class[4 + ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION, 0, cs, 0, - ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length + 3] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length + 2] = ExceptionConstants.ILLEGAL_ACCESS_ERROR; - cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length + 1] = ExceptionConstants.ABSTRACT_METHOD_ERROR; - cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length] = ExceptionConstants.UNSATISFIED_LINK_ERROR; - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitInvokeInstruction(this); - v.visitINVOKEINTERFACE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.ExceptionConstants; +import org.apache.bcel5_2_0.classfile.ConstantPool; +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * INVOKEINTERFACE - Invoke interface method + *
          Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
          + * + * @version $Id: INVOKEINTERFACE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public final class INVOKEINTERFACE extends InvokeInstruction { + + private int nargs; // Number of arguments on stack (number of stack slots), called "count" in vmspec2 + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + INVOKEINTERFACE() { + } + + + public INVOKEINTERFACE(int index, int nargs) { + super(Constants.INVOKEINTERFACE, index); + length = 5; + if (nargs < 1) { + throw new ClassGenException("Number of arguments must be > 0 " + nargs); + } + this.nargs = nargs; + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + out.writeByte(opcode); + out.writeShort(index); + out.writeByte(nargs); + out.writeByte(0); + } + + + /** + * The count argument according to the Java Language Specification, + * Second Edition. + */ + public int getCount() { + return nargs; + } + + + /** + * Read needed data (i.e., index) from file. + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + super.initFromFile(bytes, wide); + length = 5; + nargs = bytes.readUnsignedByte(); + bytes.readByte(); // Skip 0 byte + } + + + /** + * @return mnemonic for instruction with symbolic references resolved + */ + public String toString( ConstantPool cp ) { + return super.toString(cp) + " " + nargs; + } + + + public int consumeStack( ConstantPoolGen cpg ) { // nargs is given in byte-code + return nargs; // nargs includes this reference + } + + + public Class[] getExceptions() { + Class[] cs = new Class[4 + ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length]; + System.arraycopy(ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION, 0, cs, 0, + ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length); + cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length + 3] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; + cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length + 2] = ExceptionConstants.ILLEGAL_ACCESS_ERROR; + cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length + 1] = ExceptionConstants.ABSTRACT_METHOD_ERROR; + cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length] = ExceptionConstants.UNSATISFIED_LINK_ERROR; + return cs; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackConsumer(this); + v.visitStackProducer(this); + v.visitLoadClass(this); + v.visitCPInstruction(this); + v.visitFieldOrMethod(this); + v.visitInvokeInstruction(this); + v.visitINVOKEINTERFACE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKESPECIAL.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKESPECIAL.java index 1fc3c233..0affd8bb 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKESPECIAL.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKESPECIAL.java @@ -1,77 +1,77 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.ExceptionConstants; - -/** - * INVOKESPECIAL - Invoke instance method; special handling for superclass, private - * and instance initialization method invocations - * - *
          Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
          - * - * @version $Id: INVOKESPECIAL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class INVOKESPECIAL extends InvokeInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INVOKESPECIAL() { - } - - - public INVOKESPECIAL(int index) { - super(Constants.INVOKESPECIAL, index); - } - - - public Class[] getExceptions() { - Class[] cs = new Class[4 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, cs, 0, - ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 3] = ExceptionConstants.UNSATISFIED_LINK_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 2] = ExceptionConstants.ABSTRACT_METHOD_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitInvokeInstruction(this); - v.visitINVOKESPECIAL(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.ExceptionConstants; + +/** + * INVOKESPECIAL - Invoke instance method; special handling for superclass, private + * and instance initialization method invocations + * + *
          Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
          + * + * @version $Id: INVOKESPECIAL.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class INVOKESPECIAL extends InvokeInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + INVOKESPECIAL() { + } + + + public INVOKESPECIAL(int index) { + super(Constants.INVOKESPECIAL, index); + } + + + public Class[] getExceptions() { + Class[] cs = new Class[4 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; + System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, cs, 0, + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 3] = ExceptionConstants.UNSATISFIED_LINK_ERROR; + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 2] = ExceptionConstants.ABSTRACT_METHOD_ERROR; + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; + return cs; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackConsumer(this); + v.visitStackProducer(this); + v.visitLoadClass(this); + v.visitCPInstruction(this); + v.visitFieldOrMethod(this); + v.visitInvokeInstruction(this); + v.visitINVOKESPECIAL(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKESTATIC.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKESTATIC.java index fc2b8f8f..8081e9dc 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKESTATIC.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKESTATIC.java @@ -1,74 +1,74 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.ExceptionConstants; - -/** - * INVOKESTATIC - Invoke a class (static) method - * - *
          Stack: ..., [arg1, [arg2 ...]] -> ...
          - * - * @version $Id: INVOKESTATIC.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class INVOKESTATIC extends InvokeInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INVOKESTATIC() { - } - - - public INVOKESTATIC(int index) { - super(Constants.INVOKESTATIC, index); - } - - - public Class[] getExceptions() { - Class[] cs = new Class[2 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, cs, 0, - ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.UNSATISFIED_LINK_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitInvokeInstruction(this); - v.visitINVOKESTATIC(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.ExceptionConstants; + +/** + * INVOKESTATIC - Invoke a class (static) method + * + *
          Stack: ..., [arg1, [arg2 ...]] -> ...
          + * + * @version $Id: INVOKESTATIC.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class INVOKESTATIC extends InvokeInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + INVOKESTATIC() { + } + + + public INVOKESTATIC(int index) { + super(Constants.INVOKESTATIC, index); + } + + + public Class[] getExceptions() { + Class[] cs = new Class[2 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; + System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, cs, 0, + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.UNSATISFIED_LINK_ERROR; + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; + return cs; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackConsumer(this); + v.visitStackProducer(this); + v.visitLoadClass(this); + v.visitCPInstruction(this); + v.visitFieldOrMethod(this); + v.visitInvokeInstruction(this); + v.visitINVOKESTATIC(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKEVIRTUAL.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKEVIRTUAL.java index 9c7c1df5..d994b72a 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKEVIRTUAL.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/INVOKEVIRTUAL.java @@ -1,76 +1,76 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.ExceptionConstants; - -/** - * INVOKEVIRTUAL - Invoke instance method; dispatch based on class - * - *
          Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
          - * - * @version $Id: INVOKEVIRTUAL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class INVOKEVIRTUAL extends InvokeInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INVOKEVIRTUAL() { - } - - - public INVOKEVIRTUAL(int index) { - super(Constants.INVOKEVIRTUAL, index); - } - - - public Class[] getExceptions() { - Class[] cs = new Class[4 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, cs, 0, - ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 3] = ExceptionConstants.UNSATISFIED_LINK_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 2] = ExceptionConstants.ABSTRACT_METHOD_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitInvokeInstruction(this); - v.visitINVOKEVIRTUAL(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.ExceptionConstants; + +/** + * INVOKEVIRTUAL - Invoke instance method; dispatch based on class + * + *
          Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
          + * + * @version $Id: INVOKEVIRTUAL.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class INVOKEVIRTUAL extends InvokeInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + INVOKEVIRTUAL() { + } + + + public INVOKEVIRTUAL(int index) { + super(Constants.INVOKEVIRTUAL, index); + } + + + public Class[] getExceptions() { + Class[] cs = new Class[4 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; + System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, cs, 0, + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 3] = ExceptionConstants.UNSATISFIED_LINK_ERROR; + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 2] = ExceptionConstants.ABSTRACT_METHOD_ERROR; + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; + return cs; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackConsumer(this); + v.visitStackProducer(this); + v.visitLoadClass(this); + v.visitCPInstruction(this); + v.visitFieldOrMethod(this); + v.visitInvokeInstruction(this); + v.visitINVOKEVIRTUAL(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IOR.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IOR.java index 8ba8dd68..993fd1f3 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IOR.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IOR.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IOR - Bitwise OR int - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: IOR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IOR extends ArithmeticInstruction { - - public IOR() { - super(org.apache.bcel5_2_0.Constants.IOR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIOR(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IOR - Bitwise OR int + *
          Stack: ..., value1, value2 -> ..., result
          + * + * @version $Id: IOR.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IOR extends ArithmeticInstruction { + + public IOR() { + super(org.apache.bcel5_2_0.Constants.IOR); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitIOR(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IREM.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IREM.java index b89cf797..1065b1f7 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IREM.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IREM.java @@ -1,60 +1,60 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IREM - Remainder of int - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: IREM.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IREM extends ArithmeticInstruction implements ExceptionThrower { - - /** Remainder of ints - */ - public IREM() { - super(org.apache.bcel5_2_0.Constants.IREM); - } - - - /** @return exceptions this instruction may cause - */ - public Class[] getExceptions() { - return new Class[] { - org.apache.bcel5_2_0.ExceptionConstants.ARITHMETIC_EXCEPTION - }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIREM(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IREM - Remainder of int + *
          Stack: ..., value1, value2 -> result
          + * + * @version $Id: IREM.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IREM extends ArithmeticInstruction implements ExceptionThrower { + + /** Remainder of ints + */ + public IREM() { + super(org.apache.bcel5_2_0.Constants.IREM); + } + + + /** @return exceptions this instruction may cause + */ + public Class[] getExceptions() { + return new Class[] { + org.apache.bcel5_2_0.ExceptionConstants.ARITHMETIC_EXCEPTION + }; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitIREM(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IRETURN.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IRETURN.java index edba9ad9..50b3c0f6 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IRETURN.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IRETURN.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IRETURN - Return int from method - *
          Stack: ..., value -> <empty>
          - * - * @version $Id: IRETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IRETURN extends ReturnInstruction { - - /** Return int from method - */ - public IRETURN() { - super(org.apache.bcel5_2_0.Constants.IRETURN); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitIRETURN(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IRETURN - Return int from method + *
          Stack: ..., value -> <empty>
          + * + * @version $Id: IRETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IRETURN extends ReturnInstruction { + + /** Return int from method + */ + public IRETURN() { + super(org.apache.bcel5_2_0.Constants.IRETURN); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackConsumer(this); + v.visitReturnInstruction(this); + v.visitIRETURN(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISHL.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISHL.java index 6a4f3804..4b9ab4ca 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISHL.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISHL.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * ISHL - Arithmetic shift left int - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: ISHL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ISHL extends ArithmeticInstruction { - - public ISHL() { - super(org.apache.bcel5_2_0.Constants.ISHL); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitISHL(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * ISHL - Arithmetic shift left int + *
          Stack: ..., value1, value2 -> ..., result
          + * + * @version $Id: ISHL.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ISHL extends ArithmeticInstruction { + + public ISHL() { + super(org.apache.bcel5_2_0.Constants.ISHL); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitISHL(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISHR.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISHR.java index 2e479317..bca7960d 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISHR.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISHR.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * ISHR - Arithmetic shift right int - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: ISHR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ISHR extends ArithmeticInstruction { - - public ISHR() { - super(org.apache.bcel5_2_0.Constants.ISHR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitISHR(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * ISHR - Arithmetic shift right int + *
          Stack: ..., value1, value2 -> ..., result
          + * + * @version $Id: ISHR.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ISHR extends ArithmeticInstruction { + + public ISHR() { + super(org.apache.bcel5_2_0.Constants.ISHR); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitISHR(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISTORE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISTORE.java index f1e345e7..f4ba4469 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISTORE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISTORE.java @@ -1,57 +1,57 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * ISTORE - Store int from stack into local variable - *
          Stack: ..., value -> ... 
          - * - * @version $Id: ISTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ISTORE extends StoreInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ISTORE() { - super(org.apache.bcel5_2_0.Constants.ISTORE, org.apache.bcel5_2_0.Constants.ISTORE_0); - } - - - /** Store int into local variable - * @param n index of local variable - */ - public ISTORE(int n) { - super(org.apache.bcel5_2_0.Constants.ISTORE, org.apache.bcel5_2_0.Constants.ISTORE_0, n); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - super.accept(v); - v.visitISTORE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * ISTORE - Store int from stack into local variable + *
          Stack: ..., value -> ... 
          + * + * @version $Id: ISTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ISTORE extends StoreInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + ISTORE() { + super(org.apache.bcel5_2_0.Constants.ISTORE, org.apache.bcel5_2_0.Constants.ISTORE_0); + } + + + /** Store int into local variable + * @param n index of local variable + */ + public ISTORE(int n) { + super(org.apache.bcel5_2_0.Constants.ISTORE, org.apache.bcel5_2_0.Constants.ISTORE_0, n); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + super.accept(v); + v.visitISTORE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISUB.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISUB.java index 88adf19b..e16a5a4d 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISUB.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ISUB.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * ISUB - Substract ints - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: ISUB.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ISUB extends ArithmeticInstruction { - - /** Substract ints - */ - public ISUB() { - super(org.apache.bcel5_2_0.Constants.ISUB); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitISUB(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * ISUB - Substract ints + *
          Stack: ..., value1, value2 -> result
          + * + * @version $Id: ISUB.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ISUB extends ArithmeticInstruction { + + /** Substract ints + */ + public ISUB() { + super(org.apache.bcel5_2_0.Constants.ISUB); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitISUB(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IUSHR.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IUSHR.java index 54409be9..e5398fe5 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IUSHR.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IUSHR.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IUSHR - Logical shift right int - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: IUSHR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IUSHR extends ArithmeticInstruction { - - public IUSHR() { - super(org.apache.bcel5_2_0.Constants.IUSHR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIUSHR(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IUSHR - Logical shift right int + *
          Stack: ..., value1, value2 -> ..., result
          + * + * @version $Id: IUSHR.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IUSHR extends ArithmeticInstruction { + + public IUSHR() { + super(org.apache.bcel5_2_0.Constants.IUSHR); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitIUSHR(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IXOR.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IXOR.java index 9e5491ce..7e230f36 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IXOR.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IXOR.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * IXOR - Bitwise XOR int - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: IXOR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IXOR extends ArithmeticInstruction { - - public IXOR() { - super(org.apache.bcel5_2_0.Constants.IXOR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIXOR(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * IXOR - Bitwise XOR int + *
          Stack: ..., value1, value2 -> ..., result
          + * + * @version $Id: IXOR.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class IXOR extends ArithmeticInstruction { + + public IXOR() { + super(org.apache.bcel5_2_0.Constants.IXOR); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitIXOR(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IfInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IfInstruction.java index acd5317b..46707cb7 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IfInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IfInstruction.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Super class for the IFxxx family of instructions. - * - * @version $Id: IfInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class IfInstruction extends BranchInstruction implements StackConsumer { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IfInstruction() { - } - - - /** - * @param opcode opcode of instruction - * @param target Target instruction to branch to - */ - protected IfInstruction(short opcode, InstructionHandle target) { - super(opcode, target); - } - - - /** - * @return negation of instruction, e.g. IFEQ.negate() == IFNE - */ - public abstract IfInstruction negate(); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Super class for the IFxxx family of instructions. + * + * @version $Id: IfInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class IfInstruction extends BranchInstruction implements StackConsumer { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + IfInstruction() { + } + + + /** + * @param opcode opcode of instruction + * @param target Target instruction to branch to + */ + protected IfInstruction(short opcode, InstructionHandle target) { + super(opcode, target); + } + + + /** + * @return negation of instruction, e.g. IFEQ.negate() == IFNE + */ + public abstract IfInstruction negate(); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IndexedInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IndexedInstruction.java index 023de3fa..0a4fdc4e 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IndexedInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/IndexedInstruction.java @@ -1,32 +1,32 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denote entity that refers to an index, e.g. local variable instructions, - * RET, CPInstruction, etc. - * - * @version $Id: IndexedInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface IndexedInstruction { - - public int getIndex(); - - - public void setIndex( int index ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denote entity that refers to an index, e.g. local variable instructions, + * RET, CPInstruction, etc. + * + * @version $Id: IndexedInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface IndexedInstruction { + + public int getIndex(); + + + public void setIndex( int index ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Instruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Instruction.java index d3be0bd8..920bed5f 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Instruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Instruction.java @@ -1,293 +1,293 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; -import java.util.Locale; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.classfile.ConstantPool; -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * Abstract super class for all Java byte codes. - * - * @version $Id: Instruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class Instruction implements Cloneable, Serializable { - - protected short length = 1; // Length of instruction in bytes - protected short opcode = -1; // Opcode number - private static InstructionComparator cmp = InstructionComparator.DEFAULT; - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - Instruction() { - } - - - public Instruction(short opcode, short length) { - this.length = length; - this.opcode = opcode; - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - out.writeByte(opcode); // Common for all instructions - } - - - /** @return name of instruction, i.e., opcode name - */ - public String getName() { - return Constants.OPCODE_NAMES[opcode]; - } - - - /** - * Long output format: - * - * <name of opcode> "["<opcode number>"]" - * "("<length of instruction>")" - * - * @param verbose long/short format switch - * @return mnemonic for instruction - */ - public String toString( boolean verbose ) { - if (verbose) { - return getName() + "[" + opcode + "](" + length + ")"; - } else { - return getName(); - } - } - - - /** - * @return mnemonic for instruction in verbose format - */ - public String toString() { - return toString(true); - } - - - /** - * @return mnemonic for instruction with sumbolic references resolved - */ - public String toString( ConstantPool cp ) { - return toString(false); - } - - - /** - * Use with caution, since `BranchInstruction's have a `target' reference which - * is not copied correctly (only basic types are). This also applies for - * `Select' instructions with their multiple branch targets. - * - * @see BranchInstruction - * @return (shallow) copy of an instruction - */ - public Instruction copy() { - Instruction i = null; - // "Constant" instruction, no need to duplicate - if (InstructionConstants.INSTRUCTIONS[this.getOpcode()] != null) { - i = this; - } else { - try { - i = (Instruction) clone(); - } catch (CloneNotSupportedException e) { - System.err.println(e); - } - } - return i; - } - - - /** - * Read needed data (e.g. index) from file. - * - * @param bytes byte sequence to read from - * @param wide "wide" instruction flag - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - } - - - /** - * Read an instruction from (byte code) input stream and return the - * appropiate object. - * - * @param bytes input stream bytes - * @return instruction object being read - */ - public static final Instruction readInstruction( ByteSequence bytes ) throws IOException { - boolean wide = false; - short opcode = (short) bytes.readUnsignedByte(); - Instruction obj = null; - if (opcode == Constants.WIDE) { // Read next opcode after wide byte - wide = true; - opcode = (short) bytes.readUnsignedByte(); - } - if (InstructionConstants.INSTRUCTIONS[opcode] != null) { - return InstructionConstants.INSTRUCTIONS[opcode]; // Used predefined immutable object, if available - } - /* Find appropiate class, instantiate an (empty) instruction object - * and initialize it by hand. - */ - Class clazz; - try { - clazz = Class.forName(className(opcode)); - } catch (ClassNotFoundException cnfe) { - // If a class by that name does not exist, the opcode is illegal. - // Note that IMPDEP1, IMPDEP2, BREAKPOINT are also illegal in a sense. - throw new ClassGenException("Illegal opcode detected."); - } - try { - obj = (Instruction) clazz.newInstance(); - if (wide - && !((obj instanceof LocalVariableInstruction) || (obj instanceof IINC) || (obj instanceof RET))) { - throw new Exception("Illegal opcode after wide: " + opcode); - } - obj.setOpcode(opcode); - obj.initFromFile(bytes, wide); // Do further initializations, if any - // Byte code offset set in InstructionList - } catch (Exception e) { - throw new ClassGenException(e.toString()); - } - return obj; - } - - - private static final String className( short opcode ) { - String name = Constants.OPCODE_NAMES[opcode].toUpperCase(Locale.ENGLISH); - /* ICONST_0, etc. will be shortened to ICONST, etc., since ICONST_0 and the like - * are not implemented (directly). - */ - try { - int len = name.length(); - char ch1 = name.charAt(len - 2), ch2 = name.charAt(len - 1); - if ((ch1 == '_') && (ch2 >= '0') && (ch2 <= '5')) { - name = name.substring(0, len - 2); - } - if (name.equals("ICONST_M1")) { - name = "ICONST"; - } - } catch (StringIndexOutOfBoundsException e) { - System.err.println(e); - } - return "org.apache.bcel.generic." + name; - } - - - /** - * This method also gives right results for instructions whose - * effect on the stack depends on the constant pool entry they - * reference. - * @return Number of words consumed from stack by this instruction, - * or Constants.UNPREDICTABLE, if this can not be computed statically - */ - public int consumeStack( ConstantPoolGen cpg ) { - return Constants.CONSUME_STACK[opcode]; - } - - - /** - * This method also gives right results for instructions whose - * effect on the stack depends on the constant pool entry they - * reference. - * @return Number of words produced onto stack by this instruction, - * or Constants.UNPREDICTABLE, if this can not be computed statically - */ - public int produceStack( ConstantPoolGen cpg ) { - return Constants.PRODUCE_STACK[opcode]; - } - - - /** - * @return this instructions opcode - */ - public short getOpcode() { - return opcode; - } - - - /** - * @return length (in bytes) of instruction - */ - public int getLength() { - return length; - } - - - /** - * Needed in readInstruction. - */ - private void setOpcode( short opcode ) { - this.opcode = opcode; - } - - - /** Some instructions may be reused, so don't do anything by default. - */ - void dispose() { - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public abstract void accept( Visitor v ); - - - /** Get Comparator object used in the equals() method to determine - * equality of instructions. - * - * @return currently used comparator for equals() - */ - public static InstructionComparator getComparator() { - return cmp; - } - - - /** Set comparator to be used for equals(). - */ - public static void setComparator( InstructionComparator c ) { - cmp = c; - } - - - /** Check for equality, delegated to comparator - * @return true if that is an Instruction and has the same opcode - */ - public boolean equals( Object that ) { - return (that instanceof Instruction) ? cmp.equals(this, (Instruction) that) : false; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.Serializable; +import java.util.Locale; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.classfile.ConstantPool; +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * Abstract super class for all Java byte codes. + * + * @version $Id: Instruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class Instruction implements Cloneable, Serializable { + + protected short length = 1; // Length of instruction in bytes + protected short opcode = -1; // Opcode number + private static InstructionComparator cmp = InstructionComparator.DEFAULT; + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + Instruction() { + } + + + public Instruction(short opcode, short length) { + this.length = length; + this.opcode = opcode; + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + out.writeByte(opcode); // Common for all instructions + } + + + /** @return name of instruction, i.e., opcode name + */ + public String getName() { + return Constants.OPCODE_NAMES[opcode]; + } + + + /** + * Long output format: + * + * <name of opcode> "["<opcode number>"]" + * "("<length of instruction>")" + * + * @param verbose long/short format switch + * @return mnemonic for instruction + */ + public String toString( boolean verbose ) { + if (verbose) { + return getName() + "[" + opcode + "](" + length + ")"; + } else { + return getName(); + } + } + + + /** + * @return mnemonic for instruction in verbose format + */ + public String toString() { + return toString(true); + } + + + /** + * @return mnemonic for instruction with sumbolic references resolved + */ + public String toString( ConstantPool cp ) { + return toString(false); + } + + + /** + * Use with caution, since `BranchInstruction's have a `target' reference which + * is not copied correctly (only basic types are). This also applies for + * `Select' instructions with their multiple branch targets. + * + * @see BranchInstruction + * @return (shallow) copy of an instruction + */ + public Instruction copy() { + Instruction i = null; + // "Constant" instruction, no need to duplicate + if (InstructionConstants.INSTRUCTIONS[this.getOpcode()] != null) { + i = this; + } else { + try { + i = (Instruction) clone(); + } catch (CloneNotSupportedException e) { + System.err.println(e); + } + } + return i; + } + + + /** + * Read needed data (e.g. index) from file. + * + * @param bytes byte sequence to read from + * @param wide "wide" instruction flag + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + } + + + /** + * Read an instruction from (byte code) input stream and return the + * appropiate object. + * + * @param bytes input stream bytes + * @return instruction object being read + */ + public static final Instruction readInstruction( ByteSequence bytes ) throws IOException { + boolean wide = false; + short opcode = (short) bytes.readUnsignedByte(); + Instruction obj = null; + if (opcode == Constants.WIDE) { // Read next opcode after wide byte + wide = true; + opcode = (short) bytes.readUnsignedByte(); + } + if (InstructionConstants.INSTRUCTIONS[opcode] != null) { + return InstructionConstants.INSTRUCTIONS[opcode]; // Used predefined immutable object, if available + } + /* Find appropiate class, instantiate an (empty) instruction object + * and initialize it by hand. + */ + Class clazz; + try { + clazz = Class.forName(className(opcode)); + } catch (ClassNotFoundException cnfe) { + // If a class by that name does not exist, the opcode is illegal. + // Note that IMPDEP1, IMPDEP2, BREAKPOINT are also illegal in a sense. + throw new ClassGenException("Illegal opcode detected."); + } + try { + obj = (Instruction) clazz.newInstance(); + if (wide + && !((obj instanceof LocalVariableInstruction) || (obj instanceof IINC) || (obj instanceof RET))) { + throw new Exception("Illegal opcode after wide: " + opcode); + } + obj.setOpcode(opcode); + obj.initFromFile(bytes, wide); // Do further initializations, if any + // Byte code offset set in InstructionList + } catch (Exception e) { + throw new ClassGenException(e.toString()); + } + return obj; + } + + + private static final String className( short opcode ) { + String name = Constants.OPCODE_NAMES[opcode].toUpperCase(Locale.ENGLISH); + /* ICONST_0, etc. will be shortened to ICONST, etc., since ICONST_0 and the like + * are not implemented (directly). + */ + try { + int len = name.length(); + char ch1 = name.charAt(len - 2), ch2 = name.charAt(len - 1); + if ((ch1 == '_') && (ch2 >= '0') && (ch2 <= '5')) { + name = name.substring(0, len - 2); + } + if (name.equals("ICONST_M1")) { + name = "ICONST"; + } + } catch (StringIndexOutOfBoundsException e) { + System.err.println(e); + } + return "org.apache.bcel.generic." + name; + } + + + /** + * This method also gives right results for instructions whose + * effect on the stack depends on the constant pool entry they + * reference. + * @return Number of words consumed from stack by this instruction, + * or Constants.UNPREDICTABLE, if this can not be computed statically + */ + public int consumeStack( ConstantPoolGen cpg ) { + return Constants.CONSUME_STACK[opcode]; + } + + + /** + * This method also gives right results for instructions whose + * effect on the stack depends on the constant pool entry they + * reference. + * @return Number of words produced onto stack by this instruction, + * or Constants.UNPREDICTABLE, if this can not be computed statically + */ + public int produceStack( ConstantPoolGen cpg ) { + return Constants.PRODUCE_STACK[opcode]; + } + + + /** + * @return this instructions opcode + */ + public short getOpcode() { + return opcode; + } + + + /** + * @return length (in bytes) of instruction + */ + public int getLength() { + return length; + } + + + /** + * Needed in readInstruction. + */ + private void setOpcode( short opcode ) { + this.opcode = opcode; + } + + + /** Some instructions may be reused, so don't do anything by default. + */ + void dispose() { + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public abstract void accept( Visitor v ); + + + /** Get Comparator object used in the equals() method to determine + * equality of instructions. + * + * @return currently used comparator for equals() + */ + public static InstructionComparator getComparator() { + return cmp; + } + + + /** Set comparator to be used for equals(). + */ + public static void setComparator( InstructionComparator c ) { + cmp = c; + } + + + /** Check for equality, delegated to comparator + * @return true if that is an Instruction and has the same opcode + */ + public boolean equals( Object that ) { + return (that instanceof Instruction) ? cmp.equals(this, (Instruction) that) : false; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionComparator.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionComparator.java index 886eb3e1..3ef068e3 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionComparator.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionComparator.java @@ -1,69 +1,69 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Equality of instructions isn't clearly to be defined. You might - * wish, for example, to compare whether instructions have the same - * meaning. E.g., whether two INVOKEVIRTUALs describe the same - * call.
          The DEFAULT comparator however, considers two instructions - * to be equal if they have same opcode and point to the same indexes - * (if any) in the constant pool or the same local variable index. Branch - * instructions must have the same target. - * - * @see Instruction - * @version $Id: InstructionComparator.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface InstructionComparator { - - public static final InstructionComparator DEFAULT = new InstructionComparator() { - - public boolean equals( Instruction i1, Instruction i2 ) { - if (i1.opcode == i2.opcode) { - if (i1 instanceof Select) { - InstructionHandle[] t1 = ((Select) i1).getTargets(); - InstructionHandle[] t2 = ((Select) i2).getTargets(); - if (t1.length == t2.length) { - for (int i = 0; i < t1.length; i++) { - if (t1[i] != t2[i]) { - return false; - } - } - return true; - } - } else if (i1 instanceof BranchInstruction) { - return ((BranchInstruction) i1).target == ((BranchInstruction) i2).target; - } else if (i1 instanceof ConstantPushInstruction) { - return ((ConstantPushInstruction) i1).getValue().equals( - ((ConstantPushInstruction) i2).getValue()); - } else if (i1 instanceof IndexedInstruction) { - return ((IndexedInstruction) i1).getIndex() == ((IndexedInstruction) i2) - .getIndex(); - } else if (i1 instanceof NEWARRAY) { - return ((NEWARRAY) i1).getTypecode() == ((NEWARRAY) i2).getTypecode(); - } else { - return true; - } - } - return false; - } - }; - - - public boolean equals( Instruction i1, Instruction i2 ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Equality of instructions isn't clearly to be defined. You might + * wish, for example, to compare whether instructions have the same + * meaning. E.g., whether two INVOKEVIRTUALs describe the same + * call.
          The DEFAULT comparator however, considers two instructions + * to be equal if they have same opcode and point to the same indexes + * (if any) in the constant pool or the same local variable index. Branch + * instructions must have the same target. + * + * @see Instruction + * @version $Id: InstructionComparator.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface InstructionComparator { + + public static final InstructionComparator DEFAULT = new InstructionComparator() { + + public boolean equals( Instruction i1, Instruction i2 ) { + if (i1.opcode == i2.opcode) { + if (i1 instanceof Select) { + InstructionHandle[] t1 = ((Select) i1).getTargets(); + InstructionHandle[] t2 = ((Select) i2).getTargets(); + if (t1.length == t2.length) { + for (int i = 0; i < t1.length; i++) { + if (t1[i] != t2[i]) { + return false; + } + } + return true; + } + } else if (i1 instanceof BranchInstruction) { + return ((BranchInstruction) i1).target == ((BranchInstruction) i2).target; + } else if (i1 instanceof ConstantPushInstruction) { + return ((ConstantPushInstruction) i1).getValue().equals( + ((ConstantPushInstruction) i2).getValue()); + } else if (i1 instanceof IndexedInstruction) { + return ((IndexedInstruction) i1).getIndex() == ((IndexedInstruction) i2) + .getIndex(); + } else if (i1 instanceof NEWARRAY) { + return ((NEWARRAY) i1).getTypecode() == ((NEWARRAY) i2).getTypecode(); + } else { + return true; + } + } + return false; + } + }; + + + public boolean equals( Instruction i1, Instruction i2 ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionConstants.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionConstants.java index a33534f8..3b0f1dd5 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionConstants.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionConstants.java @@ -1,286 +1,286 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; - -/** - * This interface contains shareable instruction objects. - * - * In order to save memory you can use some instructions multiply, - * since they have an immutable state and are directly derived from - * Instruction. I.e. they have no instance fields that could be - * changed. Since some of these instructions like ICONST_0 occur - * very frequently this can save a lot of time and space. This - * feature is an adaptation of the FlyWeight design pattern, we - * just use an array instead of a factory. - * - * The Instructions can also accessed directly under their names, so - * it's possible to write il.append(Instruction.ICONST_0); - * - * @version $Id: InstructionConstants.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface InstructionConstants { - - /** Predefined instruction objects - */ - public static final Instruction NOP = new NOP(); - public static final Instruction ACONST_NULL = new ACONST_NULL(); - public static final Instruction ICONST_M1 = new ICONST(-1); - public static final Instruction ICONST_0 = new ICONST(0); - public static final Instruction ICONST_1 = new ICONST(1); - public static final Instruction ICONST_2 = new ICONST(2); - public static final Instruction ICONST_3 = new ICONST(3); - public static final Instruction ICONST_4 = new ICONST(4); - public static final Instruction ICONST_5 = new ICONST(5); - public static final Instruction LCONST_0 = new LCONST(0); - public static final Instruction LCONST_1 = new LCONST(1); - public static final Instruction FCONST_0 = new FCONST(0); - public static final Instruction FCONST_1 = new FCONST(1); - public static final Instruction FCONST_2 = new FCONST(2); - public static final Instruction DCONST_0 = new DCONST(0); - public static final Instruction DCONST_1 = new DCONST(1); - public static final ArrayInstruction IALOAD = new IALOAD(); - public static final ArrayInstruction LALOAD = new LALOAD(); - public static final ArrayInstruction FALOAD = new FALOAD(); - public static final ArrayInstruction DALOAD = new DALOAD(); - public static final ArrayInstruction AALOAD = new AALOAD(); - public static final ArrayInstruction BALOAD = new BALOAD(); - public static final ArrayInstruction CALOAD = new CALOAD(); - public static final ArrayInstruction SALOAD = new SALOAD(); - public static final ArrayInstruction IASTORE = new IASTORE(); - public static final ArrayInstruction LASTORE = new LASTORE(); - public static final ArrayInstruction FASTORE = new FASTORE(); - public static final ArrayInstruction DASTORE = new DASTORE(); - public static final ArrayInstruction AASTORE = new AASTORE(); - public static final ArrayInstruction BASTORE = new BASTORE(); - public static final ArrayInstruction CASTORE = new CASTORE(); - public static final ArrayInstruction SASTORE = new SASTORE(); - public static final StackInstruction POP = new POP(); - public static final StackInstruction POP2 = new POP2(); - public static final StackInstruction DUP = new DUP(); - public static final StackInstruction DUP_X1 = new DUP_X1(); - public static final StackInstruction DUP_X2 = new DUP_X2(); - public static final StackInstruction DUP2 = new DUP2(); - public static final StackInstruction DUP2_X1 = new DUP2_X1(); - public static final StackInstruction DUP2_X2 = new DUP2_X2(); - public static final StackInstruction SWAP = new SWAP(); - public static final ArithmeticInstruction IADD = new IADD(); - public static final ArithmeticInstruction LADD = new LADD(); - public static final ArithmeticInstruction FADD = new FADD(); - public static final ArithmeticInstruction DADD = new DADD(); - public static final ArithmeticInstruction ISUB = new ISUB(); - public static final ArithmeticInstruction LSUB = new LSUB(); - public static final ArithmeticInstruction FSUB = new FSUB(); - public static final ArithmeticInstruction DSUB = new DSUB(); - public static final ArithmeticInstruction IMUL = new IMUL(); - public static final ArithmeticInstruction LMUL = new LMUL(); - public static final ArithmeticInstruction FMUL = new FMUL(); - public static final ArithmeticInstruction DMUL = new DMUL(); - public static final ArithmeticInstruction IDIV = new IDIV(); - public static final ArithmeticInstruction LDIV = new LDIV(); - public static final ArithmeticInstruction FDIV = new FDIV(); - public static final ArithmeticInstruction DDIV = new DDIV(); - public static final ArithmeticInstruction IREM = new IREM(); - public static final ArithmeticInstruction LREM = new LREM(); - public static final ArithmeticInstruction FREM = new FREM(); - public static final ArithmeticInstruction DREM = new DREM(); - public static final ArithmeticInstruction INEG = new INEG(); - public static final ArithmeticInstruction LNEG = new LNEG(); - public static final ArithmeticInstruction FNEG = new FNEG(); - public static final ArithmeticInstruction DNEG = new DNEG(); - public static final ArithmeticInstruction ISHL = new ISHL(); - public static final ArithmeticInstruction LSHL = new LSHL(); - public static final ArithmeticInstruction ISHR = new ISHR(); - public static final ArithmeticInstruction LSHR = new LSHR(); - public static final ArithmeticInstruction IUSHR = new IUSHR(); - public static final ArithmeticInstruction LUSHR = new LUSHR(); - public static final ArithmeticInstruction IAND = new IAND(); - public static final ArithmeticInstruction LAND = new LAND(); - public static final ArithmeticInstruction IOR = new IOR(); - public static final ArithmeticInstruction LOR = new LOR(); - public static final ArithmeticInstruction IXOR = new IXOR(); - public static final ArithmeticInstruction LXOR = new LXOR(); - public static final ConversionInstruction I2L = new I2L(); - public static final ConversionInstruction I2F = new I2F(); - public static final ConversionInstruction I2D = new I2D(); - public static final ConversionInstruction L2I = new L2I(); - public static final ConversionInstruction L2F = new L2F(); - public static final ConversionInstruction L2D = new L2D(); - public static final ConversionInstruction F2I = new F2I(); - public static final ConversionInstruction F2L = new F2L(); - public static final ConversionInstruction F2D = new F2D(); - public static final ConversionInstruction D2I = new D2I(); - public static final ConversionInstruction D2L = new D2L(); - public static final ConversionInstruction D2F = new D2F(); - public static final ConversionInstruction I2B = new I2B(); - public static final ConversionInstruction I2C = new I2C(); - public static final ConversionInstruction I2S = new I2S(); - public static final Instruction LCMP = new LCMP(); - public static final Instruction FCMPL = new FCMPL(); - public static final Instruction FCMPG = new FCMPG(); - public static final Instruction DCMPL = new DCMPL(); - public static final Instruction DCMPG = new DCMPG(); - public static final ReturnInstruction IRETURN = new IRETURN(); - public static final ReturnInstruction LRETURN = new LRETURN(); - public static final ReturnInstruction FRETURN = new FRETURN(); - public static final ReturnInstruction DRETURN = new DRETURN(); - public static final ReturnInstruction ARETURN = new ARETURN(); - public static final ReturnInstruction RETURN = new RETURN(); - public static final Instruction ARRAYLENGTH = new ARRAYLENGTH(); - public static final Instruction ATHROW = new ATHROW(); - public static final Instruction MONITORENTER = new MONITORENTER(); - public static final Instruction MONITOREXIT = new MONITOREXIT(); - /** You can use these constants in multiple places safely, if you can guarantee - * that you will never alter their internal values, e.g. call setIndex(). - */ - public static final LocalVariableInstruction THIS = new ALOAD(0); - public static final LocalVariableInstruction ALOAD_0 = THIS; - public static final LocalVariableInstruction ALOAD_1 = new ALOAD(1); - public static final LocalVariableInstruction ALOAD_2 = new ALOAD(2); - public static final LocalVariableInstruction ILOAD_0 = new ILOAD(0); - public static final LocalVariableInstruction ILOAD_1 = new ILOAD(1); - public static final LocalVariableInstruction ILOAD_2 = new ILOAD(2); - public static final LocalVariableInstruction ASTORE_0 = new ASTORE(0); - public static final LocalVariableInstruction ASTORE_1 = new ASTORE(1); - public static final LocalVariableInstruction ASTORE_2 = new ASTORE(2); - public static final LocalVariableInstruction ISTORE_0 = new ISTORE(0); - public static final LocalVariableInstruction ISTORE_1 = new ISTORE(1); - public static final LocalVariableInstruction ISTORE_2 = new ISTORE(2); - /** Get object via its opcode, for immutable instructions like - * branch instructions entries are set to null. - */ - public static final Instruction[] INSTRUCTIONS = new Instruction[256]; - /** Interfaces may have no static initializers, so we simulate this - * with an inner class. - */ - static final Clinit bla = new Clinit(); - - static class Clinit { - - Clinit() { - INSTRUCTIONS[Constants.NOP] = NOP; - INSTRUCTIONS[Constants.ACONST_NULL] = ACONST_NULL; - INSTRUCTIONS[Constants.ICONST_M1] = ICONST_M1; - INSTRUCTIONS[Constants.ICONST_0] = ICONST_0; - INSTRUCTIONS[Constants.ICONST_1] = ICONST_1; - INSTRUCTIONS[Constants.ICONST_2] = ICONST_2; - INSTRUCTIONS[Constants.ICONST_3] = ICONST_3; - INSTRUCTIONS[Constants.ICONST_4] = ICONST_4; - INSTRUCTIONS[Constants.ICONST_5] = ICONST_5; - INSTRUCTIONS[Constants.LCONST_0] = LCONST_0; - INSTRUCTIONS[Constants.LCONST_1] = LCONST_1; - INSTRUCTIONS[Constants.FCONST_0] = FCONST_0; - INSTRUCTIONS[Constants.FCONST_1] = FCONST_1; - INSTRUCTIONS[Constants.FCONST_2] = FCONST_2; - INSTRUCTIONS[Constants.DCONST_0] = DCONST_0; - INSTRUCTIONS[Constants.DCONST_1] = DCONST_1; - INSTRUCTIONS[Constants.IALOAD] = IALOAD; - INSTRUCTIONS[Constants.LALOAD] = LALOAD; - INSTRUCTIONS[Constants.FALOAD] = FALOAD; - INSTRUCTIONS[Constants.DALOAD] = DALOAD; - INSTRUCTIONS[Constants.AALOAD] = AALOAD; - INSTRUCTIONS[Constants.BALOAD] = BALOAD; - INSTRUCTIONS[Constants.CALOAD] = CALOAD; - INSTRUCTIONS[Constants.SALOAD] = SALOAD; - INSTRUCTIONS[Constants.IASTORE] = IASTORE; - INSTRUCTIONS[Constants.LASTORE] = LASTORE; - INSTRUCTIONS[Constants.FASTORE] = FASTORE; - INSTRUCTIONS[Constants.DASTORE] = DASTORE; - INSTRUCTIONS[Constants.AASTORE] = AASTORE; - INSTRUCTIONS[Constants.BASTORE] = BASTORE; - INSTRUCTIONS[Constants.CASTORE] = CASTORE; - INSTRUCTIONS[Constants.SASTORE] = SASTORE; - INSTRUCTIONS[Constants.POP] = POP; - INSTRUCTIONS[Constants.POP2] = POP2; - INSTRUCTIONS[Constants.DUP] = DUP; - INSTRUCTIONS[Constants.DUP_X1] = DUP_X1; - INSTRUCTIONS[Constants.DUP_X2] = DUP_X2; - INSTRUCTIONS[Constants.DUP2] = DUP2; - INSTRUCTIONS[Constants.DUP2_X1] = DUP2_X1; - INSTRUCTIONS[Constants.DUP2_X2] = DUP2_X2; - INSTRUCTIONS[Constants.SWAP] = SWAP; - INSTRUCTIONS[Constants.IADD] = IADD; - INSTRUCTIONS[Constants.LADD] = LADD; - INSTRUCTIONS[Constants.FADD] = FADD; - INSTRUCTIONS[Constants.DADD] = DADD; - INSTRUCTIONS[Constants.ISUB] = ISUB; - INSTRUCTIONS[Constants.LSUB] = LSUB; - INSTRUCTIONS[Constants.FSUB] = FSUB; - INSTRUCTIONS[Constants.DSUB] = DSUB; - INSTRUCTIONS[Constants.IMUL] = IMUL; - INSTRUCTIONS[Constants.LMUL] = LMUL; - INSTRUCTIONS[Constants.FMUL] = FMUL; - INSTRUCTIONS[Constants.DMUL] = DMUL; - INSTRUCTIONS[Constants.IDIV] = IDIV; - INSTRUCTIONS[Constants.LDIV] = LDIV; - INSTRUCTIONS[Constants.FDIV] = FDIV; - INSTRUCTIONS[Constants.DDIV] = DDIV; - INSTRUCTIONS[Constants.IREM] = IREM; - INSTRUCTIONS[Constants.LREM] = LREM; - INSTRUCTIONS[Constants.FREM] = FREM; - INSTRUCTIONS[Constants.DREM] = DREM; - INSTRUCTIONS[Constants.INEG] = INEG; - INSTRUCTIONS[Constants.LNEG] = LNEG; - INSTRUCTIONS[Constants.FNEG] = FNEG; - INSTRUCTIONS[Constants.DNEG] = DNEG; - INSTRUCTIONS[Constants.ISHL] = ISHL; - INSTRUCTIONS[Constants.LSHL] = LSHL; - INSTRUCTIONS[Constants.ISHR] = ISHR; - INSTRUCTIONS[Constants.LSHR] = LSHR; - INSTRUCTIONS[Constants.IUSHR] = IUSHR; - INSTRUCTIONS[Constants.LUSHR] = LUSHR; - INSTRUCTIONS[Constants.IAND] = IAND; - INSTRUCTIONS[Constants.LAND] = LAND; - INSTRUCTIONS[Constants.IOR] = IOR; - INSTRUCTIONS[Constants.LOR] = LOR; - INSTRUCTIONS[Constants.IXOR] = IXOR; - INSTRUCTIONS[Constants.LXOR] = LXOR; - INSTRUCTIONS[Constants.I2L] = I2L; - INSTRUCTIONS[Constants.I2F] = I2F; - INSTRUCTIONS[Constants.I2D] = I2D; - INSTRUCTIONS[Constants.L2I] = L2I; - INSTRUCTIONS[Constants.L2F] = L2F; - INSTRUCTIONS[Constants.L2D] = L2D; - INSTRUCTIONS[Constants.F2I] = F2I; - INSTRUCTIONS[Constants.F2L] = F2L; - INSTRUCTIONS[Constants.F2D] = F2D; - INSTRUCTIONS[Constants.D2I] = D2I; - INSTRUCTIONS[Constants.D2L] = D2L; - INSTRUCTIONS[Constants.D2F] = D2F; - INSTRUCTIONS[Constants.I2B] = I2B; - INSTRUCTIONS[Constants.I2C] = I2C; - INSTRUCTIONS[Constants.I2S] = I2S; - INSTRUCTIONS[Constants.LCMP] = LCMP; - INSTRUCTIONS[Constants.FCMPL] = FCMPL; - INSTRUCTIONS[Constants.FCMPG] = FCMPG; - INSTRUCTIONS[Constants.DCMPL] = DCMPL; - INSTRUCTIONS[Constants.DCMPG] = DCMPG; - INSTRUCTIONS[Constants.IRETURN] = IRETURN; - INSTRUCTIONS[Constants.LRETURN] = LRETURN; - INSTRUCTIONS[Constants.FRETURN] = FRETURN; - INSTRUCTIONS[Constants.DRETURN] = DRETURN; - INSTRUCTIONS[Constants.ARETURN] = ARETURN; - INSTRUCTIONS[Constants.RETURN] = RETURN; - INSTRUCTIONS[Constants.ARRAYLENGTH] = ARRAYLENGTH; - INSTRUCTIONS[Constants.ATHROW] = ATHROW; - INSTRUCTIONS[Constants.MONITORENTER] = MONITORENTER; - INSTRUCTIONS[Constants.MONITOREXIT] = MONITOREXIT; - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; + +/** + * This interface contains shareable instruction objects. + * + * In order to save memory you can use some instructions multiply, + * since they have an immutable state and are directly derived from + * Instruction. I.e. they have no instance fields that could be + * changed. Since some of these instructions like ICONST_0 occur + * very frequently this can save a lot of time and space. This + * feature is an adaptation of the FlyWeight design pattern, we + * just use an array instead of a factory. + * + * The Instructions can also accessed directly under their names, so + * it's possible to write il.append(Instruction.ICONST_0); + * + * @version $Id: InstructionConstants.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface InstructionConstants { + + /** Predefined instruction objects + */ + public static final Instruction NOP = new NOP(); + public static final Instruction ACONST_NULL = new ACONST_NULL(); + public static final Instruction ICONST_M1 = new ICONST(-1); + public static final Instruction ICONST_0 = new ICONST(0); + public static final Instruction ICONST_1 = new ICONST(1); + public static final Instruction ICONST_2 = new ICONST(2); + public static final Instruction ICONST_3 = new ICONST(3); + public static final Instruction ICONST_4 = new ICONST(4); + public static final Instruction ICONST_5 = new ICONST(5); + public static final Instruction LCONST_0 = new LCONST(0); + public static final Instruction LCONST_1 = new LCONST(1); + public static final Instruction FCONST_0 = new FCONST(0); + public static final Instruction FCONST_1 = new FCONST(1); + public static final Instruction FCONST_2 = new FCONST(2); + public static final Instruction DCONST_0 = new DCONST(0); + public static final Instruction DCONST_1 = new DCONST(1); + public static final ArrayInstruction IALOAD = new IALOAD(); + public static final ArrayInstruction LALOAD = new LALOAD(); + public static final ArrayInstruction FALOAD = new FALOAD(); + public static final ArrayInstruction DALOAD = new DALOAD(); + public static final ArrayInstruction AALOAD = new AALOAD(); + public static final ArrayInstruction BALOAD = new BALOAD(); + public static final ArrayInstruction CALOAD = new CALOAD(); + public static final ArrayInstruction SALOAD = new SALOAD(); + public static final ArrayInstruction IASTORE = new IASTORE(); + public static final ArrayInstruction LASTORE = new LASTORE(); + public static final ArrayInstruction FASTORE = new FASTORE(); + public static final ArrayInstruction DASTORE = new DASTORE(); + public static final ArrayInstruction AASTORE = new AASTORE(); + public static final ArrayInstruction BASTORE = new BASTORE(); + public static final ArrayInstruction CASTORE = new CASTORE(); + public static final ArrayInstruction SASTORE = new SASTORE(); + public static final StackInstruction POP = new POP(); + public static final StackInstruction POP2 = new POP2(); + public static final StackInstruction DUP = new DUP(); + public static final StackInstruction DUP_X1 = new DUP_X1(); + public static final StackInstruction DUP_X2 = new DUP_X2(); + public static final StackInstruction DUP2 = new DUP2(); + public static final StackInstruction DUP2_X1 = new DUP2_X1(); + public static final StackInstruction DUP2_X2 = new DUP2_X2(); + public static final StackInstruction SWAP = new SWAP(); + public static final ArithmeticInstruction IADD = new IADD(); + public static final ArithmeticInstruction LADD = new LADD(); + public static final ArithmeticInstruction FADD = new FADD(); + public static final ArithmeticInstruction DADD = new DADD(); + public static final ArithmeticInstruction ISUB = new ISUB(); + public static final ArithmeticInstruction LSUB = new LSUB(); + public static final ArithmeticInstruction FSUB = new FSUB(); + public static final ArithmeticInstruction DSUB = new DSUB(); + public static final ArithmeticInstruction IMUL = new IMUL(); + public static final ArithmeticInstruction LMUL = new LMUL(); + public static final ArithmeticInstruction FMUL = new FMUL(); + public static final ArithmeticInstruction DMUL = new DMUL(); + public static final ArithmeticInstruction IDIV = new IDIV(); + public static final ArithmeticInstruction LDIV = new LDIV(); + public static final ArithmeticInstruction FDIV = new FDIV(); + public static final ArithmeticInstruction DDIV = new DDIV(); + public static final ArithmeticInstruction IREM = new IREM(); + public static final ArithmeticInstruction LREM = new LREM(); + public static final ArithmeticInstruction FREM = new FREM(); + public static final ArithmeticInstruction DREM = new DREM(); + public static final ArithmeticInstruction INEG = new INEG(); + public static final ArithmeticInstruction LNEG = new LNEG(); + public static final ArithmeticInstruction FNEG = new FNEG(); + public static final ArithmeticInstruction DNEG = new DNEG(); + public static final ArithmeticInstruction ISHL = new ISHL(); + public static final ArithmeticInstruction LSHL = new LSHL(); + public static final ArithmeticInstruction ISHR = new ISHR(); + public static final ArithmeticInstruction LSHR = new LSHR(); + public static final ArithmeticInstruction IUSHR = new IUSHR(); + public static final ArithmeticInstruction LUSHR = new LUSHR(); + public static final ArithmeticInstruction IAND = new IAND(); + public static final ArithmeticInstruction LAND = new LAND(); + public static final ArithmeticInstruction IOR = new IOR(); + public static final ArithmeticInstruction LOR = new LOR(); + public static final ArithmeticInstruction IXOR = new IXOR(); + public static final ArithmeticInstruction LXOR = new LXOR(); + public static final ConversionInstruction I2L = new I2L(); + public static final ConversionInstruction I2F = new I2F(); + public static final ConversionInstruction I2D = new I2D(); + public static final ConversionInstruction L2I = new L2I(); + public static final ConversionInstruction L2F = new L2F(); + public static final ConversionInstruction L2D = new L2D(); + public static final ConversionInstruction F2I = new F2I(); + public static final ConversionInstruction F2L = new F2L(); + public static final ConversionInstruction F2D = new F2D(); + public static final ConversionInstruction D2I = new D2I(); + public static final ConversionInstruction D2L = new D2L(); + public static final ConversionInstruction D2F = new D2F(); + public static final ConversionInstruction I2B = new I2B(); + public static final ConversionInstruction I2C = new I2C(); + public static final ConversionInstruction I2S = new I2S(); + public static final Instruction LCMP = new LCMP(); + public static final Instruction FCMPL = new FCMPL(); + public static final Instruction FCMPG = new FCMPG(); + public static final Instruction DCMPL = new DCMPL(); + public static final Instruction DCMPG = new DCMPG(); + public static final ReturnInstruction IRETURN = new IRETURN(); + public static final ReturnInstruction LRETURN = new LRETURN(); + public static final ReturnInstruction FRETURN = new FRETURN(); + public static final ReturnInstruction DRETURN = new DRETURN(); + public static final ReturnInstruction ARETURN = new ARETURN(); + public static final ReturnInstruction RETURN = new RETURN(); + public static final Instruction ARRAYLENGTH = new ARRAYLENGTH(); + public static final Instruction ATHROW = new ATHROW(); + public static final Instruction MONITORENTER = new MONITORENTER(); + public static final Instruction MONITOREXIT = new MONITOREXIT(); + /** You can use these constants in multiple places safely, if you can guarantee + * that you will never alter their internal values, e.g. call setIndex(). + */ + public static final LocalVariableInstruction THIS = new ALOAD(0); + public static final LocalVariableInstruction ALOAD_0 = THIS; + public static final LocalVariableInstruction ALOAD_1 = new ALOAD(1); + public static final LocalVariableInstruction ALOAD_2 = new ALOAD(2); + public static final LocalVariableInstruction ILOAD_0 = new ILOAD(0); + public static final LocalVariableInstruction ILOAD_1 = new ILOAD(1); + public static final LocalVariableInstruction ILOAD_2 = new ILOAD(2); + public static final LocalVariableInstruction ASTORE_0 = new ASTORE(0); + public static final LocalVariableInstruction ASTORE_1 = new ASTORE(1); + public static final LocalVariableInstruction ASTORE_2 = new ASTORE(2); + public static final LocalVariableInstruction ISTORE_0 = new ISTORE(0); + public static final LocalVariableInstruction ISTORE_1 = new ISTORE(1); + public static final LocalVariableInstruction ISTORE_2 = new ISTORE(2); + /** Get object via its opcode, for immutable instructions like + * branch instructions entries are set to null. + */ + public static final Instruction[] INSTRUCTIONS = new Instruction[256]; + /** Interfaces may have no static initializers, so we simulate this + * with an inner class. + */ + static final Clinit bla = new Clinit(); + + static class Clinit { + + Clinit() { + INSTRUCTIONS[Constants.NOP] = NOP; + INSTRUCTIONS[Constants.ACONST_NULL] = ACONST_NULL; + INSTRUCTIONS[Constants.ICONST_M1] = ICONST_M1; + INSTRUCTIONS[Constants.ICONST_0] = ICONST_0; + INSTRUCTIONS[Constants.ICONST_1] = ICONST_1; + INSTRUCTIONS[Constants.ICONST_2] = ICONST_2; + INSTRUCTIONS[Constants.ICONST_3] = ICONST_3; + INSTRUCTIONS[Constants.ICONST_4] = ICONST_4; + INSTRUCTIONS[Constants.ICONST_5] = ICONST_5; + INSTRUCTIONS[Constants.LCONST_0] = LCONST_0; + INSTRUCTIONS[Constants.LCONST_1] = LCONST_1; + INSTRUCTIONS[Constants.FCONST_0] = FCONST_0; + INSTRUCTIONS[Constants.FCONST_1] = FCONST_1; + INSTRUCTIONS[Constants.FCONST_2] = FCONST_2; + INSTRUCTIONS[Constants.DCONST_0] = DCONST_0; + INSTRUCTIONS[Constants.DCONST_1] = DCONST_1; + INSTRUCTIONS[Constants.IALOAD] = IALOAD; + INSTRUCTIONS[Constants.LALOAD] = LALOAD; + INSTRUCTIONS[Constants.FALOAD] = FALOAD; + INSTRUCTIONS[Constants.DALOAD] = DALOAD; + INSTRUCTIONS[Constants.AALOAD] = AALOAD; + INSTRUCTIONS[Constants.BALOAD] = BALOAD; + INSTRUCTIONS[Constants.CALOAD] = CALOAD; + INSTRUCTIONS[Constants.SALOAD] = SALOAD; + INSTRUCTIONS[Constants.IASTORE] = IASTORE; + INSTRUCTIONS[Constants.LASTORE] = LASTORE; + INSTRUCTIONS[Constants.FASTORE] = FASTORE; + INSTRUCTIONS[Constants.DASTORE] = DASTORE; + INSTRUCTIONS[Constants.AASTORE] = AASTORE; + INSTRUCTIONS[Constants.BASTORE] = BASTORE; + INSTRUCTIONS[Constants.CASTORE] = CASTORE; + INSTRUCTIONS[Constants.SASTORE] = SASTORE; + INSTRUCTIONS[Constants.POP] = POP; + INSTRUCTIONS[Constants.POP2] = POP2; + INSTRUCTIONS[Constants.DUP] = DUP; + INSTRUCTIONS[Constants.DUP_X1] = DUP_X1; + INSTRUCTIONS[Constants.DUP_X2] = DUP_X2; + INSTRUCTIONS[Constants.DUP2] = DUP2; + INSTRUCTIONS[Constants.DUP2_X1] = DUP2_X1; + INSTRUCTIONS[Constants.DUP2_X2] = DUP2_X2; + INSTRUCTIONS[Constants.SWAP] = SWAP; + INSTRUCTIONS[Constants.IADD] = IADD; + INSTRUCTIONS[Constants.LADD] = LADD; + INSTRUCTIONS[Constants.FADD] = FADD; + INSTRUCTIONS[Constants.DADD] = DADD; + INSTRUCTIONS[Constants.ISUB] = ISUB; + INSTRUCTIONS[Constants.LSUB] = LSUB; + INSTRUCTIONS[Constants.FSUB] = FSUB; + INSTRUCTIONS[Constants.DSUB] = DSUB; + INSTRUCTIONS[Constants.IMUL] = IMUL; + INSTRUCTIONS[Constants.LMUL] = LMUL; + INSTRUCTIONS[Constants.FMUL] = FMUL; + INSTRUCTIONS[Constants.DMUL] = DMUL; + INSTRUCTIONS[Constants.IDIV] = IDIV; + INSTRUCTIONS[Constants.LDIV] = LDIV; + INSTRUCTIONS[Constants.FDIV] = FDIV; + INSTRUCTIONS[Constants.DDIV] = DDIV; + INSTRUCTIONS[Constants.IREM] = IREM; + INSTRUCTIONS[Constants.LREM] = LREM; + INSTRUCTIONS[Constants.FREM] = FREM; + INSTRUCTIONS[Constants.DREM] = DREM; + INSTRUCTIONS[Constants.INEG] = INEG; + INSTRUCTIONS[Constants.LNEG] = LNEG; + INSTRUCTIONS[Constants.FNEG] = FNEG; + INSTRUCTIONS[Constants.DNEG] = DNEG; + INSTRUCTIONS[Constants.ISHL] = ISHL; + INSTRUCTIONS[Constants.LSHL] = LSHL; + INSTRUCTIONS[Constants.ISHR] = ISHR; + INSTRUCTIONS[Constants.LSHR] = LSHR; + INSTRUCTIONS[Constants.IUSHR] = IUSHR; + INSTRUCTIONS[Constants.LUSHR] = LUSHR; + INSTRUCTIONS[Constants.IAND] = IAND; + INSTRUCTIONS[Constants.LAND] = LAND; + INSTRUCTIONS[Constants.IOR] = IOR; + INSTRUCTIONS[Constants.LOR] = LOR; + INSTRUCTIONS[Constants.IXOR] = IXOR; + INSTRUCTIONS[Constants.LXOR] = LXOR; + INSTRUCTIONS[Constants.I2L] = I2L; + INSTRUCTIONS[Constants.I2F] = I2F; + INSTRUCTIONS[Constants.I2D] = I2D; + INSTRUCTIONS[Constants.L2I] = L2I; + INSTRUCTIONS[Constants.L2F] = L2F; + INSTRUCTIONS[Constants.L2D] = L2D; + INSTRUCTIONS[Constants.F2I] = F2I; + INSTRUCTIONS[Constants.F2L] = F2L; + INSTRUCTIONS[Constants.F2D] = F2D; + INSTRUCTIONS[Constants.D2I] = D2I; + INSTRUCTIONS[Constants.D2L] = D2L; + INSTRUCTIONS[Constants.D2F] = D2F; + INSTRUCTIONS[Constants.I2B] = I2B; + INSTRUCTIONS[Constants.I2C] = I2C; + INSTRUCTIONS[Constants.I2S] = I2S; + INSTRUCTIONS[Constants.LCMP] = LCMP; + INSTRUCTIONS[Constants.FCMPL] = FCMPL; + INSTRUCTIONS[Constants.FCMPG] = FCMPG; + INSTRUCTIONS[Constants.DCMPL] = DCMPL; + INSTRUCTIONS[Constants.DCMPG] = DCMPG; + INSTRUCTIONS[Constants.IRETURN] = IRETURN; + INSTRUCTIONS[Constants.LRETURN] = LRETURN; + INSTRUCTIONS[Constants.FRETURN] = FRETURN; + INSTRUCTIONS[Constants.DRETURN] = DRETURN; + INSTRUCTIONS[Constants.ARETURN] = ARETURN; + INSTRUCTIONS[Constants.RETURN] = RETURN; + INSTRUCTIONS[Constants.ARRAYLENGTH] = ARRAYLENGTH; + INSTRUCTIONS[Constants.ATHROW] = ATHROW; + INSTRUCTIONS[Constants.MONITORENTER] = MONITORENTER; + INSTRUCTIONS[Constants.MONITOREXIT] = MONITOREXIT; + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionFactory.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionFactory.java index d436e609..82df07b4 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionFactory.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionFactory.java @@ -1,743 +1,743 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; - -/** - * Instances of this class may be used, e.g., to generate typed - * versions of instructions. Its main purpose is to be used as the - * byte code generating backend of a compiler. You can subclass it to - * add your own create methods. - * - * @version $Id: InstructionFactory.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constants - */ -public class InstructionFactory implements InstructionConstants, java.io.Serializable { - - protected ClassGen cg; - protected ConstantPoolGen cp; - - - public InstructionFactory(ClassGen cg, ConstantPoolGen cp) { - this.cg = cg; - this.cp = cp; - } - - - /** Initialize with ClassGen object - */ - public InstructionFactory(ClassGen cg) { - this(cg, cg.getConstantPool()); - } - - - /** Initialize just with ConstantPoolGen object - */ - public InstructionFactory(ConstantPoolGen cp) { - this(null, cp); - } - - - /** Create an invoke instruction. - * - * @param class_name name of the called class - * @param name name of the called method - * @param ret_type return type of method - * @param arg_types argument types of method - * @param kind how to invoke, i.e., INVOKEINTERFACE, INVOKESTATIC, INVOKEVIRTUAL, - * or INVOKESPECIAL - * @see Constants - */ - public InvokeInstruction createInvoke( String class_name, String name, Type ret_type, - Type[] arg_types, short kind ) { - int index; - int nargs = 0; - String signature = Type.getMethodSignature(ret_type, arg_types); - for (int i = 0; i < arg_types.length; i++) { - nargs += arg_types[i].getSize(); - } - if (kind == Constants.INVOKEINTERFACE) { - index = cp.addInterfaceMethodref(class_name, name, signature); - } else { - index = cp.addMethodref(class_name, name, signature); - } - switch (kind) { - case Constants.INVOKESPECIAL: - return new INVOKESPECIAL(index); - case Constants.INVOKEVIRTUAL: - return new INVOKEVIRTUAL(index); - case Constants.INVOKESTATIC: - return new INVOKESTATIC(index); - case Constants.INVOKEINTERFACE: - return new INVOKEINTERFACE(index, nargs + 1); - default: - throw new RuntimeException("Oops: Unknown invoke kind:" + kind); - } - } - - - /** Create a call to the most popular System.out.println() method. - * - * @param s the string to print - */ - public InstructionList createPrintln( String s ) { - InstructionList il = new InstructionList(); - int out = cp.addFieldref("java.lang.System", "out", "Ljava/io/PrintStream;"); - int println = cp.addMethodref("java.io.PrintStream", "println", "(Ljava/lang/String;)V"); - il.append(new GETSTATIC(out)); - il.append(new PUSH(cp, s)); - il.append(new INVOKEVIRTUAL(println)); - return il; - } - - - /** Uses PUSH to push a constant value onto the stack. - * @param value must be of type Number, Boolean, Character or String - */ - public Instruction createConstant( Object value ) { - PUSH push; - if (value instanceof Number) { - push = new PUSH(cp, (Number) value); - } else if (value instanceof String) { - push = new PUSH(cp, (String) value); - } else if (value instanceof Boolean) { - push = new PUSH(cp, (Boolean) value); - } else if (value instanceof Character) { - push = new PUSH(cp, (Character) value); - } else { - throw new ClassGenException("Illegal type: " + value.getClass()); - } - return push.getInstruction(); - } - - private static class MethodObject { - - Type[] arg_types; - Type result_type; - String class_name; - String name; - int access; - - - MethodObject(String c, String n, Type r, Type[] a, int acc) { - class_name = c; - name = n; - result_type = r; - arg_types = a; - access = acc; - } - } - - - private InvokeInstruction createInvoke( MethodObject m, short kind ) { - return createInvoke(m.class_name, m.name, m.result_type, m.arg_types, kind); - } - - private static MethodObject[] append_mos = { - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { - Type.STRING - }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { - Type.OBJECT - }, Constants.ACC_PUBLIC), - null, - null, // indices 2, 3 - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { - Type.BOOLEAN - }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { - Type.CHAR - }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { - Type.FLOAT - }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { - Type.DOUBLE - }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { - Type.INT - }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, // No append(byte) - new Type[] { - Type.INT - }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, // No append(short) - new Type[] { - Type.INT - }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { - Type.LONG - }, Constants.ACC_PUBLIC) - }; - - - private static final boolean isString( Type type ) { - return ((type instanceof ObjectType) && ((ObjectType) type).getClassName().equals( - "java.lang.String")); - } - - - public Instruction createAppend( Type type ) { - byte t = type.getType(); - if (isString(type)) { - return createInvoke(append_mos[0], Constants.INVOKEVIRTUAL); - } - switch (t) { - case Constants.T_BOOLEAN: - case Constants.T_CHAR: - case Constants.T_FLOAT: - case Constants.T_DOUBLE: - case Constants.T_BYTE: - case Constants.T_SHORT: - case Constants.T_INT: - case Constants.T_LONG: - return createInvoke(append_mos[t], Constants.INVOKEVIRTUAL); - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return createInvoke(append_mos[1], Constants.INVOKEVIRTUAL); - default: - throw new RuntimeException("Oops: No append for this type? " + type); - } - } - - - /** Create a field instruction. - * - * @param class_name name of the accessed class - * @param name name of the referenced field - * @param type type of field - * @param kind how to access, i.e., GETFIELD, PUTFIELD, GETSTATIC, PUTSTATIC - * @see Constants - */ - public FieldInstruction createFieldAccess( String class_name, String name, Type type, short kind ) { - int index; - String signature = type.getSignature(); - index = cp.addFieldref(class_name, name, signature); - switch (kind) { - case Constants.GETFIELD: - return new GETFIELD(index); - case Constants.PUTFIELD: - return new PUTFIELD(index); - case Constants.GETSTATIC: - return new GETSTATIC(index); - case Constants.PUTSTATIC: - return new PUTSTATIC(index); - default: - throw new RuntimeException("Oops: Unknown getfield kind:" + kind); - } - } - - - /** Create reference to `this' - */ - public static Instruction createThis() { - return new ALOAD(0); - } - - - /** Create typed return - */ - public static ReturnInstruction createReturn( Type type ) { - switch (type.getType()) { - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return ARETURN; - case Constants.T_INT: - case Constants.T_SHORT: - case Constants.T_BOOLEAN: - case Constants.T_CHAR: - case Constants.T_BYTE: - return IRETURN; - case Constants.T_FLOAT: - return FRETURN; - case Constants.T_DOUBLE: - return DRETURN; - case Constants.T_LONG: - return LRETURN; - case Constants.T_VOID: - return RETURN; - default: - throw new RuntimeException("Invalid type: " + type); - } - } - - - private static final ArithmeticInstruction createBinaryIntOp( char first, String op ) { - switch (first) { - case '-': - return ISUB; - case '+': - return IADD; - case '%': - return IREM; - case '*': - return IMUL; - case '/': - return IDIV; - case '&': - return IAND; - case '|': - return IOR; - case '^': - return IXOR; - case '<': - return ISHL; - case '>': - return op.equals(">>>") - ? (ArithmeticInstruction) IUSHR - : (ArithmeticInstruction) ISHR; - default: - throw new RuntimeException("Invalid operand " + op); - } - } - - - private static final ArithmeticInstruction createBinaryLongOp( char first, String op ) { - switch (first) { - case '-': - return LSUB; - case '+': - return LADD; - case '%': - return LREM; - case '*': - return LMUL; - case '/': - return LDIV; - case '&': - return LAND; - case '|': - return LOR; - case '^': - return LXOR; - case '<': - return LSHL; - case '>': - return op.equals(">>>") - ? (ArithmeticInstruction) LUSHR - : (ArithmeticInstruction) LSHR; - default: - throw new RuntimeException("Invalid operand " + op); - } - } - - - private static final ArithmeticInstruction createBinaryFloatOp( char op ) { - switch (op) { - case '-': - return FSUB; - case '+': - return FADD; - case '*': - return FMUL; - case '/': - return FDIV; - default: - throw new RuntimeException("Invalid operand " + op); - } - } - - - private static final ArithmeticInstruction createBinaryDoubleOp( char op ) { - switch (op) { - case '-': - return DSUB; - case '+': - return DADD; - case '*': - return DMUL; - case '/': - return DDIV; - default: - throw new RuntimeException("Invalid operand " + op); - } - } - - - /** - * Create binary operation for simple basic types, such as int and float. - * - * @param op operation, such as "+", "*", "<<", etc. - */ - public static ArithmeticInstruction createBinaryOperation( String op, Type type ) { - char first = op.toCharArray()[0]; - switch (type.getType()) { - case Constants.T_BYTE: - case Constants.T_SHORT: - case Constants.T_INT: - case Constants.T_CHAR: - return createBinaryIntOp(first, op); - case Constants.T_LONG: - return createBinaryLongOp(first, op); - case Constants.T_FLOAT: - return createBinaryFloatOp(first); - case Constants.T_DOUBLE: - return createBinaryDoubleOp(first); - default: - throw new RuntimeException("Invalid type " + type); - } - } - - - /** - * @param size size of operand, either 1 (int, e.g.) or 2 (double) - */ - public static StackInstruction createPop( int size ) { - return (size == 2) ? (StackInstruction) POP2 : (StackInstruction) POP; - } - - - /** - * @param size size of operand, either 1 (int, e.g.) or 2 (double) - */ - public static StackInstruction createDup( int size ) { - return (size == 2) ? (StackInstruction) DUP2 : (StackInstruction) DUP; - } - - - /** - * @param size size of operand, either 1 (int, e.g.) or 2 (double) - */ - public static StackInstruction createDup_2( int size ) { - return (size == 2) ? (StackInstruction) DUP2_X2 : (StackInstruction) DUP_X2; - } - - - /** - * @param size size of operand, either 1 (int, e.g.) or 2 (double) - */ - public static StackInstruction createDup_1( int size ) { - return (size == 2) ? (StackInstruction) DUP2_X1 : (StackInstruction) DUP_X1; - } - - - /** - * @param index index of local variable - */ - public static LocalVariableInstruction createStore( Type type, int index ) { - switch (type.getType()) { - case Constants.T_BOOLEAN: - case Constants.T_CHAR: - case Constants.T_BYTE: - case Constants.T_SHORT: - case Constants.T_INT: - return new ISTORE(index); - case Constants.T_FLOAT: - return new FSTORE(index); - case Constants.T_DOUBLE: - return new DSTORE(index); - case Constants.T_LONG: - return new LSTORE(index); - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return new ASTORE(index); - default: - throw new RuntimeException("Invalid type " + type); - } - } - - - /** - * @param index index of local variable - */ - public static LocalVariableInstruction createLoad( Type type, int index ) { - switch (type.getType()) { - case Constants.T_BOOLEAN: - case Constants.T_CHAR: - case Constants.T_BYTE: - case Constants.T_SHORT: - case Constants.T_INT: - return new ILOAD(index); - case Constants.T_FLOAT: - return new FLOAD(index); - case Constants.T_DOUBLE: - return new DLOAD(index); - case Constants.T_LONG: - return new LLOAD(index); - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return new ALOAD(index); - default: - throw new RuntimeException("Invalid type " + type); - } - } - - - /** - * @param type type of elements of array, i.e., array.getElementType() - */ - public static ArrayInstruction createArrayLoad( Type type ) { - switch (type.getType()) { - case Constants.T_BOOLEAN: - case Constants.T_BYTE: - return BALOAD; - case Constants.T_CHAR: - return CALOAD; - case Constants.T_SHORT: - return SALOAD; - case Constants.T_INT: - return IALOAD; - case Constants.T_FLOAT: - return FALOAD; - case Constants.T_DOUBLE: - return DALOAD; - case Constants.T_LONG: - return LALOAD; - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return AALOAD; - default: - throw new RuntimeException("Invalid type " + type); - } - } - - - /** - * @param type type of elements of array, i.e., array.getElementType() - */ - public static ArrayInstruction createArrayStore( Type type ) { - switch (type.getType()) { - case Constants.T_BOOLEAN: - case Constants.T_BYTE: - return BASTORE; - case Constants.T_CHAR: - return CASTORE; - case Constants.T_SHORT: - return SASTORE; - case Constants.T_INT: - return IASTORE; - case Constants.T_FLOAT: - return FASTORE; - case Constants.T_DOUBLE: - return DASTORE; - case Constants.T_LONG: - return LASTORE; - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return AASTORE; - default: - throw new RuntimeException("Invalid type " + type); - } - } - - - /** Create conversion operation for two stack operands, this may be an I2C, instruction, e.g., - * if the operands are basic types and CHECKCAST if they are reference types. - */ - public Instruction createCast( Type src_type, Type dest_type ) { - if ((src_type instanceof BasicType) && (dest_type instanceof BasicType)) { - byte dest = dest_type.getType(); - byte src = src_type.getType(); - if (dest == Constants.T_LONG - && (src == Constants.T_CHAR || src == Constants.T_BYTE || src == Constants.T_SHORT)) { - src = Constants.T_INT; - } - String[] short_names = { - "C", "F", "D", "B", "S", "I", "L" - }; - String name = "org.apache.bcel.generic." + short_names[src - Constants.T_CHAR] + "2" - + short_names[dest - Constants.T_CHAR]; - Instruction i = null; - try { - i = (Instruction) java.lang.Class.forName(name).newInstance(); - } catch (Exception e) { - throw new RuntimeException("Could not find instruction: " + name); - } - return i; - } else if ((src_type instanceof ReferenceType) && (dest_type instanceof ReferenceType)) { - if (dest_type instanceof ArrayType) { - return new CHECKCAST(cp.addArrayClass((ArrayType) dest_type)); - } else { - return new CHECKCAST(cp.addClass(((ObjectType) dest_type).getClassName())); - } - } else { - throw new RuntimeException("Can not cast " + src_type + " to " + dest_type); - } - } - - - public GETFIELD createGetField( String class_name, String name, Type t ) { - return new GETFIELD(cp.addFieldref(class_name, name, t.getSignature())); - } - - - public GETSTATIC createGetStatic( String class_name, String name, Type t ) { - return new GETSTATIC(cp.addFieldref(class_name, name, t.getSignature())); - } - - - public PUTFIELD createPutField( String class_name, String name, Type t ) { - return new PUTFIELD(cp.addFieldref(class_name, name, t.getSignature())); - } - - - public PUTSTATIC createPutStatic( String class_name, String name, Type t ) { - return new PUTSTATIC(cp.addFieldref(class_name, name, t.getSignature())); - } - - - public CHECKCAST createCheckCast( ReferenceType t ) { - if (t instanceof ArrayType) { - return new CHECKCAST(cp.addArrayClass((ArrayType) t)); - } else { - return new CHECKCAST(cp.addClass((ObjectType) t)); - } - } - - - public INSTANCEOF createInstanceOf( ReferenceType t ) { - if (t instanceof ArrayType) { - return new INSTANCEOF(cp.addArrayClass((ArrayType) t)); - } else { - return new INSTANCEOF(cp.addClass((ObjectType) t)); - } - } - - - public NEW createNew( ObjectType t ) { - return new NEW(cp.addClass(t)); - } - - - public NEW createNew( String s ) { - return createNew(new ObjectType(s)); - } - - - /** Create new array of given size and type. - * @return an instruction that creates the corresponding array at runtime, i.e. is an AllocationInstruction - */ - public Instruction createNewArray( Type t, short dim ) { - if (dim == 1) { - if (t instanceof ObjectType) { - return new ANEWARRAY(cp.addClass((ObjectType) t)); - } else if (t instanceof ArrayType) { - return new ANEWARRAY(cp.addArrayClass((ArrayType) t)); - } else { - return new NEWARRAY(((BasicType) t).getType()); - } - } else { - ArrayType at; - if (t instanceof ArrayType) { - at = (ArrayType) t; - } else { - at = new ArrayType(t, dim); - } - return new MULTIANEWARRAY(cp.addArrayClass(at), dim); - } - } - - - /** Create "null" value for reference types, 0 for basic types like int - */ - public static Instruction createNull( Type type ) { - switch (type.getType()) { - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return ACONST_NULL; - case Constants.T_INT: - case Constants.T_SHORT: - case Constants.T_BOOLEAN: - case Constants.T_CHAR: - case Constants.T_BYTE: - return ICONST_0; - case Constants.T_FLOAT: - return FCONST_0; - case Constants.T_DOUBLE: - return DCONST_0; - case Constants.T_LONG: - return LCONST_0; - case Constants.T_VOID: - return NOP; - default: - throw new RuntimeException("Invalid type: " + type); - } - } - - - /** Create branch instruction by given opcode, except LOOKUPSWITCH and TABLESWITCH. - * For those you should use the SWITCH compound instruction. - */ - public static BranchInstruction createBranchInstruction( short opcode, InstructionHandle target ) { - switch (opcode) { - case Constants.IFEQ: - return new IFEQ(target); - case Constants.IFNE: - return new IFNE(target); - case Constants.IFLT: - return new IFLT(target); - case Constants.IFGE: - return new IFGE(target); - case Constants.IFGT: - return new IFGT(target); - case Constants.IFLE: - return new IFLE(target); - case Constants.IF_ICMPEQ: - return new IF_ICMPEQ(target); - case Constants.IF_ICMPNE: - return new IF_ICMPNE(target); - case Constants.IF_ICMPLT: - return new IF_ICMPLT(target); - case Constants.IF_ICMPGE: - return new IF_ICMPGE(target); - case Constants.IF_ICMPGT: - return new IF_ICMPGT(target); - case Constants.IF_ICMPLE: - return new IF_ICMPLE(target); - case Constants.IF_ACMPEQ: - return new IF_ACMPEQ(target); - case Constants.IF_ACMPNE: - return new IF_ACMPNE(target); - case Constants.GOTO: - return new GOTO(target); - case Constants.JSR: - return new JSR(target); - case Constants.IFNULL: - return new IFNULL(target); - case Constants.IFNONNULL: - return new IFNONNULL(target); - case Constants.GOTO_W: - return new GOTO_W(target); - case Constants.JSR_W: - return new JSR_W(target); - default: - throw new RuntimeException("Invalid opcode: " + opcode); - } - } - - - public void setClassGen( ClassGen c ) { - cg = c; - } - - - public ClassGen getClassGen() { - return cg; - } - - - public void setConstantPool( ConstantPoolGen c ) { - cp = c; - } - - - public ConstantPoolGen getConstantPool() { - return cp; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; + +/** + * Instances of this class may be used, e.g., to generate typed + * versions of instructions. Its main purpose is to be used as the + * byte code generating backend of a compiler. You can subclass it to + * add your own create methods. + * + * @version $Id: InstructionFactory.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Constants + */ +public class InstructionFactory implements InstructionConstants, java.io.Serializable { + + protected ClassGen cg; + protected ConstantPoolGen cp; + + + public InstructionFactory(ClassGen cg, ConstantPoolGen cp) { + this.cg = cg; + this.cp = cp; + } + + + /** Initialize with ClassGen object + */ + public InstructionFactory(ClassGen cg) { + this(cg, cg.getConstantPool()); + } + + + /** Initialize just with ConstantPoolGen object + */ + public InstructionFactory(ConstantPoolGen cp) { + this(null, cp); + } + + + /** Create an invoke instruction. + * + * @param class_name name of the called class + * @param name name of the called method + * @param ret_type return type of method + * @param arg_types argument types of method + * @param kind how to invoke, i.e., INVOKEINTERFACE, INVOKESTATIC, INVOKEVIRTUAL, + * or INVOKESPECIAL + * @see Constants + */ + public InvokeInstruction createInvoke( String class_name, String name, Type ret_type, + Type[] arg_types, short kind ) { + int index; + int nargs = 0; + String signature = Type.getMethodSignature(ret_type, arg_types); + for (int i = 0; i < arg_types.length; i++) { + nargs += arg_types[i].getSize(); + } + if (kind == Constants.INVOKEINTERFACE) { + index = cp.addInterfaceMethodref(class_name, name, signature); + } else { + index = cp.addMethodref(class_name, name, signature); + } + switch (kind) { + case Constants.INVOKESPECIAL: + return new INVOKESPECIAL(index); + case Constants.INVOKEVIRTUAL: + return new INVOKEVIRTUAL(index); + case Constants.INVOKESTATIC: + return new INVOKESTATIC(index); + case Constants.INVOKEINTERFACE: + return new INVOKEINTERFACE(index, nargs + 1); + default: + throw new RuntimeException("Oops: Unknown invoke kind:" + kind); + } + } + + + /** Create a call to the most popular System.out.println() method. + * + * @param s the string to print + */ + public InstructionList createPrintln( String s ) { + InstructionList il = new InstructionList(); + int out = cp.addFieldref("java.lang.System", "out", "Ljava/io/PrintStream;"); + int println = cp.addMethodref("java.io.PrintStream", "println", "(Ljava/lang/String;)V"); + il.append(new GETSTATIC(out)); + il.append(new PUSH(cp, s)); + il.append(new INVOKEVIRTUAL(println)); + return il; + } + + + /** Uses PUSH to push a constant value onto the stack. + * @param value must be of type Number, Boolean, Character or String + */ + public Instruction createConstant( Object value ) { + PUSH push; + if (value instanceof Number) { + push = new PUSH(cp, (Number) value); + } else if (value instanceof String) { + push = new PUSH(cp, (String) value); + } else if (value instanceof Boolean) { + push = new PUSH(cp, (Boolean) value); + } else if (value instanceof Character) { + push = new PUSH(cp, (Character) value); + } else { + throw new ClassGenException("Illegal type: " + value.getClass()); + } + return push.getInstruction(); + } + + private static class MethodObject { + + Type[] arg_types; + Type result_type; + String class_name; + String name; + int access; + + + MethodObject(String c, String n, Type r, Type[] a, int acc) { + class_name = c; + name = n; + result_type = r; + arg_types = a; + access = acc; + } + } + + + private InvokeInstruction createInvoke( MethodObject m, short kind ) { + return createInvoke(m.class_name, m.name, m.result_type, m.arg_types, kind); + } + + private static MethodObject[] append_mos = { + new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { + Type.STRING + }, Constants.ACC_PUBLIC), + new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { + Type.OBJECT + }, Constants.ACC_PUBLIC), + null, + null, // indices 2, 3 + new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { + Type.BOOLEAN + }, Constants.ACC_PUBLIC), + new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { + Type.CHAR + }, Constants.ACC_PUBLIC), + new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { + Type.FLOAT + }, Constants.ACC_PUBLIC), + new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { + Type.DOUBLE + }, Constants.ACC_PUBLIC), + new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { + Type.INT + }, Constants.ACC_PUBLIC), + new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, // No append(byte) + new Type[] { + Type.INT + }, Constants.ACC_PUBLIC), + new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, // No append(short) + new Type[] { + Type.INT + }, Constants.ACC_PUBLIC), + new MethodObject("java.lang.StringBuffer", "append", Type.STRINGBUFFER, new Type[] { + Type.LONG + }, Constants.ACC_PUBLIC) + }; + + + private static final boolean isString( Type type ) { + return ((type instanceof ObjectType) && ((ObjectType) type).getClassName().equals( + "java.lang.String")); + } + + + public Instruction createAppend( Type type ) { + byte t = type.getType(); + if (isString(type)) { + return createInvoke(append_mos[0], Constants.INVOKEVIRTUAL); + } + switch (t) { + case Constants.T_BOOLEAN: + case Constants.T_CHAR: + case Constants.T_FLOAT: + case Constants.T_DOUBLE: + case Constants.T_BYTE: + case Constants.T_SHORT: + case Constants.T_INT: + case Constants.T_LONG: + return createInvoke(append_mos[t], Constants.INVOKEVIRTUAL); + case Constants.T_ARRAY: + case Constants.T_OBJECT: + return createInvoke(append_mos[1], Constants.INVOKEVIRTUAL); + default: + throw new RuntimeException("Oops: No append for this type? " + type); + } + } + + + /** Create a field instruction. + * + * @param class_name name of the accessed class + * @param name name of the referenced field + * @param type type of field + * @param kind how to access, i.e., GETFIELD, PUTFIELD, GETSTATIC, PUTSTATIC + * @see Constants + */ + public FieldInstruction createFieldAccess( String class_name, String name, Type type, short kind ) { + int index; + String signature = type.getSignature(); + index = cp.addFieldref(class_name, name, signature); + switch (kind) { + case Constants.GETFIELD: + return new GETFIELD(index); + case Constants.PUTFIELD: + return new PUTFIELD(index); + case Constants.GETSTATIC: + return new GETSTATIC(index); + case Constants.PUTSTATIC: + return new PUTSTATIC(index); + default: + throw new RuntimeException("Oops: Unknown getfield kind:" + kind); + } + } + + + /** Create reference to `this' + */ + public static Instruction createThis() { + return new ALOAD(0); + } + + + /** Create typed return + */ + public static ReturnInstruction createReturn( Type type ) { + switch (type.getType()) { + case Constants.T_ARRAY: + case Constants.T_OBJECT: + return ARETURN; + case Constants.T_INT: + case Constants.T_SHORT: + case Constants.T_BOOLEAN: + case Constants.T_CHAR: + case Constants.T_BYTE: + return IRETURN; + case Constants.T_FLOAT: + return FRETURN; + case Constants.T_DOUBLE: + return DRETURN; + case Constants.T_LONG: + return LRETURN; + case Constants.T_VOID: + return RETURN; + default: + throw new RuntimeException("Invalid type: " + type); + } + } + + + private static final ArithmeticInstruction createBinaryIntOp( char first, String op ) { + switch (first) { + case '-': + return ISUB; + case '+': + return IADD; + case '%': + return IREM; + case '*': + return IMUL; + case '/': + return IDIV; + case '&': + return IAND; + case '|': + return IOR; + case '^': + return IXOR; + case '<': + return ISHL; + case '>': + return op.equals(">>>") + ? (ArithmeticInstruction) IUSHR + : (ArithmeticInstruction) ISHR; + default: + throw new RuntimeException("Invalid operand " + op); + } + } + + + private static final ArithmeticInstruction createBinaryLongOp( char first, String op ) { + switch (first) { + case '-': + return LSUB; + case '+': + return LADD; + case '%': + return LREM; + case '*': + return LMUL; + case '/': + return LDIV; + case '&': + return LAND; + case '|': + return LOR; + case '^': + return LXOR; + case '<': + return LSHL; + case '>': + return op.equals(">>>") + ? (ArithmeticInstruction) LUSHR + : (ArithmeticInstruction) LSHR; + default: + throw new RuntimeException("Invalid operand " + op); + } + } + + + private static final ArithmeticInstruction createBinaryFloatOp( char op ) { + switch (op) { + case '-': + return FSUB; + case '+': + return FADD; + case '*': + return FMUL; + case '/': + return FDIV; + default: + throw new RuntimeException("Invalid operand " + op); + } + } + + + private static final ArithmeticInstruction createBinaryDoubleOp( char op ) { + switch (op) { + case '-': + return DSUB; + case '+': + return DADD; + case '*': + return DMUL; + case '/': + return DDIV; + default: + throw new RuntimeException("Invalid operand " + op); + } + } + + + /** + * Create binary operation for simple basic types, such as int and float. + * + * @param op operation, such as "+", "*", "<<", etc. + */ + public static ArithmeticInstruction createBinaryOperation( String op, Type type ) { + char first = op.toCharArray()[0]; + switch (type.getType()) { + case Constants.T_BYTE: + case Constants.T_SHORT: + case Constants.T_INT: + case Constants.T_CHAR: + return createBinaryIntOp(first, op); + case Constants.T_LONG: + return createBinaryLongOp(first, op); + case Constants.T_FLOAT: + return createBinaryFloatOp(first); + case Constants.T_DOUBLE: + return createBinaryDoubleOp(first); + default: + throw new RuntimeException("Invalid type " + type); + } + } + + + /** + * @param size size of operand, either 1 (int, e.g.) or 2 (double) + */ + public static StackInstruction createPop( int size ) { + return (size == 2) ? (StackInstruction) POP2 : (StackInstruction) POP; + } + + + /** + * @param size size of operand, either 1 (int, e.g.) or 2 (double) + */ + public static StackInstruction createDup( int size ) { + return (size == 2) ? (StackInstruction) DUP2 : (StackInstruction) DUP; + } + + + /** + * @param size size of operand, either 1 (int, e.g.) or 2 (double) + */ + public static StackInstruction createDup_2( int size ) { + return (size == 2) ? (StackInstruction) DUP2_X2 : (StackInstruction) DUP_X2; + } + + + /** + * @param size size of operand, either 1 (int, e.g.) or 2 (double) + */ + public static StackInstruction createDup_1( int size ) { + return (size == 2) ? (StackInstruction) DUP2_X1 : (StackInstruction) DUP_X1; + } + + + /** + * @param index index of local variable + */ + public static LocalVariableInstruction createStore( Type type, int index ) { + switch (type.getType()) { + case Constants.T_BOOLEAN: + case Constants.T_CHAR: + case Constants.T_BYTE: + case Constants.T_SHORT: + case Constants.T_INT: + return new ISTORE(index); + case Constants.T_FLOAT: + return new FSTORE(index); + case Constants.T_DOUBLE: + return new DSTORE(index); + case Constants.T_LONG: + return new LSTORE(index); + case Constants.T_ARRAY: + case Constants.T_OBJECT: + return new ASTORE(index); + default: + throw new RuntimeException("Invalid type " + type); + } + } + + + /** + * @param index index of local variable + */ + public static LocalVariableInstruction createLoad( Type type, int index ) { + switch (type.getType()) { + case Constants.T_BOOLEAN: + case Constants.T_CHAR: + case Constants.T_BYTE: + case Constants.T_SHORT: + case Constants.T_INT: + return new ILOAD(index); + case Constants.T_FLOAT: + return new FLOAD(index); + case Constants.T_DOUBLE: + return new DLOAD(index); + case Constants.T_LONG: + return new LLOAD(index); + case Constants.T_ARRAY: + case Constants.T_OBJECT: + return new ALOAD(index); + default: + throw new RuntimeException("Invalid type " + type); + } + } + + + /** + * @param type type of elements of array, i.e., array.getElementType() + */ + public static ArrayInstruction createArrayLoad( Type type ) { + switch (type.getType()) { + case Constants.T_BOOLEAN: + case Constants.T_BYTE: + return BALOAD; + case Constants.T_CHAR: + return CALOAD; + case Constants.T_SHORT: + return SALOAD; + case Constants.T_INT: + return IALOAD; + case Constants.T_FLOAT: + return FALOAD; + case Constants.T_DOUBLE: + return DALOAD; + case Constants.T_LONG: + return LALOAD; + case Constants.T_ARRAY: + case Constants.T_OBJECT: + return AALOAD; + default: + throw new RuntimeException("Invalid type " + type); + } + } + + + /** + * @param type type of elements of array, i.e., array.getElementType() + */ + public static ArrayInstruction createArrayStore( Type type ) { + switch (type.getType()) { + case Constants.T_BOOLEAN: + case Constants.T_BYTE: + return BASTORE; + case Constants.T_CHAR: + return CASTORE; + case Constants.T_SHORT: + return SASTORE; + case Constants.T_INT: + return IASTORE; + case Constants.T_FLOAT: + return FASTORE; + case Constants.T_DOUBLE: + return DASTORE; + case Constants.T_LONG: + return LASTORE; + case Constants.T_ARRAY: + case Constants.T_OBJECT: + return AASTORE; + default: + throw new RuntimeException("Invalid type " + type); + } + } + + + /** Create conversion operation for two stack operands, this may be an I2C, instruction, e.g., + * if the operands are basic types and CHECKCAST if they are reference types. + */ + public Instruction createCast( Type src_type, Type dest_type ) { + if ((src_type instanceof BasicType) && (dest_type instanceof BasicType)) { + byte dest = dest_type.getType(); + byte src = src_type.getType(); + if (dest == Constants.T_LONG + && (src == Constants.T_CHAR || src == Constants.T_BYTE || src == Constants.T_SHORT)) { + src = Constants.T_INT; + } + String[] short_names = { + "C", "F", "D", "B", "S", "I", "L" + }; + String name = "org.apache.bcel.generic." + short_names[src - Constants.T_CHAR] + "2" + + short_names[dest - Constants.T_CHAR]; + Instruction i = null; + try { + i = (Instruction) java.lang.Class.forName(name).newInstance(); + } catch (Exception e) { + throw new RuntimeException("Could not find instruction: " + name); + } + return i; + } else if ((src_type instanceof ReferenceType) && (dest_type instanceof ReferenceType)) { + if (dest_type instanceof ArrayType) { + return new CHECKCAST(cp.addArrayClass((ArrayType) dest_type)); + } else { + return new CHECKCAST(cp.addClass(((ObjectType) dest_type).getClassName())); + } + } else { + throw new RuntimeException("Can not cast " + src_type + " to " + dest_type); + } + } + + + public GETFIELD createGetField( String class_name, String name, Type t ) { + return new GETFIELD(cp.addFieldref(class_name, name, t.getSignature())); + } + + + public GETSTATIC createGetStatic( String class_name, String name, Type t ) { + return new GETSTATIC(cp.addFieldref(class_name, name, t.getSignature())); + } + + + public PUTFIELD createPutField( String class_name, String name, Type t ) { + return new PUTFIELD(cp.addFieldref(class_name, name, t.getSignature())); + } + + + public PUTSTATIC createPutStatic( String class_name, String name, Type t ) { + return new PUTSTATIC(cp.addFieldref(class_name, name, t.getSignature())); + } + + + public CHECKCAST createCheckCast( ReferenceType t ) { + if (t instanceof ArrayType) { + return new CHECKCAST(cp.addArrayClass((ArrayType) t)); + } else { + return new CHECKCAST(cp.addClass((ObjectType) t)); + } + } + + + public INSTANCEOF createInstanceOf( ReferenceType t ) { + if (t instanceof ArrayType) { + return new INSTANCEOF(cp.addArrayClass((ArrayType) t)); + } else { + return new INSTANCEOF(cp.addClass((ObjectType) t)); + } + } + + + public NEW createNew( ObjectType t ) { + return new NEW(cp.addClass(t)); + } + + + public NEW createNew( String s ) { + return createNew(new ObjectType(s)); + } + + + /** Create new array of given size and type. + * @return an instruction that creates the corresponding array at runtime, i.e. is an AllocationInstruction + */ + public Instruction createNewArray( Type t, short dim ) { + if (dim == 1) { + if (t instanceof ObjectType) { + return new ANEWARRAY(cp.addClass((ObjectType) t)); + } else if (t instanceof ArrayType) { + return new ANEWARRAY(cp.addArrayClass((ArrayType) t)); + } else { + return new NEWARRAY(((BasicType) t).getType()); + } + } else { + ArrayType at; + if (t instanceof ArrayType) { + at = (ArrayType) t; + } else { + at = new ArrayType(t, dim); + } + return new MULTIANEWARRAY(cp.addArrayClass(at), dim); + } + } + + + /** Create "null" value for reference types, 0 for basic types like int + */ + public static Instruction createNull( Type type ) { + switch (type.getType()) { + case Constants.T_ARRAY: + case Constants.T_OBJECT: + return ACONST_NULL; + case Constants.T_INT: + case Constants.T_SHORT: + case Constants.T_BOOLEAN: + case Constants.T_CHAR: + case Constants.T_BYTE: + return ICONST_0; + case Constants.T_FLOAT: + return FCONST_0; + case Constants.T_DOUBLE: + return DCONST_0; + case Constants.T_LONG: + return LCONST_0; + case Constants.T_VOID: + return NOP; + default: + throw new RuntimeException("Invalid type: " + type); + } + } + + + /** Create branch instruction by given opcode, except LOOKUPSWITCH and TABLESWITCH. + * For those you should use the SWITCH compound instruction. + */ + public static BranchInstruction createBranchInstruction( short opcode, InstructionHandle target ) { + switch (opcode) { + case Constants.IFEQ: + return new IFEQ(target); + case Constants.IFNE: + return new IFNE(target); + case Constants.IFLT: + return new IFLT(target); + case Constants.IFGE: + return new IFGE(target); + case Constants.IFGT: + return new IFGT(target); + case Constants.IFLE: + return new IFLE(target); + case Constants.IF_ICMPEQ: + return new IF_ICMPEQ(target); + case Constants.IF_ICMPNE: + return new IF_ICMPNE(target); + case Constants.IF_ICMPLT: + return new IF_ICMPLT(target); + case Constants.IF_ICMPGE: + return new IF_ICMPGE(target); + case Constants.IF_ICMPGT: + return new IF_ICMPGT(target); + case Constants.IF_ICMPLE: + return new IF_ICMPLE(target); + case Constants.IF_ACMPEQ: + return new IF_ACMPEQ(target); + case Constants.IF_ACMPNE: + return new IF_ACMPNE(target); + case Constants.GOTO: + return new GOTO(target); + case Constants.JSR: + return new JSR(target); + case Constants.IFNULL: + return new IFNULL(target); + case Constants.IFNONNULL: + return new IFNONNULL(target); + case Constants.GOTO_W: + return new GOTO_W(target); + case Constants.JSR_W: + return new JSR_W(target); + default: + throw new RuntimeException("Invalid opcode: " + opcode); + } + } + + + public void setClassGen( ClassGen c ) { + cg = c; + } + + + public ClassGen getClassGen() { + return cg; + } + + + public void setConstantPool( ConstantPoolGen c ) { + cp = c; + } + + + public ConstantPoolGen getConstantPool() { + return cp; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionHandle.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionHandle.java index 8e5db5c1..0e9c5ecf 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionHandle.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionHandle.java @@ -1,291 +1,291 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import org.apache.bcel5_2_0.classfile.Utility; - -/** - * Instances of this class give users a handle to the instructions contained in - * an InstructionList. Instruction objects may be used more than once within a - * list, this is useful because it saves memory and may be much faster. - * - * Within an InstructionList an InstructionHandle object is wrapped - * around all instructions, i.e., it implements a cell in a - * doubly-linked list. From the outside only the next and the - * previous instruction (handle) are accessible. One - * can traverse the list via an Enumeration returned by - * InstructionList.elements(). - * - * @version $Id: InstructionHandle.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Instruction - * @see BranchHandle - * @see InstructionList - */ -public class InstructionHandle implements java.io.Serializable { - - InstructionHandle next, prev; // Will be set from the outside - Instruction instruction; - protected int i_position = -1; // byte code offset of instruction - private Set targeters; - private Map attributes; - - - public final InstructionHandle getNext() { - return next; - } - - - public final InstructionHandle getPrev() { - return prev; - } - - - public final Instruction getInstruction() { - return instruction; - } - - - /** - * Replace current instruction contained in this handle. - * Old instruction is disposed using Instruction.dispose(). - */ - public void setInstruction( Instruction i ) { // Overridden in BranchHandle - if (i == null) { - throw new ClassGenException("Assigning null to handle"); - } - if ((this.getClass() != BranchHandle.class) && (i instanceof BranchInstruction)) { - throw new ClassGenException("Assigning branch instruction " + i + " to plain handle"); - } - if (instruction != null) { - instruction.dispose(); - } - instruction = i; - } - - - /** - * Temporarily swap the current instruction, without disturbing - * anything. Meant to be used by a debugger, implementing - * breakpoints. Current instruction is returned. - */ - public Instruction swapInstruction( Instruction i ) { - Instruction oldInstruction = instruction; - instruction = i; - return oldInstruction; - } - - - /*private*/protected InstructionHandle(Instruction i) { - setInstruction(i); - } - - private static InstructionHandle ih_list = null; // List of reusable handles - - - /** Factory method. - */ - static final InstructionHandle getInstructionHandle( Instruction i ) { - if (ih_list == null) { - return new InstructionHandle(i); - } else { - InstructionHandle ih = ih_list; - ih_list = ih.next; - ih.setInstruction(i); - return ih; - } - } - - - /** - * Called by InstructionList.setPositions when setting the position for every - * instruction. In the presence of variable length instructions `setPositions()' - * performs multiple passes over the instruction list to calculate the - * correct (byte) positions and offsets by calling this function. - * - * @param offset additional offset caused by preceding (variable length) instructions - * @param max_offset the maximum offset that may be caused by these instructions - * @return additional offset caused by possible change of this instruction's length - */ - protected int updatePosition( int offset, int max_offset ) { - i_position += offset; - return 0; - } - - - /** @return the position, i.e., the byte code offset of the contained - * instruction. This is accurate only after - * InstructionList.setPositions() has been called. - */ - public int getPosition() { - return i_position; - } - - - /** Set the position, i.e., the byte code offset of the contained - * instruction. - */ - void setPosition( int pos ) { - i_position = pos; - } - - - /** Overridden in BranchHandle - */ - protected void addHandle() { - next = ih_list; - ih_list = this; - } - - - /** - * Delete contents, i.e., remove user access and make handle reusable. - */ - void dispose() { - next = prev = null; - instruction.dispose(); - instruction = null; - i_position = -1; - attributes = null; - removeAllTargeters(); - addHandle(); - } - - - /** Remove all targeters, if any. - */ - public void removeAllTargeters() { - if (targeters != null) { - targeters.clear(); - } - } - - - /** - * Denote this handle isn't referenced anymore by t. - */ - public void removeTargeter( InstructionTargeter t ) { - if (targeters != null) { - targeters.remove(t); - } - } - - - /** - * Denote this handle is being referenced by t. - */ - public void addTargeter( InstructionTargeter t ) { - if (targeters == null) { - targeters = new HashSet(); - } - //if(!targeters.contains(t)) - targeters.add(t); - } - - - public boolean hasTargeters() { - return (targeters != null) && (targeters.size() > 0); - } - - - /** - * @return null, if there are no targeters - */ - public InstructionTargeter[] getTargeters() { - if (!hasTargeters()) { - return null; - } - InstructionTargeter[] t = new InstructionTargeter[targeters.size()]; - targeters.toArray(t); - return t; - } - - - /** @return a (verbose) string representation of the contained instruction. - */ - public String toString( boolean verbose ) { - return Utility.format(i_position, 4, false, ' ') + ": " + instruction.toString(verbose); - } - - - /** @return a string representation of the contained instruction. - */ - public String toString() { - return toString(true); - } - - - /** Add an attribute to an instruction handle. - * - * @param key the key object to store/retrieve the attribute - * @param attr the attribute to associate with this handle - */ - public void addAttribute( Object key, Object attr ) { - if (attributes == null) { - attributes = new HashMap(3); - } - attributes.put(key, attr); - } - - - /** Delete an attribute of an instruction handle. - * - * @param key the key object to retrieve the attribute - */ - public void removeAttribute( Object key ) { - if (attributes != null) { - attributes.remove(key); - } - } - - - /** Get attribute of an instruction handle. - * - * @param key the key object to store/retrieve the attribute - */ - public Object getAttribute( Object key ) { - if (attributes != null) { - return attributes.get(key); - } - return null; - } - - - /** @return all attributes associated with this handle - */ - public Collection getAttributes() { - if (attributes == null) { - attributes = new HashMap(3); - } - return attributes.values(); - } - - - /** Convenience method, simply calls accept() on the contained instruction. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - instruction.accept(v); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.apache.bcel5_2_0.classfile.Utility; + +/** + * Instances of this class give users a handle to the instructions contained in + * an InstructionList. Instruction objects may be used more than once within a + * list, this is useful because it saves memory and may be much faster. + * + * Within an InstructionList an InstructionHandle object is wrapped + * around all instructions, i.e., it implements a cell in a + * doubly-linked list. From the outside only the next and the + * previous instruction (handle) are accessible. One + * can traverse the list via an Enumeration returned by + * InstructionList.elements(). + * + * @version $Id: InstructionHandle.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Instruction + * @see BranchHandle + * @see InstructionList + */ +public class InstructionHandle implements java.io.Serializable { + + InstructionHandle next, prev; // Will be set from the outside + Instruction instruction; + protected int i_position = -1; // byte code offset of instruction + private Set targeters; + private Map attributes; + + + public final InstructionHandle getNext() { + return next; + } + + + public final InstructionHandle getPrev() { + return prev; + } + + + public final Instruction getInstruction() { + return instruction; + } + + + /** + * Replace current instruction contained in this handle. + * Old instruction is disposed using Instruction.dispose(). + */ + public void setInstruction( Instruction i ) { // Overridden in BranchHandle + if (i == null) { + throw new ClassGenException("Assigning null to handle"); + } + if ((this.getClass() != BranchHandle.class) && (i instanceof BranchInstruction)) { + throw new ClassGenException("Assigning branch instruction " + i + " to plain handle"); + } + if (instruction != null) { + instruction.dispose(); + } + instruction = i; + } + + + /** + * Temporarily swap the current instruction, without disturbing + * anything. Meant to be used by a debugger, implementing + * breakpoints. Current instruction is returned. + */ + public Instruction swapInstruction( Instruction i ) { + Instruction oldInstruction = instruction; + instruction = i; + return oldInstruction; + } + + + /*private*/protected InstructionHandle(Instruction i) { + setInstruction(i); + } + + private static InstructionHandle ih_list = null; // List of reusable handles + + + /** Factory method. + */ + static final InstructionHandle getInstructionHandle( Instruction i ) { + if (ih_list == null) { + return new InstructionHandle(i); + } else { + InstructionHandle ih = ih_list; + ih_list = ih.next; + ih.setInstruction(i); + return ih; + } + } + + + /** + * Called by InstructionList.setPositions when setting the position for every + * instruction. In the presence of variable length instructions `setPositions()' + * performs multiple passes over the instruction list to calculate the + * correct (byte) positions and offsets by calling this function. + * + * @param offset additional offset caused by preceding (variable length) instructions + * @param max_offset the maximum offset that may be caused by these instructions + * @return additional offset caused by possible change of this instruction's length + */ + protected int updatePosition( int offset, int max_offset ) { + i_position += offset; + return 0; + } + + + /** @return the position, i.e., the byte code offset of the contained + * instruction. This is accurate only after + * InstructionList.setPositions() has been called. + */ + public int getPosition() { + return i_position; + } + + + /** Set the position, i.e., the byte code offset of the contained + * instruction. + */ + void setPosition( int pos ) { + i_position = pos; + } + + + /** Overridden in BranchHandle + */ + protected void addHandle() { + next = ih_list; + ih_list = this; + } + + + /** + * Delete contents, i.e., remove user access and make handle reusable. + */ + void dispose() { + next = prev = null; + instruction.dispose(); + instruction = null; + i_position = -1; + attributes = null; + removeAllTargeters(); + addHandle(); + } + + + /** Remove all targeters, if any. + */ + public void removeAllTargeters() { + if (targeters != null) { + targeters.clear(); + } + } + + + /** + * Denote this handle isn't referenced anymore by t. + */ + public void removeTargeter( InstructionTargeter t ) { + if (targeters != null) { + targeters.remove(t); + } + } + + + /** + * Denote this handle is being referenced by t. + */ + public void addTargeter( InstructionTargeter t ) { + if (targeters == null) { + targeters = new HashSet(); + } + //if(!targeters.contains(t)) + targeters.add(t); + } + + + public boolean hasTargeters() { + return (targeters != null) && (targeters.size() > 0); + } + + + /** + * @return null, if there are no targeters + */ + public InstructionTargeter[] getTargeters() { + if (!hasTargeters()) { + return null; + } + InstructionTargeter[] t = new InstructionTargeter[targeters.size()]; + targeters.toArray(t); + return t; + } + + + /** @return a (verbose) string representation of the contained instruction. + */ + public String toString( boolean verbose ) { + return Utility.format(i_position, 4, false, ' ') + ": " + instruction.toString(verbose); + } + + + /** @return a string representation of the contained instruction. + */ + public String toString() { + return toString(true); + } + + + /** Add an attribute to an instruction handle. + * + * @param key the key object to store/retrieve the attribute + * @param attr the attribute to associate with this handle + */ + public void addAttribute( Object key, Object attr ) { + if (attributes == null) { + attributes = new HashMap(3); + } + attributes.put(key, attr); + } + + + /** Delete an attribute of an instruction handle. + * + * @param key the key object to retrieve the attribute + */ + public void removeAttribute( Object key ) { + if (attributes != null) { + attributes.remove(key); + } + } + + + /** Get attribute of an instruction handle. + * + * @param key the key object to store/retrieve the attribute + */ + public Object getAttribute( Object key ) { + if (attributes != null) { + return attributes.get(key); + } + return null; + } + + + /** @return all attributes associated with this handle + */ + public Collection getAttributes() { + if (attributes == null) { + attributes = new HashMap(3); + } + return attributes.values(); + } + + + /** Convenience method, simply calls accept() on the contained instruction. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + instruction.accept(v); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionList.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionList.java index ca2ebdc9..8ec87a9d 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionList.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionList.java @@ -1,1266 +1,1266 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.classfile.Constant; -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * This class is a container for a list of Instruction objects. Instructions can - * be appended, inserted, moved, deleted, etc.. Instructions are being - * wrapped into InstructionHandles objects that - * are returned upon append/insert operations. They give the user - * (read only) access to the list structure, such that it can be traversed and - * manipulated in a controlled way. - * - * A list is finally dumped to a byte code array with getByteCode. - * - * @version $Id: InstructionList.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Instruction - * @see InstructionHandle - * @see BranchHandle - */ -public class InstructionList implements Serializable { - - private InstructionHandle start = null, end = null; - private int length = 0; // number of elements in list - private int[] byte_positions; // byte code offsets corresponding to instructions - - - /** - * Create (empty) instruction list. - */ - public InstructionList() { - } - - - /** - * Create instruction list containing one instruction. - * @param i initial instruction - */ - public InstructionList(Instruction i) { - append(i); - } - - - /** - * Create instruction list containing one instruction. - * @param i initial instruction - */ - public InstructionList(BranchInstruction i) { - append(i); - } - - - /** - * Initialize list with (nonnull) compound instruction. Consumes argument - * list, i.e., it becomes empty. - * - * @param c compound instruction (list) - */ - public InstructionList(CompoundInstruction c) { - append(c.getInstructionList()); - } - - - /** - * Test for empty list. - */ - public boolean isEmpty() { - return start == null; - } // && end == null - - - /** - * Find the target instruction (handle) that corresponds to the given target - * position (byte code offset). - * - * @param ihs array of instruction handles, i.e. il.getInstructionHandles() - * @param pos array of positions corresponding to ihs, i.e. il.getInstructionPositions() - * @param count length of arrays - * @param target target position to search for - * @return target position's instruction handle if available - */ - public static InstructionHandle findHandle( InstructionHandle[] ihs, int[] pos, int count, - int target ) { - int l = 0, r = count - 1; - /* Do a binary search since the pos array is orderd. - */ - do { - int i = (l + r) / 2; - int j = pos[i]; - if (j == target) { - return ihs[i]; - } else if (target < j) { - r = i - 1; - } else { - l = i + 1; - } - } while (l <= r); - return null; - } - - - /** - * Get instruction handle for instruction at byte code position pos. - * This only works properly, if the list is freshly initialized from a byte array or - * setPositions() has been called before this method. - * - * @param pos byte code position to search for - * @return target position's instruction handle if available - */ - public InstructionHandle findHandle( int pos ) { - InstructionHandle[] ihs = getInstructionHandles(); - return findHandle(ihs, byte_positions, length, pos); - } - - - /** - * Initialize instruction list from byte array. - * - * @param code byte array containing the instructions - */ - public InstructionList(byte[] code) { - ByteSequence bytes = new ByteSequence(code); - InstructionHandle[] ihs = new InstructionHandle[code.length]; - int[] pos = new int[code.length]; // Can't be more than that - int count = 0; // Contains actual length - /* Pass 1: Create an object for each byte code and append them - * to the list. - */ - try { - while (bytes.available() > 0) { - // Remember byte offset and associate it with the instruction - int off = bytes.getIndex(); - pos[count] = off; - /* Read one instruction from the byte stream, the byte position is set - * accordingly. - */ - Instruction i = Instruction.readInstruction(bytes); - InstructionHandle ih; - if (i instanceof BranchInstruction) { - ih = append((BranchInstruction) i); - } else { - ih = append(i); - } - ih.setPosition(off); - ihs[count] = ih; - count++; - } - } catch (IOException e) { - throw new ClassGenException(e.toString()); - } - byte_positions = new int[count]; // Trim to proper size - System.arraycopy(pos, 0, byte_positions, 0, count); - /* Pass 2: Look for BranchInstruction and update their targets, i.e., - * convert offsets to instruction handles. - */ - for (int i = 0; i < count; i++) { - if (ihs[i] instanceof BranchHandle) { - BranchInstruction bi = (BranchInstruction) ihs[i].instruction; - int target = bi.position + bi.getIndex(); /* Byte code position: - * relative -> absolute. */ - // Search for target position - InstructionHandle ih = findHandle(ihs, pos, count, target); - if (ih == null) { - throw new ClassGenException("Couldn't find target for branch: " + bi); - } - bi.setTarget(ih); // Update target - // If it is a Select instruction, update all branch targets - if (bi instanceof Select) { // Either LOOKUPSWITCH or TABLESWITCH - Select s = (Select) bi; - int[] indices = s.getIndices(); - for (int j = 0; j < indices.length; j++) { - target = bi.position + indices[j]; - ih = findHandle(ihs, pos, count, target); - if (ih == null) { - throw new ClassGenException("Couldn't find target for switch: " + bi); - } - s.setTarget(j, ih); // Update target - } - } - } - } - } - - - /** - * Append another list after instruction (handle) ih contained in this list. - * Consumes argument list, i.e., it becomes empty. - * - * @param ih where to append the instruction list - * @param il Instruction list to append to this one - * @return instruction handle pointing to the first appended instruction - */ - public InstructionHandle append( InstructionHandle ih, InstructionList il ) { - if (il == null) { - throw new ClassGenException("Appending null InstructionList"); - } - if (il.isEmpty()) { - return ih; - } - InstructionHandle next = ih.next, ret = il.start; - ih.next = il.start; - il.start.prev = ih; - il.end.next = next; - if (next != null) { - next.prev = il.end; - } else { - end = il.end; // Update end ... - } - length += il.length; // Update length - il.clear(); - return ret; - } - - - /** - * Append another list after instruction i contained in this list. - * Consumes argument list, i.e., it becomes empty. - * - * @param i where to append the instruction list - * @param il Instruction list to append to this one - * @return instruction handle pointing to the first appended instruction - */ - public InstructionHandle append( Instruction i, InstructionList il ) { - InstructionHandle ih; - if ((ih = findInstruction2(i)) == null) { - throw new ClassGenException("Instruction " + i + " is not contained in this list."); - } - return append(ih, il); - } - - - /** - * Append another list to this one. - * Consumes argument list, i.e., it becomes empty. - * - * @param il list to append to end of this list - * @return instruction handle of the first appended instruction - */ - public InstructionHandle append( InstructionList il ) { - if (il == null) { - throw new ClassGenException("Appending null InstructionList"); - } - if (il.isEmpty()) { - return null; - } - if (isEmpty()) { - start = il.start; - end = il.end; - length = il.length; - il.clear(); - return start; - } else { - return append(end, il); // was end.instruction - } - } - - - /** - * Append an instruction to the end of this list. - * - * @param ih instruction to append - */ - private void append( InstructionHandle ih ) { - if (isEmpty()) { - start = end = ih; - ih.next = ih.prev = null; - } else { - end.next = ih; - ih.prev = end; - ih.next = null; - end = ih; - } - length++; // Update length - } - - - /** - * Append an instruction to the end of this list. - * - * @param i instruction to append - * @return instruction handle of the appended instruction - */ - public InstructionHandle append( Instruction i ) { - InstructionHandle ih = InstructionHandle.getInstructionHandle(i); - append(ih); - return ih; - } - - - /** - * Append a branch instruction to the end of this list. - * - * @param i branch instruction to append - * @return branch instruction handle of the appended instruction - */ - public BranchHandle append( BranchInstruction i ) { - BranchHandle ih = BranchHandle.getBranchHandle(i); - append(ih); - return ih; - } - - - /** - * Append a single instruction j after another instruction i, which - * must be in this list of course! - * - * @param i Instruction in list - * @param j Instruction to append after i in list - * @return instruction handle of the first appended instruction - */ - public InstructionHandle append( Instruction i, Instruction j ) { - return append(i, new InstructionList(j)); - } - - - /** - * Append a compound instruction, after instruction i. - * - * @param i Instruction in list - * @param c The composite instruction (containing an InstructionList) - * @return instruction handle of the first appended instruction - */ - public InstructionHandle append( Instruction i, CompoundInstruction c ) { - return append(i, c.getInstructionList()); - } - - - /** - * Append a compound instruction. - * - * @param c The composite instruction (containing an InstructionList) - * @return instruction handle of the first appended instruction - */ - public InstructionHandle append( CompoundInstruction c ) { - return append(c.getInstructionList()); - } - - - /** - * Append a compound instruction. - * - * @param ih where to append the instruction list - * @param c The composite instruction (containing an InstructionList) - * @return instruction handle of the first appended instruction - */ - public InstructionHandle append( InstructionHandle ih, CompoundInstruction c ) { - return append(ih, c.getInstructionList()); - } - - - /** - * Append an instruction after instruction (handle) ih contained in this list. - * - * @param ih where to append the instruction list - * @param i Instruction to append - * @return instruction handle pointing to the first appended instruction - */ - public InstructionHandle append( InstructionHandle ih, Instruction i ) { - return append(ih, new InstructionList(i)); - } - - - /** - * Append an instruction after instruction (handle) ih contained in this list. - * - * @param ih where to append the instruction list - * @param i Instruction to append - * @return instruction handle pointing to the first appended instruction - */ - public BranchHandle append( InstructionHandle ih, BranchInstruction i ) { - BranchHandle bh = BranchHandle.getBranchHandle(i); - InstructionList il = new InstructionList(); - il.append(bh); - append(ih, il); - return bh; - } - - - /** - * Insert another list before Instruction handle ih contained in this list. - * Consumes argument list, i.e., it becomes empty. - * - * @param ih where to append the instruction list - * @param il Instruction list to insert - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert( InstructionHandle ih, InstructionList il ) { - if (il == null) { - throw new ClassGenException("Inserting null InstructionList"); - } - if (il.isEmpty()) { - return ih; - } - InstructionHandle prev = ih.prev, ret = il.start; - ih.prev = il.end; - il.end.next = ih; - il.start.prev = prev; - if (prev != null) { - prev.next = il.start; - } else { - start = il.start; // Update start ... - } - length += il.length; // Update length - il.clear(); - return ret; - } - - - /** - * Insert another list. - * - * @param il list to insert before start of this list - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert( InstructionList il ) { - if (isEmpty()) { - append(il); // Code is identical for this case - return start; - } else { - return insert(start, il); - } - } - - - /** - * Insert an instruction at start of this list. - * - * @param ih instruction to insert - */ - private void insert( InstructionHandle ih ) { - if (isEmpty()) { - start = end = ih; - ih.next = ih.prev = null; - } else { - start.prev = ih; - ih.next = start; - ih.prev = null; - start = ih; - } - length++; - } - - - /** - * Insert another list before Instruction i contained in this list. - * Consumes argument list, i.e., it becomes empty. - * - * @param i where to append the instruction list - * @param il Instruction list to insert - * @return instruction handle pointing to the first inserted instruction, - * i.e., il.getStart() - */ - public InstructionHandle insert( Instruction i, InstructionList il ) { - InstructionHandle ih; - if ((ih = findInstruction1(i)) == null) { - throw new ClassGenException("Instruction " + i + " is not contained in this list."); - } - return insert(ih, il); - } - - - /** - * Insert an instruction at start of this list. - * - * @param i instruction to insert - * @return instruction handle of the inserted instruction - */ - public InstructionHandle insert( Instruction i ) { - InstructionHandle ih = InstructionHandle.getInstructionHandle(i); - insert(ih); - return ih; - } - - - /** - * Insert a branch instruction at start of this list. - * - * @param i branch instruction to insert - * @return branch instruction handle of the appended instruction - */ - public BranchHandle insert( BranchInstruction i ) { - BranchHandle ih = BranchHandle.getBranchHandle(i); - insert(ih); - return ih; - } - - - /** - * Insert a single instruction j before another instruction i, which - * must be in this list of course! - * - * @param i Instruction in list - * @param j Instruction to insert before i in list - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert( Instruction i, Instruction j ) { - return insert(i, new InstructionList(j)); - } - - - /** - * Insert a compound instruction before instruction i. - * - * @param i Instruction in list - * @param c The composite instruction (containing an InstructionList) - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert( Instruction i, CompoundInstruction c ) { - return insert(i, c.getInstructionList()); - } - - - /** - * Insert a compound instruction. - * - * @param c The composite instruction (containing an InstructionList) - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert( CompoundInstruction c ) { - return insert(c.getInstructionList()); - } - - - /** - * Insert an instruction before instruction (handle) ih contained in this list. - * - * @param ih where to insert to the instruction list - * @param i Instruction to insert - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert( InstructionHandle ih, Instruction i ) { - return insert(ih, new InstructionList(i)); - } - - - /** - * Insert a compound instruction. - * - * @param ih where to insert the instruction list - * @param c The composite instruction (containing an InstructionList) - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert( InstructionHandle ih, CompoundInstruction c ) { - return insert(ih, c.getInstructionList()); - } - - - /** - * Insert an instruction before instruction (handle) ih contained in this list. - * - * @param ih where to insert to the instruction list - * @param i Instruction to insert - * @return instruction handle of the first inserted instruction - */ - public BranchHandle insert( InstructionHandle ih, BranchInstruction i ) { - BranchHandle bh = BranchHandle.getBranchHandle(i); - InstructionList il = new InstructionList(); - il.append(bh); - insert(ih, il); - return bh; - } - - - /** - * Take all instructions (handles) from "start" to "end" and append them after the - * new location "target". Of course, "end" must be after "start" and target must - * not be located withing this range. If you want to move something to the start of - * the list use null as value for target.
          - * Any instruction targeters pointing to handles within the block, keep their targets. - * - * @param start of moved block - * @param end of moved block - * @param target of moved block - */ - public void move( InstructionHandle start, InstructionHandle end, InstructionHandle target ) { - // Step 1: Check constraints - if ((start == null) || (end == null)) { - throw new ClassGenException("Invalid null handle: From " + start + " to " + end); - } - if ((target == start) || (target == end)) { - throw new ClassGenException("Invalid range: From " + start + " to " + end - + " contains target " + target); - } - for (InstructionHandle ih = start; ih != end.next; ih = ih.next) { - if (ih == null) { - throw new ClassGenException("Invalid range: From " + start + " to " + end); - } else if (ih == target) { - throw new ClassGenException("Invalid range: From " + start + " to " + end - + " contains target " + target); - } - } - // Step 2: Temporarily remove the given instructions from the list - InstructionHandle prev = start.prev, next = end.next; - if (prev != null) { - prev.next = next; - } else { - this.start = next; - } - if (next != null) { - next.prev = prev; - } else { - this.end = prev; - } - start.prev = end.next = null; - // Step 3: append after target - if (target == null) { // append to start of list - if (this.start != null) { - this.start.prev = end; - } - end.next = this.start; - this.start = start; - } else { - next = target.next; - target.next = start; - start.prev = target; - end.next = next; - if (next != null) { - next.prev = end; - } else { - this.end = end; - } - } - } - - - /** - * Move a single instruction (handle) to a new location. - * - * @param ih moved instruction - * @param target new location of moved instruction - */ - public void move( InstructionHandle ih, InstructionHandle target ) { - move(ih, ih, target); - } - - - /** - * Remove from instruction `prev' to instruction `next' both contained - * in this list. Throws TargetLostException when one of the removed instruction handles - * is still being targeted. - * - * @param prev where to start deleting (predecessor, exclusive) - * @param next where to end deleting (successor, exclusive) - */ - private void remove( InstructionHandle prev, InstructionHandle next ) - throws TargetLostException { - InstructionHandle first, last; // First and last deleted instruction - if ((prev == null) && (next == null)) { // singleton list - first = last = start; - start = end = null; - } else { - if (prev == null) { // At start of list - first = start; - start = next; - } else { - first = prev.next; - prev.next = next; - } - if (next == null) { // At end of list - last = end; - end = prev; - } else { - last = next.prev; - next.prev = prev; - } - } - first.prev = null; // Completely separated from rest of list - last.next = null; - List target_vec = new ArrayList(); - for (InstructionHandle ih = first; ih != null; ih = ih.next) { - ih.getInstruction().dispose(); // e.g. BranchInstructions release their targets - } - StringBuilder buf = new StringBuilder("{ "); - for (InstructionHandle ih = first; ih != null; ih = next) { - next = ih.next; - length--; - if (ih.hasTargeters()) { // Still got targeters? - target_vec.add(ih); - buf.append(ih.toString(true) + " "); - ih.next = ih.prev = null; - } else { - ih.dispose(); - } - } - buf.append("}"); - if (!target_vec.isEmpty()) { - InstructionHandle[] targeted = new InstructionHandle[target_vec.size()]; - target_vec.toArray(targeted); - throw new TargetLostException(targeted, buf.toString()); - } - } - - - /** - * Remove instruction from this list. The corresponding Instruction - * handles must not be reused! - * - * @param ih instruction (handle) to remove - */ - public void delete( InstructionHandle ih ) throws TargetLostException { - remove(ih.prev, ih.next); - } - - - /** - * Remove instruction from this list. The corresponding Instruction - * handles must not be reused! - * - * @param i instruction to remove - */ - public void delete( Instruction i ) throws TargetLostException { - InstructionHandle ih; - if ((ih = findInstruction1(i)) == null) { - throw new ClassGenException("Instruction " + i + " is not contained in this list."); - } - delete(ih); - } - - - /** - * Remove instructions from instruction `from' to instruction `to' contained - * in this list. The user must ensure that `from' is an instruction before - * `to', or risk havoc. The corresponding Instruction handles must not be reused! - * - * @param from where to start deleting (inclusive) - * @param to where to end deleting (inclusive) - */ - public void delete( InstructionHandle from, InstructionHandle to ) throws TargetLostException { - remove(from.prev, to.next); - } - - - /** - * Remove instructions from instruction `from' to instruction `to' contained - * in this list. The user must ensure that `from' is an instruction before - * `to', or risk havoc. The corresponding Instruction handles must not be reused! - * - * @param from where to start deleting (inclusive) - * @param to where to end deleting (inclusive) - */ - public void delete( Instruction from, Instruction to ) throws TargetLostException { - InstructionHandle from_ih, to_ih; - if ((from_ih = findInstruction1(from)) == null) { - throw new ClassGenException("Instruction " + from + " is not contained in this list."); - } - if ((to_ih = findInstruction2(to)) == null) { - throw new ClassGenException("Instruction " + to + " is not contained in this list."); - } - delete(from_ih, to_ih); - } - - - /** - * Search for given Instruction reference, start at beginning of list. - * - * @param i instruction to search for - * @return instruction found on success, null otherwise - */ - private InstructionHandle findInstruction1( Instruction i ) { - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - if (ih.instruction == i) { - return ih; - } - } - return null; - } - - - /** - * Search for given Instruction reference, start at end of list - * - * @param i instruction to search for - * @return instruction found on success, null otherwise - */ - private InstructionHandle findInstruction2( Instruction i ) { - for (InstructionHandle ih = end; ih != null; ih = ih.prev) { - if (ih.instruction == i) { - return ih; - } - } - return null; - } - - - public boolean contains( InstructionHandle i ) { - if (i == null) { - return false; - } - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - if (ih == i) { - return true; - } - } - return false; - } - - - public boolean contains( Instruction i ) { - return findInstruction1(i) != null; - } - - - public void setPositions() { - setPositions(false); - } - - - /** - * Give all instructions their position number (offset in byte stream), i.e., - * make the list ready to be dumped. - * - * @param check Perform sanity checks, e.g. if all targeted instructions really belong - * to this list - */ - public void setPositions( boolean check ) { - int max_additional_bytes = 0, additional_bytes = 0; - int index = 0, count = 0; - int[] pos = new int[length]; - /* Pass 0: Sanity checks - */ - if (check) { - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - if (i instanceof BranchInstruction) { // target instruction within list? - Instruction inst = ((BranchInstruction) i).getTarget().instruction; - if (!contains(inst)) { - throw new ClassGenException("Branch target of " - + Constants.OPCODE_NAMES[i.opcode] + ":" + inst - + " not in instruction list"); - } - if (i instanceof Select) { - InstructionHandle[] targets = ((Select) i).getTargets(); - for (int j = 0; j < targets.length; j++) { - inst = targets[j].instruction; - if (!contains(inst)) { - throw new ClassGenException("Branch target of " - + Constants.OPCODE_NAMES[i.opcode] + ":" + inst - + " not in instruction list"); - } - } - } - if (!(ih instanceof BranchHandle)) { - throw new ClassGenException("Branch instruction " - + Constants.OPCODE_NAMES[i.opcode] + ":" + inst - + " not contained in BranchHandle."); - } - } - } - } - /* Pass 1: Set position numbers and sum up the maximum number of bytes an - * instruction may be shifted. - */ - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - ih.setPosition(index); - pos[count++] = index; - /* Get an estimate about how many additional bytes may be added, because - * BranchInstructions may have variable length depending on the target - * offset (short vs. int) or alignment issues (TABLESWITCH and - * LOOKUPSWITCH). - */ - switch (i.getOpcode()) { - case Constants.JSR: - case Constants.GOTO: - max_additional_bytes += 2; - break; - case Constants.TABLESWITCH: - case Constants.LOOKUPSWITCH: - max_additional_bytes += 3; - break; - } - index += i.getLength(); - } - /* Pass 2: Expand the variable-length (Branch)Instructions depending on - * the target offset (short or int) and ensure that branch targets are - * within this list. - */ - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - additional_bytes += ih.updatePosition(additional_bytes, max_additional_bytes); - } - /* Pass 3: Update position numbers (which may have changed due to the - * preceding expansions), like pass 1. - */ - index = count = 0; - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - ih.setPosition(index); - pos[count++] = index; - index += i.getLength(); - } - byte_positions = new int[count]; // Trim to proper size - System.arraycopy(pos, 0, byte_positions, 0, count); - } - - - /** - * When everything is finished, use this method to convert the instruction - * list into an array of bytes. - * - * @return the byte code ready to be dumped - */ - public byte[] getByteCode() { - // Update position indices of instructions - setPositions(); - ByteArrayOutputStream b = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(b); - try { - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - i.dump(out); // Traverse list - } - } catch (IOException e) { - System.err.println(e); - return null; - } - return b.toByteArray(); - } - - - /** - * @return an array of instructions without target information for branch instructions. - */ - public Instruction[] getInstructions() { - ByteSequence bytes = new ByteSequence(getByteCode()); - List instructions = new ArrayList(); - try { - while (bytes.available() > 0) { - instructions.add(Instruction.readInstruction(bytes)); - } - } catch (IOException e) { - throw new ClassGenException(e.toString()); - } - return (Instruction[]) instructions.toArray(new Instruction[instructions.size()]); - } - - - public String toString() { - return toString(true); - } - - - /** - * @param verbose toggle output format - * @return String containing all instructions in this list. - */ - public String toString( boolean verbose ) { - StringBuilder buf = new StringBuilder(); - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - buf.append(ih.toString(verbose)).append("\n"); - } - return buf.toString(); - } - - - /** - * @return Enumeration that lists all instructions (handles) - */ - public Iterator iterator() { - return new Iterator() { - - private InstructionHandle ih = start; - - - public Object next() { - InstructionHandle i = ih; - ih = ih.next; - return i; - } - - - public void remove() { - throw new UnsupportedOperationException(); - } - - - public boolean hasNext() { - return ih != null; - } - }; - } - - - /** - * @return array containing all instructions (handles) - */ - public InstructionHandle[] getInstructionHandles() { - InstructionHandle[] ihs = new InstructionHandle[length]; - InstructionHandle ih = start; - for (int i = 0; i < length; i++) { - ihs[i] = ih; - ih = ih.next; - } - return ihs; - } - - - /** - * Get positions (offsets) of all instructions in the list. This relies on that - * the list has been freshly created from an byte code array, or that setPositions() - * has been called. Otherwise this may be inaccurate. - * - * @return array containing all instruction's offset in byte code - */ - public int[] getInstructionPositions() { - return byte_positions; - } - - - /** - * @return complete, i.e., deep copy of this list - */ - public InstructionList copy() { - Map map = new HashMap(); - InstructionList il = new InstructionList(); - /* Pass 1: Make copies of all instructions, append them to the new list - * and associate old instruction references with the new ones, i.e., - * a 1:1 mapping. - */ - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - Instruction c = i.copy(); // Use clone for shallow copy - if (c instanceof BranchInstruction) { - map.put(ih, il.append((BranchInstruction) c)); - } else { - map.put(ih, il.append(c)); - } - } - /* Pass 2: Update branch targets. - */ - InstructionHandle ih = start; - InstructionHandle ch = il.start; - while (ih != null) { - Instruction i = ih.instruction; - Instruction c = ch.instruction; - if (i instanceof BranchInstruction) { - BranchInstruction bi = (BranchInstruction) i; - BranchInstruction bc = (BranchInstruction) c; - InstructionHandle itarget = bi.getTarget(); // old target - // New target is in hash map - bc.setTarget((InstructionHandle) map.get(itarget)); - if (bi instanceof Select) { // Either LOOKUPSWITCH or TABLESWITCH - InstructionHandle[] itargets = ((Select) bi).getTargets(); - InstructionHandle[] ctargets = ((Select) bc).getTargets(); - for (int j = 0; j < itargets.length; j++) { // Update all targets - ctargets[j] = (InstructionHandle) map.get(itargets[j]); - } - } - } - ih = ih.next; - ch = ch.next; - } - return il; - } - - - /** Replace all references to the old constant pool with references to the new - * constant pool - */ - public void replaceConstantPool( ConstantPoolGen old_cp, ConstantPoolGen new_cp ) { - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - if (i instanceof CPInstruction) { - CPInstruction ci = (CPInstruction) i; - Constant c = old_cp.getConstant(ci.getIndex()); - ci.setIndex(new_cp.addConstant(c, old_cp)); - } - } - } - - - private void clear() { - start = end = null; - length = 0; - } - - - /** - * Delete contents of list. Provides besser memory utilization, - * because the system then may reuse the instruction handles. This - * method is typically called right after - * MethodGen.getMethod(). - */ - public void dispose() { - // Traverse in reverse order, because ih.next is overwritten - for (InstructionHandle ih = end; ih != null; ih = ih.prev) { - /* Causes BranchInstructions to release target and targeters, because it - * calls dispose() on the contained instruction. - */ - ih.dispose(); - } - clear(); - } - - - /** - * @return start of list - */ - public InstructionHandle getStart() { - return start; - } - - - /** - * @return end of list - */ - public InstructionHandle getEnd() { - return end; - } - - - /** - * @return length of list (Number of instructions, not bytes) - */ - public int getLength() { - return length; - } - - - /** - * @return length of list (Number of instructions, not bytes) - */ - public int size() { - return length; - } - - - /** - * Redirect all references from old_target to new_target, i.e., update targets - * of branch instructions. - * - * @param old_target the old target instruction handle - * @param new_target the new target instruction handle - */ - public void redirectBranches( InstructionHandle old_target, InstructionHandle new_target ) { - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - Instruction i = ih.getInstruction(); - if (i instanceof BranchInstruction) { - BranchInstruction b = (BranchInstruction) i; - InstructionHandle target = b.getTarget(); - if (target == old_target) { - b.setTarget(new_target); - } - if (b instanceof Select) { // Either LOOKUPSWITCH or TABLESWITCH - InstructionHandle[] targets = ((Select) b).getTargets(); - for (int j = 0; j < targets.length; j++) { - if (targets[j] == old_target) { - ((Select) b).setTarget(j, new_target); - } - } - } - } - } - } - - - /** - * Redirect all references of local variables from old_target to new_target. - * - * @param lg array of local variables - * @param old_target the old target instruction handle - * @param new_target the new target instruction handle - * @see MethodGen - */ - public void redirectLocalVariables( LocalVariableGen[] lg, InstructionHandle old_target, - InstructionHandle new_target ) { - for (int i = 0; i < lg.length; i++) { - InstructionHandle start = lg[i].getStart(); - InstructionHandle end = lg[i].getEnd(); - if (start == old_target) { - lg[i].setStart(new_target); - } - if (end == old_target) { - lg[i].setEnd(new_target); - } - } - } - - - /** - * Redirect all references of exception handlers from old_target to new_target. - * - * @param exceptions array of exception handlers - * @param old_target the old target instruction handle - * @param new_target the new target instruction handle - * @see MethodGen - */ - public void redirectExceptionHandlers( CodeExceptionGen[] exceptions, - InstructionHandle old_target, InstructionHandle new_target ) { - for (int i = 0; i < exceptions.length; i++) { - if (exceptions[i].getStartPC() == old_target) { - exceptions[i].setStartPC(new_target); - } - if (exceptions[i].getEndPC() == old_target) { - exceptions[i].setEndPC(new_target); - } - if (exceptions[i].getHandlerPC() == old_target) { - exceptions[i].setHandlerPC(new_target); - } - } - } - - private List observers; - - - /** Add observer for this object. - */ - public void addObserver( InstructionListObserver o ) { - if (observers == null) { - observers = new ArrayList(); - } - observers.add(o); - } - - - /** Remove observer for this object. - */ - public void removeObserver( InstructionListObserver o ) { - if (observers != null) { - observers.remove(o); - } - } - - - /** Call notify() method on all observers. This method is not called - * automatically whenever the state has changed, but has to be - * called by the user after he has finished editing the object. - */ - public void update() { - if (observers != null) { - for (Iterator e = observers.iterator(); e.hasNext();) { - ((InstructionListObserver) e.next()).notify(this); - } - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.classfile.Constant; +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * This class is a container for a list of Instruction objects. Instructions can + * be appended, inserted, moved, deleted, etc.. Instructions are being + * wrapped into InstructionHandles objects that + * are returned upon append/insert operations. They give the user + * (read only) access to the list structure, such that it can be traversed and + * manipulated in a controlled way. + * + * A list is finally dumped to a byte code array with getByteCode. + * + * @version $Id: InstructionList.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Instruction + * @see InstructionHandle + * @see BranchHandle + */ +public class InstructionList implements Serializable { + + private InstructionHandle start = null, end = null; + private int length = 0; // number of elements in list + private int[] byte_positions; // byte code offsets corresponding to instructions + + + /** + * Create (empty) instruction list. + */ + public InstructionList() { + } + + + /** + * Create instruction list containing one instruction. + * @param i initial instruction + */ + public InstructionList(Instruction i) { + append(i); + } + + + /** + * Create instruction list containing one instruction. + * @param i initial instruction + */ + public InstructionList(BranchInstruction i) { + append(i); + } + + + /** + * Initialize list with (nonnull) compound instruction. Consumes argument + * list, i.e., it becomes empty. + * + * @param c compound instruction (list) + */ + public InstructionList(CompoundInstruction c) { + append(c.getInstructionList()); + } + + + /** + * Test for empty list. + */ + public boolean isEmpty() { + return start == null; + } // && end == null + + + /** + * Find the target instruction (handle) that corresponds to the given target + * position (byte code offset). + * + * @param ihs array of instruction handles, i.e. il.getInstructionHandles() + * @param pos array of positions corresponding to ihs, i.e. il.getInstructionPositions() + * @param count length of arrays + * @param target target position to search for + * @return target position's instruction handle if available + */ + public static InstructionHandle findHandle( InstructionHandle[] ihs, int[] pos, int count, + int target ) { + int l = 0, r = count - 1; + /* Do a binary search since the pos array is orderd. + */ + do { + int i = (l + r) / 2; + int j = pos[i]; + if (j == target) { + return ihs[i]; + } else if (target < j) { + r = i - 1; + } else { + l = i + 1; + } + } while (l <= r); + return null; + } + + + /** + * Get instruction handle for instruction at byte code position pos. + * This only works properly, if the list is freshly initialized from a byte array or + * setPositions() has been called before this method. + * + * @param pos byte code position to search for + * @return target position's instruction handle if available + */ + public InstructionHandle findHandle( int pos ) { + InstructionHandle[] ihs = getInstructionHandles(); + return findHandle(ihs, byte_positions, length, pos); + } + + + /** + * Initialize instruction list from byte array. + * + * @param code byte array containing the instructions + */ + public InstructionList(byte[] code) { + ByteSequence bytes = new ByteSequence(code); + InstructionHandle[] ihs = new InstructionHandle[code.length]; + int[] pos = new int[code.length]; // Can't be more than that + int count = 0; // Contains actual length + /* Pass 1: Create an object for each byte code and append them + * to the list. + */ + try { + while (bytes.available() > 0) { + // Remember byte offset and associate it with the instruction + int off = bytes.getIndex(); + pos[count] = off; + /* Read one instruction from the byte stream, the byte position is set + * accordingly. + */ + Instruction i = Instruction.readInstruction(bytes); + InstructionHandle ih; + if (i instanceof BranchInstruction) { + ih = append((BranchInstruction) i); + } else { + ih = append(i); + } + ih.setPosition(off); + ihs[count] = ih; + count++; + } + } catch (IOException e) { + throw new ClassGenException(e.toString()); + } + byte_positions = new int[count]; // Trim to proper size + System.arraycopy(pos, 0, byte_positions, 0, count); + /* Pass 2: Look for BranchInstruction and update their targets, i.e., + * convert offsets to instruction handles. + */ + for (int i = 0; i < count; i++) { + if (ihs[i] instanceof BranchHandle) { + BranchInstruction bi = (BranchInstruction) ihs[i].instruction; + int target = bi.position + bi.getIndex(); /* Byte code position: + * relative -> absolute. */ + // Search for target position + InstructionHandle ih = findHandle(ihs, pos, count, target); + if (ih == null) { + throw new ClassGenException("Couldn't find target for branch: " + bi); + } + bi.setTarget(ih); // Update target + // If it is a Select instruction, update all branch targets + if (bi instanceof Select) { // Either LOOKUPSWITCH or TABLESWITCH + Select s = (Select) bi; + int[] indices = s.getIndices(); + for (int j = 0; j < indices.length; j++) { + target = bi.position + indices[j]; + ih = findHandle(ihs, pos, count, target); + if (ih == null) { + throw new ClassGenException("Couldn't find target for switch: " + bi); + } + s.setTarget(j, ih); // Update target + } + } + } + } + } + + + /** + * Append another list after instruction (handle) ih contained in this list. + * Consumes argument list, i.e., it becomes empty. + * + * @param ih where to append the instruction list + * @param il Instruction list to append to this one + * @return instruction handle pointing to the first appended instruction + */ + public InstructionHandle append( InstructionHandle ih, InstructionList il ) { + if (il == null) { + throw new ClassGenException("Appending null InstructionList"); + } + if (il.isEmpty()) { + return ih; + } + InstructionHandle next = ih.next, ret = il.start; + ih.next = il.start; + il.start.prev = ih; + il.end.next = next; + if (next != null) { + next.prev = il.end; + } else { + end = il.end; // Update end ... + } + length += il.length; // Update length + il.clear(); + return ret; + } + + + /** + * Append another list after instruction i contained in this list. + * Consumes argument list, i.e., it becomes empty. + * + * @param i where to append the instruction list + * @param il Instruction list to append to this one + * @return instruction handle pointing to the first appended instruction + */ + public InstructionHandle append( Instruction i, InstructionList il ) { + InstructionHandle ih; + if ((ih = findInstruction2(i)) == null) { + throw new ClassGenException("Instruction " + i + " is not contained in this list."); + } + return append(ih, il); + } + + + /** + * Append another list to this one. + * Consumes argument list, i.e., it becomes empty. + * + * @param il list to append to end of this list + * @return instruction handle of the first appended instruction + */ + public InstructionHandle append( InstructionList il ) { + if (il == null) { + throw new ClassGenException("Appending null InstructionList"); + } + if (il.isEmpty()) { + return null; + } + if (isEmpty()) { + start = il.start; + end = il.end; + length = il.length; + il.clear(); + return start; + } else { + return append(end, il); // was end.instruction + } + } + + + /** + * Append an instruction to the end of this list. + * + * @param ih instruction to append + */ + private void append( InstructionHandle ih ) { + if (isEmpty()) { + start = end = ih; + ih.next = ih.prev = null; + } else { + end.next = ih; + ih.prev = end; + ih.next = null; + end = ih; + } + length++; // Update length + } + + + /** + * Append an instruction to the end of this list. + * + * @param i instruction to append + * @return instruction handle of the appended instruction + */ + public InstructionHandle append( Instruction i ) { + InstructionHandle ih = InstructionHandle.getInstructionHandle(i); + append(ih); + return ih; + } + + + /** + * Append a branch instruction to the end of this list. + * + * @param i branch instruction to append + * @return branch instruction handle of the appended instruction + */ + public BranchHandle append( BranchInstruction i ) { + BranchHandle ih = BranchHandle.getBranchHandle(i); + append(ih); + return ih; + } + + + /** + * Append a single instruction j after another instruction i, which + * must be in this list of course! + * + * @param i Instruction in list + * @param j Instruction to append after i in list + * @return instruction handle of the first appended instruction + */ + public InstructionHandle append( Instruction i, Instruction j ) { + return append(i, new InstructionList(j)); + } + + + /** + * Append a compound instruction, after instruction i. + * + * @param i Instruction in list + * @param c The composite instruction (containing an InstructionList) + * @return instruction handle of the first appended instruction + */ + public InstructionHandle append( Instruction i, CompoundInstruction c ) { + return append(i, c.getInstructionList()); + } + + + /** + * Append a compound instruction. + * + * @param c The composite instruction (containing an InstructionList) + * @return instruction handle of the first appended instruction + */ + public InstructionHandle append( CompoundInstruction c ) { + return append(c.getInstructionList()); + } + + + /** + * Append a compound instruction. + * + * @param ih where to append the instruction list + * @param c The composite instruction (containing an InstructionList) + * @return instruction handle of the first appended instruction + */ + public InstructionHandle append( InstructionHandle ih, CompoundInstruction c ) { + return append(ih, c.getInstructionList()); + } + + + /** + * Append an instruction after instruction (handle) ih contained in this list. + * + * @param ih where to append the instruction list + * @param i Instruction to append + * @return instruction handle pointing to the first appended instruction + */ + public InstructionHandle append( InstructionHandle ih, Instruction i ) { + return append(ih, new InstructionList(i)); + } + + + /** + * Append an instruction after instruction (handle) ih contained in this list. + * + * @param ih where to append the instruction list + * @param i Instruction to append + * @return instruction handle pointing to the first appended instruction + */ + public BranchHandle append( InstructionHandle ih, BranchInstruction i ) { + BranchHandle bh = BranchHandle.getBranchHandle(i); + InstructionList il = new InstructionList(); + il.append(bh); + append(ih, il); + return bh; + } + + + /** + * Insert another list before Instruction handle ih contained in this list. + * Consumes argument list, i.e., it becomes empty. + * + * @param ih where to append the instruction list + * @param il Instruction list to insert + * @return instruction handle of the first inserted instruction + */ + public InstructionHandle insert( InstructionHandle ih, InstructionList il ) { + if (il == null) { + throw new ClassGenException("Inserting null InstructionList"); + } + if (il.isEmpty()) { + return ih; + } + InstructionHandle prev = ih.prev, ret = il.start; + ih.prev = il.end; + il.end.next = ih; + il.start.prev = prev; + if (prev != null) { + prev.next = il.start; + } else { + start = il.start; // Update start ... + } + length += il.length; // Update length + il.clear(); + return ret; + } + + + /** + * Insert another list. + * + * @param il list to insert before start of this list + * @return instruction handle of the first inserted instruction + */ + public InstructionHandle insert( InstructionList il ) { + if (isEmpty()) { + append(il); // Code is identical for this case + return start; + } else { + return insert(start, il); + } + } + + + /** + * Insert an instruction at start of this list. + * + * @param ih instruction to insert + */ + private void insert( InstructionHandle ih ) { + if (isEmpty()) { + start = end = ih; + ih.next = ih.prev = null; + } else { + start.prev = ih; + ih.next = start; + ih.prev = null; + start = ih; + } + length++; + } + + + /** + * Insert another list before Instruction i contained in this list. + * Consumes argument list, i.e., it becomes empty. + * + * @param i where to append the instruction list + * @param il Instruction list to insert + * @return instruction handle pointing to the first inserted instruction, + * i.e., il.getStart() + */ + public InstructionHandle insert( Instruction i, InstructionList il ) { + InstructionHandle ih; + if ((ih = findInstruction1(i)) == null) { + throw new ClassGenException("Instruction " + i + " is not contained in this list."); + } + return insert(ih, il); + } + + + /** + * Insert an instruction at start of this list. + * + * @param i instruction to insert + * @return instruction handle of the inserted instruction + */ + public InstructionHandle insert( Instruction i ) { + InstructionHandle ih = InstructionHandle.getInstructionHandle(i); + insert(ih); + return ih; + } + + + /** + * Insert a branch instruction at start of this list. + * + * @param i branch instruction to insert + * @return branch instruction handle of the appended instruction + */ + public BranchHandle insert( BranchInstruction i ) { + BranchHandle ih = BranchHandle.getBranchHandle(i); + insert(ih); + return ih; + } + + + /** + * Insert a single instruction j before another instruction i, which + * must be in this list of course! + * + * @param i Instruction in list + * @param j Instruction to insert before i in list + * @return instruction handle of the first inserted instruction + */ + public InstructionHandle insert( Instruction i, Instruction j ) { + return insert(i, new InstructionList(j)); + } + + + /** + * Insert a compound instruction before instruction i. + * + * @param i Instruction in list + * @param c The composite instruction (containing an InstructionList) + * @return instruction handle of the first inserted instruction + */ + public InstructionHandle insert( Instruction i, CompoundInstruction c ) { + return insert(i, c.getInstructionList()); + } + + + /** + * Insert a compound instruction. + * + * @param c The composite instruction (containing an InstructionList) + * @return instruction handle of the first inserted instruction + */ + public InstructionHandle insert( CompoundInstruction c ) { + return insert(c.getInstructionList()); + } + + + /** + * Insert an instruction before instruction (handle) ih contained in this list. + * + * @param ih where to insert to the instruction list + * @param i Instruction to insert + * @return instruction handle of the first inserted instruction + */ + public InstructionHandle insert( InstructionHandle ih, Instruction i ) { + return insert(ih, new InstructionList(i)); + } + + + /** + * Insert a compound instruction. + * + * @param ih where to insert the instruction list + * @param c The composite instruction (containing an InstructionList) + * @return instruction handle of the first inserted instruction + */ + public InstructionHandle insert( InstructionHandle ih, CompoundInstruction c ) { + return insert(ih, c.getInstructionList()); + } + + + /** + * Insert an instruction before instruction (handle) ih contained in this list. + * + * @param ih where to insert to the instruction list + * @param i Instruction to insert + * @return instruction handle of the first inserted instruction + */ + public BranchHandle insert( InstructionHandle ih, BranchInstruction i ) { + BranchHandle bh = BranchHandle.getBranchHandle(i); + InstructionList il = new InstructionList(); + il.append(bh); + insert(ih, il); + return bh; + } + + + /** + * Take all instructions (handles) from "start" to "end" and append them after the + * new location "target". Of course, "end" must be after "start" and target must + * not be located withing this range. If you want to move something to the start of + * the list use null as value for target.
          + * Any instruction targeters pointing to handles within the block, keep their targets. + * + * @param start of moved block + * @param end of moved block + * @param target of moved block + */ + public void move( InstructionHandle start, InstructionHandle end, InstructionHandle target ) { + // Step 1: Check constraints + if ((start == null) || (end == null)) { + throw new ClassGenException("Invalid null handle: From " + start + " to " + end); + } + if ((target == start) || (target == end)) { + throw new ClassGenException("Invalid range: From " + start + " to " + end + + " contains target " + target); + } + for (InstructionHandle ih = start; ih != end.next; ih = ih.next) { + if (ih == null) { + throw new ClassGenException("Invalid range: From " + start + " to " + end); + } else if (ih == target) { + throw new ClassGenException("Invalid range: From " + start + " to " + end + + " contains target " + target); + } + } + // Step 2: Temporarily remove the given instructions from the list + InstructionHandle prev = start.prev, next = end.next; + if (prev != null) { + prev.next = next; + } else { + this.start = next; + } + if (next != null) { + next.prev = prev; + } else { + this.end = prev; + } + start.prev = end.next = null; + // Step 3: append after target + if (target == null) { // append to start of list + if (this.start != null) { + this.start.prev = end; + } + end.next = this.start; + this.start = start; + } else { + next = target.next; + target.next = start; + start.prev = target; + end.next = next; + if (next != null) { + next.prev = end; + } else { + this.end = end; + } + } + } + + + /** + * Move a single instruction (handle) to a new location. + * + * @param ih moved instruction + * @param target new location of moved instruction + */ + public void move( InstructionHandle ih, InstructionHandle target ) { + move(ih, ih, target); + } + + + /** + * Remove from instruction `prev' to instruction `next' both contained + * in this list. Throws TargetLostException when one of the removed instruction handles + * is still being targeted. + * + * @param prev where to start deleting (predecessor, exclusive) + * @param next where to end deleting (successor, exclusive) + */ + private void remove( InstructionHandle prev, InstructionHandle next ) + throws TargetLostException { + InstructionHandle first, last; // First and last deleted instruction + if ((prev == null) && (next == null)) { // singleton list + first = last = start; + start = end = null; + } else { + if (prev == null) { // At start of list + first = start; + start = next; + } else { + first = prev.next; + prev.next = next; + } + if (next == null) { // At end of list + last = end; + end = prev; + } else { + last = next.prev; + next.prev = prev; + } + } + first.prev = null; // Completely separated from rest of list + last.next = null; + List target_vec = new ArrayList(); + for (InstructionHandle ih = first; ih != null; ih = ih.next) { + ih.getInstruction().dispose(); // e.g. BranchInstructions release their targets + } + StringBuilder buf = new StringBuilder("{ "); + for (InstructionHandle ih = first; ih != null; ih = next) { + next = ih.next; + length--; + if (ih.hasTargeters()) { // Still got targeters? + target_vec.add(ih); + buf.append(ih.toString(true) + " "); + ih.next = ih.prev = null; + } else { + ih.dispose(); + } + } + buf.append("}"); + if (!target_vec.isEmpty()) { + InstructionHandle[] targeted = new InstructionHandle[target_vec.size()]; + target_vec.toArray(targeted); + throw new TargetLostException(targeted, buf.toString()); + } + } + + + /** + * Remove instruction from this list. The corresponding Instruction + * handles must not be reused! + * + * @param ih instruction (handle) to remove + */ + public void delete( InstructionHandle ih ) throws TargetLostException { + remove(ih.prev, ih.next); + } + + + /** + * Remove instruction from this list. The corresponding Instruction + * handles must not be reused! + * + * @param i instruction to remove + */ + public void delete( Instruction i ) throws TargetLostException { + InstructionHandle ih; + if ((ih = findInstruction1(i)) == null) { + throw new ClassGenException("Instruction " + i + " is not contained in this list."); + } + delete(ih); + } + + + /** + * Remove instructions from instruction `from' to instruction `to' contained + * in this list. The user must ensure that `from' is an instruction before + * `to', or risk havoc. The corresponding Instruction handles must not be reused! + * + * @param from where to start deleting (inclusive) + * @param to where to end deleting (inclusive) + */ + public void delete( InstructionHandle from, InstructionHandle to ) throws TargetLostException { + remove(from.prev, to.next); + } + + + /** + * Remove instructions from instruction `from' to instruction `to' contained + * in this list. The user must ensure that `from' is an instruction before + * `to', or risk havoc. The corresponding Instruction handles must not be reused! + * + * @param from where to start deleting (inclusive) + * @param to where to end deleting (inclusive) + */ + public void delete( Instruction from, Instruction to ) throws TargetLostException { + InstructionHandle from_ih, to_ih; + if ((from_ih = findInstruction1(from)) == null) { + throw new ClassGenException("Instruction " + from + " is not contained in this list."); + } + if ((to_ih = findInstruction2(to)) == null) { + throw new ClassGenException("Instruction " + to + " is not contained in this list."); + } + delete(from_ih, to_ih); + } + + + /** + * Search for given Instruction reference, start at beginning of list. + * + * @param i instruction to search for + * @return instruction found on success, null otherwise + */ + private InstructionHandle findInstruction1( Instruction i ) { + for (InstructionHandle ih = start; ih != null; ih = ih.next) { + if (ih.instruction == i) { + return ih; + } + } + return null; + } + + + /** + * Search for given Instruction reference, start at end of list + * + * @param i instruction to search for + * @return instruction found on success, null otherwise + */ + private InstructionHandle findInstruction2( Instruction i ) { + for (InstructionHandle ih = end; ih != null; ih = ih.prev) { + if (ih.instruction == i) { + return ih; + } + } + return null; + } + + + public boolean contains( InstructionHandle i ) { + if (i == null) { + return false; + } + for (InstructionHandle ih = start; ih != null; ih = ih.next) { + if (ih == i) { + return true; + } + } + return false; + } + + + public boolean contains( Instruction i ) { + return findInstruction1(i) != null; + } + + + public void setPositions() { + setPositions(false); + } + + + /** + * Give all instructions their position number (offset in byte stream), i.e., + * make the list ready to be dumped. + * + * @param check Perform sanity checks, e.g. if all targeted instructions really belong + * to this list + */ + public void setPositions( boolean check ) { + int max_additional_bytes = 0, additional_bytes = 0; + int index = 0, count = 0; + int[] pos = new int[length]; + /* Pass 0: Sanity checks + */ + if (check) { + for (InstructionHandle ih = start; ih != null; ih = ih.next) { + Instruction i = ih.instruction; + if (i instanceof BranchInstruction) { // target instruction within list? + Instruction inst = ((BranchInstruction) i).getTarget().instruction; + if (!contains(inst)) { + throw new ClassGenException("Branch target of " + + Constants.OPCODE_NAMES[i.opcode] + ":" + inst + + " not in instruction list"); + } + if (i instanceof Select) { + InstructionHandle[] targets = ((Select) i).getTargets(); + for (int j = 0; j < targets.length; j++) { + inst = targets[j].instruction; + if (!contains(inst)) { + throw new ClassGenException("Branch target of " + + Constants.OPCODE_NAMES[i.opcode] + ":" + inst + + " not in instruction list"); + } + } + } + if (!(ih instanceof BranchHandle)) { + throw new ClassGenException("Branch instruction " + + Constants.OPCODE_NAMES[i.opcode] + ":" + inst + + " not contained in BranchHandle."); + } + } + } + } + /* Pass 1: Set position numbers and sum up the maximum number of bytes an + * instruction may be shifted. + */ + for (InstructionHandle ih = start; ih != null; ih = ih.next) { + Instruction i = ih.instruction; + ih.setPosition(index); + pos[count++] = index; + /* Get an estimate about how many additional bytes may be added, because + * BranchInstructions may have variable length depending on the target + * offset (short vs. int) or alignment issues (TABLESWITCH and + * LOOKUPSWITCH). + */ + switch (i.getOpcode()) { + case Constants.JSR: + case Constants.GOTO: + max_additional_bytes += 2; + break; + case Constants.TABLESWITCH: + case Constants.LOOKUPSWITCH: + max_additional_bytes += 3; + break; + } + index += i.getLength(); + } + /* Pass 2: Expand the variable-length (Branch)Instructions depending on + * the target offset (short or int) and ensure that branch targets are + * within this list. + */ + for (InstructionHandle ih = start; ih != null; ih = ih.next) { + additional_bytes += ih.updatePosition(additional_bytes, max_additional_bytes); + } + /* Pass 3: Update position numbers (which may have changed due to the + * preceding expansions), like pass 1. + */ + index = count = 0; + for (InstructionHandle ih = start; ih != null; ih = ih.next) { + Instruction i = ih.instruction; + ih.setPosition(index); + pos[count++] = index; + index += i.getLength(); + } + byte_positions = new int[count]; // Trim to proper size + System.arraycopy(pos, 0, byte_positions, 0, count); + } + + + /** + * When everything is finished, use this method to convert the instruction + * list into an array of bytes. + * + * @return the byte code ready to be dumped + */ + public byte[] getByteCode() { + // Update position indices of instructions + setPositions(); + ByteArrayOutputStream b = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(b); + try { + for (InstructionHandle ih = start; ih != null; ih = ih.next) { + Instruction i = ih.instruction; + i.dump(out); // Traverse list + } + } catch (IOException e) { + System.err.println(e); + return null; + } + return b.toByteArray(); + } + + + /** + * @return an array of instructions without target information for branch instructions. + */ + public Instruction[] getInstructions() { + ByteSequence bytes = new ByteSequence(getByteCode()); + List instructions = new ArrayList(); + try { + while (bytes.available() > 0) { + instructions.add(Instruction.readInstruction(bytes)); + } + } catch (IOException e) { + throw new ClassGenException(e.toString()); + } + return (Instruction[]) instructions.toArray(new Instruction[instructions.size()]); + } + + + public String toString() { + return toString(true); + } + + + /** + * @param verbose toggle output format + * @return String containing all instructions in this list. + */ + public String toString( boolean verbose ) { + StringBuilder buf = new StringBuilder(); + for (InstructionHandle ih = start; ih != null; ih = ih.next) { + buf.append(ih.toString(verbose)).append("\n"); + } + return buf.toString(); + } + + + /** + * @return Enumeration that lists all instructions (handles) + */ + public Iterator iterator() { + return new Iterator() { + + private InstructionHandle ih = start; + + + public Object next() { + InstructionHandle i = ih; + ih = ih.next; + return i; + } + + + public void remove() { + throw new UnsupportedOperationException(); + } + + + public boolean hasNext() { + return ih != null; + } + }; + } + + + /** + * @return array containing all instructions (handles) + */ + public InstructionHandle[] getInstructionHandles() { + InstructionHandle[] ihs = new InstructionHandle[length]; + InstructionHandle ih = start; + for (int i = 0; i < length; i++) { + ihs[i] = ih; + ih = ih.next; + } + return ihs; + } + + + /** + * Get positions (offsets) of all instructions in the list. This relies on that + * the list has been freshly created from an byte code array, or that setPositions() + * has been called. Otherwise this may be inaccurate. + * + * @return array containing all instruction's offset in byte code + */ + public int[] getInstructionPositions() { + return byte_positions; + } + + + /** + * @return complete, i.e., deep copy of this list + */ + public InstructionList copy() { + Map map = new HashMap(); + InstructionList il = new InstructionList(); + /* Pass 1: Make copies of all instructions, append them to the new list + * and associate old instruction references with the new ones, i.e., + * a 1:1 mapping. + */ + for (InstructionHandle ih = start; ih != null; ih = ih.next) { + Instruction i = ih.instruction; + Instruction c = i.copy(); // Use clone for shallow copy + if (c instanceof BranchInstruction) { + map.put(ih, il.append((BranchInstruction) c)); + } else { + map.put(ih, il.append(c)); + } + } + /* Pass 2: Update branch targets. + */ + InstructionHandle ih = start; + InstructionHandle ch = il.start; + while (ih != null) { + Instruction i = ih.instruction; + Instruction c = ch.instruction; + if (i instanceof BranchInstruction) { + BranchInstruction bi = (BranchInstruction) i; + BranchInstruction bc = (BranchInstruction) c; + InstructionHandle itarget = bi.getTarget(); // old target + // New target is in hash map + bc.setTarget((InstructionHandle) map.get(itarget)); + if (bi instanceof Select) { // Either LOOKUPSWITCH or TABLESWITCH + InstructionHandle[] itargets = ((Select) bi).getTargets(); + InstructionHandle[] ctargets = ((Select) bc).getTargets(); + for (int j = 0; j < itargets.length; j++) { // Update all targets + ctargets[j] = (InstructionHandle) map.get(itargets[j]); + } + } + } + ih = ih.next; + ch = ch.next; + } + return il; + } + + + /** Replace all references to the old constant pool with references to the new + * constant pool + */ + public void replaceConstantPool( ConstantPoolGen old_cp, ConstantPoolGen new_cp ) { + for (InstructionHandle ih = start; ih != null; ih = ih.next) { + Instruction i = ih.instruction; + if (i instanceof CPInstruction) { + CPInstruction ci = (CPInstruction) i; + Constant c = old_cp.getConstant(ci.getIndex()); + ci.setIndex(new_cp.addConstant(c, old_cp)); + } + } + } + + + private void clear() { + start = end = null; + length = 0; + } + + + /** + * Delete contents of list. Provides besser memory utilization, + * because the system then may reuse the instruction handles. This + * method is typically called right after + * MethodGen.getMethod(). + */ + public void dispose() { + // Traverse in reverse order, because ih.next is overwritten + for (InstructionHandle ih = end; ih != null; ih = ih.prev) { + /* Causes BranchInstructions to release target and targeters, because it + * calls dispose() on the contained instruction. + */ + ih.dispose(); + } + clear(); + } + + + /** + * @return start of list + */ + public InstructionHandle getStart() { + return start; + } + + + /** + * @return end of list + */ + public InstructionHandle getEnd() { + return end; + } + + + /** + * @return length of list (Number of instructions, not bytes) + */ + public int getLength() { + return length; + } + + + /** + * @return length of list (Number of instructions, not bytes) + */ + public int size() { + return length; + } + + + /** + * Redirect all references from old_target to new_target, i.e., update targets + * of branch instructions. + * + * @param old_target the old target instruction handle + * @param new_target the new target instruction handle + */ + public void redirectBranches( InstructionHandle old_target, InstructionHandle new_target ) { + for (InstructionHandle ih = start; ih != null; ih = ih.next) { + Instruction i = ih.getInstruction(); + if (i instanceof BranchInstruction) { + BranchInstruction b = (BranchInstruction) i; + InstructionHandle target = b.getTarget(); + if (target == old_target) { + b.setTarget(new_target); + } + if (b instanceof Select) { // Either LOOKUPSWITCH or TABLESWITCH + InstructionHandle[] targets = ((Select) b).getTargets(); + for (int j = 0; j < targets.length; j++) { + if (targets[j] == old_target) { + ((Select) b).setTarget(j, new_target); + } + } + } + } + } + } + + + /** + * Redirect all references of local variables from old_target to new_target. + * + * @param lg array of local variables + * @param old_target the old target instruction handle + * @param new_target the new target instruction handle + * @see MethodGen + */ + public void redirectLocalVariables( LocalVariableGen[] lg, InstructionHandle old_target, + InstructionHandle new_target ) { + for (int i = 0; i < lg.length; i++) { + InstructionHandle start = lg[i].getStart(); + InstructionHandle end = lg[i].getEnd(); + if (start == old_target) { + lg[i].setStart(new_target); + } + if (end == old_target) { + lg[i].setEnd(new_target); + } + } + } + + + /** + * Redirect all references of exception handlers from old_target to new_target. + * + * @param exceptions array of exception handlers + * @param old_target the old target instruction handle + * @param new_target the new target instruction handle + * @see MethodGen + */ + public void redirectExceptionHandlers( CodeExceptionGen[] exceptions, + InstructionHandle old_target, InstructionHandle new_target ) { + for (int i = 0; i < exceptions.length; i++) { + if (exceptions[i].getStartPC() == old_target) { + exceptions[i].setStartPC(new_target); + } + if (exceptions[i].getEndPC() == old_target) { + exceptions[i].setEndPC(new_target); + } + if (exceptions[i].getHandlerPC() == old_target) { + exceptions[i].setHandlerPC(new_target); + } + } + } + + private List observers; + + + /** Add observer for this object. + */ + public void addObserver( InstructionListObserver o ) { + if (observers == null) { + observers = new ArrayList(); + } + observers.add(o); + } + + + /** Remove observer for this object. + */ + public void removeObserver( InstructionListObserver o ) { + if (observers != null) { + observers.remove(o); + } + } + + + /** Call notify() method on all observers. This method is not called + * automatically whenever the state has changed, but has to be + * called by the user after he has finished editing the object. + */ + public void update() { + if (observers != null) { + for (Iterator e = observers.iterator(); e.hasNext();) { + ((InstructionListObserver) e.next()).notify(this); + } + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionListObserver.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionListObserver.java index bdbb7e03..5fff36fc 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionListObserver.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionListObserver.java @@ -1,29 +1,29 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Implement this interface if you're interested in changes to an InstructionList object - * and register yourself with addObserver(). - * - * @version $Id: InstructionListObserver.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface InstructionListObserver { - - public void notify( InstructionList list ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Implement this interface if you're interested in changes to an InstructionList object + * and register yourself with addObserver(). + * + * @version $Id: InstructionListObserver.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface InstructionListObserver { + + public void notify( InstructionList list ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionTargeter.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionTargeter.java index 0a817cfc..aac85fc1 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionTargeter.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InstructionTargeter.java @@ -1,35 +1,35 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denote that a class targets InstructionHandles within an InstructionList. Namely - * the following implementers: - * - * @see BranchHandle - * @see LocalVariableGen - * @see CodeExceptionGen - * @version $Id: InstructionTargeter.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface InstructionTargeter { - - public boolean containsTarget( InstructionHandle ih ); - - - public void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denote that a class targets InstructionHandles within an InstructionList. Namely + * the following implementers: + * + * @see BranchHandle + * @see LocalVariableGen + * @see CodeExceptionGen + * @version $Id: InstructionTargeter.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface InstructionTargeter { + + public boolean containsTarget( InstructionHandle ih ); + + + public void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InvokeInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InvokeInstruction.java index 32d7d17e..a59d3d39 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InvokeInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/InvokeInstruction.java @@ -1,119 +1,119 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.util.StringTokenizer; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.classfile.Constant; -import org.apache.bcel5_2_0.classfile.ConstantPool; - -/** - * Super class for the INVOKExxx family of instructions. - * - * @version $Id: InvokeInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class InvokeInstruction extends FieldOrMethod implements ExceptionThrower, - TypedInstruction, StackConsumer, StackProducer { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - InvokeInstruction() { - } - - - /** - * @param index to constant pool - */ - protected InvokeInstruction(short opcode, int index) { - super(opcode, index); - } - - - /** - * @return mnemonic for instruction with symbolic references resolved - */ - public String toString( ConstantPool cp ) { - Constant c = cp.getConstant(index); - StringTokenizer tok = new StringTokenizer(cp.constantToString(c)); - return Constants.OPCODE_NAMES[opcode] + " " + tok.nextToken().replace('.', '/') - + tok.nextToken(); - } - - - /** - * Also works for instructions whose stack effect depends on the - * constant pool entry they reference. - * @return Number of words consumed from stack by this instruction - */ - public int consumeStack( ConstantPoolGen cpg ) { - String signature = getSignature(cpg); - Type[] args = Type.getArgumentTypes(signature); - int sum; - if (opcode == Constants.INVOKESTATIC) { - sum = 0; - } else { - sum = 1; // this reference - } - int n = args.length; - for (int i = 0; i < n; i++) { - sum += args[i].getSize(); - } - return sum; - } - - - /** - * Also works for instructions whose stack effect depends on the - * constant pool entry they reference. - * @return Number of words produced onto stack by this instruction - */ - public int produceStack( ConstantPoolGen cpg ) { - return getReturnType(cpg).getSize(); - } - - - /** @return return type of referenced method. - */ - public Type getType( ConstantPoolGen cpg ) { - return getReturnType(cpg); - } - - - /** @return name of referenced method. - */ - public String getMethodName( ConstantPoolGen cpg ) { - return getName(cpg); - } - - - /** @return return type of referenced method. - */ - public Type getReturnType( ConstantPoolGen cpg ) { - return Type.getReturnType(getSignature(cpg)); - } - - - /** @return argument types of referenced method. - */ - public Type[] getArgumentTypes( ConstantPoolGen cpg ) { - return Type.getArgumentTypes(getSignature(cpg)); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.util.StringTokenizer; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.classfile.Constant; +import org.apache.bcel5_2_0.classfile.ConstantPool; + +/** + * Super class for the INVOKExxx family of instructions. + * + * @version $Id: InvokeInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class InvokeInstruction extends FieldOrMethod implements ExceptionThrower, + TypedInstruction, StackConsumer, StackProducer { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + InvokeInstruction() { + } + + + /** + * @param index to constant pool + */ + protected InvokeInstruction(short opcode, int index) { + super(opcode, index); + } + + + /** + * @return mnemonic for instruction with symbolic references resolved + */ + public String toString( ConstantPool cp ) { + Constant c = cp.getConstant(index); + StringTokenizer tok = new StringTokenizer(cp.constantToString(c)); + return Constants.OPCODE_NAMES[opcode] + " " + tok.nextToken().replace('.', '/') + + tok.nextToken(); + } + + + /** + * Also works for instructions whose stack effect depends on the + * constant pool entry they reference. + * @return Number of words consumed from stack by this instruction + */ + public int consumeStack( ConstantPoolGen cpg ) { + String signature = getSignature(cpg); + Type[] args = Type.getArgumentTypes(signature); + int sum; + if (opcode == Constants.INVOKESTATIC) { + sum = 0; + } else { + sum = 1; // this reference + } + int n = args.length; + for (int i = 0; i < n; i++) { + sum += args[i].getSize(); + } + return sum; + } + + + /** + * Also works for instructions whose stack effect depends on the + * constant pool entry they reference. + * @return Number of words produced onto stack by this instruction + */ + public int produceStack( ConstantPoolGen cpg ) { + return getReturnType(cpg).getSize(); + } + + + /** @return return type of referenced method. + */ + public Type getType( ConstantPoolGen cpg ) { + return getReturnType(cpg); + } + + + /** @return name of referenced method. + */ + public String getMethodName( ConstantPoolGen cpg ) { + return getName(cpg); + } + + + /** @return return type of referenced method. + */ + public Type getReturnType( ConstantPoolGen cpg ) { + return Type.getReturnType(getSignature(cpg)); + } + + + /** @return argument types of referenced method. + */ + public Type[] getArgumentTypes( ConstantPoolGen cpg ) { + return Type.getArgumentTypes(getSignature(cpg)); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/JSR.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/JSR.java index 4e483bf0..b0e98403 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/JSR.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/JSR.java @@ -1,86 +1,86 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -/** - * JSR - Jump to subroutine - * - * @version $Id: JSR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class JSR extends JsrInstruction implements VariableLengthInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - JSR() { - } - - - public JSR(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.JSR, target); - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - index = getTargetOffset(); - if (opcode == org.apache.bcel5_2_0.Constants.JSR) { - super.dump(out); - } else { // JSR_W - index = getTargetOffset(); - out.writeByte(opcode); - out.writeInt(index); - } - } - - - protected int updatePosition( int offset, int max_offset ) { - int i = getTargetOffset(); // Depending on old position value - position += offset; // Position may be shifted by preceding expansions - if (Math.abs(i) >= (32767 - max_offset)) { // to large for short (estimate) - opcode = org.apache.bcel5_2_0.Constants.JSR_W; - length = 5; - return 2; // 5 - 3 - } - return 0; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitVariableLengthInstruction(this); - v.visitBranchInstruction(this); - v.visitJsrInstruction(this); - v.visitJSR(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +/** + * JSR - Jump to subroutine + * + * @version $Id: JSR.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class JSR extends JsrInstruction implements VariableLengthInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + JSR() { + } + + + public JSR(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.JSR, target); + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + index = getTargetOffset(); + if (opcode == org.apache.bcel5_2_0.Constants.JSR) { + super.dump(out); + } else { // JSR_W + index = getTargetOffset(); + out.writeByte(opcode); + out.writeInt(index); + } + } + + + protected int updatePosition( int offset, int max_offset ) { + int i = getTargetOffset(); // Depending on old position value + position += offset; // Position may be shifted by preceding expansions + if (Math.abs(i) >= (32767 - max_offset)) { // to large for short (estimate) + opcode = org.apache.bcel5_2_0.Constants.JSR_W; + length = 5; + return 2; // 5 - 3 + } + return 0; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitVariableLengthInstruction(this); + v.visitBranchInstruction(this); + v.visitJsrInstruction(this); + v.visitJSR(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/JSR_W.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/JSR_W.java index 7913375d..5f2aecad 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/JSR_W.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/JSR_W.java @@ -1,80 +1,80 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * JSR_W - Jump to subroutine - * - * @version $Id: JSR_W.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class JSR_W extends JsrInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - JSR_W() { - } - - - public JSR_W(InstructionHandle target) { - super(org.apache.bcel5_2_0.Constants.JSR_W, target); - length = 5; - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - index = getTargetOffset(); - out.writeByte(opcode); - out.writeInt(index); - } - - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - index = bytes.readInt(); - length = 5; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitBranchInstruction(this); - v.visitJsrInstruction(this); - v.visitJSR_W(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * JSR_W - Jump to subroutine + * + * @version $Id: JSR_W.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class JSR_W extends JsrInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + JSR_W() { + } + + + public JSR_W(InstructionHandle target) { + super(org.apache.bcel5_2_0.Constants.JSR_W, target); + length = 5; + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + index = getTargetOffset(); + out.writeByte(opcode); + out.writeInt(index); + } + + + /** + * Read needed data (e.g. index) from file. + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + index = bytes.readInt(); + length = 5; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitBranchInstruction(this); + v.visitJsrInstruction(this); + v.visitJSR_W(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/JsrInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/JsrInstruction.java index 56aea6be..f8611563 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/JsrInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/JsrInstruction.java @@ -1,79 +1,79 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Super class for JSR - Jump to subroutine - * - * @version $Id: JsrInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class JsrInstruction extends BranchInstruction implements UnconditionalBranch, - TypedInstruction, StackProducer { - - JsrInstruction(short opcode, InstructionHandle target) { - super(opcode, target); - } - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - JsrInstruction() { - } - - - /** @return return address type - */ - public Type getType( ConstantPoolGen cp ) { - return new ReturnaddressType(physicalSuccessor()); - } - - - /** - * Returns an InstructionHandle to the physical successor - * of this JsrInstruction. For this method to work, - * this JsrInstruction object must not be shared between - * multiple InstructionHandle objects! - * Formally, there must not be InstructionHandle objects - * i, j where i != j and i.getInstruction() == this == - * j.getInstruction(). - * @return an InstructionHandle to the "next" instruction that - * will be executed when RETurned from a subroutine. - */ - public InstructionHandle physicalSuccessor() { - InstructionHandle ih = this.target; - // Rewind! - while (ih.getPrev() != null) { - ih = ih.getPrev(); - } - // Find the handle for "this" JsrInstruction object. - while (ih.getInstruction() != this) { - ih = ih.getNext(); - } - InstructionHandle toThis = ih; - while (ih != null) { - ih = ih.getNext(); - if ((ih != null) && (ih.getInstruction() == this)) { - throw new RuntimeException("physicalSuccessor() called on a shared JsrInstruction."); - } - } - // Return the physical successor - return toThis.getNext(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Super class for JSR - Jump to subroutine + * + * @version $Id: JsrInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class JsrInstruction extends BranchInstruction implements UnconditionalBranch, + TypedInstruction, StackProducer { + + JsrInstruction(short opcode, InstructionHandle target) { + super(opcode, target); + } + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + JsrInstruction() { + } + + + /** @return return address type + */ + public Type getType( ConstantPoolGen cp ) { + return new ReturnaddressType(physicalSuccessor()); + } + + + /** + * Returns an InstructionHandle to the physical successor + * of this JsrInstruction. For this method to work, + * this JsrInstruction object must not be shared between + * multiple InstructionHandle objects! + * Formally, there must not be InstructionHandle objects + * i, j where i != j and i.getInstruction() == this == + * j.getInstruction(). + * @return an InstructionHandle to the "next" instruction that + * will be executed when RETurned from a subroutine. + */ + public InstructionHandle physicalSuccessor() { + InstructionHandle ih = this.target; + // Rewind! + while (ih.getPrev() != null) { + ih = ih.getPrev(); + } + // Find the handle for "this" JsrInstruction object. + while (ih.getInstruction() != this) { + ih = ih.getNext(); + } + InstructionHandle toThis = ih; + while (ih != null) { + ih = ih.getNext(); + if ((ih != null) && (ih.getInstruction() == this)) { + throw new RuntimeException("physicalSuccessor() called on a shared JsrInstruction."); + } + } + // Return the physical successor + return toThis.getNext(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/L2D.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/L2D.java index 9d1898ea..de6212c0 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/L2D.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/L2D.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * L2D - Convert long to double - *
          Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
          - * - * @version $Id: L2D.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class L2D extends ConversionInstruction { - - public L2D() { - super(org.apache.bcel5_2_0.Constants.L2D); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitL2D(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * L2D - Convert long to double + *
          Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
          + * + * @version $Id: L2D.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class L2D extends ConversionInstruction { + + public L2D() { + super(org.apache.bcel5_2_0.Constants.L2D); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitL2D(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/L2F.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/L2F.java index 1a9c693e..28396921 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/L2F.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/L2F.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * L2F - Convert long to float - *
          Stack: ..., value.word1, value.word2 -> ..., result
          - * - * @version $Id: L2F.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class L2F extends ConversionInstruction { - - public L2F() { - super(org.apache.bcel5_2_0.Constants.L2F); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitL2F(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * L2F - Convert long to float + *
          Stack: ..., value.word1, value.word2 -> ..., result
          + * + * @version $Id: L2F.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class L2F extends ConversionInstruction { + + public L2F() { + super(org.apache.bcel5_2_0.Constants.L2F); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitL2F(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/L2I.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/L2I.java index 5348c3c7..7a91fbf3 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/L2I.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/L2I.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * L2I - Convert long to int - *
          Stack: ..., value.word1, value.word2 -> ..., result
          - * - * @version $Id: L2I.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class L2I extends ConversionInstruction { - - public L2I() { - super(org.apache.bcel5_2_0.Constants.L2I); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitL2I(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * L2I - Convert long to int + *
          Stack: ..., value.word1, value.word2 -> ..., result
          + * + * @version $Id: L2I.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class L2I extends ConversionInstruction { + + public L2I() { + super(org.apache.bcel5_2_0.Constants.L2I); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitConversionInstruction(this); + v.visitL2I(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LADD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LADD.java index 8dd94e22..1587f14e 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LADD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LADD.java @@ -1,49 +1,49 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LADD - Add longs - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: LADD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LADD extends ArithmeticInstruction { - - public LADD() { - super(org.apache.bcel5_2_0.Constants.LADD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLADD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LADD - Add longs + *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          + * ..., result.word1, result.word2 + * + * @version $Id: LADD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LADD extends ArithmeticInstruction { + + public LADD() { + super(org.apache.bcel5_2_0.Constants.LADD); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitLADD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LALOAD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LALOAD.java index a8b0b5ce..7a868cd1 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LALOAD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LALOAD.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LALOAD - Load long from array - *
          Stack: ..., arrayref, index -> ..., value1, value2
          - * - * @version $Id: LALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LALOAD extends ArrayInstruction implements StackProducer { - - /** Load long from array - */ - public LALOAD() { - super(org.apache.bcel5_2_0.Constants.LALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitLALOAD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LALOAD - Load long from array + *
          Stack: ..., arrayref, index -> ..., value1, value2
          + * + * @version $Id: LALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LALOAD extends ArrayInstruction implements StackProducer { + + /** Load long from array + */ + public LALOAD() { + super(org.apache.bcel5_2_0.Constants.LALOAD); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitLALOAD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LAND.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LAND.java index 4ad83ee7..c43590f3 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LAND.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LAND.java @@ -1,49 +1,49 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LAND - Bitwise AND longs - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: LAND.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LAND extends ArithmeticInstruction { - - public LAND() { - super(org.apache.bcel5_2_0.Constants.LAND); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLAND(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LAND - Bitwise AND longs + *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          + * ..., result.word1, result.word2 + * + * @version $Id: LAND.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LAND extends ArithmeticInstruction { + + public LAND() { + super(org.apache.bcel5_2_0.Constants.LAND); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitLAND(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LASTORE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LASTORE.java index b1846f0b..06472f38 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LASTORE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LASTORE.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LASTORE - Store into long array - *
          Stack: ..., arrayref, index, value.word1, value.word2 -> ...
          - * - * @version $Id: LASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LASTORE extends ArrayInstruction implements StackConsumer { - - /** Store long into array - */ - public LASTORE() { - super(org.apache.bcel5_2_0.Constants.LASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitLASTORE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LASTORE - Store into long array + *
          Stack: ..., arrayref, index, value.word1, value.word2 -> ...
          + * + * @version $Id: LASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LASTORE extends ArrayInstruction implements StackConsumer { + + /** Store long into array + */ + public LASTORE() { + super(org.apache.bcel5_2_0.Constants.LASTORE); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitLASTORE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LCMP.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LCMP.java index b63770b6..e97a4005 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LCMP.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LCMP.java @@ -1,55 +1,55 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LCMP - Compare longs: - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result <= -1, 0, 1> - * - * @version $Id: LCMP.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LCMP extends Instruction implements TypedInstruction, StackProducer, StackConsumer { - - public LCMP() { - super(org.apache.bcel5_2_0.Constants.LCMP, (short) 1); - } - - - /** @return Type.LONG - */ - public Type getType( ConstantPoolGen cp ) { - return Type.LONG; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitLCMP(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LCMP - Compare longs: + *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          + * ..., result <= -1, 0, 1> + * + * @version $Id: LCMP.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LCMP extends Instruction implements TypedInstruction, StackProducer, StackConsumer { + + public LCMP() { + super(org.apache.bcel5_2_0.Constants.LCMP, (short) 1); + } + + + /** @return Type.LONG + */ + public Type getType( ConstantPoolGen cp ) { + return Type.LONG; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitLCMP(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LCONST.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LCONST.java index e108c939..86fcdd23 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LCONST.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LCONST.java @@ -1,80 +1,80 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LCONST - Push 0 or 1, other values cause an exception - * - *
          Stack: ... -> ..., 
          - * - * @version $Id: LCONST.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LCONST extends Instruction implements ConstantPushInstruction, TypedInstruction { - - private long value; - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LCONST() { - } - - - public LCONST(long l) { - super(org.apache.bcel5_2_0.Constants.LCONST_0, (short) 1); - if (l == 0) { - opcode = org.apache.bcel5_2_0.Constants.LCONST_0; - } else if (l == 1) { - opcode = org.apache.bcel5_2_0.Constants.LCONST_1; - } else { - throw new ClassGenException("LCONST can be used only for 0 and 1: " + l); - } - value = l; - } - - - public Number getValue() { - return new Long(value); - } - - - /** @return Type.LONG - */ - public Type getType( ConstantPoolGen cp ) { - return Type.LONG; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitLCONST(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LCONST - Push 0 or 1, other values cause an exception + * + *
          Stack: ... -> ..., 
          + * + * @version $Id: LCONST.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LCONST extends Instruction implements ConstantPushInstruction, TypedInstruction { + + private long value; + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + LCONST() { + } + + + public LCONST(long l) { + super(org.apache.bcel5_2_0.Constants.LCONST_0, (short) 1); + if (l == 0) { + opcode = org.apache.bcel5_2_0.Constants.LCONST_0; + } else if (l == 1) { + opcode = org.apache.bcel5_2_0.Constants.LCONST_1; + } else { + throw new ClassGenException("LCONST can be used only for 0 and 1: " + l); + } + value = l; + } + + + public Number getValue() { + return new Long(value); + } + + + /** @return Type.LONG + */ + public Type getType( ConstantPoolGen cp ) { + return Type.LONG; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitPushInstruction(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitConstantPushInstruction(this); + v.visitLCONST(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDC.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDC.java index 88bd44ff..0201f8aa 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDC.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDC.java @@ -1,149 +1,149 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * LDC - Push item from constant pool. - * - *
          Stack: ... -> ..., item
          - * - * @version $Id: LDC.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LDC extends CPInstruction implements PushInstruction, ExceptionThrower, - TypedInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LDC() { - } - - - public LDC(int index) { - super(org.apache.bcel5_2_0.Constants.LDC_W, index); - setSize(); - } - - - // Adjust to proper size - protected final void setSize() { - if (index <= org.apache.bcel5_2_0.Constants.MAX_BYTE) { // Fits in one byte? - opcode = org.apache.bcel5_2_0.Constants.LDC; - length = 2; - } else { - opcode = org.apache.bcel5_2_0.Constants.LDC_W; - length = 3; - } - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - out.writeByte(opcode); - if (length == 2) { - out.writeByte(index); - } else { - out.writeShort(index); - } - } - - - /** - * Set the index to constant pool and adjust size. - */ - public final void setIndex( int index ) { - super.setIndex(index); - setSize(); - } - - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - length = 2; - index = bytes.readUnsignedByte(); - } - - - public Object getValue( ConstantPoolGen cpg ) { - org.apache.bcel5_2_0.classfile.Constant c = cpg.getConstantPool().getConstant(index); - switch (c.getTag()) { - case org.apache.bcel5_2_0.Constants.CONSTANT_String: - int i = ((org.apache.bcel5_2_0.classfile.ConstantString) c).getStringIndex(); - c = cpg.getConstantPool().getConstant(i); - return ((org.apache.bcel5_2_0.classfile.ConstantUtf8) c).getBytes(); - case org.apache.bcel5_2_0.Constants.CONSTANT_Float: - return new Float(((org.apache.bcel5_2_0.classfile.ConstantFloat) c).getBytes()); - case org.apache.bcel5_2_0.Constants.CONSTANT_Integer: - return new Integer(((org.apache.bcel5_2_0.classfile.ConstantInteger) c).getBytes()); - case org.apache.bcel5_2_0.Constants.CONSTANT_Class: - return c; - default: // Never reached - throw new RuntimeException("Unknown or invalid constant type at " + index); - } - } - - - public Type getType( ConstantPoolGen cpg ) { - switch (cpg.getConstantPool().getConstant(index).getTag()) { - case org.apache.bcel5_2_0.Constants.CONSTANT_String: - return Type.STRING; - case org.apache.bcel5_2_0.Constants.CONSTANT_Float: - return Type.FLOAT; - case org.apache.bcel5_2_0.Constants.CONSTANT_Integer: - return Type.INT; - case org.apache.bcel5_2_0.Constants.CONSTANT_Class: - return Type.CLASS; - default: // Never reached - throw new RuntimeException("Unknown or invalid constant type at " + index); - } - } - - - public Class[] getExceptions() { - return org.apache.bcel5_2_0.ExceptionConstants.EXCS_STRING_RESOLUTION; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitLDC(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * LDC - Push item from constant pool. + * + *
          Stack: ... -> ..., item
          + * + * @version $Id: LDC.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LDC extends CPInstruction implements PushInstruction, ExceptionThrower, + TypedInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + LDC() { + } + + + public LDC(int index) { + super(org.apache.bcel5_2_0.Constants.LDC_W, index); + setSize(); + } + + + // Adjust to proper size + protected final void setSize() { + if (index <= org.apache.bcel5_2_0.Constants.MAX_BYTE) { // Fits in one byte? + opcode = org.apache.bcel5_2_0.Constants.LDC; + length = 2; + } else { + opcode = org.apache.bcel5_2_0.Constants.LDC_W; + length = 3; + } + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + out.writeByte(opcode); + if (length == 2) { + out.writeByte(index); + } else { + out.writeShort(index); + } + } + + + /** + * Set the index to constant pool and adjust size. + */ + public final void setIndex( int index ) { + super.setIndex(index); + setSize(); + } + + + /** + * Read needed data (e.g. index) from file. + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + length = 2; + index = bytes.readUnsignedByte(); + } + + + public Object getValue( ConstantPoolGen cpg ) { + org.apache.bcel5_2_0.classfile.Constant c = cpg.getConstantPool().getConstant(index); + switch (c.getTag()) { + case org.apache.bcel5_2_0.Constants.CONSTANT_String: + int i = ((org.apache.bcel5_2_0.classfile.ConstantString) c).getStringIndex(); + c = cpg.getConstantPool().getConstant(i); + return ((org.apache.bcel5_2_0.classfile.ConstantUtf8) c).getBytes(); + case org.apache.bcel5_2_0.Constants.CONSTANT_Float: + return new Float(((org.apache.bcel5_2_0.classfile.ConstantFloat) c).getBytes()); + case org.apache.bcel5_2_0.Constants.CONSTANT_Integer: + return new Integer(((org.apache.bcel5_2_0.classfile.ConstantInteger) c).getBytes()); + case org.apache.bcel5_2_0.Constants.CONSTANT_Class: + return c; + default: // Never reached + throw new RuntimeException("Unknown or invalid constant type at " + index); + } + } + + + public Type getType( ConstantPoolGen cpg ) { + switch (cpg.getConstantPool().getConstant(index).getTag()) { + case org.apache.bcel5_2_0.Constants.CONSTANT_String: + return Type.STRING; + case org.apache.bcel5_2_0.Constants.CONSTANT_Float: + return Type.FLOAT; + case org.apache.bcel5_2_0.Constants.CONSTANT_Integer: + return Type.INT; + case org.apache.bcel5_2_0.Constants.CONSTANT_Class: + return Type.CLASS; + default: // Never reached + throw new RuntimeException("Unknown or invalid constant type at " + index); + } + } + + + public Class[] getExceptions() { + return org.apache.bcel5_2_0.ExceptionConstants.EXCS_STRING_RESOLUTION; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitPushInstruction(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitCPInstruction(this); + v.visitLDC(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDC2_W.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDC2_W.java index 8d670295..b0208b07 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDC2_W.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDC2_W.java @@ -1,82 +1,82 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LDC2_W - Push long or double from constant pool - * - *
          Stack: ... -> ..., item.word1, item.word2
          - * - * @version $Id: LDC2_W.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LDC2_W extends CPInstruction implements PushInstruction, TypedInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LDC2_W() { - } - - - public LDC2_W(int index) { - super(org.apache.bcel5_2_0.Constants.LDC2_W, index); - } - - - public Type getType( ConstantPoolGen cpg ) { - switch (cpg.getConstantPool().getConstant(index).getTag()) { - case org.apache.bcel5_2_0.Constants.CONSTANT_Long: - return Type.LONG; - case org.apache.bcel5_2_0.Constants.CONSTANT_Double: - return Type.DOUBLE; - default: // Never reached - throw new RuntimeException("Unknown constant type " + opcode); - } - } - - - public Number getValue( ConstantPoolGen cpg ) { - org.apache.bcel5_2_0.classfile.Constant c = cpg.getConstantPool().getConstant(index); - switch (c.getTag()) { - case org.apache.bcel5_2_0.Constants.CONSTANT_Long: - return new Long(((org.apache.bcel5_2_0.classfile.ConstantLong) c).getBytes()); - case org.apache.bcel5_2_0.Constants.CONSTANT_Double: - return new Double(((org.apache.bcel5_2_0.classfile.ConstantDouble) c).getBytes()); - default: // Never reached - throw new RuntimeException("Unknown or invalid constant type at " + index); - } - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitLDC2_W(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LDC2_W - Push long or double from constant pool + * + *
          Stack: ... -> ..., item.word1, item.word2
          + * + * @version $Id: LDC2_W.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LDC2_W extends CPInstruction implements PushInstruction, TypedInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + LDC2_W() { + } + + + public LDC2_W(int index) { + super(org.apache.bcel5_2_0.Constants.LDC2_W, index); + } + + + public Type getType( ConstantPoolGen cpg ) { + switch (cpg.getConstantPool().getConstant(index).getTag()) { + case org.apache.bcel5_2_0.Constants.CONSTANT_Long: + return Type.LONG; + case org.apache.bcel5_2_0.Constants.CONSTANT_Double: + return Type.DOUBLE; + default: // Never reached + throw new RuntimeException("Unknown constant type " + opcode); + } + } + + + public Number getValue( ConstantPoolGen cpg ) { + org.apache.bcel5_2_0.classfile.Constant c = cpg.getConstantPool().getConstant(index); + switch (c.getTag()) { + case org.apache.bcel5_2_0.Constants.CONSTANT_Long: + return new Long(((org.apache.bcel5_2_0.classfile.ConstantLong) c).getBytes()); + case org.apache.bcel5_2_0.Constants.CONSTANT_Double: + return new Double(((org.apache.bcel5_2_0.classfile.ConstantDouble) c).getBytes()); + default: // Never reached + throw new RuntimeException("Unknown or invalid constant type at " + index); + } + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitPushInstruction(this); + v.visitTypedInstruction(this); + v.visitCPInstruction(this); + v.visitLDC2_W(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDC_W.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDC_W.java index 40402bce..1ec1e1be 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDC_W.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDC_W.java @@ -1,55 +1,55 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.IOException; - -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * LDC_W - Push item from constant pool (wide index) - * - *
          Stack: ... -> ..., item.word1, item.word2
          - * - * @version $Id: LDC_W.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LDC_W extends LDC { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LDC_W() { - } - - - public LDC_W(int index) { - super(index); - } - - - /** - * Read needed data (i.e., index) from file. - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - setIndex(bytes.readUnsignedShort()); - // Override just in case it has been changed - opcode = org.apache.bcel5_2_0.Constants.LDC_W; - length = 3; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.IOException; + +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * LDC_W - Push item from constant pool (wide index) + * + *
          Stack: ... -> ..., item.word1, item.word2
          + * + * @version $Id: LDC_W.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LDC_W extends LDC { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + LDC_W() { + } + + + public LDC_W(int index) { + super(index); + } + + + /** + * Read needed data (i.e., index) from file. + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + setIndex(bytes.readUnsignedShort()); + // Override just in case it has been changed + opcode = org.apache.bcel5_2_0.Constants.LDC_W; + length = 3; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDIV.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDIV.java index 764fafd3..2cf5b1a6 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDIV.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LDIV.java @@ -1,57 +1,57 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LDIV - Divide longs - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: LDIV.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LDIV extends ArithmeticInstruction implements ExceptionThrower { - - public LDIV() { - super(org.apache.bcel5_2_0.Constants.LDIV); - } - - - public Class[] getExceptions() { - return new Class[] { - org.apache.bcel5_2_0.ExceptionConstants.ARITHMETIC_EXCEPTION - }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLDIV(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LDIV - Divide longs + *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          + * ..., result.word1, result.word2 + * + * @version $Id: LDIV.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LDIV extends ArithmeticInstruction implements ExceptionThrower { + + public LDIV() { + super(org.apache.bcel5_2_0.Constants.LDIV); + } + + + public Class[] getExceptions() { + return new Class[] { + org.apache.bcel5_2_0.ExceptionConstants.ARITHMETIC_EXCEPTION + }; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitLDIV(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LLOAD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LLOAD.java index 0f7732b3..9833196e 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LLOAD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LLOAD.java @@ -1,54 +1,54 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LLOAD - Load long from local variable - *
          Stack ... -> ..., result.word1, result.word2
          - * - * @version $Id: LLOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LLOAD extends LoadInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LLOAD() { - super(org.apache.bcel5_2_0.Constants.LLOAD, org.apache.bcel5_2_0.Constants.LLOAD_0); - } - - - public LLOAD(int n) { - super(org.apache.bcel5_2_0.Constants.LLOAD, org.apache.bcel5_2_0.Constants.LLOAD_0, n); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - super.accept(v); - v.visitLLOAD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LLOAD - Load long from local variable + *
          Stack ... -> ..., result.word1, result.word2
          + * + * @version $Id: LLOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LLOAD extends LoadInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + LLOAD() { + super(org.apache.bcel5_2_0.Constants.LLOAD, org.apache.bcel5_2_0.Constants.LLOAD_0); + } + + + public LLOAD(int n) { + super(org.apache.bcel5_2_0.Constants.LLOAD, org.apache.bcel5_2_0.Constants.LLOAD_0, n); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + super.accept(v); + v.visitLLOAD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LMUL.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LMUL.java index f596d9e4..2b609f18 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LMUL.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LMUL.java @@ -1,49 +1,49 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LMUL - Multiply longs - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: LMUL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LMUL extends ArithmeticInstruction { - - public LMUL() { - super(org.apache.bcel5_2_0.Constants.LMUL); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLMUL(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LMUL - Multiply longs + *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          + * ..., result.word1, result.word2 + * + * @version $Id: LMUL.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LMUL extends ArithmeticInstruction { + + public LMUL() { + super(org.apache.bcel5_2_0.Constants.LMUL); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitLMUL(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LNEG.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LNEG.java index 280ef8e2..0df878ae 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LNEG.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LNEG.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LNEG - Negate long - *
          Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
          - * - * @version $Id: LNEG.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LNEG extends ArithmeticInstruction { - - public LNEG() { - super(org.apache.bcel5_2_0.Constants.LNEG); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLNEG(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LNEG - Negate long + *
          Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
          + * + * @version $Id: LNEG.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LNEG extends ArithmeticInstruction { + + public LNEG() { + super(org.apache.bcel5_2_0.Constants.LNEG); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitLNEG(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LOOKUPSWITCH.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LOOKUPSWITCH.java index d0eccdd5..36c438ff 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LOOKUPSWITCH.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LOOKUPSWITCH.java @@ -1,96 +1,96 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * LOOKUPSWITCH - Switch with unordered set of values - * - * @version $Id: LOOKUPSWITCH.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see SWITCH - */ -public class LOOKUPSWITCH extends Select { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LOOKUPSWITCH() { - } - - - public LOOKUPSWITCH(int[] match, InstructionHandle[] targets, InstructionHandle defaultTarget) { - super(org.apache.bcel5_2_0.Constants.LOOKUPSWITCH, match, targets, defaultTarget); - length = (short) (9 + match_length * 8); /* alignment remainder assumed - * 0 here, until dump time. */ - fixed_length = length; - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - super.dump(out); - out.writeInt(match_length); // npairs - for (int i = 0; i < match_length; i++) { - out.writeInt(match[i]); // match-offset pairs - out.writeInt(indices[i] = getTargetOffset(targets[i])); - } - } - - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - super.initFromFile(bytes, wide); // reads padding - match_length = bytes.readInt(); - fixed_length = (short) (9 + match_length * 8); - length = (short) (fixed_length + padding); - match = new int[match_length]; - indices = new int[match_length]; - targets = new InstructionHandle[match_length]; - for (int i = 0; i < match_length; i++) { - match[i] = bytes.readInt(); - indices[i] = bytes.readInt(); - } - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitVariableLengthInstruction(this); - v.visitStackProducer(this); - v.visitBranchInstruction(this); - v.visitSelect(this); - v.visitLOOKUPSWITCH(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * LOOKUPSWITCH - Switch with unordered set of values + * + * @version $Id: LOOKUPSWITCH.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see SWITCH + */ +public class LOOKUPSWITCH extends Select { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + LOOKUPSWITCH() { + } + + + public LOOKUPSWITCH(int[] match, InstructionHandle[] targets, InstructionHandle defaultTarget) { + super(org.apache.bcel5_2_0.Constants.LOOKUPSWITCH, match, targets, defaultTarget); + length = (short) (9 + match_length * 8); /* alignment remainder assumed + * 0 here, until dump time. */ + fixed_length = length; + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + super.dump(out); + out.writeInt(match_length); // npairs + for (int i = 0; i < match_length; i++) { + out.writeInt(match[i]); // match-offset pairs + out.writeInt(indices[i] = getTargetOffset(targets[i])); + } + } + + + /** + * Read needed data (e.g. index) from file. + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + super.initFromFile(bytes, wide); // reads padding + match_length = bytes.readInt(); + fixed_length = (short) (9 + match_length * 8); + length = (short) (fixed_length + padding); + match = new int[match_length]; + indices = new int[match_length]; + targets = new InstructionHandle[match_length]; + for (int i = 0; i < match_length; i++) { + match[i] = bytes.readInt(); + indices[i] = bytes.readInt(); + } + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitVariableLengthInstruction(this); + v.visitStackProducer(this); + v.visitBranchInstruction(this); + v.visitSelect(this); + v.visitLOOKUPSWITCH(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LOR.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LOR.java index e0210b68..5f126d90 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LOR.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LOR.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LOR - Bitwise OR long - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: LOR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LOR extends ArithmeticInstruction { - - public LOR() { - super(org.apache.bcel5_2_0.Constants.LOR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLOR(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LOR - Bitwise OR long + *
          Stack: ..., value1, value2 -> ..., result
          + * + * @version $Id: LOR.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LOR extends ArithmeticInstruction { + + public LOR() { + super(org.apache.bcel5_2_0.Constants.LOR); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitLOR(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LREM.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LREM.java index fd332d64..b9cdfe35 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LREM.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LREM.java @@ -1,56 +1,56 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LREM - Remainder of long - *
          Stack: ..., value1, value2 -> result
          - * - * @version $Id: LREM.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LREM extends ArithmeticInstruction implements ExceptionThrower { - - public LREM() { - super(org.apache.bcel5_2_0.Constants.LREM); - } - - - public Class[] getExceptions() { - return new Class[] { - org.apache.bcel5_2_0.ExceptionConstants.ARITHMETIC_EXCEPTION - }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLREM(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LREM - Remainder of long + *
          Stack: ..., value1, value2 -> result
          + * + * @version $Id: LREM.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LREM extends ArithmeticInstruction implements ExceptionThrower { + + public LREM() { + super(org.apache.bcel5_2_0.Constants.LREM); + } + + + public Class[] getExceptions() { + return new Class[] { + org.apache.bcel5_2_0.ExceptionConstants.ARITHMETIC_EXCEPTION + }; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitLREM(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LRETURN.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LRETURN.java index 97a4787c..2459199c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LRETURN.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LRETURN.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LRETURN - Return long from method - *
          Stack: ..., value.word1, value.word2 -> <empty>
          - * - * @version $Id: LRETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LRETURN extends ReturnInstruction { - - public LRETURN() { - super(org.apache.bcel5_2_0.Constants.LRETURN); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitLRETURN(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LRETURN - Return long from method + *
          Stack: ..., value.word1, value.word2 -> <empty>
          + * + * @version $Id: LRETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LRETURN extends ReturnInstruction { + + public LRETURN() { + super(org.apache.bcel5_2_0.Constants.LRETURN); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackConsumer(this); + v.visitReturnInstruction(this); + v.visitLRETURN(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSHL.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSHL.java index cd684fe2..d83114a7 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSHL.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSHL.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LSHL - Arithmetic shift left long - *
          Stack: ..., value1.word1, value1.word2, value2 -> ..., result.word1, result.word2
          - * - * @version $Id: LSHL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LSHL extends ArithmeticInstruction { - - public LSHL() { - super(org.apache.bcel5_2_0.Constants.LSHL); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLSHL(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LSHL - Arithmetic shift left long + *
          Stack: ..., value1.word1, value1.word2, value2 -> ..., result.word1, result.word2
          + * + * @version $Id: LSHL.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LSHL extends ArithmeticInstruction { + + public LSHL() { + super(org.apache.bcel5_2_0.Constants.LSHL); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitLSHL(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSHR.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSHR.java index 406d57cc..413ebad0 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSHR.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSHR.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LSHR - Arithmetic shift right long - *
          Stack: ..., value1.word1, value1.word2, value2 -> ..., result.word1, result.word2
          - * - * @version $Id: LSHR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LSHR extends ArithmeticInstruction { - - public LSHR() { - super(org.apache.bcel5_2_0.Constants.LSHR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLSHR(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LSHR - Arithmetic shift right long + *
          Stack: ..., value1.word1, value1.word2, value2 -> ..., result.word1, result.word2
          + * + * @version $Id: LSHR.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LSHR extends ArithmeticInstruction { + + public LSHR() { + super(org.apache.bcel5_2_0.Constants.LSHR); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitLSHR(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSTORE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSTORE.java index f1e770d1..25bd59c6 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSTORE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSTORE.java @@ -1,54 +1,54 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LSTORE - Store long into local variable - *
          Stack: ..., value.word1, value.word2 -> ... 
          - * - * @version $Id: LSTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LSTORE extends StoreInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LSTORE() { - super(org.apache.bcel5_2_0.Constants.LSTORE, org.apache.bcel5_2_0.Constants.LSTORE_0); - } - - - public LSTORE(int n) { - super(org.apache.bcel5_2_0.Constants.LSTORE, org.apache.bcel5_2_0.Constants.LSTORE_0, n); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - super.accept(v); - v.visitLSTORE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LSTORE - Store long into local variable + *
          Stack: ..., value.word1, value.word2 -> ... 
          + * + * @version $Id: LSTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LSTORE extends StoreInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + LSTORE() { + super(org.apache.bcel5_2_0.Constants.LSTORE, org.apache.bcel5_2_0.Constants.LSTORE_0); + } + + + public LSTORE(int n) { + super(org.apache.bcel5_2_0.Constants.LSTORE, org.apache.bcel5_2_0.Constants.LSTORE_0, n); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + super.accept(v); + v.visitLSTORE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSUB.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSUB.java index ee622bcc..97165c45 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSUB.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LSUB.java @@ -1,49 +1,49 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LSUB - Substract longs - *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          - * ..., result.word1, result.word2 - * - * @version $Id: LSUB.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LSUB extends ArithmeticInstruction { - - public LSUB() { - super(org.apache.bcel5_2_0.Constants.LSUB); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLSUB(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LSUB - Substract longs + *
          Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
          + * ..., result.word1, result.word2 + * + * @version $Id: LSUB.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LSUB extends ArithmeticInstruction { + + public LSUB() { + super(org.apache.bcel5_2_0.Constants.LSUB); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitLSUB(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LUSHR.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LUSHR.java index e8332b1c..39bf16f6 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LUSHR.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LUSHR.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LUSHR - Logical shift right long - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: LUSHR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LUSHR extends ArithmeticInstruction { - - public LUSHR() { - super(org.apache.bcel5_2_0.Constants.LUSHR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLUSHR(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LUSHR - Logical shift right long + *
          Stack: ..., value1, value2 -> ..., result
          + * + * @version $Id: LUSHR.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LUSHR extends ArithmeticInstruction { + + public LUSHR() { + super(org.apache.bcel5_2_0.Constants.LUSHR); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitLUSHR(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LXOR.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LXOR.java index ca30a032..d295a659 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LXOR.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LXOR.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * LXOR - Bitwise XOR long - *
          Stack: ..., value1, value2 -> ..., result
          - * - * @version $Id: LXOR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LXOR extends ArithmeticInstruction { - - public LXOR() { - super(org.apache.bcel5_2_0.Constants.LXOR); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLXOR(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * LXOR - Bitwise XOR long + *
          Stack: ..., value1, value2 -> ..., result
          + * + * @version $Id: LXOR.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class LXOR extends ArithmeticInstruction { + + public LXOR() { + super(org.apache.bcel5_2_0.Constants.LXOR); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitTypedInstruction(this); + v.visitStackProducer(this); + v.visitStackConsumer(this); + v.visitArithmeticInstruction(this); + v.visitLXOR(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LineNumberGen.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LineNumberGen.java index 0acd7516..69b003bd 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LineNumberGen.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LineNumberGen.java @@ -1,108 +1,108 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.classfile.LineNumber; - -/** - * This class represents a line number within a method, i.e., give an instruction - * a line number corresponding to the source code line. - * - * @version $Id: LineNumberGen.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see LineNumber - * @see MethodGen - */ -public class LineNumberGen implements InstructionTargeter, Cloneable, java.io.Serializable { - - private InstructionHandle ih; - private int src_line; - - - /** - * Create a line number. - * - * @param ih instruction handle to reference - */ - public LineNumberGen(InstructionHandle ih, int src_line) { - setInstruction(ih); - setSourceLine(src_line); - } - - - /** - * @return true, if ih is target of this line number - */ - public boolean containsTarget( InstructionHandle ih ) { - return this.ih == ih; - } - - - /** - * @param old_ih old target - * @param new_ih new target - */ - public void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih ) { - if (old_ih != ih) { - throw new ClassGenException("Not targeting " + old_ih + ", but " + ih + "}"); - } else { - setInstruction(new_ih); - } - } - - - /** - * Get LineNumber attribute . - * - * This relies on that the instruction list has already been dumped to byte code or - * or that the `setPositions' methods has been called for the instruction list. - */ - public LineNumber getLineNumber() { - return new LineNumber(ih.getPosition(), src_line); - } - - - public void setInstruction( InstructionHandle ih ) { - BranchInstruction.notifyTarget(this.ih, ih, this); - this.ih = ih; - } - - - public Object clone() { - try { - return super.clone(); - } catch (CloneNotSupportedException e) { - System.err.println(e); - return null; - } - } - - - public InstructionHandle getInstruction() { - return ih; - } - - - public void setSourceLine( int src_line ) { - this.src_line = src_line; - } - - - public int getSourceLine() { - return src_line; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.classfile.LineNumber; + +/** + * This class represents a line number within a method, i.e., give an instruction + * a line number corresponding to the source code line. + * + * @version $Id: LineNumberGen.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see LineNumber + * @see MethodGen + */ +public class LineNumberGen implements InstructionTargeter, Cloneable, java.io.Serializable { + + private InstructionHandle ih; + private int src_line; + + + /** + * Create a line number. + * + * @param ih instruction handle to reference + */ + public LineNumberGen(InstructionHandle ih, int src_line) { + setInstruction(ih); + setSourceLine(src_line); + } + + + /** + * @return true, if ih is target of this line number + */ + public boolean containsTarget( InstructionHandle ih ) { + return this.ih == ih; + } + + + /** + * @param old_ih old target + * @param new_ih new target + */ + public void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih ) { + if (old_ih != ih) { + throw new ClassGenException("Not targeting " + old_ih + ", but " + ih + "}"); + } else { + setInstruction(new_ih); + } + } + + + /** + * Get LineNumber attribute . + * + * This relies on that the instruction list has already been dumped to byte code or + * or that the `setPositions' methods has been called for the instruction list. + */ + public LineNumber getLineNumber() { + return new LineNumber(ih.getPosition(), src_line); + } + + + public void setInstruction( InstructionHandle ih ) { + BranchInstruction.notifyTarget(this.ih, ih, this); + this.ih = ih; + } + + + public Object clone() { + try { + return super.clone(); + } catch (CloneNotSupportedException e) { + System.err.println(e); + return null; + } + } + + + public InstructionHandle getInstruction() { + return ih; + } + + + public void setSourceLine( int src_line ) { + this.src_line = src_line; + } + + + public int getSourceLine() { + return src_line; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LoadClass.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LoadClass.java index b483a4a0..006fe964 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LoadClass.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LoadClass.java @@ -1,50 +1,50 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denotes that an instruction may start the process of loading and resolving - * the referenced class in the Virtual Machine. - * - * @version $Id: LoadClass.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface LoadClass { - - /** - * Returns the ObjectType of the referenced class or interface - * that may be loaded and resolved. - * @return object type that may be loaded or null if a primitive is - * referenced - */ - public ObjectType getLoadClassType( ConstantPoolGen cpg ); - - - /** - * Returns the type associated with this instruction. - * LoadClass instances are always typed, but this type - * does not always refer to the type of the class or interface - * that it possibly forces to load. For example, GETFIELD would - * return the type of the field and not the type of the class - * where the field is defined. - * If no class is forced to be loaded, null is returned. - * An example for this is an ANEWARRAY instruction that creates - * an int[][]. - * @see #getLoadClassType(ConstantPoolGen) - */ - public Type getType( ConstantPoolGen cpg ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denotes that an instruction may start the process of loading and resolving + * the referenced class in the Virtual Machine. + * + * @version $Id: LoadClass.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface LoadClass { + + /** + * Returns the ObjectType of the referenced class or interface + * that may be loaded and resolved. + * @return object type that may be loaded or null if a primitive is + * referenced + */ + public ObjectType getLoadClassType( ConstantPoolGen cpg ); + + + /** + * Returns the type associated with this instruction. + * LoadClass instances are always typed, but this type + * does not always refer to the type of the class or interface + * that it possibly forces to load. For example, GETFIELD would + * return the type of the field and not the type of the class + * where the field is defined. + * If no class is forced to be loaded, null is returned. + * An example for this is an ANEWARRAY instruction that creates + * an int[][]. + * @see #getLoadClassType(ConstantPoolGen) + */ + public Type getType( ConstantPoolGen cpg ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LoadInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LoadInstruction.java index ffa11303..2039885e 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LoadInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LoadInstruction.java @@ -1,63 +1,63 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denotes an unparameterized instruction to load a value from a local - * variable, e.g. ILOAD. - * - * @version $Id: LoadInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class LoadInstruction extends LocalVariableInstruction implements PushInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - * tag and length are defined in readInstruction and initFromFile, respectively. - */ - LoadInstruction(short canon_tag, short c_tag) { - super(canon_tag, c_tag); - } - - - /** - * @param opcode Instruction opcode - * @param c_tag Instruction number for compact version, ALOAD_0, e.g. - * @param n local variable index (unsigned short) - */ - protected LoadInstruction(short opcode, short c_tag, int n) { - super(opcode, c_tag, n); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitTypedInstruction(this); - v.visitLocalVariableInstruction(this); - v.visitLoadInstruction(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denotes an unparameterized instruction to load a value from a local + * variable, e.g. ILOAD. + * + * @version $Id: LoadInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class LoadInstruction extends LocalVariableInstruction implements PushInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + * tag and length are defined in readInstruction and initFromFile, respectively. + */ + LoadInstruction(short canon_tag, short c_tag) { + super(canon_tag, c_tag); + } + + + /** + * @param opcode Instruction opcode + * @param c_tag Instruction number for compact version, ALOAD_0, e.g. + * @param n local variable index (unsigned short) + */ + protected LoadInstruction(short opcode, short c_tag, int n) { + super(opcode, c_tag, n); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitPushInstruction(this); + v.visitTypedInstruction(this); + v.visitLocalVariableInstruction(this); + v.visitLoadInstruction(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LocalVariableGen.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LocalVariableGen.java index 2c93a342..eef00636 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LocalVariableGen.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LocalVariableGen.java @@ -1,208 +1,208 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.classfile.LocalVariable; - -/** - * This class represents a local variable within a method. It contains its - * scope, name and type. The generated LocalVariable object can be obtained - * with getLocalVariable which needs the instruction list and the constant - * pool as parameters. - * - * @version $Id: LocalVariableGen.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see LocalVariable - * @see MethodGen - */ -public class LocalVariableGen implements InstructionTargeter, NamedAndTyped, Cloneable, - java.io.Serializable { - - private int index; - private String name; - private Type type; - private InstructionHandle start, end; - - - /** - * Generate a local variable that with index `index'. Note that double and long - * variables need two indexs. Index indices have to be provided by the user. - * - * @param index index of local variable - * @param name its name - * @param type its type - * @param start from where the instruction is valid (null means from the start) - * @param end until where the instruction is valid (null means to the end) - */ - public LocalVariableGen(int index, String name, Type type, InstructionHandle start, - InstructionHandle end) { - if ((index < 0) || (index > Constants.MAX_SHORT)) { - throw new ClassGenException("Invalid index index: " + index); - } - this.name = name; - this.type = type; - this.index = index; - setStart(start); - setEnd(end); - } - - - /** - * Get LocalVariable object. - * - * This relies on that the instruction list has already been dumped to byte code or - * or that the `setPositions' methods has been called for the instruction list. - * - * Note that for local variables whose scope end at the last - * instruction of the method's code, the JVM specification is ambiguous: - * both a start_pc+length ending at the last instruction and - * start_pc+length ending at first index beyond the end of the code are - * valid. - * - * @param cp constant pool - */ - public LocalVariable getLocalVariable( ConstantPoolGen cp ) { - int start_pc = start.getPosition(); - int length = end.getPosition() - start_pc; - if (length > 0) { - length += end.getInstruction().getLength(); - } - int name_index = cp.addUtf8(name); - int signature_index = cp.addUtf8(type.getSignature()); - return new LocalVariable(start_pc, length, name_index, signature_index, index, cp - .getConstantPool()); - } - - - public void setIndex( int index ) { - this.index = index; - } - - - public int getIndex() { - return index; - } - - - public void setName( String name ) { - this.name = name; - } - - - public String getName() { - return name; - } - - - public void setType( Type type ) { - this.type = type; - } - - - public Type getType() { - return type; - } - - - public InstructionHandle getStart() { - return start; - } - - - public InstructionHandle getEnd() { - return end; - } - - - public void setStart( InstructionHandle start ) { - BranchInstruction.notifyTarget(this.start, start, this); - this.start = start; - } - - - public void setEnd( InstructionHandle end ) { - BranchInstruction.notifyTarget(this.end, end, this); - this.end = end; - } - - - /** - * @param old_ih old target, either start or end - * @param new_ih new target - */ - public void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih ) { - boolean targeted = false; - if (start == old_ih) { - targeted = true; - setStart(new_ih); - } - if (end == old_ih) { - targeted = true; - setEnd(new_ih); - } - if (!targeted) { - throw new ClassGenException("Not targeting " + old_ih + ", but {" + start + ", " + end - + "}"); - } - } - - - /** - * @return true, if ih is target of this variable - */ - public boolean containsTarget( InstructionHandle ih ) { - return (start == ih) || (end == ih); - } - - - /** @return a hash code value for the object. - */ - public int hashCode() { - //If the user changes the name or type, problems with the targeter hashmap will occur - int hc = index ^ name.hashCode() ^ type.hashCode(); - return hc; - } - - - /** - * We consider to local variables to be equal, if the use the same index and - * are valid in the same range. - */ - public boolean equals( Object o ) { - if (!(o instanceof LocalVariableGen)) { - return false; - } - LocalVariableGen l = (LocalVariableGen) o; - return (l.index == index) && (l.start == start) && (l.end == end); - } - - - public String toString() { - return "LocalVariableGen(" + name + ", " + type + ", " + start + ", " + end + ")"; - } - - - public Object clone() { - try { - return super.clone(); - } catch (CloneNotSupportedException e) { - System.err.println(e); - return null; - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.classfile.LocalVariable; + +/** + * This class represents a local variable within a method. It contains its + * scope, name and type. The generated LocalVariable object can be obtained + * with getLocalVariable which needs the instruction list and the constant + * pool as parameters. + * + * @version $Id: LocalVariableGen.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see LocalVariable + * @see MethodGen + */ +public class LocalVariableGen implements InstructionTargeter, NamedAndTyped, Cloneable, + java.io.Serializable { + + private int index; + private String name; + private Type type; + private InstructionHandle start, end; + + + /** + * Generate a local variable that with index `index'. Note that double and long + * variables need two indexs. Index indices have to be provided by the user. + * + * @param index index of local variable + * @param name its name + * @param type its type + * @param start from where the instruction is valid (null means from the start) + * @param end until where the instruction is valid (null means to the end) + */ + public LocalVariableGen(int index, String name, Type type, InstructionHandle start, + InstructionHandle end) { + if ((index < 0) || (index > Constants.MAX_SHORT)) { + throw new ClassGenException("Invalid index index: " + index); + } + this.name = name; + this.type = type; + this.index = index; + setStart(start); + setEnd(end); + } + + + /** + * Get LocalVariable object. + * + * This relies on that the instruction list has already been dumped to byte code or + * or that the `setPositions' methods has been called for the instruction list. + * + * Note that for local variables whose scope end at the last + * instruction of the method's code, the JVM specification is ambiguous: + * both a start_pc+length ending at the last instruction and + * start_pc+length ending at first index beyond the end of the code are + * valid. + * + * @param cp constant pool + */ + public LocalVariable getLocalVariable( ConstantPoolGen cp ) { + int start_pc = start.getPosition(); + int length = end.getPosition() - start_pc; + if (length > 0) { + length += end.getInstruction().getLength(); + } + int name_index = cp.addUtf8(name); + int signature_index = cp.addUtf8(type.getSignature()); + return new LocalVariable(start_pc, length, name_index, signature_index, index, cp + .getConstantPool()); + } + + + public void setIndex( int index ) { + this.index = index; + } + + + public int getIndex() { + return index; + } + + + public void setName( String name ) { + this.name = name; + } + + + public String getName() { + return name; + } + + + public void setType( Type type ) { + this.type = type; + } + + + public Type getType() { + return type; + } + + + public InstructionHandle getStart() { + return start; + } + + + public InstructionHandle getEnd() { + return end; + } + + + public void setStart( InstructionHandle start ) { + BranchInstruction.notifyTarget(this.start, start, this); + this.start = start; + } + + + public void setEnd( InstructionHandle end ) { + BranchInstruction.notifyTarget(this.end, end, this); + this.end = end; + } + + + /** + * @param old_ih old target, either start or end + * @param new_ih new target + */ + public void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih ) { + boolean targeted = false; + if (start == old_ih) { + targeted = true; + setStart(new_ih); + } + if (end == old_ih) { + targeted = true; + setEnd(new_ih); + } + if (!targeted) { + throw new ClassGenException("Not targeting " + old_ih + ", but {" + start + ", " + end + + "}"); + } + } + + + /** + * @return true, if ih is target of this variable + */ + public boolean containsTarget( InstructionHandle ih ) { + return (start == ih) || (end == ih); + } + + + /** @return a hash code value for the object. + */ + public int hashCode() { + //If the user changes the name or type, problems with the targeter hashmap will occur + int hc = index ^ name.hashCode() ^ type.hashCode(); + return hc; + } + + + /** + * We consider to local variables to be equal, if the use the same index and + * are valid in the same range. + */ + public boolean equals( Object o ) { + if (!(o instanceof LocalVariableGen)) { + return false; + } + LocalVariableGen l = (LocalVariableGen) o; + return (l.index == index) && (l.start == start) && (l.end == end); + } + + + public String toString() { + return "LocalVariableGen(" + name + ", " + type + ", " + start + ", " + end + ")"; + } + + + public Object clone() { + try { + return super.clone(); + } catch (CloneNotSupportedException e) { + System.err.println(e); + return null; + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LocalVariableInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LocalVariableInstruction.java index f63c604a..304fd10d 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LocalVariableInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/LocalVariableInstruction.java @@ -1,203 +1,203 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * Abstract super class for instructions dealing with local variables. - * - * @version $Id: LocalVariableInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class LocalVariableInstruction extends Instruction implements TypedInstruction, - IndexedInstruction { - - protected int n = -1; // index of referenced variable - private short c_tag = -1; // compact version, such as ILOAD_0 - private short canon_tag = -1; // canonical tag such as ILOAD - - - private final boolean wide() { - return n > Constants.MAX_BYTE; - } - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - * tag and length are defined in readInstruction and initFromFile, respectively. - */ - LocalVariableInstruction(short canon_tag, short c_tag) { - super(); - this.canon_tag = canon_tag; - this.c_tag = c_tag; - } - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Also used by IINC()! - */ - LocalVariableInstruction() { - } - - - /** - * @param opcode Instruction opcode - * @param c_tag Instruction number for compact version, ALOAD_0, e.g. - * @param n local variable index (unsigned short) - */ - protected LocalVariableInstruction(short opcode, short c_tag, int n) { - super(opcode, (short) 2); - this.c_tag = c_tag; - canon_tag = opcode; - setIndex(n); - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - if (wide()) { - out.writeByte(Constants.WIDE); - } - out.writeByte(opcode); - if (length > 1) { // Otherwise ILOAD_n, instruction, e.g. - if (wide()) { - out.writeShort(n); - } else { - out.writeByte(n); - } - } - } - - - /** - * Long output format: - * - * <name of opcode> "["<opcode number>"]" - * "("<length of instruction>")" "<"< local variable index>">" - * - * @param verbose long/short format switch - * @return mnemonic for instruction - */ - public String toString( boolean verbose ) { - if (((opcode >= Constants.ILOAD_0) && (opcode <= Constants.ALOAD_3)) - || ((opcode >= Constants.ISTORE_0) && (opcode <= Constants.ASTORE_3))) { - return super.toString(verbose); - } else { - return super.toString(verbose) + " " + n; - } - } - - - /** - * Read needed data (e.g. index) from file. - * PRE: (ILOAD <= tag <= ALOAD_3) || (ISTORE <= tag <= ASTORE_3) - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - if (wide) { - n = bytes.readUnsignedShort(); - length = 4; - } else if (((opcode >= Constants.ILOAD) && (opcode <= Constants.ALOAD)) - || ((opcode >= Constants.ISTORE) && (opcode <= Constants.ASTORE))) { - n = bytes.readUnsignedByte(); - length = 2; - } else if (opcode <= Constants.ALOAD_3) { // compact load instruction such as ILOAD_2 - n = (opcode - Constants.ILOAD_0) % 4; - length = 1; - } else { // Assert ISTORE_0 <= tag <= ASTORE_3 - n = (opcode - Constants.ISTORE_0) % 4; - length = 1; - } - } - - - /** - * @return local variable index referred by this instruction. - */ - public final int getIndex() { - return n; - } - - - /** - * Set the local variable index - */ - public void setIndex( int n ) { - if ((n < 0) || (n > Constants.MAX_SHORT)) { - throw new ClassGenException("Illegal value: " + n); - } - this.n = n; - if (n >= 0 && n <= 3) { // Use more compact instruction xLOAD_n - opcode = (short) (c_tag + n); - length = 1; - } else { - opcode = canon_tag; - if (wide()) { - length = 4; - } else { - length = 2; - } - } - } - - - /** @return canonical tag for instruction, e.g., ALOAD for ALOAD_0 - */ - public short getCanonicalTag() { - return canon_tag; - } - - - /** - * Returns the type associated with the instruction - - * in case of ALOAD or ASTORE Type.OBJECT is returned. - * This is just a bit incorrect, because ALOAD and ASTORE - * may work on every ReferenceType (including Type.NULL) and - * ASTORE may even work on a ReturnaddressType . - * @return type associated with the instruction - */ - public Type getType( ConstantPoolGen cp ) { - switch (canon_tag) { - case Constants.ILOAD: - case Constants.ISTORE: - return Type.INT; - case Constants.LLOAD: - case Constants.LSTORE: - return Type.LONG; - case Constants.DLOAD: - case Constants.DSTORE: - return Type.DOUBLE; - case Constants.FLOAD: - case Constants.FSTORE: - return Type.FLOAT; - case Constants.ALOAD: - case Constants.ASTORE: - return Type.OBJECT; - default: - throw new ClassGenException("Oops: unknown case in switch" + canon_tag); - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * Abstract super class for instructions dealing with local variables. + * + * @version $Id: LocalVariableInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class LocalVariableInstruction extends Instruction implements TypedInstruction, + IndexedInstruction { + + protected int n = -1; // index of referenced variable + private short c_tag = -1; // compact version, such as ILOAD_0 + private short canon_tag = -1; // canonical tag such as ILOAD + + + private final boolean wide() { + return n > Constants.MAX_BYTE; + } + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + * tag and length are defined in readInstruction and initFromFile, respectively. + */ + LocalVariableInstruction(short canon_tag, short c_tag) { + super(); + this.canon_tag = canon_tag; + this.c_tag = c_tag; + } + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Also used by IINC()! + */ + LocalVariableInstruction() { + } + + + /** + * @param opcode Instruction opcode + * @param c_tag Instruction number for compact version, ALOAD_0, e.g. + * @param n local variable index (unsigned short) + */ + protected LocalVariableInstruction(short opcode, short c_tag, int n) { + super(opcode, (short) 2); + this.c_tag = c_tag; + canon_tag = opcode; + setIndex(n); + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + if (wide()) { + out.writeByte(Constants.WIDE); + } + out.writeByte(opcode); + if (length > 1) { // Otherwise ILOAD_n, instruction, e.g. + if (wide()) { + out.writeShort(n); + } else { + out.writeByte(n); + } + } + } + + + /** + * Long output format: + * + * <name of opcode> "["<opcode number>"]" + * "("<length of instruction>")" "<"< local variable index>">" + * + * @param verbose long/short format switch + * @return mnemonic for instruction + */ + public String toString( boolean verbose ) { + if (((opcode >= Constants.ILOAD_0) && (opcode <= Constants.ALOAD_3)) + || ((opcode >= Constants.ISTORE_0) && (opcode <= Constants.ASTORE_3))) { + return super.toString(verbose); + } else { + return super.toString(verbose) + " " + n; + } + } + + + /** + * Read needed data (e.g. index) from file. + * PRE: (ILOAD <= tag <= ALOAD_3) || (ISTORE <= tag <= ASTORE_3) + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + if (wide) { + n = bytes.readUnsignedShort(); + length = 4; + } else if (((opcode >= Constants.ILOAD) && (opcode <= Constants.ALOAD)) + || ((opcode >= Constants.ISTORE) && (opcode <= Constants.ASTORE))) { + n = bytes.readUnsignedByte(); + length = 2; + } else if (opcode <= Constants.ALOAD_3) { // compact load instruction such as ILOAD_2 + n = (opcode - Constants.ILOAD_0) % 4; + length = 1; + } else { // Assert ISTORE_0 <= tag <= ASTORE_3 + n = (opcode - Constants.ISTORE_0) % 4; + length = 1; + } + } + + + /** + * @return local variable index referred by this instruction. + */ + public final int getIndex() { + return n; + } + + + /** + * Set the local variable index + */ + public void setIndex( int n ) { + if ((n < 0) || (n > Constants.MAX_SHORT)) { + throw new ClassGenException("Illegal value: " + n); + } + this.n = n; + if (n >= 0 && n <= 3) { // Use more compact instruction xLOAD_n + opcode = (short) (c_tag + n); + length = 1; + } else { + opcode = canon_tag; + if (wide()) { + length = 4; + } else { + length = 2; + } + } + } + + + /** @return canonical tag for instruction, e.g., ALOAD for ALOAD_0 + */ + public short getCanonicalTag() { + return canon_tag; + } + + + /** + * Returns the type associated with the instruction - + * in case of ALOAD or ASTORE Type.OBJECT is returned. + * This is just a bit incorrect, because ALOAD and ASTORE + * may work on every ReferenceType (including Type.NULL) and + * ASTORE may even work on a ReturnaddressType . + * @return type associated with the instruction + */ + public Type getType( ConstantPoolGen cp ) { + switch (canon_tag) { + case Constants.ILOAD: + case Constants.ISTORE: + return Type.INT; + case Constants.LLOAD: + case Constants.LSTORE: + return Type.LONG; + case Constants.DLOAD: + case Constants.DSTORE: + return Type.DOUBLE; + case Constants.FLOAD: + case Constants.FSTORE: + return Type.FLOAT; + case Constants.ALOAD: + case Constants.ASTORE: + return Type.OBJECT; + default: + throw new ClassGenException("Oops: unknown case in switch" + canon_tag); + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MONITORENTER.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MONITORENTER.java index e62a13f9..7aad1980 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MONITORENTER.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MONITORENTER.java @@ -1,53 +1,53 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * MONITORENTER - Enter monitor for object - *
          Stack: ..., objectref -> ...
          - * - * @version $Id: MONITORENTER.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class MONITORENTER extends Instruction implements ExceptionThrower, StackConsumer { - - public MONITORENTER() { - super(org.apache.bcel5_2_0.Constants.MONITORENTER, (short) 1); - } - - - public Class[] getExceptions() { - return new Class[] { - org.apache.bcel5_2_0.ExceptionConstants.NULL_POINTER_EXCEPTION - }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitMONITORENTER(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * MONITORENTER - Enter monitor for object + *
          Stack: ..., objectref -> ...
          + * + * @version $Id: MONITORENTER.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class MONITORENTER extends Instruction implements ExceptionThrower, StackConsumer { + + public MONITORENTER() { + super(org.apache.bcel5_2_0.Constants.MONITORENTER, (short) 1); + } + + + public Class[] getExceptions() { + return new Class[] { + org.apache.bcel5_2_0.ExceptionConstants.NULL_POINTER_EXCEPTION + }; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitStackConsumer(this); + v.visitMONITORENTER(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MONITOREXIT.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MONITOREXIT.java index d9cb66a3..e6359bc4 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MONITOREXIT.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MONITOREXIT.java @@ -1,53 +1,53 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * MONITOREXIT - Exit monitor for object - *
          Stack: ..., objectref -> ...
          - * - * @version $Id: MONITOREXIT.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class MONITOREXIT extends Instruction implements ExceptionThrower, StackConsumer { - - public MONITOREXIT() { - super(org.apache.bcel5_2_0.Constants.MONITOREXIT, (short) 1); - } - - - public Class[] getExceptions() { - return new Class[] { - org.apache.bcel5_2_0.ExceptionConstants.NULL_POINTER_EXCEPTION - }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitMONITOREXIT(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * MONITOREXIT - Exit monitor for object + *
          Stack: ..., objectref -> ...
          + * + * @version $Id: MONITOREXIT.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class MONITOREXIT extends Instruction implements ExceptionThrower, StackConsumer { + + public MONITOREXIT() { + super(org.apache.bcel5_2_0.Constants.MONITOREXIT, (short) 1); + } + + + public Class[] getExceptions() { + return new Class[] { + org.apache.bcel5_2_0.ExceptionConstants.NULL_POINTER_EXCEPTION + }; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitStackConsumer(this); + v.visitMONITOREXIT(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MULTIANEWARRAY.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MULTIANEWARRAY.java index e830db8f..ac8555c6 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MULTIANEWARRAY.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MULTIANEWARRAY.java @@ -1,147 +1,147 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.ExceptionConstants; -import org.apache.bcel5_2_0.classfile.ConstantPool; -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * MULTIANEWARRAY - Create new mutidimensional array of references - *
          Stack: ..., count1, [count2, ...] -> ..., arrayref
          - * - * @version $Id: MULTIANEWARRAY.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class MULTIANEWARRAY extends CPInstruction implements LoadClass, AllocationInstruction, - ExceptionThrower { - - private short dimensions; - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - MULTIANEWARRAY() { - } - - - public MULTIANEWARRAY(int index, short dimensions) { - super(org.apache.bcel5_2_0.Constants.MULTIANEWARRAY, index); - if (dimensions < 1) { - throw new ClassGenException("Invalid dimensions value: " + dimensions); - } - this.dimensions = dimensions; - length = 4; - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - out.writeByte(opcode); - out.writeShort(index); - out.writeByte(dimensions); - } - - - /** - * Read needed data (i.e., no. dimension) from file. - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - super.initFromFile(bytes, wide); - dimensions = bytes.readByte(); - length = 4; - } - - - /** - * @return number of dimensions to be created - */ - public final short getDimensions() { - return dimensions; - } - - - /** - * @return mnemonic for instruction - */ - public String toString( boolean verbose ) { - return super.toString(verbose) + " " + index + " " + dimensions; - } - - - /** - * @return mnemonic for instruction with symbolic references resolved - */ - public String toString( ConstantPool cp ) { - return super.toString(cp) + " " + dimensions; - } - - - /** - * Also works for instructions whose stack effect depends on the - * constant pool entry they reference. - * @return Number of words consumed from stack by this instruction - */ - public int consumeStack( ConstantPoolGen cpg ) { - return dimensions; - } - - - public Class[] getExceptions() { - Class[] cs = new Class[2 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, cs, 0, - ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length + 1] = ExceptionConstants.NEGATIVE_ARRAY_SIZE_EXCEPTION; - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = ExceptionConstants.ILLEGAL_ACCESS_ERROR; - return cs; - } - - - public ObjectType getLoadClassType( ConstantPoolGen cpg ) { - Type t = getType(cpg); - if (t instanceof ArrayType) { - t = ((ArrayType) t).getBasicType(); - } - return (t instanceof ObjectType) ? (ObjectType) t : null; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitLoadClass(this); - v.visitAllocationInstruction(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitMULTIANEWARRAY(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.ExceptionConstants; +import org.apache.bcel5_2_0.classfile.ConstantPool; +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * MULTIANEWARRAY - Create new mutidimensional array of references + *
          Stack: ..., count1, [count2, ...] -> ..., arrayref
          + * + * @version $Id: MULTIANEWARRAY.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class MULTIANEWARRAY extends CPInstruction implements LoadClass, AllocationInstruction, + ExceptionThrower { + + private short dimensions; + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + MULTIANEWARRAY() { + } + + + public MULTIANEWARRAY(int index, short dimensions) { + super(org.apache.bcel5_2_0.Constants.MULTIANEWARRAY, index); + if (dimensions < 1) { + throw new ClassGenException("Invalid dimensions value: " + dimensions); + } + this.dimensions = dimensions; + length = 4; + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + out.writeByte(opcode); + out.writeShort(index); + out.writeByte(dimensions); + } + + + /** + * Read needed data (i.e., no. dimension) from file. + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + super.initFromFile(bytes, wide); + dimensions = bytes.readByte(); + length = 4; + } + + + /** + * @return number of dimensions to be created + */ + public final short getDimensions() { + return dimensions; + } + + + /** + * @return mnemonic for instruction + */ + public String toString( boolean verbose ) { + return super.toString(verbose) + " " + index + " " + dimensions; + } + + + /** + * @return mnemonic for instruction with symbolic references resolved + */ + public String toString( ConstantPool cp ) { + return super.toString(cp) + " " + dimensions; + } + + + /** + * Also works for instructions whose stack effect depends on the + * constant pool entry they reference. + * @return Number of words consumed from stack by this instruction + */ + public int consumeStack( ConstantPoolGen cpg ) { + return dimensions; + } + + + public Class[] getExceptions() { + Class[] cs = new Class[2 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; + System.arraycopy(ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, cs, 0, + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); + cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length + 1] = ExceptionConstants.NEGATIVE_ARRAY_SIZE_EXCEPTION; + cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = ExceptionConstants.ILLEGAL_ACCESS_ERROR; + return cs; + } + + + public ObjectType getLoadClassType( ConstantPoolGen cpg ) { + Type t = getType(cpg); + if (t instanceof ArrayType) { + t = ((ArrayType) t).getBasicType(); + } + return (t instanceof ObjectType) ? (ObjectType) t : null; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitLoadClass(this); + v.visitAllocationInstruction(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitCPInstruction(this); + v.visitMULTIANEWARRAY(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MethodGen.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MethodGen.java index b5e534c4..1b0f318f 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MethodGen.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MethodGen.java @@ -1,1087 +1,1087 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.util.ArrayList; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Stack; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.classfile.Attribute; -import org.apache.bcel5_2_0.classfile.Code; -import org.apache.bcel5_2_0.classfile.CodeException; -import org.apache.bcel5_2_0.classfile.ExceptionTable; -import org.apache.bcel5_2_0.classfile.LineNumber; -import org.apache.bcel5_2_0.classfile.LineNumberTable; -import org.apache.bcel5_2_0.classfile.LocalVariable; -import org.apache.bcel5_2_0.classfile.LocalVariableTable; -import org.apache.bcel5_2_0.classfile.Method; -import org.apache.bcel5_2_0.classfile.Utility; -import org.apache.bcel5_2_0.util.BCELComparator; - -/** - * Template class for building up a method. This is done by defining exception - * handlers, adding thrown exceptions, local variables and attributes, whereas - * the `LocalVariableTable' and `LineNumberTable' attributes will be set - * automatically for the code. Use stripAttributes() if you don't like this. - * - * While generating code it may be necessary to insert NOP operations. You can - * use the `removeNOPs' method to get rid off them. - * The resulting method object can be obtained via the `getMethod()' method. - * - * @version $Id: MethodGen.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @author Patrick C. Beard [setMaxStack()] - * @see InstructionList - * @see Method - */ -public class MethodGen extends FieldGenOrMethodGen { - - private String class_name; - private Type[] arg_types; - private String[] arg_names; - private int max_locals; - private int max_stack; - private InstructionList il; - private boolean strip_attributes; - private List variable_vec = new ArrayList(); - private List line_number_vec = new ArrayList(); - private List exception_vec = new ArrayList(); - private List throws_vec = new ArrayList(); - private List code_attrs_vec = new ArrayList(); - private static BCELComparator _cmp = new BCELComparator() { - - public boolean equals( Object o1, Object o2 ) { - MethodGen THIS = (MethodGen) o1; - MethodGen THAT = (MethodGen) o2; - return THIS.getName().equals(THAT.getName()) - && THIS.getSignature().equals(THAT.getSignature()); - } - - - public int hashCode( Object o ) { - MethodGen THIS = (MethodGen) o; - return THIS.getSignature().hashCode() ^ THIS.getName().hashCode(); - } - }; - - - /** - * Declare method. If the method is non-static the constructor - * automatically declares a local variable `$this' in slot 0. The - * actual code is contained in the `il' parameter, which may further - * manipulated by the user. But he must take care not to remove any - * instruction (handles) that are still referenced from this object. - * - * For example one may not add a local variable and later remove the - * instructions it refers to without causing havoc. It is safe - * however if you remove that local variable, too. - * - * @param access_flags access qualifiers - * @param return_type method type - * @param arg_types argument types - * @param arg_names argument names (if this is null, default names will be provided - * for them) - * @param method_name name of method - * @param class_name class name containing this method (may be null, if you don't care) - * @param il instruction list associated with this method, may be null only for - * abstract or native methods - * @param cp constant pool - */ - public MethodGen(int access_flags, Type return_type, Type[] arg_types, String[] arg_names, - String method_name, String class_name, InstructionList il, ConstantPoolGen cp) { - setAccessFlags(access_flags); - setType(return_type); - setArgumentTypes(arg_types); - setArgumentNames(arg_names); - setName(method_name); - setClassName(class_name); - setInstructionList(il); - setConstantPool(cp); - boolean abstract_ = isAbstract() || isNative(); - InstructionHandle start = null; - InstructionHandle end = null; - if (!abstract_) { - start = il.getStart(); - end = il.getEnd(); - /* Add local variables, namely the implicit `this' and the arguments - */ - if (!isStatic() && (class_name != null)) { // Instance method -> `this' is local var 0 - addLocalVariable("this", new ObjectType(class_name), start, end); - } - } - if (arg_types != null) { - int size = arg_types.length; - for (int i = 0; i < size; i++) { - if (Type.VOID == arg_types[i]) { - throw new ClassGenException("'void' is an illegal argument type for a method"); - } - } - if (arg_names != null) { // Names for variables provided? - if (size != arg_names.length) { - throw new ClassGenException("Mismatch in argument array lengths: " + size - + " vs. " + arg_names.length); - } - } else { // Give them dummy names - arg_names = new String[size]; - for (int i = 0; i < size; i++) { - arg_names[i] = "arg" + i; - } - setArgumentNames(arg_names); - } - if (!abstract_) { - for (int i = 0; i < size; i++) { - addLocalVariable(arg_names[i], arg_types[i], start, end); - } - } - } - } - - - /** - * Instantiate from existing method. - * - * @param m method - * @param class_name class name containing this method - * @param cp constant pool - */ - public MethodGen(Method m, String class_name, ConstantPoolGen cp) { - this(m.getAccessFlags(), Type.getReturnType(m.getSignature()), Type.getArgumentTypes(m - .getSignature()), null /* may be overridden anyway */ - , m.getName(), class_name, - ((m.getAccessFlags() & (Constants.ACC_ABSTRACT | Constants.ACC_NATIVE)) == 0) - ? new InstructionList(m.getCode().getCode()) - : null, cp); - Attribute[] attributes = m.getAttributes(); - for (int i = 0; i < attributes.length; i++) { - Attribute a = attributes[i]; - if (a instanceof Code) { - Code c = (Code) a; - setMaxStack(c.getMaxStack()); - setMaxLocals(c.getMaxLocals()); - CodeException[] ces = c.getExceptionTable(); - if (ces != null) { - for (int j = 0; j < ces.length; j++) { - CodeException ce = ces[j]; - int type = ce.getCatchType(); - ObjectType c_type = null; - if (type > 0) { - String cen = m.getConstantPool().getConstantString(type, - Constants.CONSTANT_Class); - c_type = new ObjectType(cen); - } - int end_pc = ce.getEndPC(); - int length = m.getCode().getCode().length; - InstructionHandle end; - if (length == end_pc) { // May happen, because end_pc is exclusive - end = il.getEnd(); - } else { - end = il.findHandle(end_pc); - end = end.getPrev(); // Make it inclusive - } - addExceptionHandler(il.findHandle(ce.getStartPC()), end, il.findHandle(ce - .getHandlerPC()), c_type); - } - } - Attribute[] c_attributes = c.getAttributes(); - for (int j = 0; j < c_attributes.length; j++) { - a = c_attributes[j]; - if (a instanceof LineNumberTable) { - LineNumber[] ln = ((LineNumberTable) a).getLineNumberTable(); - for (int k = 0; k < ln.length; k++) { - LineNumber l = ln[k]; - InstructionHandle ih = il.findHandle(l.getStartPC()); - if (ih != null) { - addLineNumber(ih, l.getLineNumber()); - } - } - } else if (a instanceof LocalVariableTable) { - LocalVariable[] lv = ((LocalVariableTable) a).getLocalVariableTable(); - removeLocalVariables(); - for (int k = 0; k < lv.length; k++) { - LocalVariable l = lv[k]; - InstructionHandle start = il.findHandle(l.getStartPC()); - InstructionHandle end = il.findHandle(l.getStartPC() + l.getLength()); - // Repair malformed handles - if (null == start) { - start = il.getStart(); - } - if (null == end) { - end = il.getEnd(); - } - addLocalVariable(l.getName(), Type.getType(l.getSignature()), l - .getIndex(), start, end); - } - } else { - addCodeAttribute(a); - } - } - } else if (a instanceof ExceptionTable) { - String[] names = ((ExceptionTable) a).getExceptionNames(); - for (int j = 0; j < names.length; j++) { - addException(names[j]); - } - } else { - addAttribute(a); - } - } - } - - - /** - * Adds a local variable to this method. - * - * @param name variable name - * @param type variable type - * @param slot the index of the local variable, if type is long or double, the next available - * index is slot+2 - * @param start from where the variable is valid - * @param end until where the variable is valid - * @return new local variable object - * @see LocalVariable - */ - public LocalVariableGen addLocalVariable( String name, Type type, int slot, - InstructionHandle start, InstructionHandle end ) { - byte t = type.getType(); - if (t != Constants.T_ADDRESS) { - int add = type.getSize(); - if (slot + add > max_locals) { - max_locals = slot + add; - } - LocalVariableGen l = new LocalVariableGen(slot, name, type, start, end); - int i; - if ((i = variable_vec.indexOf(l)) >= 0) { - variable_vec.set(i, l); - } else { - variable_vec.add(l); - } - return l; - } else { - throw new IllegalArgumentException("Can not use " + type - + " as type for local variable"); - } - } - - - /** - * Adds a local variable to this method and assigns an index automatically. - * - * @param name variable name - * @param type variable type - * @param start from where the variable is valid, if this is null, - * it is valid from the start - * @param end until where the variable is valid, if this is null, - * it is valid to the end - * @return new local variable object - * @see LocalVariable - */ - public LocalVariableGen addLocalVariable( String name, Type type, InstructionHandle start, - InstructionHandle end ) { - return addLocalVariable(name, type, max_locals, start, end); - } - - - /** - * Remove a local variable, its slot will not be reused, if you do not use addLocalVariable - * with an explicit index argument. - */ - public void removeLocalVariable( LocalVariableGen l ) { - variable_vec.remove(l); - } - - - /** - * Remove all local variables. - */ - public void removeLocalVariables() { - variable_vec.clear(); - } - - - /** - * Sort local variables by index - */ - private static final void sort( LocalVariableGen[] vars, int l, int r ) { - int i = l, j = r; - int m = vars[(l + r) / 2].getIndex(); - LocalVariableGen h; - do { - while (vars[i].getIndex() < m) { - i++; - } - while (m < vars[j].getIndex()) { - j--; - } - if (i <= j) { - h = vars[i]; - vars[i] = vars[j]; - vars[j] = h; // Swap elements - i++; - j--; - } - } while (i <= j); - if (l < j) { - sort(vars, l, j); - } - if (i < r) { - sort(vars, i, r); - } - } - - - /* - * If the range of the variable has not been set yet, it will be set to be valid from - * the start to the end of the instruction list. - * - * @return array of declared local variables sorted by index - */ - public LocalVariableGen[] getLocalVariables() { - int size = variable_vec.size(); - LocalVariableGen[] lg = new LocalVariableGen[size]; - variable_vec.toArray(lg); - for (int i = 0; i < size; i++) { - if (lg[i].getStart() == null) { - lg[i].setStart(il.getStart()); - } - if (lg[i].getEnd() == null) { - lg[i].setEnd(il.getEnd()); - } - } - if (size > 1) { - sort(lg, 0, size - 1); - } - return lg; - } - - - /** - * @return `LocalVariableTable' attribute of all the local variables of this method. - */ - public LocalVariableTable getLocalVariableTable( ConstantPoolGen cp ) { - LocalVariableGen[] lg = getLocalVariables(); - int size = lg.length; - LocalVariable[] lv = new LocalVariable[size]; - for (int i = 0; i < size; i++) { - lv[i] = lg[i].getLocalVariable(cp); - } - return new LocalVariableTable(cp.addUtf8("LocalVariableTable"), 2 + lv.length * 10, lv, cp - .getConstantPool()); - } - - - /** - * Give an instruction a line number corresponding to the source code line. - * - * @param ih instruction to tag - * @return new line number object - * @see LineNumber - */ - public LineNumberGen addLineNumber( InstructionHandle ih, int src_line ) { - LineNumberGen l = new LineNumberGen(ih, src_line); - line_number_vec.add(l); - return l; - } - - - /** - * Remove a line number. - */ - public void removeLineNumber( LineNumberGen l ) { - line_number_vec.remove(l); - } - - - /** - * Remove all line numbers. - */ - public void removeLineNumbers() { - line_number_vec.clear(); - } - - - /* - * @return array of line numbers - */ - public LineNumberGen[] getLineNumbers() { - LineNumberGen[] lg = new LineNumberGen[line_number_vec.size()]; - line_number_vec.toArray(lg); - return lg; - } - - - /** - * @return `LineNumberTable' attribute of all the local variables of this method. - */ - public LineNumberTable getLineNumberTable( ConstantPoolGen cp ) { - int size = line_number_vec.size(); - LineNumber[] ln = new LineNumber[size]; - try { - for (int i = 0; i < size; i++) { - ln[i] = ((LineNumberGen) line_number_vec.get(i)).getLineNumber(); - } - } catch (ArrayIndexOutOfBoundsException e) { - } // Never occurs - return new LineNumberTable(cp.addUtf8("LineNumberTable"), 2 + ln.length * 4, ln, cp - .getConstantPool()); - } - - - /** - * Add an exception handler, i.e., specify region where a handler is active and an - * instruction where the actual handling is done. - * - * @param start_pc Start of region (inclusive) - * @param end_pc End of region (inclusive) - * @param handler_pc Where handling is done - * @param catch_type class type of handled exception or null if any - * exception is handled - * @return new exception handler object - */ - public CodeExceptionGen addExceptionHandler( InstructionHandle start_pc, - InstructionHandle end_pc, InstructionHandle handler_pc, ObjectType catch_type ) { - if ((start_pc == null) || (end_pc == null) || (handler_pc == null)) { - throw new ClassGenException("Exception handler target is null instruction"); - } - CodeExceptionGen c = new CodeExceptionGen(start_pc, end_pc, handler_pc, catch_type); - exception_vec.add(c); - return c; - } - - - /** - * Remove an exception handler. - */ - public void removeExceptionHandler( CodeExceptionGen c ) { - exception_vec.remove(c); - } - - - /** - * Remove all line numbers. - */ - public void removeExceptionHandlers() { - exception_vec.clear(); - } - - - /* - * @return array of declared exception handlers - */ - public CodeExceptionGen[] getExceptionHandlers() { - CodeExceptionGen[] cg = new CodeExceptionGen[exception_vec.size()]; - exception_vec.toArray(cg); - return cg; - } - - - /** - * @return code exceptions for `Code' attribute - */ - private CodeException[] getCodeExceptions() { - int size = exception_vec.size(); - CodeException[] c_exc = new CodeException[size]; - try { - for (int i = 0; i < size; i++) { - CodeExceptionGen c = (CodeExceptionGen) exception_vec.get(i); - c_exc[i] = c.getCodeException(cp); - } - } catch (ArrayIndexOutOfBoundsException e) { - } - return c_exc; - } - - - /** - * Add an exception possibly thrown by this method. - * - * @param class_name (fully qualified) name of exception - */ - public void addException( String class_name ) { - throws_vec.add(class_name); - } - - - /** - * Remove an exception. - */ - public void removeException( String c ) { - throws_vec.remove(c); - } - - - /** - * Remove all exceptions. - */ - public void removeExceptions() { - throws_vec.clear(); - } - - - /* - * @return array of thrown exceptions - */ - public String[] getExceptions() { - String[] e = new String[throws_vec.size()]; - throws_vec.toArray(e); - return e; - } - - - /** - * @return `Exceptions' attribute of all the exceptions thrown by this method. - */ - private ExceptionTable getExceptionTable( ConstantPoolGen cp ) { - int size = throws_vec.size(); - int[] ex = new int[size]; - try { - for (int i = 0; i < size; i++) { - ex[i] = cp.addClass((String) throws_vec.get(i)); - } - } catch (ArrayIndexOutOfBoundsException e) { - } - return new ExceptionTable(cp.addUtf8("Exceptions"), 2 + 2 * size, ex, cp.getConstantPool()); - } - - - /** - * Add an attribute to the code. Currently, the JVM knows about the - * LineNumberTable, LocalVariableTable and StackMap attributes, - * where the former two will be generated automatically and the - * latter is used for the MIDP only. Other attributes will be - * ignored by the JVM but do no harm. - * - * @param a attribute to be added - */ - public void addCodeAttribute( Attribute a ) { - code_attrs_vec.add(a); - } - - - /** - * Remove a code attribute. - */ - public void removeCodeAttribute( Attribute a ) { - code_attrs_vec.remove(a); - } - - - /** - * Remove all code attributes. - */ - public void removeCodeAttributes() { - code_attrs_vec.clear(); - } - - - /** - * @return all attributes of this method. - */ - public Attribute[] getCodeAttributes() { - Attribute[] attributes = new Attribute[code_attrs_vec.size()]; - code_attrs_vec.toArray(attributes); - return attributes; - } - - - /** - * Get method object. Never forget to call setMaxStack() or setMaxStack(max), respectively, - * before calling this method (the same applies for max locals). - * - * @return method object - */ - public Method getMethod() { - String signature = getSignature(); - int name_index = cp.addUtf8(name); - int signature_index = cp.addUtf8(signature); - /* Also updates positions of instructions, i.e., their indices - */ - byte[] byte_code = null; - if (il != null) { - byte_code = il.getByteCode(); - } - LineNumberTable lnt = null; - LocalVariableTable lvt = null; - /* Create LocalVariableTable and LineNumberTable attributes (for debuggers, e.g.) - */ - if ((variable_vec.size() > 0) && !strip_attributes) { - addCodeAttribute(lvt = getLocalVariableTable(cp)); - } - if ((line_number_vec.size() > 0) && !strip_attributes) { - addCodeAttribute(lnt = getLineNumberTable(cp)); - } - Attribute[] code_attrs = getCodeAttributes(); - /* Each attribute causes 6 additional header bytes - */ - int attrs_len = 0; - for (int i = 0; i < code_attrs.length; i++) { - attrs_len += (code_attrs[i].getLength() + 6); - } - CodeException[] c_exc = getCodeExceptions(); - int exc_len = c_exc.length * 8; // Every entry takes 8 bytes - Code code = null; - if ((il != null) && !isAbstract() && !isNative()) { - // Remove any stale code attribute - Attribute[] attributes = getAttributes(); - for (int i = 0; i < attributes.length; i++) { - Attribute a = attributes[i]; - if (a instanceof Code) { - removeAttribute(a); - } - } - code = new Code(cp.addUtf8("Code"), 8 + byte_code.length + // prologue byte code - 2 + exc_len + // exceptions - 2 + attrs_len, // attributes - max_stack, max_locals, byte_code, c_exc, code_attrs, cp.getConstantPool()); - addAttribute(code); - } - ExceptionTable et = null; - if (throws_vec.size() > 0) { - addAttribute(et = getExceptionTable(cp)); - // Add `Exceptions' if there are "throws" clauses - } - Method m = new Method(access_flags, name_index, signature_index, getAttributes(), cp - .getConstantPool()); - // Undo effects of adding attributes - if (lvt != null) { - removeCodeAttribute(lvt); - } - if (lnt != null) { - removeCodeAttribute(lnt); - } - if (code != null) { - removeAttribute(code); - } - if (et != null) { - removeAttribute(et); - } - return m; - } - - - /** - * Remove all NOPs from the instruction list (if possible) and update every - * object refering to them, i.e., branch instructions, local variables and - * exception handlers. - */ - public void removeNOPs() { - if (il != null) { - InstructionHandle next; - /* Check branch instructions. - */ - for (InstructionHandle ih = il.getStart(); ih != null; ih = next) { - next = ih.next; - if ((next != null) && (ih.getInstruction() instanceof NOP)) { - try { - il.delete(ih); - } catch (TargetLostException e) { - InstructionHandle[] targets = e.getTargets(); - for (int i = 0; i < targets.length; i++) { - InstructionTargeter[] targeters = targets[i].getTargeters(); - for (int j = 0; j < targeters.length; j++) { - targeters[j].updateTarget(targets[i], next); - } - } - } - } - } - } - } - - - /** - * Set maximum number of local variables. - */ - public void setMaxLocals( int m ) { - max_locals = m; - } - - - public int getMaxLocals() { - return max_locals; - } - - - /** - * Set maximum stack size for this method. - */ - public void setMaxStack( int m ) { - max_stack = m; - } - - - public int getMaxStack() { - return max_stack; - } - - - /** @return class that contains this method - */ - public String getClassName() { - return class_name; - } - - - public void setClassName( String class_name ) { - this.class_name = class_name; - } - - - public void setReturnType( Type return_type ) { - setType(return_type); - } - - - public Type getReturnType() { - return getType(); - } - - - public void setArgumentTypes( Type[] arg_types ) { - this.arg_types = arg_types; - } - - - public Type[] getArgumentTypes() { - return (Type[]) arg_types.clone(); - } - - - public void setArgumentType( int i, Type type ) { - arg_types[i] = type; - } - - - public Type getArgumentType( int i ) { - return arg_types[i]; - } - - - public void setArgumentNames( String[] arg_names ) { - this.arg_names = arg_names; - } - - - public String[] getArgumentNames() { - return (String[]) arg_names.clone(); - } - - - public void setArgumentName( int i, String name ) { - arg_names[i] = name; - } - - - public String getArgumentName( int i ) { - return arg_names[i]; - } - - - public InstructionList getInstructionList() { - return il; - } - - - public void setInstructionList( InstructionList il ) { - this.il = il; - } - - - public String getSignature() { - return Type.getMethodSignature(type, arg_types); - } - - - /** - * Computes max. stack size by performing control flow analysis. - */ - public void setMaxStack() { - if (il != null) { - max_stack = getMaxStack(cp, il, getExceptionHandlers()); - } else { - max_stack = 0; - } - } - - - /** - * Compute maximum number of local variables. - */ - public void setMaxLocals() { - if (il != null) { - int max = isStatic() ? 0 : 1; - if (arg_types != null) { - for (int i = 0; i < arg_types.length; i++) { - max += arg_types[i].getSize(); - } - } - for (InstructionHandle ih = il.getStart(); ih != null; ih = ih.getNext()) { - Instruction ins = ih.getInstruction(); - if ((ins instanceof LocalVariableInstruction) || (ins instanceof RET) - || (ins instanceof IINC)) { - int index = ((IndexedInstruction) ins).getIndex() - + ((TypedInstruction) ins).getType(cp).getSize(); - if (index > max) { - max = index; - } - } - } - max_locals = max; - } else { - max_locals = 0; - } - } - - - /** Do not/Do produce attributes code attributesLineNumberTable and - * LocalVariableTable, like javac -O - */ - public void stripAttributes( boolean flag ) { - strip_attributes = flag; - } - - static final class BranchTarget { - - InstructionHandle target; - int stackDepth; - - - BranchTarget(InstructionHandle target, int stackDepth) { - this.target = target; - this.stackDepth = stackDepth; - } - } - - static final class BranchStack { - - Stack branchTargets = new Stack(); - Hashtable visitedTargets = new Hashtable(); - - - public void push( InstructionHandle target, int stackDepth ) { - if (visited(target)) { - return; - } - branchTargets.push(visit(target, stackDepth)); - } - - - public BranchTarget pop() { - if (!branchTargets.empty()) { - BranchTarget bt = (BranchTarget) branchTargets.pop(); - return bt; - } - return null; - } - - - private final BranchTarget visit( InstructionHandle target, int stackDepth ) { - BranchTarget bt = new BranchTarget(target, stackDepth); - visitedTargets.put(target, bt); - return bt; - } - - - private final boolean visited( InstructionHandle target ) { - return (visitedTargets.get(target) != null); - } - } - - - /** - * Computes stack usage of an instruction list by performing control flow analysis. - * - * @return maximum stack depth used by method - */ - public static int getMaxStack( ConstantPoolGen cp, InstructionList il, CodeExceptionGen[] et ) { - BranchStack branchTargets = new BranchStack(); - /* Initially, populate the branch stack with the exception - * handlers, because these aren't (necessarily) branched to - * explicitly. in each case, the stack will have depth 1, - * containing the exception object. - */ - for (int i = 0; i < et.length; i++) { - InstructionHandle handler_pc = et[i].getHandlerPC(); - if (handler_pc != null) { - branchTargets.push(handler_pc, 1); - } - } - int stackDepth = 0, maxStackDepth = 0; - InstructionHandle ih = il.getStart(); - while (ih != null) { - Instruction instruction = ih.getInstruction(); - short opcode = instruction.getOpcode(); - int delta = instruction.produceStack(cp) - instruction.consumeStack(cp); - stackDepth += delta; - if (stackDepth > maxStackDepth) { - maxStackDepth = stackDepth; - } - // choose the next instruction based on whether current is a branch. - if (instruction instanceof BranchInstruction) { - BranchInstruction branch = (BranchInstruction) instruction; - if (instruction instanceof Select) { - // explore all of the select's targets. the default target is handled below. - Select select = (Select) branch; - InstructionHandle[] targets = select.getTargets(); - for (int i = 0; i < targets.length; i++) { - branchTargets.push(targets[i], stackDepth); - } - // nothing to fall through to. - ih = null; - } else if (!(branch instanceof IfInstruction)) { - // if an instruction that comes back to following PC, - // push next instruction, with stack depth reduced by 1. - if (opcode == Constants.JSR || opcode == Constants.JSR_W) { - branchTargets.push(ih.getNext(), stackDepth - 1); - } - ih = null; - } - // for all branches, the target of the branch is pushed on the branch stack. - // conditional branches have a fall through case, selects don't, and - // jsr/jsr_w return to the next instruction. - branchTargets.push(branch.getTarget(), stackDepth); - } else { - // check for instructions that terminate the method. - if (opcode == Constants.ATHROW || opcode == Constants.RET - || (opcode >= Constants.IRETURN && opcode <= Constants.RETURN)) { - ih = null; - } - } - // normal case, go to the next instruction. - if (ih != null) { - ih = ih.getNext(); - } - // if we have no more instructions, see if there are any deferred branches to explore. - if (ih == null) { - BranchTarget bt = branchTargets.pop(); - if (bt != null) { - ih = bt.target; - stackDepth = bt.stackDepth; - } - } - } - return maxStackDepth; - } - - private List observers; - - - /** Add observer for this object. - */ - public void addObserver( MethodObserver o ) { - if (observers == null) { - observers = new ArrayList(); - } - observers.add(o); - } - - - /** Remove observer for this object. - */ - public void removeObserver( MethodObserver o ) { - if (observers != null) { - observers.remove(o); - } - } - - - /** Call notify() method on all observers. This method is not called - * automatically whenever the state has changed, but has to be - * called by the user after he has finished editing the object. - */ - public void update() { - if (observers != null) { - for (Iterator e = observers.iterator(); e.hasNext();) { - ((MethodObserver) e.next()).notify(this); - } - } - } - - - /** - * Return string representation close to declaration format, - * `public static void main(String[]) throws IOException', e.g. - * - * @return String representation of the method. - */ - public final String toString() { - String access = Utility.accessToString(access_flags); - String signature = Type.getMethodSignature(type, arg_types); - signature = Utility.methodSignatureToString(signature, name, access, true, - getLocalVariableTable(cp)); - StringBuilder buf = new StringBuilder(signature); - if (throws_vec.size() > 0) { - for (Iterator e = throws_vec.iterator(); e.hasNext();) { - buf.append("\n\t\tthrows ").append(e.next()); - } - } - return buf.toString(); - } - - - /** @return deep copy of this method - */ - public MethodGen copy( String class_name, ConstantPoolGen cp ) { - Method m = ((MethodGen) clone()).getMethod(); - MethodGen mg = new MethodGen(m, class_name, this.cp); - if (this.cp != cp) { - mg.setConstantPool(cp); - mg.getInstructionList().replaceConstantPool(this.cp, cp); - } - return mg; - } - - - /** - * @return Comparison strategy object - */ - public static BCELComparator getComparator() { - return _cmp; - } - - - /** - * @param comparator Comparison strategy object - */ - public static void setComparator( BCELComparator comparator ) { - _cmp = comparator; - } - - - /** - * Return value as defined by given BCELComparator strategy. - * By default two MethodGen objects are said to be equal when - * their names and signatures are equal. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals( Object obj ) { - return _cmp.equals(this, obj); - } - - - /** - * Return value as defined by given BCELComparator strategy. - * By default return the hashcode of the method's name XOR signature. - * - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return _cmp.hashCode(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.Stack; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.classfile.Attribute; +import org.apache.bcel5_2_0.classfile.Code; +import org.apache.bcel5_2_0.classfile.CodeException; +import org.apache.bcel5_2_0.classfile.ExceptionTable; +import org.apache.bcel5_2_0.classfile.LineNumber; +import org.apache.bcel5_2_0.classfile.LineNumberTable; +import org.apache.bcel5_2_0.classfile.LocalVariable; +import org.apache.bcel5_2_0.classfile.LocalVariableTable; +import org.apache.bcel5_2_0.classfile.Method; +import org.apache.bcel5_2_0.classfile.Utility; +import org.apache.bcel5_2_0.util.BCELComparator; + +/** + * Template class for building up a method. This is done by defining exception + * handlers, adding thrown exceptions, local variables and attributes, whereas + * the `LocalVariableTable' and `LineNumberTable' attributes will be set + * automatically for the code. Use stripAttributes() if you don't like this. + * + * While generating code it may be necessary to insert NOP operations. You can + * use the `removeNOPs' method to get rid off them. + * The resulting method object can be obtained via the `getMethod()' method. + * + * @version $Id: MethodGen.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @author Patrick C. Beard [setMaxStack()] + * @see InstructionList + * @see Method + */ +public class MethodGen extends FieldGenOrMethodGen { + + private String class_name; + private Type[] arg_types; + private String[] arg_names; + private int max_locals; + private int max_stack; + private InstructionList il; + private boolean strip_attributes; + private List variable_vec = new ArrayList(); + private List line_number_vec = new ArrayList(); + private List exception_vec = new ArrayList(); + private List throws_vec = new ArrayList(); + private List code_attrs_vec = new ArrayList(); + private static BCELComparator _cmp = new BCELComparator() { + + public boolean equals( Object o1, Object o2 ) { + MethodGen THIS = (MethodGen) o1; + MethodGen THAT = (MethodGen) o2; + return THIS.getName().equals(THAT.getName()) + && THIS.getSignature().equals(THAT.getSignature()); + } + + + public int hashCode( Object o ) { + MethodGen THIS = (MethodGen) o; + return THIS.getSignature().hashCode() ^ THIS.getName().hashCode(); + } + }; + + + /** + * Declare method. If the method is non-static the constructor + * automatically declares a local variable `$this' in slot 0. The + * actual code is contained in the `il' parameter, which may further + * manipulated by the user. But he must take care not to remove any + * instruction (handles) that are still referenced from this object. + * + * For example one may not add a local variable and later remove the + * instructions it refers to without causing havoc. It is safe + * however if you remove that local variable, too. + * + * @param access_flags access qualifiers + * @param return_type method type + * @param arg_types argument types + * @param arg_names argument names (if this is null, default names will be provided + * for them) + * @param method_name name of method + * @param class_name class name containing this method (may be null, if you don't care) + * @param il instruction list associated with this method, may be null only for + * abstract or native methods + * @param cp constant pool + */ + public MethodGen(int access_flags, Type return_type, Type[] arg_types, String[] arg_names, + String method_name, String class_name, InstructionList il, ConstantPoolGen cp) { + setAccessFlags(access_flags); + setType(return_type); + setArgumentTypes(arg_types); + setArgumentNames(arg_names); + setName(method_name); + setClassName(class_name); + setInstructionList(il); + setConstantPool(cp); + boolean abstract_ = isAbstract() || isNative(); + InstructionHandle start = null; + InstructionHandle end = null; + if (!abstract_) { + start = il.getStart(); + end = il.getEnd(); + /* Add local variables, namely the implicit `this' and the arguments + */ + if (!isStatic() && (class_name != null)) { // Instance method -> `this' is local var 0 + addLocalVariable("this", new ObjectType(class_name), start, end); + } + } + if (arg_types != null) { + int size = arg_types.length; + for (int i = 0; i < size; i++) { + if (Type.VOID == arg_types[i]) { + throw new ClassGenException("'void' is an illegal argument type for a method"); + } + } + if (arg_names != null) { // Names for variables provided? + if (size != arg_names.length) { + throw new ClassGenException("Mismatch in argument array lengths: " + size + + " vs. " + arg_names.length); + } + } else { // Give them dummy names + arg_names = new String[size]; + for (int i = 0; i < size; i++) { + arg_names[i] = "arg" + i; + } + setArgumentNames(arg_names); + } + if (!abstract_) { + for (int i = 0; i < size; i++) { + addLocalVariable(arg_names[i], arg_types[i], start, end); + } + } + } + } + + + /** + * Instantiate from existing method. + * + * @param m method + * @param class_name class name containing this method + * @param cp constant pool + */ + public MethodGen(Method m, String class_name, ConstantPoolGen cp) { + this(m.getAccessFlags(), Type.getReturnType(m.getSignature()), Type.getArgumentTypes(m + .getSignature()), null /* may be overridden anyway */ + , m.getName(), class_name, + ((m.getAccessFlags() & (Constants.ACC_ABSTRACT | Constants.ACC_NATIVE)) == 0) + ? new InstructionList(m.getCode().getCode()) + : null, cp); + Attribute[] attributes = m.getAttributes(); + for (int i = 0; i < attributes.length; i++) { + Attribute a = attributes[i]; + if (a instanceof Code) { + Code c = (Code) a; + setMaxStack(c.getMaxStack()); + setMaxLocals(c.getMaxLocals()); + CodeException[] ces = c.getExceptionTable(); + if (ces != null) { + for (int j = 0; j < ces.length; j++) { + CodeException ce = ces[j]; + int type = ce.getCatchType(); + ObjectType c_type = null; + if (type > 0) { + String cen = m.getConstantPool().getConstantString(type, + Constants.CONSTANT_Class); + c_type = new ObjectType(cen); + } + int end_pc = ce.getEndPC(); + int length = m.getCode().getCode().length; + InstructionHandle end; + if (length == end_pc) { // May happen, because end_pc is exclusive + end = il.getEnd(); + } else { + end = il.findHandle(end_pc); + end = end.getPrev(); // Make it inclusive + } + addExceptionHandler(il.findHandle(ce.getStartPC()), end, il.findHandle(ce + .getHandlerPC()), c_type); + } + } + Attribute[] c_attributes = c.getAttributes(); + for (int j = 0; j < c_attributes.length; j++) { + a = c_attributes[j]; + if (a instanceof LineNumberTable) { + LineNumber[] ln = ((LineNumberTable) a).getLineNumberTable(); + for (int k = 0; k < ln.length; k++) { + LineNumber l = ln[k]; + InstructionHandle ih = il.findHandle(l.getStartPC()); + if (ih != null) { + addLineNumber(ih, l.getLineNumber()); + } + } + } else if (a instanceof LocalVariableTable) { + LocalVariable[] lv = ((LocalVariableTable) a).getLocalVariableTable(); + removeLocalVariables(); + for (int k = 0; k < lv.length; k++) { + LocalVariable l = lv[k]; + InstructionHandle start = il.findHandle(l.getStartPC()); + InstructionHandle end = il.findHandle(l.getStartPC() + l.getLength()); + // Repair malformed handles + if (null == start) { + start = il.getStart(); + } + if (null == end) { + end = il.getEnd(); + } + addLocalVariable(l.getName(), Type.getType(l.getSignature()), l + .getIndex(), start, end); + } + } else { + addCodeAttribute(a); + } + } + } else if (a instanceof ExceptionTable) { + String[] names = ((ExceptionTable) a).getExceptionNames(); + for (int j = 0; j < names.length; j++) { + addException(names[j]); + } + } else { + addAttribute(a); + } + } + } + + + /** + * Adds a local variable to this method. + * + * @param name variable name + * @param type variable type + * @param slot the index of the local variable, if type is long or double, the next available + * index is slot+2 + * @param start from where the variable is valid + * @param end until where the variable is valid + * @return new local variable object + * @see LocalVariable + */ + public LocalVariableGen addLocalVariable( String name, Type type, int slot, + InstructionHandle start, InstructionHandle end ) { + byte t = type.getType(); + if (t != Constants.T_ADDRESS) { + int add = type.getSize(); + if (slot + add > max_locals) { + max_locals = slot + add; + } + LocalVariableGen l = new LocalVariableGen(slot, name, type, start, end); + int i; + if ((i = variable_vec.indexOf(l)) >= 0) { + variable_vec.set(i, l); + } else { + variable_vec.add(l); + } + return l; + } else { + throw new IllegalArgumentException("Can not use " + type + + " as type for local variable"); + } + } + + + /** + * Adds a local variable to this method and assigns an index automatically. + * + * @param name variable name + * @param type variable type + * @param start from where the variable is valid, if this is null, + * it is valid from the start + * @param end until where the variable is valid, if this is null, + * it is valid to the end + * @return new local variable object + * @see LocalVariable + */ + public LocalVariableGen addLocalVariable( String name, Type type, InstructionHandle start, + InstructionHandle end ) { + return addLocalVariable(name, type, max_locals, start, end); + } + + + /** + * Remove a local variable, its slot will not be reused, if you do not use addLocalVariable + * with an explicit index argument. + */ + public void removeLocalVariable( LocalVariableGen l ) { + variable_vec.remove(l); + } + + + /** + * Remove all local variables. + */ + public void removeLocalVariables() { + variable_vec.clear(); + } + + + /** + * Sort local variables by index + */ + private static final void sort( LocalVariableGen[] vars, int l, int r ) { + int i = l, j = r; + int m = vars[(l + r) / 2].getIndex(); + LocalVariableGen h; + do { + while (vars[i].getIndex() < m) { + i++; + } + while (m < vars[j].getIndex()) { + j--; + } + if (i <= j) { + h = vars[i]; + vars[i] = vars[j]; + vars[j] = h; // Swap elements + i++; + j--; + } + } while (i <= j); + if (l < j) { + sort(vars, l, j); + } + if (i < r) { + sort(vars, i, r); + } + } + + + /* + * If the range of the variable has not been set yet, it will be set to be valid from + * the start to the end of the instruction list. + * + * @return array of declared local variables sorted by index + */ + public LocalVariableGen[] getLocalVariables() { + int size = variable_vec.size(); + LocalVariableGen[] lg = new LocalVariableGen[size]; + variable_vec.toArray(lg); + for (int i = 0; i < size; i++) { + if (lg[i].getStart() == null) { + lg[i].setStart(il.getStart()); + } + if (lg[i].getEnd() == null) { + lg[i].setEnd(il.getEnd()); + } + } + if (size > 1) { + sort(lg, 0, size - 1); + } + return lg; + } + + + /** + * @return `LocalVariableTable' attribute of all the local variables of this method. + */ + public LocalVariableTable getLocalVariableTable( ConstantPoolGen cp ) { + LocalVariableGen[] lg = getLocalVariables(); + int size = lg.length; + LocalVariable[] lv = new LocalVariable[size]; + for (int i = 0; i < size; i++) { + lv[i] = lg[i].getLocalVariable(cp); + } + return new LocalVariableTable(cp.addUtf8("LocalVariableTable"), 2 + lv.length * 10, lv, cp + .getConstantPool()); + } + + + /** + * Give an instruction a line number corresponding to the source code line. + * + * @param ih instruction to tag + * @return new line number object + * @see LineNumber + */ + public LineNumberGen addLineNumber( InstructionHandle ih, int src_line ) { + LineNumberGen l = new LineNumberGen(ih, src_line); + line_number_vec.add(l); + return l; + } + + + /** + * Remove a line number. + */ + public void removeLineNumber( LineNumberGen l ) { + line_number_vec.remove(l); + } + + + /** + * Remove all line numbers. + */ + public void removeLineNumbers() { + line_number_vec.clear(); + } + + + /* + * @return array of line numbers + */ + public LineNumberGen[] getLineNumbers() { + LineNumberGen[] lg = new LineNumberGen[line_number_vec.size()]; + line_number_vec.toArray(lg); + return lg; + } + + + /** + * @return `LineNumberTable' attribute of all the local variables of this method. + */ + public LineNumberTable getLineNumberTable( ConstantPoolGen cp ) { + int size = line_number_vec.size(); + LineNumber[] ln = new LineNumber[size]; + try { + for (int i = 0; i < size; i++) { + ln[i] = ((LineNumberGen) line_number_vec.get(i)).getLineNumber(); + } + } catch (ArrayIndexOutOfBoundsException e) { + } // Never occurs + return new LineNumberTable(cp.addUtf8("LineNumberTable"), 2 + ln.length * 4, ln, cp + .getConstantPool()); + } + + + /** + * Add an exception handler, i.e., specify region where a handler is active and an + * instruction where the actual handling is done. + * + * @param start_pc Start of region (inclusive) + * @param end_pc End of region (inclusive) + * @param handler_pc Where handling is done + * @param catch_type class type of handled exception or null if any + * exception is handled + * @return new exception handler object + */ + public CodeExceptionGen addExceptionHandler( InstructionHandle start_pc, + InstructionHandle end_pc, InstructionHandle handler_pc, ObjectType catch_type ) { + if ((start_pc == null) || (end_pc == null) || (handler_pc == null)) { + throw new ClassGenException("Exception handler target is null instruction"); + } + CodeExceptionGen c = new CodeExceptionGen(start_pc, end_pc, handler_pc, catch_type); + exception_vec.add(c); + return c; + } + + + /** + * Remove an exception handler. + */ + public void removeExceptionHandler( CodeExceptionGen c ) { + exception_vec.remove(c); + } + + + /** + * Remove all line numbers. + */ + public void removeExceptionHandlers() { + exception_vec.clear(); + } + + + /* + * @return array of declared exception handlers + */ + public CodeExceptionGen[] getExceptionHandlers() { + CodeExceptionGen[] cg = new CodeExceptionGen[exception_vec.size()]; + exception_vec.toArray(cg); + return cg; + } + + + /** + * @return code exceptions for `Code' attribute + */ + private CodeException[] getCodeExceptions() { + int size = exception_vec.size(); + CodeException[] c_exc = new CodeException[size]; + try { + for (int i = 0; i < size; i++) { + CodeExceptionGen c = (CodeExceptionGen) exception_vec.get(i); + c_exc[i] = c.getCodeException(cp); + } + } catch (ArrayIndexOutOfBoundsException e) { + } + return c_exc; + } + + + /** + * Add an exception possibly thrown by this method. + * + * @param class_name (fully qualified) name of exception + */ + public void addException( String class_name ) { + throws_vec.add(class_name); + } + + + /** + * Remove an exception. + */ + public void removeException( String c ) { + throws_vec.remove(c); + } + + + /** + * Remove all exceptions. + */ + public void removeExceptions() { + throws_vec.clear(); + } + + + /* + * @return array of thrown exceptions + */ + public String[] getExceptions() { + String[] e = new String[throws_vec.size()]; + throws_vec.toArray(e); + return e; + } + + + /** + * @return `Exceptions' attribute of all the exceptions thrown by this method. + */ + private ExceptionTable getExceptionTable( ConstantPoolGen cp ) { + int size = throws_vec.size(); + int[] ex = new int[size]; + try { + for (int i = 0; i < size; i++) { + ex[i] = cp.addClass((String) throws_vec.get(i)); + } + } catch (ArrayIndexOutOfBoundsException e) { + } + return new ExceptionTable(cp.addUtf8("Exceptions"), 2 + 2 * size, ex, cp.getConstantPool()); + } + + + /** + * Add an attribute to the code. Currently, the JVM knows about the + * LineNumberTable, LocalVariableTable and StackMap attributes, + * where the former two will be generated automatically and the + * latter is used for the MIDP only. Other attributes will be + * ignored by the JVM but do no harm. + * + * @param a attribute to be added + */ + public void addCodeAttribute( Attribute a ) { + code_attrs_vec.add(a); + } + + + /** + * Remove a code attribute. + */ + public void removeCodeAttribute( Attribute a ) { + code_attrs_vec.remove(a); + } + + + /** + * Remove all code attributes. + */ + public void removeCodeAttributes() { + code_attrs_vec.clear(); + } + + + /** + * @return all attributes of this method. + */ + public Attribute[] getCodeAttributes() { + Attribute[] attributes = new Attribute[code_attrs_vec.size()]; + code_attrs_vec.toArray(attributes); + return attributes; + } + + + /** + * Get method object. Never forget to call setMaxStack() or setMaxStack(max), respectively, + * before calling this method (the same applies for max locals). + * + * @return method object + */ + public Method getMethod() { + String signature = getSignature(); + int name_index = cp.addUtf8(name); + int signature_index = cp.addUtf8(signature); + /* Also updates positions of instructions, i.e., their indices + */ + byte[] byte_code = null; + if (il != null) { + byte_code = il.getByteCode(); + } + LineNumberTable lnt = null; + LocalVariableTable lvt = null; + /* Create LocalVariableTable and LineNumberTable attributes (for debuggers, e.g.) + */ + if ((variable_vec.size() > 0) && !strip_attributes) { + addCodeAttribute(lvt = getLocalVariableTable(cp)); + } + if ((line_number_vec.size() > 0) && !strip_attributes) { + addCodeAttribute(lnt = getLineNumberTable(cp)); + } + Attribute[] code_attrs = getCodeAttributes(); + /* Each attribute causes 6 additional header bytes + */ + int attrs_len = 0; + for (int i = 0; i < code_attrs.length; i++) { + attrs_len += (code_attrs[i].getLength() + 6); + } + CodeException[] c_exc = getCodeExceptions(); + int exc_len = c_exc.length * 8; // Every entry takes 8 bytes + Code code = null; + if ((il != null) && !isAbstract() && !isNative()) { + // Remove any stale code attribute + Attribute[] attributes = getAttributes(); + for (int i = 0; i < attributes.length; i++) { + Attribute a = attributes[i]; + if (a instanceof Code) { + removeAttribute(a); + } + } + code = new Code(cp.addUtf8("Code"), 8 + byte_code.length + // prologue byte code + 2 + exc_len + // exceptions + 2 + attrs_len, // attributes + max_stack, max_locals, byte_code, c_exc, code_attrs, cp.getConstantPool()); + addAttribute(code); + } + ExceptionTable et = null; + if (throws_vec.size() > 0) { + addAttribute(et = getExceptionTable(cp)); + // Add `Exceptions' if there are "throws" clauses + } + Method m = new Method(access_flags, name_index, signature_index, getAttributes(), cp + .getConstantPool()); + // Undo effects of adding attributes + if (lvt != null) { + removeCodeAttribute(lvt); + } + if (lnt != null) { + removeCodeAttribute(lnt); + } + if (code != null) { + removeAttribute(code); + } + if (et != null) { + removeAttribute(et); + } + return m; + } + + + /** + * Remove all NOPs from the instruction list (if possible) and update every + * object refering to them, i.e., branch instructions, local variables and + * exception handlers. + */ + public void removeNOPs() { + if (il != null) { + InstructionHandle next; + /* Check branch instructions. + */ + for (InstructionHandle ih = il.getStart(); ih != null; ih = next) { + next = ih.next; + if ((next != null) && (ih.getInstruction() instanceof NOP)) { + try { + il.delete(ih); + } catch (TargetLostException e) { + InstructionHandle[] targets = e.getTargets(); + for (int i = 0; i < targets.length; i++) { + InstructionTargeter[] targeters = targets[i].getTargeters(); + for (int j = 0; j < targeters.length; j++) { + targeters[j].updateTarget(targets[i], next); + } + } + } + } + } + } + } + + + /** + * Set maximum number of local variables. + */ + public void setMaxLocals( int m ) { + max_locals = m; + } + + + public int getMaxLocals() { + return max_locals; + } + + + /** + * Set maximum stack size for this method. + */ + public void setMaxStack( int m ) { + max_stack = m; + } + + + public int getMaxStack() { + return max_stack; + } + + + /** @return class that contains this method + */ + public String getClassName() { + return class_name; + } + + + public void setClassName( String class_name ) { + this.class_name = class_name; + } + + + public void setReturnType( Type return_type ) { + setType(return_type); + } + + + public Type getReturnType() { + return getType(); + } + + + public void setArgumentTypes( Type[] arg_types ) { + this.arg_types = arg_types; + } + + + public Type[] getArgumentTypes() { + return (Type[]) arg_types.clone(); + } + + + public void setArgumentType( int i, Type type ) { + arg_types[i] = type; + } + + + public Type getArgumentType( int i ) { + return arg_types[i]; + } + + + public void setArgumentNames( String[] arg_names ) { + this.arg_names = arg_names; + } + + + public String[] getArgumentNames() { + return (String[]) arg_names.clone(); + } + + + public void setArgumentName( int i, String name ) { + arg_names[i] = name; + } + + + public String getArgumentName( int i ) { + return arg_names[i]; + } + + + public InstructionList getInstructionList() { + return il; + } + + + public void setInstructionList( InstructionList il ) { + this.il = il; + } + + + public String getSignature() { + return Type.getMethodSignature(type, arg_types); + } + + + /** + * Computes max. stack size by performing control flow analysis. + */ + public void setMaxStack() { + if (il != null) { + max_stack = getMaxStack(cp, il, getExceptionHandlers()); + } else { + max_stack = 0; + } + } + + + /** + * Compute maximum number of local variables. + */ + public void setMaxLocals() { + if (il != null) { + int max = isStatic() ? 0 : 1; + if (arg_types != null) { + for (int i = 0; i < arg_types.length; i++) { + max += arg_types[i].getSize(); + } + } + for (InstructionHandle ih = il.getStart(); ih != null; ih = ih.getNext()) { + Instruction ins = ih.getInstruction(); + if ((ins instanceof LocalVariableInstruction) || (ins instanceof RET) + || (ins instanceof IINC)) { + int index = ((IndexedInstruction) ins).getIndex() + + ((TypedInstruction) ins).getType(cp).getSize(); + if (index > max) { + max = index; + } + } + } + max_locals = max; + } else { + max_locals = 0; + } + } + + + /** Do not/Do produce attributes code attributesLineNumberTable and + * LocalVariableTable, like javac -O + */ + public void stripAttributes( boolean flag ) { + strip_attributes = flag; + } + + static final class BranchTarget { + + InstructionHandle target; + int stackDepth; + + + BranchTarget(InstructionHandle target, int stackDepth) { + this.target = target; + this.stackDepth = stackDepth; + } + } + + static final class BranchStack { + + Stack branchTargets = new Stack(); + Hashtable visitedTargets = new Hashtable(); + + + public void push( InstructionHandle target, int stackDepth ) { + if (visited(target)) { + return; + } + branchTargets.push(visit(target, stackDepth)); + } + + + public BranchTarget pop() { + if (!branchTargets.empty()) { + BranchTarget bt = (BranchTarget) branchTargets.pop(); + return bt; + } + return null; + } + + + private final BranchTarget visit( InstructionHandle target, int stackDepth ) { + BranchTarget bt = new BranchTarget(target, stackDepth); + visitedTargets.put(target, bt); + return bt; + } + + + private final boolean visited( InstructionHandle target ) { + return (visitedTargets.get(target) != null); + } + } + + + /** + * Computes stack usage of an instruction list by performing control flow analysis. + * + * @return maximum stack depth used by method + */ + public static int getMaxStack( ConstantPoolGen cp, InstructionList il, CodeExceptionGen[] et ) { + BranchStack branchTargets = new BranchStack(); + /* Initially, populate the branch stack with the exception + * handlers, because these aren't (necessarily) branched to + * explicitly. in each case, the stack will have depth 1, + * containing the exception object. + */ + for (int i = 0; i < et.length; i++) { + InstructionHandle handler_pc = et[i].getHandlerPC(); + if (handler_pc != null) { + branchTargets.push(handler_pc, 1); + } + } + int stackDepth = 0, maxStackDepth = 0; + InstructionHandle ih = il.getStart(); + while (ih != null) { + Instruction instruction = ih.getInstruction(); + short opcode = instruction.getOpcode(); + int delta = instruction.produceStack(cp) - instruction.consumeStack(cp); + stackDepth += delta; + if (stackDepth > maxStackDepth) { + maxStackDepth = stackDepth; + } + // choose the next instruction based on whether current is a branch. + if (instruction instanceof BranchInstruction) { + BranchInstruction branch = (BranchInstruction) instruction; + if (instruction instanceof Select) { + // explore all of the select's targets. the default target is handled below. + Select select = (Select) branch; + InstructionHandle[] targets = select.getTargets(); + for (int i = 0; i < targets.length; i++) { + branchTargets.push(targets[i], stackDepth); + } + // nothing to fall through to. + ih = null; + } else if (!(branch instanceof IfInstruction)) { + // if an instruction that comes back to following PC, + // push next instruction, with stack depth reduced by 1. + if (opcode == Constants.JSR || opcode == Constants.JSR_W) { + branchTargets.push(ih.getNext(), stackDepth - 1); + } + ih = null; + } + // for all branches, the target of the branch is pushed on the branch stack. + // conditional branches have a fall through case, selects don't, and + // jsr/jsr_w return to the next instruction. + branchTargets.push(branch.getTarget(), stackDepth); + } else { + // check for instructions that terminate the method. + if (opcode == Constants.ATHROW || opcode == Constants.RET + || (opcode >= Constants.IRETURN && opcode <= Constants.RETURN)) { + ih = null; + } + } + // normal case, go to the next instruction. + if (ih != null) { + ih = ih.getNext(); + } + // if we have no more instructions, see if there are any deferred branches to explore. + if (ih == null) { + BranchTarget bt = branchTargets.pop(); + if (bt != null) { + ih = bt.target; + stackDepth = bt.stackDepth; + } + } + } + return maxStackDepth; + } + + private List observers; + + + /** Add observer for this object. + */ + public void addObserver( MethodObserver o ) { + if (observers == null) { + observers = new ArrayList(); + } + observers.add(o); + } + + + /** Remove observer for this object. + */ + public void removeObserver( MethodObserver o ) { + if (observers != null) { + observers.remove(o); + } + } + + + /** Call notify() method on all observers. This method is not called + * automatically whenever the state has changed, but has to be + * called by the user after he has finished editing the object. + */ + public void update() { + if (observers != null) { + for (Iterator e = observers.iterator(); e.hasNext();) { + ((MethodObserver) e.next()).notify(this); + } + } + } + + + /** + * Return string representation close to declaration format, + * `public static void main(String[]) throws IOException', e.g. + * + * @return String representation of the method. + */ + public final String toString() { + String access = Utility.accessToString(access_flags); + String signature = Type.getMethodSignature(type, arg_types); + signature = Utility.methodSignatureToString(signature, name, access, true, + getLocalVariableTable(cp)); + StringBuilder buf = new StringBuilder(signature); + if (throws_vec.size() > 0) { + for (Iterator e = throws_vec.iterator(); e.hasNext();) { + buf.append("\n\t\tthrows ").append(e.next()); + } + } + return buf.toString(); + } + + + /** @return deep copy of this method + */ + public MethodGen copy( String class_name, ConstantPoolGen cp ) { + Method m = ((MethodGen) clone()).getMethod(); + MethodGen mg = new MethodGen(m, class_name, this.cp); + if (this.cp != cp) { + mg.setConstantPool(cp); + mg.getInstructionList().replaceConstantPool(this.cp, cp); + } + return mg; + } + + + /** + * @return Comparison strategy object + */ + public static BCELComparator getComparator() { + return _cmp; + } + + + /** + * @param comparator Comparison strategy object + */ + public static void setComparator( BCELComparator comparator ) { + _cmp = comparator; + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default two MethodGen objects are said to be equal when + * their names and signatures are equal. + * + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals( Object obj ) { + return _cmp.equals(this, obj); + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default return the hashcode of the method's name XOR signature. + * + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + return _cmp.hashCode(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MethodObserver.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MethodObserver.java index c224727b..b0725db6 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MethodObserver.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/MethodObserver.java @@ -1,29 +1,29 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Implement this interface if you're interested in changes to a MethodGen object - * and register yourself with addObserver(). - * - * @version $Id: MethodObserver.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface MethodObserver { - - public void notify( MethodGen method ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Implement this interface if you're interested in changes to a MethodGen object + * and register yourself with addObserver(). + * + * @version $Id: MethodObserver.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface MethodObserver { + + public void notify( MethodGen method ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NEW.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NEW.java index 375ac406..db7f3f15 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NEW.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NEW.java @@ -1,76 +1,76 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.ExceptionConstants; - -/** - * NEW - Create new object - *
          Stack: ... -> ..., objectref
          - * - * @version $Id: NEW.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class NEW extends CPInstruction implements LoadClass, AllocationInstruction, - ExceptionThrower, StackProducer { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - NEW() { - } - - - public NEW(int index) { - super(org.apache.bcel5_2_0.Constants.NEW, index); - } - - - public Class[] getExceptions() { - Class[] cs = new Class[2 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, cs, 0, - ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length + 1] = ExceptionConstants.INSTANTIATION_ERROR; - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = ExceptionConstants.ILLEGAL_ACCESS_ERROR; - return cs; - } - - - public ObjectType getLoadClassType( ConstantPoolGen cpg ) { - return (ObjectType) getType(cpg); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitLoadClass(this); - v.visitAllocationInstruction(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitNEW(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.ExceptionConstants; + +/** + * NEW - Create new object + *
          Stack: ... -> ..., objectref
          + * + * @version $Id: NEW.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class NEW extends CPInstruction implements LoadClass, AllocationInstruction, + ExceptionThrower, StackProducer { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + NEW() { + } + + + public NEW(int index) { + super(org.apache.bcel5_2_0.Constants.NEW, index); + } + + + public Class[] getExceptions() { + Class[] cs = new Class[2 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; + System.arraycopy(ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, cs, 0, + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); + cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length + 1] = ExceptionConstants.INSTANTIATION_ERROR; + cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = ExceptionConstants.ILLEGAL_ACCESS_ERROR; + return cs; + } + + + public ObjectType getLoadClassType( ConstantPoolGen cpg ) { + return (ObjectType) getType(cpg); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitLoadClass(this); + v.visitAllocationInstruction(this); + v.visitExceptionThrower(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitCPInstruction(this); + v.visitNEW(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NEWARRAY.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NEWARRAY.java index 997cde61..c895d25e 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NEWARRAY.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NEWARRAY.java @@ -1,121 +1,121 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * NEWARRAY - Create new array of basic type (int, short, ...) - *
          Stack: ..., count -> ..., arrayref
          - * type must be one of T_INT, T_SHORT, ... - * - * @version $Id: NEWARRAY.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class NEWARRAY extends Instruction implements AllocationInstruction, ExceptionThrower, - StackProducer { - - private byte type; - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - NEWARRAY() { - } - - - public NEWARRAY(byte type) { - super(org.apache.bcel5_2_0.Constants.NEWARRAY, (short) 2); - this.type = type; - } - - - public NEWARRAY(BasicType type) { - this(type.getType()); - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - out.writeByte(opcode); - out.writeByte(type); - } - - - /** - * @return numeric code for basic element type - */ - public final byte getTypecode() { - return type; - } - - - /** - * @return type of constructed array - */ - public final Type getType() { - return new ArrayType(BasicType.getType(type), 1); - } - - - /** - * @return mnemonic for instruction - */ - public String toString( boolean verbose ) { - return super.toString(verbose) + " " + org.apache.bcel5_2_0.Constants.TYPE_NAMES[type]; - } - - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - type = bytes.readByte(); - length = 2; - } - - - public Class[] getExceptions() { - return new Class[] { - org.apache.bcel5_2_0.ExceptionConstants.NEGATIVE_ARRAY_SIZE_EXCEPTION - }; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitAllocationInstruction(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitNEWARRAY(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * NEWARRAY - Create new array of basic type (int, short, ...) + *
          Stack: ..., count -> ..., arrayref
          + * type must be one of T_INT, T_SHORT, ... + * + * @version $Id: NEWARRAY.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class NEWARRAY extends Instruction implements AllocationInstruction, ExceptionThrower, + StackProducer { + + private byte type; + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + NEWARRAY() { + } + + + public NEWARRAY(byte type) { + super(org.apache.bcel5_2_0.Constants.NEWARRAY, (short) 2); + this.type = type; + } + + + public NEWARRAY(BasicType type) { + this(type.getType()); + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + out.writeByte(opcode); + out.writeByte(type); + } + + + /** + * @return numeric code for basic element type + */ + public final byte getTypecode() { + return type; + } + + + /** + * @return type of constructed array + */ + public final Type getType() { + return new ArrayType(BasicType.getType(type), 1); + } + + + /** + * @return mnemonic for instruction + */ + public String toString( boolean verbose ) { + return super.toString(verbose) + " " + org.apache.bcel5_2_0.Constants.TYPE_NAMES[type]; + } + + + /** + * Read needed data (e.g. index) from file. + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + type = bytes.readByte(); + length = 2; + } + + + public Class[] getExceptions() { + return new Class[] { + org.apache.bcel5_2_0.ExceptionConstants.NEGATIVE_ARRAY_SIZE_EXCEPTION + }; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitAllocationInstruction(this); + v.visitExceptionThrower(this); + v.visitStackProducer(this); + v.visitNEWARRAY(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NOP.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NOP.java index 7b07722d..ebcff05b 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NOP.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NOP.java @@ -1,43 +1,43 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * NOP - Do nothing - * - * @version $Id: NOP.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class NOP extends Instruction { - - public NOP() { - super(org.apache.bcel5_2_0.Constants.NOP, (short) 1); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitNOP(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * NOP - Do nothing + * + * @version $Id: NOP.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class NOP extends Instruction { + + public NOP() { + super(org.apache.bcel5_2_0.Constants.NOP, (short) 1); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitNOP(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NamedAndTyped.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NamedAndTyped.java index 58b40af5..ca8b98c0 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NamedAndTyped.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/NamedAndTyped.java @@ -1,38 +1,38 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denote entity that has both name and type. This is true for local variables, - * methods and fields. - * - * @version $Id: NamedAndTyped.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface NamedAndTyped { - - public String getName(); - - - public Type getType(); - - - public void setName( String name ); - - - public void setType( Type type ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denote entity that has both name and type. This is true for local variables, + * methods and fields. + * + * @version $Id: NamedAndTyped.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface NamedAndTyped { + + public String getName(); + + + public Type getType(); + + + public void setName( String name ); + + + public void setType( Type type ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ObjectType.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ObjectType.java index 476d1cf4..d3d23707 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ObjectType.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ObjectType.java @@ -1,155 +1,155 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.Repository; -import org.apache.bcel5_2_0.classfile.JavaClass; - -/** - * Denotes reference such as java.lang.String. - * - * @version $Id: ObjectType.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ObjectType extends ReferenceType { - - private String class_name; // Class name of type - - - /** - * @param class_name fully qualified class name, e.g. java.lang.String - */ - public ObjectType(String class_name) { - super(Constants.T_REFERENCE, "L" + class_name.replace('.', '/') + ";"); - this.class_name = class_name.replace('/', '.'); - } - - - /** @return name of referenced class - */ - public String getClassName() { - return class_name; - } - - - /** @return a hash code value for the object. - */ - public int hashCode() { - return class_name.hashCode(); - } - - - /** @return true if both type objects refer to the same class. - */ - public boolean equals( Object type ) { - return (type instanceof ObjectType) - ? ((ObjectType) type).class_name.equals(class_name) - : false; - } - - - /** - * If "this" doesn't reference a class, it references an interface - * or a non-existant entity. - * @deprecated this method returns an inaccurate result - * if the class or interface referenced cannot - * be found: use referencesClassExact() instead - */ - public boolean referencesClass() { - try { - JavaClass jc = Repository.lookupClass(class_name); - return jc.isClass(); - } catch (ClassNotFoundException e) { - return false; - } - } - - - /** - * If "this" doesn't reference an interface, it references a class - * or a non-existant entity. - * @deprecated this method returns an inaccurate result - * if the class or interface referenced cannot - * be found: use referencesInterfaceExact() instead - */ - public boolean referencesInterface() { - try { - JavaClass jc = Repository.lookupClass(class_name); - return !jc.isClass(); - } catch (ClassNotFoundException e) { - return false; - } - } - - - /** - * Return true if this type references a class, - * false if it references an interface. - * @return true if the type references a class, false if - * it references an interface - * @throws ClassNotFoundException if the class or interface - * referenced by this type can't be found - */ - public boolean referencesClassExact() throws ClassNotFoundException { - JavaClass jc = Repository.lookupClass(class_name); - return jc.isClass(); - } - - - /** - * Return true if this type references an interface, - * false if it references a class. - * @return true if the type references an interface, false if - * it references a class - * @throws ClassNotFoundException if the class or interface - * referenced by this type can't be found - */ - public boolean referencesInterfaceExact() throws ClassNotFoundException { - JavaClass jc = Repository.lookupClass(class_name); - return !jc.isClass(); - } - - - /** - * Return true if this type is a subclass of given ObjectType. - * @throws ClassNotFoundException if any of this class's superclasses - * can't be found - */ - public boolean subclassOf( ObjectType superclass ) throws ClassNotFoundException { - if (this.referencesInterface() || superclass.referencesInterface()) { - return false; - } - return Repository.instanceOf(this.class_name, superclass.class_name); - } - - - /** - * Java Virtual Machine Specification edition 2, paragraph 5.4.4 Access Control - * @throws ClassNotFoundException if the class referenced by this type - * can't be found - */ - public boolean accessibleTo( ObjectType accessor ) throws ClassNotFoundException { - JavaClass jc = Repository.lookupClass(class_name); - if (jc.isPublic()) { - return true; - } else { - JavaClass acc = Repository.lookupClass(accessor.class_name); - return acc.getPackageName().equals(jc.getPackageName()); - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.Repository; +import org.apache.bcel5_2_0.classfile.JavaClass; + +/** + * Denotes reference such as java.lang.String. + * + * @version $Id: ObjectType.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ObjectType extends ReferenceType { + + private String class_name; // Class name of type + + + /** + * @param class_name fully qualified class name, e.g. java.lang.String + */ + public ObjectType(String class_name) { + super(Constants.T_REFERENCE, "L" + class_name.replace('.', '/') + ";"); + this.class_name = class_name.replace('/', '.'); + } + + + /** @return name of referenced class + */ + public String getClassName() { + return class_name; + } + + + /** @return a hash code value for the object. + */ + public int hashCode() { + return class_name.hashCode(); + } + + + /** @return true if both type objects refer to the same class. + */ + public boolean equals( Object type ) { + return (type instanceof ObjectType) + ? ((ObjectType) type).class_name.equals(class_name) + : false; + } + + + /** + * If "this" doesn't reference a class, it references an interface + * or a non-existant entity. + * @deprecated this method returns an inaccurate result + * if the class or interface referenced cannot + * be found: use referencesClassExact() instead + */ + public boolean referencesClass() { + try { + JavaClass jc = Repository.lookupClass(class_name); + return jc.isClass(); + } catch (ClassNotFoundException e) { + return false; + } + } + + + /** + * If "this" doesn't reference an interface, it references a class + * or a non-existant entity. + * @deprecated this method returns an inaccurate result + * if the class or interface referenced cannot + * be found: use referencesInterfaceExact() instead + */ + public boolean referencesInterface() { + try { + JavaClass jc = Repository.lookupClass(class_name); + return !jc.isClass(); + } catch (ClassNotFoundException e) { + return false; + } + } + + + /** + * Return true if this type references a class, + * false if it references an interface. + * @return true if the type references a class, false if + * it references an interface + * @throws ClassNotFoundException if the class or interface + * referenced by this type can't be found + */ + public boolean referencesClassExact() throws ClassNotFoundException { + JavaClass jc = Repository.lookupClass(class_name); + return jc.isClass(); + } + + + /** + * Return true if this type references an interface, + * false if it references a class. + * @return true if the type references an interface, false if + * it references a class + * @throws ClassNotFoundException if the class or interface + * referenced by this type can't be found + */ + public boolean referencesInterfaceExact() throws ClassNotFoundException { + JavaClass jc = Repository.lookupClass(class_name); + return !jc.isClass(); + } + + + /** + * Return true if this type is a subclass of given ObjectType. + * @throws ClassNotFoundException if any of this class's superclasses + * can't be found + */ + public boolean subclassOf( ObjectType superclass ) throws ClassNotFoundException { + if (this.referencesInterface() || superclass.referencesInterface()) { + return false; + } + return Repository.instanceOf(this.class_name, superclass.class_name); + } + + + /** + * Java Virtual Machine Specification edition 2, paragraph 5.4.4 Access Control + * @throws ClassNotFoundException if the class referenced by this type + * can't be found + */ + public boolean accessibleTo( ObjectType accessor ) throws ClassNotFoundException { + JavaClass jc = Repository.lookupClass(class_name); + if (jc.isPublic()) { + return true; + } else { + JavaClass acc = Repository.lookupClass(accessor.class_name); + return acc.getPackageName().equals(jc.getPackageName()); + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/POP.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/POP.java index b9eaf898..e36849d7 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/POP.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/POP.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * POP - Pop top operand stack word - * - *
          Stack: ..., word -> ...
          - * - * @version $Id: POP.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class POP extends StackInstruction implements PopInstruction { - - public POP() { - super(org.apache.bcel5_2_0.Constants.POP); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitStackInstruction(this); - v.visitPOP(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * POP - Pop top operand stack word + * + *
          Stack: ..., word -> ...
          + * + * @version $Id: POP.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class POP extends StackInstruction implements PopInstruction { + + public POP() { + super(org.apache.bcel5_2_0.Constants.POP); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitPopInstruction(this); + v.visitStackInstruction(this); + v.visitPOP(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/POP2.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/POP2.java index 36007ef8..49b04af9 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/POP2.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/POP2.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * POP2 - Pop two top operand stack words - * - *
          Stack: ..., word2, word1 -> ...
          - * - * @version $Id: POP2.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class POP2 extends StackInstruction implements PopInstruction { - - public POP2() { - super(org.apache.bcel5_2_0.Constants.POP2); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitStackInstruction(this); - v.visitPOP2(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * POP2 - Pop two top operand stack words + * + *
          Stack: ..., word2, word1 -> ...
          + * + * @version $Id: POP2.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class POP2 extends StackInstruction implements PopInstruction { + + public POP2() { + super(org.apache.bcel5_2_0.Constants.POP2); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitPopInstruction(this); + v.visitStackInstruction(this); + v.visitPOP2(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PUSH.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PUSH.java index 1fab5546..e50b5db7 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PUSH.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PUSH.java @@ -1,178 +1,178 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; - -/** - * Wrapper class for push operations, which are implemented either as BIPUSH, - * LDC or xCONST_n instructions. - * - * @version $Id: PUSH.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class PUSH implements CompoundInstruction, VariableLengthInstruction, - InstructionConstants { - - private Instruction instruction; - - - /** - * This constructor also applies for values of type short, char, byte - * - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, int value) { - if ((value >= -1) && (value <= 5)) { - instruction = INSTRUCTIONS[Constants.ICONST_0 + value]; - } else if ((value >= -128) && (value <= 127)) { - instruction = new BIPUSH((byte) value); - } else if ((value >= -32768) && (value <= 32767)) { - instruction = new SIPUSH((short) value); - } else { - instruction = new LDC(cp.addInteger(value)); - } - } - - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, boolean value) { - instruction = INSTRUCTIONS[Constants.ICONST_0 + (value ? 1 : 0)]; - } - - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, float value) { - if (value == 0.0) { - instruction = FCONST_0; - } else if (value == 1.0) { - instruction = FCONST_1; - } else if (value == 2.0) { - instruction = FCONST_2; - } else { - instruction = new LDC(cp.addFloat(value)); - } - } - - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, long value) { - if (value == 0) { - instruction = LCONST_0; - } else if (value == 1) { - instruction = LCONST_1; - } else { - instruction = new LDC2_W(cp.addLong(value)); - } - } - - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, double value) { - if (value == 0.0) { - instruction = DCONST_0; - } else if (value == 1.0) { - instruction = DCONST_1; - } else { - instruction = new LDC2_W(cp.addDouble(value)); - } - } - - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, String value) { - if (value == null) { - instruction = ACONST_NULL; - } else { - instruction = new LDC(cp.addString(value)); - } - } - - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, Number value) { - if ((value instanceof Integer) || (value instanceof Short) || (value instanceof Byte)) { - instruction = new PUSH(cp, value.intValue()).instruction; - } else if (value instanceof Double) { - instruction = new PUSH(cp, value.doubleValue()).instruction; - } else if (value instanceof Float) { - instruction = new PUSH(cp, value.floatValue()).instruction; - } else if (value instanceof Long) { - instruction = new PUSH(cp, value.longValue()).instruction; - } else { - throw new ClassGenException("What's this: " + value); - } - } - - - /** - * creates a push object from a Character value. Warning: Make sure not to attempt to allow - * autoboxing to create this value parameter, as an alternative constructor will be called - * - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, Character value) { - this(cp, value.charValue()); - } - - - /** - * @param cp Constant pool - * @param value to be pushed - */ - public PUSH(ConstantPoolGen cp, Boolean value) { - this(cp, value.booleanValue()); - } - - - public final InstructionList getInstructionList() { - return new InstructionList(instruction); - } - - - public final Instruction getInstruction() { - return instruction; - } - - - /** - * @return mnemonic for instruction - */ - public String toString() { - return instruction.toString() + " (PUSH)"; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; + +/** + * Wrapper class for push operations, which are implemented either as BIPUSH, + * LDC or xCONST_n instructions. + * + * @version $Id: PUSH.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public final class PUSH implements CompoundInstruction, VariableLengthInstruction, + InstructionConstants { + + private Instruction instruction; + + + /** + * This constructor also applies for values of type short, char, byte + * + * @param cp Constant pool + * @param value to be pushed + */ + public PUSH(ConstantPoolGen cp, int value) { + if ((value >= -1) && (value <= 5)) { + instruction = INSTRUCTIONS[Constants.ICONST_0 + value]; + } else if ((value >= -128) && (value <= 127)) { + instruction = new BIPUSH((byte) value); + } else if ((value >= -32768) && (value <= 32767)) { + instruction = new SIPUSH((short) value); + } else { + instruction = new LDC(cp.addInteger(value)); + } + } + + + /** + * @param cp Constant pool + * @param value to be pushed + */ + public PUSH(ConstantPoolGen cp, boolean value) { + instruction = INSTRUCTIONS[Constants.ICONST_0 + (value ? 1 : 0)]; + } + + + /** + * @param cp Constant pool + * @param value to be pushed + */ + public PUSH(ConstantPoolGen cp, float value) { + if (value == 0.0) { + instruction = FCONST_0; + } else if (value == 1.0) { + instruction = FCONST_1; + } else if (value == 2.0) { + instruction = FCONST_2; + } else { + instruction = new LDC(cp.addFloat(value)); + } + } + + + /** + * @param cp Constant pool + * @param value to be pushed + */ + public PUSH(ConstantPoolGen cp, long value) { + if (value == 0) { + instruction = LCONST_0; + } else if (value == 1) { + instruction = LCONST_1; + } else { + instruction = new LDC2_W(cp.addLong(value)); + } + } + + + /** + * @param cp Constant pool + * @param value to be pushed + */ + public PUSH(ConstantPoolGen cp, double value) { + if (value == 0.0) { + instruction = DCONST_0; + } else if (value == 1.0) { + instruction = DCONST_1; + } else { + instruction = new LDC2_W(cp.addDouble(value)); + } + } + + + /** + * @param cp Constant pool + * @param value to be pushed + */ + public PUSH(ConstantPoolGen cp, String value) { + if (value == null) { + instruction = ACONST_NULL; + } else { + instruction = new LDC(cp.addString(value)); + } + } + + + /** + * @param cp Constant pool + * @param value to be pushed + */ + public PUSH(ConstantPoolGen cp, Number value) { + if ((value instanceof Integer) || (value instanceof Short) || (value instanceof Byte)) { + instruction = new PUSH(cp, value.intValue()).instruction; + } else if (value instanceof Double) { + instruction = new PUSH(cp, value.doubleValue()).instruction; + } else if (value instanceof Float) { + instruction = new PUSH(cp, value.floatValue()).instruction; + } else if (value instanceof Long) { + instruction = new PUSH(cp, value.longValue()).instruction; + } else { + throw new ClassGenException("What's this: " + value); + } + } + + + /** + * creates a push object from a Character value. Warning: Make sure not to attempt to allow + * autoboxing to create this value parameter, as an alternative constructor will be called + * + * @param cp Constant pool + * @param value to be pushed + */ + public PUSH(ConstantPoolGen cp, Character value) { + this(cp, value.charValue()); + } + + + /** + * @param cp Constant pool + * @param value to be pushed + */ + public PUSH(ConstantPoolGen cp, Boolean value) { + this(cp, value.booleanValue()); + } + + + public final InstructionList getInstructionList() { + return new InstructionList(instruction); + } + + + public final Instruction getInstruction() { + return instruction; + } + + + /** + * @return mnemonic for instruction + */ + public String toString() { + return instruction.toString() + " (PUSH)"; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PUTFIELD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PUTFIELD.java index 02ff3c18..ffceff5d 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PUTFIELD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PUTFIELD.java @@ -1,80 +1,80 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.ExceptionConstants; - -/** - * PUTFIELD - Put field in object - *
          Stack: ..., objectref, value -> ...
          - * OR - *
          Stack: ..., objectref, value.word1, value.word2 -> ...
          - * - * @version $Id: PUTFIELD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class PUTFIELD extends FieldInstruction implements PopInstruction, ExceptionThrower { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - PUTFIELD() { - } - - - public PUTFIELD(int index) { - super(Constants.PUTFIELD, index); - } - - - public int consumeStack( ConstantPoolGen cpg ) { - return getFieldSize(cpg) + 1; - } - - - public Class[] getExceptions() { - Class[] cs = new Class[2 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, cs, 0, - ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitTypedInstruction(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitFieldInstruction(this); - v.visitPUTFIELD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.ExceptionConstants; + +/** + * PUTFIELD - Put field in object + *
          Stack: ..., objectref, value -> ...
          + * OR + *
          Stack: ..., objectref, value.word1, value.word2 -> ...
          + * + * @version $Id: PUTFIELD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class PUTFIELD extends FieldInstruction implements PopInstruction, ExceptionThrower { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + PUTFIELD() { + } + + + public PUTFIELD(int index) { + super(Constants.PUTFIELD, index); + } + + + public int consumeStack( ConstantPoolGen cpg ) { + return getFieldSize(cpg) + 1; + } + + + public Class[] getExceptions() { + Class[] cs = new Class[2 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; + System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, cs, 0, + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; + return cs; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitStackConsumer(this); + v.visitPopInstruction(this); + v.visitTypedInstruction(this); + v.visitLoadClass(this); + v.visitCPInstruction(this); + v.visitFieldOrMethod(this); + v.visitFieldInstruction(this); + v.visitPUTFIELD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PUTSTATIC.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PUTSTATIC.java index b6715859..093df625 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PUTSTATIC.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PUTSTATIC.java @@ -1,79 +1,79 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.ExceptionConstants; - -/** - * PUTSTATIC - Put static field in class - *
          Stack: ..., value -> ...
          - * OR - *
          Stack: ..., value.word1, value.word2 -> ...
          - * - * @version $Id: PUTSTATIC.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class PUTSTATIC extends FieldInstruction implements ExceptionThrower, PopInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - PUTSTATIC() { - } - - - public PUTSTATIC(int index) { - super(Constants.PUTSTATIC, index); - } - - - public int consumeStack( ConstantPoolGen cpg ) { - return getFieldSize(cpg); - } - - - public Class[] getExceptions() { - Class[] cs = new Class[1 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, cs, 0, - ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - return cs; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitTypedInstruction(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitFieldInstruction(this); - v.visitPUTSTATIC(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.ExceptionConstants; + +/** + * PUTSTATIC - Put static field in class + *
          Stack: ..., value -> ...
          + * OR + *
          Stack: ..., value.word1, value.word2 -> ...
          + * + * @version $Id: PUTSTATIC.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class PUTSTATIC extends FieldInstruction implements ExceptionThrower, PopInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + PUTSTATIC() { + } + + + public PUTSTATIC(int index) { + super(Constants.PUTSTATIC, index); + } + + + public int consumeStack( ConstantPoolGen cpg ) { + return getFieldSize(cpg); + } + + + public Class[] getExceptions() { + Class[] cs = new Class[1 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; + System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, 0, cs, 0, + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); + cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; + return cs; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitStackConsumer(this); + v.visitPopInstruction(this); + v.visitTypedInstruction(this); + v.visitLoadClass(this); + v.visitCPInstruction(this); + v.visitFieldOrMethod(this); + v.visitFieldInstruction(this); + v.visitPUTSTATIC(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PopInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PopInstruction.java index 46484a81..53111708 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PopInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PopInstruction.java @@ -1,29 +1,29 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denotes an unparameterized instruction to pop a value on top from the stack, - * such as ISTORE, POP, PUTSTATIC. - * - * @version $Id: PopInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see ISTORE - * @see POP - */ -public interface PopInstruction extends StackConsumer { -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denotes an unparameterized instruction to pop a value on top from the stack, + * such as ISTORE, POP, PUTSTATIC. + * + * @version $Id: PopInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see ISTORE + * @see POP + */ +public interface PopInstruction extends StackConsumer { +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PushInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PushInstruction.java index 03633555..32d201e2 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PushInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/PushInstruction.java @@ -1,34 +1,34 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denotes an unparameterized instruction to produce a value on top of the stack, - * such as ILOAD, LDC, SIPUSH, DUP, ICONST, etc. - * - * @version $Id: PushInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - - * @see ILOAD - * @see ICONST - * @see LDC - * @see DUP - * @see SIPUSH - * @see GETSTATIC - */ -public interface PushInstruction extends StackProducer { -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denotes an unparameterized instruction to produce a value on top of the stack, + * such as ILOAD, LDC, SIPUSH, DUP, ICONST, etc. + * + * @version $Id: PushInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + + * @see ILOAD + * @see ICONST + * @see LDC + * @see DUP + * @see SIPUSH + * @see GETSTATIC + */ +public interface PushInstruction extends StackProducer { +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/RET.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/RET.java index f0b93f2c..a579a2e6 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/RET.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/RET.java @@ -1,140 +1,140 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * RET - Return from subroutine - * - *
          Stack: ... -> ...
          - * - * @version $Id: RET.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class RET extends Instruction implements IndexedInstruction, TypedInstruction { - - private boolean wide; - private int index; // index to local variable containg the return address - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - RET() { - } - - - public RET(int index) { - super(org.apache.bcel5_2_0.Constants.RET, (short) 2); - setIndex(index); // May set wide as side effect - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - if (wide) { - out.writeByte(org.apache.bcel5_2_0.Constants.WIDE); - } - out.writeByte(opcode); - if (wide) { - out.writeShort(index); - } else { - out.writeByte(index); - } - } - - - private final void setWide() { - wide = index > org.apache.bcel5_2_0.Constants.MAX_BYTE; - if (wide) { - length = 4; // Including the wide byte - } else { - length = 2; - } - } - - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - this.wide = wide; - if (wide) { - index = bytes.readUnsignedShort(); - length = 4; - } else { - index = bytes.readUnsignedByte(); - length = 2; - } - } - - - /** - * @return index of local variable containg the return address - */ - public final int getIndex() { - return index; - } - - - /** - * Set index of local variable containg the return address - */ - public final void setIndex( int n ) { - if (n < 0) { - throw new ClassGenException("Negative index value: " + n); - } - index = n; - setWide(); - } - - - /** - * @return mnemonic for instruction - */ - public String toString( boolean verbose ) { - return super.toString(verbose) + " " + index; - } - - - /** @return return address type - */ - public Type getType( ConstantPoolGen cp ) { - return ReturnaddressType.NO_TARGET; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitRET(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * RET - Return from subroutine + * + *
          Stack: ... -> ...
          + * + * @version $Id: RET.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class RET extends Instruction implements IndexedInstruction, TypedInstruction { + + private boolean wide; + private int index; // index to local variable containg the return address + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + RET() { + } + + + public RET(int index) { + super(org.apache.bcel5_2_0.Constants.RET, (short) 2); + setIndex(index); // May set wide as side effect + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + if (wide) { + out.writeByte(org.apache.bcel5_2_0.Constants.WIDE); + } + out.writeByte(opcode); + if (wide) { + out.writeShort(index); + } else { + out.writeByte(index); + } + } + + + private final void setWide() { + wide = index > org.apache.bcel5_2_0.Constants.MAX_BYTE; + if (wide) { + length = 4; // Including the wide byte + } else { + length = 2; + } + } + + + /** + * Read needed data (e.g. index) from file. + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + this.wide = wide; + if (wide) { + index = bytes.readUnsignedShort(); + length = 4; + } else { + index = bytes.readUnsignedByte(); + length = 2; + } + } + + + /** + * @return index of local variable containg the return address + */ + public final int getIndex() { + return index; + } + + + /** + * Set index of local variable containg the return address + */ + public final void setIndex( int n ) { + if (n < 0) { + throw new ClassGenException("Negative index value: " + n); + } + index = n; + setWide(); + } + + + /** + * @return mnemonic for instruction + */ + public String toString( boolean verbose ) { + return super.toString(verbose) + " " + index; + } + + + /** @return return address type + */ + public Type getType( ConstantPoolGen cp ) { + return ReturnaddressType.NO_TARGET; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitRET(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/RETURN.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/RETURN.java index fa7587c5..131bf6d6 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/RETURN.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/RETURN.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * RETURN - Return from void method - *
          Stack: ... -> <empty>
          - * - * @version $Id: RETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class RETURN extends ReturnInstruction { - - public RETURN() { - super(org.apache.bcel5_2_0.Constants.RETURN); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitRETURN(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * RETURN - Return from void method + *
          Stack: ... -> <empty>
          + * + * @version $Id: RETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class RETURN extends ReturnInstruction { + + public RETURN() { + super(org.apache.bcel5_2_0.Constants.RETURN); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitStackConsumer(this); + v.visitReturnInstruction(this); + v.visitRETURN(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ReferenceType.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ReferenceType.java index f302fade..5470400d 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ReferenceType.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ReferenceType.java @@ -1,330 +1,330 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.Repository; -import org.apache.bcel5_2_0.classfile.JavaClass; - -/** - * Super class for object and array types. - * - * @version $Id: ReferenceType.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class ReferenceType extends Type { - - protected ReferenceType(byte t, String s) { - super(t, s); - } - - - /** Class is non-abstract but not instantiable from the outside - */ - ReferenceType() { - super(Constants.T_OBJECT, ""); - } - - - /** - * Return true iff this type is castable to another type t as defined in - * the JVM specification. The case where this is Type.NULL is not - * defined (see the CHECKCAST definition in the JVM specification). - * However, because e.g. CHECKCAST doesn't throw a - * ClassCastException when casting a null reference to any Object, - * true is returned in this case. - * - * @throws ClassNotFoundException if any classes or interfaces required - * to determine assignment compatibility can't be found - */ - public boolean isCastableTo( Type t ) throws ClassNotFoundException { - if (this.equals(Type.NULL)) { - return true; // If this is ever changed in isAssignmentCompatible() - } - return isAssignmentCompatibleWith(t); - /* Yes, it's true: It's the same definition. - * See vmspec2 AASTORE / CHECKCAST definitions. - */ - } - - - /** - * Return true iff this is assignment compatible with another type t - * as defined in the JVM specification; see the AASTORE definition - * there. - * @throws ClassNotFoundException if any classes or interfaces required - * to determine assignment compatibility can't be found - */ - public boolean isAssignmentCompatibleWith( Type t ) throws ClassNotFoundException { - if (!(t instanceof ReferenceType)) { - return false; - } - ReferenceType T = (ReferenceType) t; - if (this.equals(Type.NULL)) { - return true; // This is not explicitely stated, but clear. Isn't it? - } - /* If this is a class type then - */ - if ((this instanceof ObjectType) && (((ObjectType) this).referencesClassExact())) { - /* If T is a class type, then this must be the same class as T, - or this must be a subclass of T; - */ - if ((T instanceof ObjectType) && (((ObjectType) T).referencesClassExact())) { - if (this.equals(T)) { - return true; - } - if (Repository.instanceOf(((ObjectType) this).getClassName(), ((ObjectType) T) - .getClassName())) { - return true; - } - } - /* If T is an interface type, this must implement interface T. - */ - if ((T instanceof ObjectType) && (((ObjectType) T).referencesInterfaceExact())) { - if (Repository.implementationOf(((ObjectType) this).getClassName(), - ((ObjectType) T).getClassName())) { - return true; - } - } - } - /* If this is an interface type, then: - */ - if ((this instanceof ObjectType) && (((ObjectType) this).referencesInterfaceExact())) { - /* If T is a class type, then T must be Object (paragraph 2.4.7). - */ - if ((T instanceof ObjectType) && (((ObjectType) T).referencesClassExact())) { - if (T.equals(Type.OBJECT)) { - return true; - } - } - /* If T is an interface type, then T must be the same interface - * as this or a superinterface of this (paragraph 2.13.2). - */ - if ((T instanceof ObjectType) && (((ObjectType) T).referencesInterfaceExact())) { - if (this.equals(T)) { - return true; - } - if (Repository.implementationOf(((ObjectType) this).getClassName(), - ((ObjectType) T).getClassName())) { - return true; - } - } - } - /* If this is an array type, namely, the type SC[], that is, an - * array of components of type SC, then: - */ - if (this instanceof ArrayType) { - /* If T is a class type, then T must be Object (paragraph 2.4.7). - */ - if ((T instanceof ObjectType) && (((ObjectType) T).referencesClassExact())) { - if (T.equals(Type.OBJECT)) { - return true; - } - } - /* If T is an array type TC[], that is, an array of components - * of type TC, then one of the following must be true: - */ - if (T instanceof ArrayType) { - /* TC and SC are the same primitive type (paragraph 2.4.1). - */ - Type sc = ((ArrayType) this).getElementType(); - Type tc = ((ArrayType) T).getElementType(); - if (sc instanceof BasicType && tc instanceof BasicType && sc.equals(tc)) { - return true; - } - /* TC and SC are reference types (paragraph 2.4.6), and type SC is - * assignable to TC by these runtime rules. - */ - if (tc instanceof ReferenceType && sc instanceof ReferenceType - && ((ReferenceType) sc).isAssignmentCompatibleWith(tc)) { - return true; - } - } - /* If T is an interface type, T must be one of the interfaces implemented by arrays (paragraph 2.15). */ - // TODO: Check if this is still valid or find a way to dynamically find out which - // interfaces arrays implement. However, as of the JVM specification edition 2, there - // are at least two different pages where assignment compatibility is defined and - // on one of them "interfaces implemented by arrays" is exchanged with "'Cloneable' or - // 'java.io.Serializable'" - if ((T instanceof ObjectType) && (((ObjectType) T).referencesInterfaceExact())) { - for (int ii = 0; ii < Constants.INTERFACES_IMPLEMENTED_BY_ARRAYS.length; ii++) { - if (T.equals(new ObjectType(Constants.INTERFACES_IMPLEMENTED_BY_ARRAYS[ii]))) { - return true; - } - } - } - } - return false; // default. - } - - - /** - * This commutative operation returns the first common superclass (narrowest ReferenceType - * referencing a class, not an interface). - * If one of the types is a superclass of the other, the former is returned. - * If "this" is Type.NULL, then t is returned. - * If t is Type.NULL, then "this" is returned. - * If "this" equals t ['this.equals(t)'] "this" is returned. - * If "this" or t is an ArrayType, then Type.OBJECT is returned; - * unless their dimensions match. Then an ArrayType of the same - * number of dimensions is returned, with its basic type being the - * first common super class of the basic types of "this" and t. - * If "this" or t is a ReferenceType referencing an interface, then Type.OBJECT is returned. - * If not all of the two classes' superclasses cannot be found, "null" is returned. - * See the JVM specification edition 2, "paragraph 4.9.2 The Bytecode Verifier". - * - * @throws ClassNotFoundException on failure to find superclasses of this - * type, or the type passed as a parameter - */ - public ReferenceType getFirstCommonSuperclass( ReferenceType t ) throws ClassNotFoundException { - if (this.equals(Type.NULL)) { - return t; - } - if (t.equals(Type.NULL)) { - return this; - } - if (this.equals(t)) { - return this; - /* - * TODO: Above sounds a little arbitrary. On the other hand, there is - * no object referenced by Type.NULL so we can also say all the objects - * referenced by Type.NULL were derived from java.lang.Object. - * However, the Java Language's "instanceof" operator proves us wrong: - * "null" is not referring to an instance of java.lang.Object :) - */ - } - /* This code is from a bug report by Konstantin Shagin */ - if ((this instanceof ArrayType) && (t instanceof ArrayType)) { - ArrayType arrType1 = (ArrayType) this; - ArrayType arrType2 = (ArrayType) t; - if ((arrType1.getDimensions() == arrType2.getDimensions()) - && arrType1.getBasicType() instanceof ObjectType - && arrType2.getBasicType() instanceof ObjectType) { - return new ArrayType(((ObjectType) arrType1.getBasicType()) - .getFirstCommonSuperclass((ObjectType) arrType2.getBasicType()), arrType1 - .getDimensions()); - } - } - if ((this instanceof ArrayType) || (t instanceof ArrayType)) { - return Type.OBJECT; - // TODO: Is there a proof of OBJECT being the direct ancestor of every ArrayType? - } - if (((this instanceof ObjectType) && ((ObjectType) this).referencesInterface()) - || ((t instanceof ObjectType) && ((ObjectType) t).referencesInterface())) { - return Type.OBJECT; - // TODO: The above line is correct comparing to the vmspec2. But one could - // make class file verification a bit stronger here by using the notion of - // superinterfaces or even castability or assignment compatibility. - } - // this and t are ObjectTypes, see above. - ObjectType thiz = (ObjectType) this; - ObjectType other = (ObjectType) t; - JavaClass[] thiz_sups = Repository.getSuperClasses(thiz.getClassName()); - JavaClass[] other_sups = Repository.getSuperClasses(other.getClassName()); - if ((thiz_sups == null) || (other_sups == null)) { - return null; - } - // Waaahh... - JavaClass[] this_sups = new JavaClass[thiz_sups.length + 1]; - JavaClass[] t_sups = new JavaClass[other_sups.length + 1]; - System.arraycopy(thiz_sups, 0, this_sups, 1, thiz_sups.length); - System.arraycopy(other_sups, 0, t_sups, 1, other_sups.length); - this_sups[0] = Repository.lookupClass(thiz.getClassName()); - t_sups[0] = Repository.lookupClass(other.getClassName()); - for (int i = 0; i < t_sups.length; i++) { - for (int j = 0; j < this_sups.length; j++) { - if (this_sups[j].equals(t_sups[i])) { - return new ObjectType(this_sups[j].getClassName()); - } - } - } - // Huh? Did you ask for Type.OBJECT's superclass?? - return null; - } - - - /** - * This commutative operation returns the first common superclass (narrowest ReferenceType - * referencing a class, not an interface). - * If one of the types is a superclass of the other, the former is returned. - * If "this" is Type.NULL, then t is returned. - * If t is Type.NULL, then "this" is returned. - * If "this" equals t ['this.equals(t)'] "this" is returned. - * If "this" or t is an ArrayType, then Type.OBJECT is returned. - * If "this" or t is a ReferenceType referencing an interface, then Type.OBJECT is returned. - * If not all of the two classes' superclasses cannot be found, "null" is returned. - * See the JVM specification edition 2, "paragraph 4.9.2 The Bytecode Verifier". - * - * @deprecated use getFirstCommonSuperclass(ReferenceType t) which has - * slightly changed semantics. - * @throws ClassNotFoundException on failure to find superclasses of this - * type, or the type passed as a parameter - */ - public ReferenceType firstCommonSuperclass( ReferenceType t ) throws ClassNotFoundException { - if (this.equals(Type.NULL)) { - return t; - } - if (t.equals(Type.NULL)) { - return this; - } - if (this.equals(t)) { - return this; - /* - * TODO: Above sounds a little arbitrary. On the other hand, there is - * no object referenced by Type.NULL so we can also say all the objects - * referenced by Type.NULL were derived from java.lang.Object. - * However, the Java Language's "instanceof" operator proves us wrong: - * "null" is not referring to an instance of java.lang.Object :) - */ - } - if ((this instanceof ArrayType) || (t instanceof ArrayType)) { - return Type.OBJECT; - // TODO: Is there a proof of OBJECT being the direct ancestor of every ArrayType? - } - if (((this instanceof ObjectType) && ((ObjectType) this).referencesInterface()) - || ((t instanceof ObjectType) && ((ObjectType) t).referencesInterface())) { - return Type.OBJECT; - // TODO: The above line is correct comparing to the vmspec2. But one could - // make class file verification a bit stronger here by using the notion of - // superinterfaces or even castability or assignment compatibility. - } - // this and t are ObjectTypes, see above. - ObjectType thiz = (ObjectType) this; - ObjectType other = (ObjectType) t; - JavaClass[] thiz_sups = Repository.getSuperClasses(thiz.getClassName()); - JavaClass[] other_sups = Repository.getSuperClasses(other.getClassName()); - if ((thiz_sups == null) || (other_sups == null)) { - return null; - } - // Waaahh... - JavaClass[] this_sups = new JavaClass[thiz_sups.length + 1]; - JavaClass[] t_sups = new JavaClass[other_sups.length + 1]; - System.arraycopy(thiz_sups, 0, this_sups, 1, thiz_sups.length); - System.arraycopy(other_sups, 0, t_sups, 1, other_sups.length); - this_sups[0] = Repository.lookupClass(thiz.getClassName()); - t_sups[0] = Repository.lookupClass(other.getClassName()); - for (int i = 0; i < t_sups.length; i++) { - for (int j = 0; j < this_sups.length; j++) { - if (this_sups[j].equals(t_sups[i])) { - return new ObjectType(this_sups[j].getClassName()); - } - } - } - // Huh? Did you ask for Type.OBJECT's superclass?? - return null; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.Repository; +import org.apache.bcel5_2_0.classfile.JavaClass; + +/** + * Super class for object and array types. + * + * @version $Id: ReferenceType.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class ReferenceType extends Type { + + protected ReferenceType(byte t, String s) { + super(t, s); + } + + + /** Class is non-abstract but not instantiable from the outside + */ + ReferenceType() { + super(Constants.T_OBJECT, ""); + } + + + /** + * Return true iff this type is castable to another type t as defined in + * the JVM specification. The case where this is Type.NULL is not + * defined (see the CHECKCAST definition in the JVM specification). + * However, because e.g. CHECKCAST doesn't throw a + * ClassCastException when casting a null reference to any Object, + * true is returned in this case. + * + * @throws ClassNotFoundException if any classes or interfaces required + * to determine assignment compatibility can't be found + */ + public boolean isCastableTo( Type t ) throws ClassNotFoundException { + if (this.equals(Type.NULL)) { + return true; // If this is ever changed in isAssignmentCompatible() + } + return isAssignmentCompatibleWith(t); + /* Yes, it's true: It's the same definition. + * See vmspec2 AASTORE / CHECKCAST definitions. + */ + } + + + /** + * Return true iff this is assignment compatible with another type t + * as defined in the JVM specification; see the AASTORE definition + * there. + * @throws ClassNotFoundException if any classes or interfaces required + * to determine assignment compatibility can't be found + */ + public boolean isAssignmentCompatibleWith( Type t ) throws ClassNotFoundException { + if (!(t instanceof ReferenceType)) { + return false; + } + ReferenceType T = (ReferenceType) t; + if (this.equals(Type.NULL)) { + return true; // This is not explicitely stated, but clear. Isn't it? + } + /* If this is a class type then + */ + if ((this instanceof ObjectType) && (((ObjectType) this).referencesClassExact())) { + /* If T is a class type, then this must be the same class as T, + or this must be a subclass of T; + */ + if ((T instanceof ObjectType) && (((ObjectType) T).referencesClassExact())) { + if (this.equals(T)) { + return true; + } + if (Repository.instanceOf(((ObjectType) this).getClassName(), ((ObjectType) T) + .getClassName())) { + return true; + } + } + /* If T is an interface type, this must implement interface T. + */ + if ((T instanceof ObjectType) && (((ObjectType) T).referencesInterfaceExact())) { + if (Repository.implementationOf(((ObjectType) this).getClassName(), + ((ObjectType) T).getClassName())) { + return true; + } + } + } + /* If this is an interface type, then: + */ + if ((this instanceof ObjectType) && (((ObjectType) this).referencesInterfaceExact())) { + /* If T is a class type, then T must be Object (paragraph 2.4.7). + */ + if ((T instanceof ObjectType) && (((ObjectType) T).referencesClassExact())) { + if (T.equals(Type.OBJECT)) { + return true; + } + } + /* If T is an interface type, then T must be the same interface + * as this or a superinterface of this (paragraph 2.13.2). + */ + if ((T instanceof ObjectType) && (((ObjectType) T).referencesInterfaceExact())) { + if (this.equals(T)) { + return true; + } + if (Repository.implementationOf(((ObjectType) this).getClassName(), + ((ObjectType) T).getClassName())) { + return true; + } + } + } + /* If this is an array type, namely, the type SC[], that is, an + * array of components of type SC, then: + */ + if (this instanceof ArrayType) { + /* If T is a class type, then T must be Object (paragraph 2.4.7). + */ + if ((T instanceof ObjectType) && (((ObjectType) T).referencesClassExact())) { + if (T.equals(Type.OBJECT)) { + return true; + } + } + /* If T is an array type TC[], that is, an array of components + * of type TC, then one of the following must be true: + */ + if (T instanceof ArrayType) { + /* TC and SC are the same primitive type (paragraph 2.4.1). + */ + Type sc = ((ArrayType) this).getElementType(); + Type tc = ((ArrayType) T).getElementType(); + if (sc instanceof BasicType && tc instanceof BasicType && sc.equals(tc)) { + return true; + } + /* TC and SC are reference types (paragraph 2.4.6), and type SC is + * assignable to TC by these runtime rules. + */ + if (tc instanceof ReferenceType && sc instanceof ReferenceType + && ((ReferenceType) sc).isAssignmentCompatibleWith(tc)) { + return true; + } + } + /* If T is an interface type, T must be one of the interfaces implemented by arrays (paragraph 2.15). */ + // TODO: Check if this is still valid or find a way to dynamically find out which + // interfaces arrays implement. However, as of the JVM specification edition 2, there + // are at least two different pages where assignment compatibility is defined and + // on one of them "interfaces implemented by arrays" is exchanged with "'Cloneable' or + // 'java.io.Serializable'" + if ((T instanceof ObjectType) && (((ObjectType) T).referencesInterfaceExact())) { + for (int ii = 0; ii < Constants.INTERFACES_IMPLEMENTED_BY_ARRAYS.length; ii++) { + if (T.equals(new ObjectType(Constants.INTERFACES_IMPLEMENTED_BY_ARRAYS[ii]))) { + return true; + } + } + } + } + return false; // default. + } + + + /** + * This commutative operation returns the first common superclass (narrowest ReferenceType + * referencing a class, not an interface). + * If one of the types is a superclass of the other, the former is returned. + * If "this" is Type.NULL, then t is returned. + * If t is Type.NULL, then "this" is returned. + * If "this" equals t ['this.equals(t)'] "this" is returned. + * If "this" or t is an ArrayType, then Type.OBJECT is returned; + * unless their dimensions match. Then an ArrayType of the same + * number of dimensions is returned, with its basic type being the + * first common super class of the basic types of "this" and t. + * If "this" or t is a ReferenceType referencing an interface, then Type.OBJECT is returned. + * If not all of the two classes' superclasses cannot be found, "null" is returned. + * See the JVM specification edition 2, "paragraph 4.9.2 The Bytecode Verifier". + * + * @throws ClassNotFoundException on failure to find superclasses of this + * type, or the type passed as a parameter + */ + public ReferenceType getFirstCommonSuperclass( ReferenceType t ) throws ClassNotFoundException { + if (this.equals(Type.NULL)) { + return t; + } + if (t.equals(Type.NULL)) { + return this; + } + if (this.equals(t)) { + return this; + /* + * TODO: Above sounds a little arbitrary. On the other hand, there is + * no object referenced by Type.NULL so we can also say all the objects + * referenced by Type.NULL were derived from java.lang.Object. + * However, the Java Language's "instanceof" operator proves us wrong: + * "null" is not referring to an instance of java.lang.Object :) + */ + } + /* This code is from a bug report by Konstantin Shagin */ + if ((this instanceof ArrayType) && (t instanceof ArrayType)) { + ArrayType arrType1 = (ArrayType) this; + ArrayType arrType2 = (ArrayType) t; + if ((arrType1.getDimensions() == arrType2.getDimensions()) + && arrType1.getBasicType() instanceof ObjectType + && arrType2.getBasicType() instanceof ObjectType) { + return new ArrayType(((ObjectType) arrType1.getBasicType()) + .getFirstCommonSuperclass((ObjectType) arrType2.getBasicType()), arrType1 + .getDimensions()); + } + } + if ((this instanceof ArrayType) || (t instanceof ArrayType)) { + return Type.OBJECT; + // TODO: Is there a proof of OBJECT being the direct ancestor of every ArrayType? + } + if (((this instanceof ObjectType) && ((ObjectType) this).referencesInterface()) + || ((t instanceof ObjectType) && ((ObjectType) t).referencesInterface())) { + return Type.OBJECT; + // TODO: The above line is correct comparing to the vmspec2. But one could + // make class file verification a bit stronger here by using the notion of + // superinterfaces or even castability or assignment compatibility. + } + // this and t are ObjectTypes, see above. + ObjectType thiz = (ObjectType) this; + ObjectType other = (ObjectType) t; + JavaClass[] thiz_sups = Repository.getSuperClasses(thiz.getClassName()); + JavaClass[] other_sups = Repository.getSuperClasses(other.getClassName()); + if ((thiz_sups == null) || (other_sups == null)) { + return null; + } + // Waaahh... + JavaClass[] this_sups = new JavaClass[thiz_sups.length + 1]; + JavaClass[] t_sups = new JavaClass[other_sups.length + 1]; + System.arraycopy(thiz_sups, 0, this_sups, 1, thiz_sups.length); + System.arraycopy(other_sups, 0, t_sups, 1, other_sups.length); + this_sups[0] = Repository.lookupClass(thiz.getClassName()); + t_sups[0] = Repository.lookupClass(other.getClassName()); + for (int i = 0; i < t_sups.length; i++) { + for (int j = 0; j < this_sups.length; j++) { + if (this_sups[j].equals(t_sups[i])) { + return new ObjectType(this_sups[j].getClassName()); + } + } + } + // Huh? Did you ask for Type.OBJECT's superclass?? + return null; + } + + + /** + * This commutative operation returns the first common superclass (narrowest ReferenceType + * referencing a class, not an interface). + * If one of the types is a superclass of the other, the former is returned. + * If "this" is Type.NULL, then t is returned. + * If t is Type.NULL, then "this" is returned. + * If "this" equals t ['this.equals(t)'] "this" is returned. + * If "this" or t is an ArrayType, then Type.OBJECT is returned. + * If "this" or t is a ReferenceType referencing an interface, then Type.OBJECT is returned. + * If not all of the two classes' superclasses cannot be found, "null" is returned. + * See the JVM specification edition 2, "paragraph 4.9.2 The Bytecode Verifier". + * + * @deprecated use getFirstCommonSuperclass(ReferenceType t) which has + * slightly changed semantics. + * @throws ClassNotFoundException on failure to find superclasses of this + * type, or the type passed as a parameter + */ + public ReferenceType firstCommonSuperclass( ReferenceType t ) throws ClassNotFoundException { + if (this.equals(Type.NULL)) { + return t; + } + if (t.equals(Type.NULL)) { + return this; + } + if (this.equals(t)) { + return this; + /* + * TODO: Above sounds a little arbitrary. On the other hand, there is + * no object referenced by Type.NULL so we can also say all the objects + * referenced by Type.NULL were derived from java.lang.Object. + * However, the Java Language's "instanceof" operator proves us wrong: + * "null" is not referring to an instance of java.lang.Object :) + */ + } + if ((this instanceof ArrayType) || (t instanceof ArrayType)) { + return Type.OBJECT; + // TODO: Is there a proof of OBJECT being the direct ancestor of every ArrayType? + } + if (((this instanceof ObjectType) && ((ObjectType) this).referencesInterface()) + || ((t instanceof ObjectType) && ((ObjectType) t).referencesInterface())) { + return Type.OBJECT; + // TODO: The above line is correct comparing to the vmspec2. But one could + // make class file verification a bit stronger here by using the notion of + // superinterfaces or even castability or assignment compatibility. + } + // this and t are ObjectTypes, see above. + ObjectType thiz = (ObjectType) this; + ObjectType other = (ObjectType) t; + JavaClass[] thiz_sups = Repository.getSuperClasses(thiz.getClassName()); + JavaClass[] other_sups = Repository.getSuperClasses(other.getClassName()); + if ((thiz_sups == null) || (other_sups == null)) { + return null; + } + // Waaahh... + JavaClass[] this_sups = new JavaClass[thiz_sups.length + 1]; + JavaClass[] t_sups = new JavaClass[other_sups.length + 1]; + System.arraycopy(thiz_sups, 0, this_sups, 1, thiz_sups.length); + System.arraycopy(other_sups, 0, t_sups, 1, other_sups.length); + this_sups[0] = Repository.lookupClass(thiz.getClassName()); + t_sups[0] = Repository.lookupClass(other.getClassName()); + for (int i = 0; i < t_sups.length; i++) { + for (int j = 0; j < this_sups.length; j++) { + if (this_sups[j].equals(t_sups[i])) { + return new ObjectType(this_sups[j].getClassName()); + } + } + } + // Huh? Did you ask for Type.OBJECT's superclass?? + return null; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ReturnInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ReturnInstruction.java index bbdc89ac..9caf2c30 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ReturnInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ReturnInstruction.java @@ -1,79 +1,79 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.ExceptionConstants; - -/** - * Super class for the xRETURN family of instructions. - * - * @version $Id: ReturnInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class ReturnInstruction extends Instruction implements ExceptionThrower, - TypedInstruction, StackConsumer { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ReturnInstruction() { - } - - - /** - * @param opcode of instruction - */ - protected ReturnInstruction(short opcode) { - super(opcode, (short) 1); - } - - - public Type getType() { - switch (opcode) { - case Constants.IRETURN: - return Type.INT; - case Constants.LRETURN: - return Type.LONG; - case Constants.FRETURN: - return Type.FLOAT; - case Constants.DRETURN: - return Type.DOUBLE; - case Constants.ARETURN: - return Type.OBJECT; - case Constants.RETURN: - return Type.VOID; - default: // Never reached - throw new ClassGenException("Unknown type " + opcode); - } - } - - - public Class[] getExceptions() { - return new Class[] { - ExceptionConstants.ILLEGAL_MONITOR_STATE - }; - } - - - /** @return type associated with the instruction - */ - public Type getType( ConstantPoolGen cp ) { - return getType(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.ExceptionConstants; + +/** + * Super class for the xRETURN family of instructions. + * + * @version $Id: ReturnInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class ReturnInstruction extends Instruction implements ExceptionThrower, + TypedInstruction, StackConsumer { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + ReturnInstruction() { + } + + + /** + * @param opcode of instruction + */ + protected ReturnInstruction(short opcode) { + super(opcode, (short) 1); + } + + + public Type getType() { + switch (opcode) { + case Constants.IRETURN: + return Type.INT; + case Constants.LRETURN: + return Type.LONG; + case Constants.FRETURN: + return Type.FLOAT; + case Constants.DRETURN: + return Type.DOUBLE; + case Constants.ARETURN: + return Type.OBJECT; + case Constants.RETURN: + return Type.VOID; + default: // Never reached + throw new ClassGenException("Unknown type " + opcode); + } + } + + + public Class[] getExceptions() { + return new Class[] { + ExceptionConstants.ILLEGAL_MONITOR_STATE + }; + } + + + /** @return type associated with the instruction + */ + public Type getType( ConstantPoolGen cp ) { + return getType(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ReturnaddressType.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ReturnaddressType.java index 085f6c71..275fd693 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ReturnaddressType.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/ReturnaddressType.java @@ -1,82 +1,82 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import org.apache.bcel5_2_0.Constants; - -/** - * Returnaddress, the type JSR or JSR_W instructions push upon the stack. - * - * see vmspec2 paragraph 3.3.3 - * @version $Id: ReturnaddressType.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author Enver Haase - */ -public class ReturnaddressType extends Type { - - public static final ReturnaddressType NO_TARGET = new ReturnaddressType(); - private InstructionHandle returnTarget; - - - /** - * A Returnaddress [that doesn't know where to return to]. - */ - private ReturnaddressType() { - super(Constants.T_ADDRESS, ""); - } - - - /** - * Creates a ReturnaddressType object with a target. - */ - public ReturnaddressType(InstructionHandle returnTarget) { - super(Constants.T_ADDRESS, ""); - this.returnTarget = returnTarget; - } - - - /** @return a hash code value for the object. - */ - public int hashCode() { - if (returnTarget == null) { - return 0; - } - return returnTarget.hashCode(); - } - - - /** - * Returns if the two Returnaddresses refer to the same target. - */ - public boolean equals( Object rat ) { - if (!(rat instanceof ReturnaddressType)) { - return false; - } - ReturnaddressType that = (ReturnaddressType) rat; - if (this.returnTarget == null || that.returnTarget == null) { - return that.returnTarget == this.returnTarget; - } - return that.returnTarget.equals(this.returnTarget); - } - - - /** - * @return the target of this ReturnaddressType - */ - public InstructionHandle getTarget() { - return returnTarget; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import org.apache.bcel5_2_0.Constants; + +/** + * Returnaddress, the type JSR or JSR_W instructions push upon the stack. + * + * see vmspec2 paragraph 3.3.3 + * @version $Id: ReturnaddressType.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author Enver Haase + */ +public class ReturnaddressType extends Type { + + public static final ReturnaddressType NO_TARGET = new ReturnaddressType(); + private InstructionHandle returnTarget; + + + /** + * A Returnaddress [that doesn't know where to return to]. + */ + private ReturnaddressType() { + super(Constants.T_ADDRESS, ""); + } + + + /** + * Creates a ReturnaddressType object with a target. + */ + public ReturnaddressType(InstructionHandle returnTarget) { + super(Constants.T_ADDRESS, ""); + this.returnTarget = returnTarget; + } + + + /** @return a hash code value for the object. + */ + public int hashCode() { + if (returnTarget == null) { + return 0; + } + return returnTarget.hashCode(); + } + + + /** + * Returns if the two Returnaddresses refer to the same target. + */ + public boolean equals( Object rat ) { + if (!(rat instanceof ReturnaddressType)) { + return false; + } + ReturnaddressType that = (ReturnaddressType) rat; + if (this.returnTarget == null || that.returnTarget == null) { + return that.returnTarget == this.returnTarget; + } + return that.returnTarget.equals(this.returnTarget); + } + + + /** + * @return the target of this ReturnaddressType + */ + public InstructionHandle getTarget() { + return returnTarget; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SALOAD.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SALOAD.java index e978805e..0af2b5ca 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SALOAD.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SALOAD.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * SALOAD - Load short from array - *
          Stack: ..., arrayref, index -> ..., value
          - * - * @version $Id: SALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class SALOAD extends ArrayInstruction implements StackProducer { - - public SALOAD() { - super(org.apache.bcel5_2_0.Constants.SALOAD); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitSALOAD(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * SALOAD - Load short from array + *
          Stack: ..., arrayref, index -> ..., value
          + * + * @version $Id: SALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class SALOAD extends ArrayInstruction implements StackProducer { + + public SALOAD() { + super(org.apache.bcel5_2_0.Constants.SALOAD); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackProducer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitSALOAD(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SASTORE.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SASTORE.java index a3c6a1bd..e193d33d 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SASTORE.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SASTORE.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * SASTORE - Store into short array - *
          Stack: ..., arrayref, index, value -> ...
          - * - * @version $Id: SASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class SASTORE extends ArrayInstruction implements StackConsumer { - - public SASTORE() { - super(org.apache.bcel5_2_0.Constants.SASTORE); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitSASTORE(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * SASTORE - Store into short array + *
          Stack: ..., arrayref, index, value -> ...
          + * + * @version $Id: SASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class SASTORE extends ArrayInstruction implements StackConsumer { + + public SASTORE() { + super(org.apache.bcel5_2_0.Constants.SASTORE); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitExceptionThrower(this); + v.visitTypedInstruction(this); + v.visitArrayInstruction(this); + v.visitSASTORE(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SIPUSH.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SIPUSH.java index 117f69a1..a62425f9 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SIPUSH.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SIPUSH.java @@ -1,104 +1,104 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * SIPUSH - Push short - * - *
          Stack: ... -> ..., value
          - * - * @version $Id: SIPUSH.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class SIPUSH extends Instruction implements ConstantPushInstruction { - - private short b; - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - SIPUSH() { - } - - - public SIPUSH(short b) { - super(org.apache.bcel5_2_0.Constants.SIPUSH, (short) 3); - this.b = b; - } - - - /** - * Dump instruction as short code to stream out. - */ - public void dump( DataOutputStream out ) throws IOException { - super.dump(out); - out.writeShort(b); - } - - - /** - * @return mnemonic for instruction - */ - public String toString( boolean verbose ) { - return super.toString(verbose) + " " + b; - } - - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - length = 3; - b = bytes.readShort(); - } - - - public Number getValue() { - return new Integer(b); - } - - - /** @return Type.SHORT - */ - public Type getType( ConstantPoolGen cp ) { - return Type.SHORT; - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitSIPUSH(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * SIPUSH - Push short + * + *
          Stack: ... -> ..., value
          + * + * @version $Id: SIPUSH.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class SIPUSH extends Instruction implements ConstantPushInstruction { + + private short b; + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + SIPUSH() { + } + + + public SIPUSH(short b) { + super(org.apache.bcel5_2_0.Constants.SIPUSH, (short) 3); + this.b = b; + } + + + /** + * Dump instruction as short code to stream out. + */ + public void dump( DataOutputStream out ) throws IOException { + super.dump(out); + out.writeShort(b); + } + + + /** + * @return mnemonic for instruction + */ + public String toString( boolean verbose ) { + return super.toString(verbose) + " " + b; + } + + + /** + * Read needed data (e.g. index) from file. + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + length = 3; + b = bytes.readShort(); + } + + + public Number getValue() { + return new Integer(b); + } + + + /** @return Type.SHORT + */ + public Type getType( ConstantPoolGen cp ) { + return Type.SHORT; + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitPushInstruction(this); + v.visitStackProducer(this); + v.visitTypedInstruction(this); + v.visitConstantPushInstruction(this); + v.visitSIPUSH(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SWAP.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SWAP.java index 34d0287c..f598c0d9 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SWAP.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SWAP.java @@ -1,47 +1,47 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * SWAP - Swa top operand stack word - *
          Stack: ..., word2, word1 -> ..., word1, word2
          - * - * @version $Id: SWAP.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class SWAP extends StackInstruction implements StackConsumer, StackProducer { - - public SWAP() { - super(org.apache.bcel5_2_0.Constants.SWAP); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitStackInstruction(this); - v.visitSWAP(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * SWAP - Swa top operand stack word + *
          Stack: ..., word2, word1 -> ..., word1, word2
          + * + * @version $Id: SWAP.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class SWAP extends StackInstruction implements StackConsumer, StackProducer { + + public SWAP() { + super(org.apache.bcel5_2_0.Constants.SWAP); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitStackProducer(this); + v.visitStackInstruction(this); + v.visitSWAP(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SWITCH.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SWITCH.java index d74508e3..5c410e55 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SWITCH.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/SWITCH.java @@ -1,153 +1,153 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * SWITCH - Branch depending on int value, generates either LOOKUPSWITCH or - * TABLESWITCH instruction, depending on whether the match values (int[]) can be - * sorted with no gaps between the numbers. - * - * @version $Id: SWITCH.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class SWITCH implements CompoundInstruction { - - private int[] match; - private InstructionHandle[] targets; - private Select instruction; - private int match_length; - - - /** - * Template for switch() constructs. If the match array can be - * sorted in ascending order with gaps no larger than max_gap - * between the numbers, a TABLESWITCH instruction is generated, and - * a LOOKUPSWITCH otherwise. The former may be more efficient, but - * needs more space. - * - * Note, that the key array always will be sorted, though we leave - * the original arrays unaltered. - * - * @param match array of match values (case 2: ... case 7: ..., etc.) - * @param targets the instructions to be branched to for each case - * @param target the default target - * @param max_gap maximum gap that may between case branches - */ - public SWITCH(int[] match, InstructionHandle[] targets, InstructionHandle target, int max_gap) { - this.match = (int[]) match.clone(); - this.targets = (InstructionHandle[]) targets.clone(); - if ((match_length = match.length) < 2) { - instruction = new TABLESWITCH(match, targets, target); - } else { - sort(0, match_length - 1); - if (matchIsOrdered(max_gap)) { - fillup(max_gap, target); - instruction = new TABLESWITCH(this.match, this.targets, target); - } else { - instruction = new LOOKUPSWITCH(this.match, this.targets, target); - } - } - } - - - public SWITCH(int[] match, InstructionHandle[] targets, InstructionHandle target) { - this(match, targets, target, 1); - } - - - private final void fillup( int max_gap, InstructionHandle target ) { - int max_size = match_length + match_length * max_gap; - int[] m_vec = new int[max_size]; - InstructionHandle[] t_vec = new InstructionHandle[max_size]; - int count = 1; - m_vec[0] = match[0]; - t_vec[0] = targets[0]; - for (int i = 1; i < match_length; i++) { - int prev = match[i - 1]; - int gap = match[i] - prev; - for (int j = 1; j < gap; j++) { - m_vec[count] = prev + j; - t_vec[count] = target; - count++; - } - m_vec[count] = match[i]; - t_vec[count] = targets[i]; - count++; - } - match = new int[count]; - targets = new InstructionHandle[count]; - System.arraycopy(m_vec, 0, match, 0, count); - System.arraycopy(t_vec, 0, targets, 0, count); - } - - - /** - * Sort match and targets array with QuickSort. - */ - private final void sort( int l, int r ) { - int i = l, j = r; - int h, m = match[(l + r) / 2]; - InstructionHandle h2; - do { - while (match[i] < m) { - i++; - } - while (m < match[j]) { - j--; - } - if (i <= j) { - h = match[i]; - match[i] = match[j]; - match[j] = h; // Swap elements - h2 = targets[i]; - targets[i] = targets[j]; - targets[j] = h2; // Swap instructions, too - i++; - j--; - } - } while (i <= j); - if (l < j) { - sort(l, j); - } - if (i < r) { - sort(i, r); - } - } - - - /** - * @return match is sorted in ascending order with no gap bigger than max_gap? - */ - private final boolean matchIsOrdered( int max_gap ) { - for (int i = 1; i < match_length; i++) { - if (match[i] - match[i - 1] > max_gap) { - return false; - } - } - return true; - } - - - public final InstructionList getInstructionList() { - return new InstructionList(instruction); - } - - - public final Instruction getInstruction() { - return instruction; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * SWITCH - Branch depending on int value, generates either LOOKUPSWITCH or + * TABLESWITCH instruction, depending on whether the match values (int[]) can be + * sorted with no gaps between the numbers. + * + * @version $Id: SWITCH.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public final class SWITCH implements CompoundInstruction { + + private int[] match; + private InstructionHandle[] targets; + private Select instruction; + private int match_length; + + + /** + * Template for switch() constructs. If the match array can be + * sorted in ascending order with gaps no larger than max_gap + * between the numbers, a TABLESWITCH instruction is generated, and + * a LOOKUPSWITCH otherwise. The former may be more efficient, but + * needs more space. + * + * Note, that the key array always will be sorted, though we leave + * the original arrays unaltered. + * + * @param match array of match values (case 2: ... case 7: ..., etc.) + * @param targets the instructions to be branched to for each case + * @param target the default target + * @param max_gap maximum gap that may between case branches + */ + public SWITCH(int[] match, InstructionHandle[] targets, InstructionHandle target, int max_gap) { + this.match = (int[]) match.clone(); + this.targets = (InstructionHandle[]) targets.clone(); + if ((match_length = match.length) < 2) { + instruction = new TABLESWITCH(match, targets, target); + } else { + sort(0, match_length - 1); + if (matchIsOrdered(max_gap)) { + fillup(max_gap, target); + instruction = new TABLESWITCH(this.match, this.targets, target); + } else { + instruction = new LOOKUPSWITCH(this.match, this.targets, target); + } + } + } + + + public SWITCH(int[] match, InstructionHandle[] targets, InstructionHandle target) { + this(match, targets, target, 1); + } + + + private final void fillup( int max_gap, InstructionHandle target ) { + int max_size = match_length + match_length * max_gap; + int[] m_vec = new int[max_size]; + InstructionHandle[] t_vec = new InstructionHandle[max_size]; + int count = 1; + m_vec[0] = match[0]; + t_vec[0] = targets[0]; + for (int i = 1; i < match_length; i++) { + int prev = match[i - 1]; + int gap = match[i] - prev; + for (int j = 1; j < gap; j++) { + m_vec[count] = prev + j; + t_vec[count] = target; + count++; + } + m_vec[count] = match[i]; + t_vec[count] = targets[i]; + count++; + } + match = new int[count]; + targets = new InstructionHandle[count]; + System.arraycopy(m_vec, 0, match, 0, count); + System.arraycopy(t_vec, 0, targets, 0, count); + } + + + /** + * Sort match and targets array with QuickSort. + */ + private final void sort( int l, int r ) { + int i = l, j = r; + int h, m = match[(l + r) / 2]; + InstructionHandle h2; + do { + while (match[i] < m) { + i++; + } + while (m < match[j]) { + j--; + } + if (i <= j) { + h = match[i]; + match[i] = match[j]; + match[j] = h; // Swap elements + h2 = targets[i]; + targets[i] = targets[j]; + targets[j] = h2; // Swap instructions, too + i++; + j--; + } + } while (i <= j); + if (l < j) { + sort(l, j); + } + if (i < r) { + sort(i, r); + } + } + + + /** + * @return match is sorted in ascending order with no gap bigger than max_gap? + */ + private final boolean matchIsOrdered( int max_gap ) { + for (int i = 1; i < match_length; i++) { + if (match[i] - match[i - 1] > max_gap) { + return false; + } + } + return true; + } + + + public final InstructionList getInstructionList() { + return new InstructionList(instruction); + } + + + public final Instruction getInstruction() { + return instruction; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Select.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Select.java index 6e43d274..819b5a1f 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Select.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Select.java @@ -1,237 +1,237 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * Select - Abstract super class for LOOKUPSWITCH and TABLESWITCH instructions. - * - *

          We use our super's target property as the default target. - * - * @version $Id: Select.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see LOOKUPSWITCH - * @see TABLESWITCH - * @see InstructionList - */ -public abstract class Select extends BranchInstruction implements VariableLengthInstruction, - StackProducer { - - protected int[] match; // matches, i.e., case 1: ... - protected int[] indices; // target offsets - protected InstructionHandle[] targets; // target objects in instruction list - protected int fixed_length; // fixed length defined by subclasses - protected int match_length; // number of cases - protected int padding = 0; // number of pad bytes for alignment - - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - Select() { - } - - - /** - * (Match, target) pairs for switch. - * `Match' and `targets' must have the same length of course. - * - * @param match array of matching values - * @param targets instruction targets - * @param defaultTarget default instruction target - */ - Select(short opcode, int[] match, InstructionHandle[] targets, InstructionHandle defaultTarget) { - super(opcode, defaultTarget); - this.targets = targets; - for (int i = 0; i < targets.length; i++) { - notifyTarget(null, targets[i], this); - } - this.match = match; - if ((match_length = match.length) != targets.length) { - throw new ClassGenException("Match and target array have not the same length"); - } - indices = new int[match_length]; - } - - - /** - * Since this is a variable length instruction, it may shift the following - * instructions which then need to update their position. - * - * Called by InstructionList.setPositions when setting the position for every - * instruction. In the presence of variable length instructions `setPositions' - * performs multiple passes over the instruction list to calculate the - * correct (byte) positions and offsets by calling this function. - * - * @param offset additional offset caused by preceding (variable length) instructions - * @param max_offset the maximum offset that may be caused by these instructions - * @return additional offset caused by possible change of this instruction's length - */ - protected int updatePosition( int offset, int max_offset ) { - position += offset; // Additional offset caused by preceding SWITCHs, GOTOs, etc. - short old_length = length; - /* Alignment on 4-byte-boundary, + 1, because of tag byte. - */ - padding = (4 - ((position + 1) % 4)) % 4; - length = (short) (fixed_length + padding); // Update length - return length - old_length; - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - out.writeByte(opcode); - for (int i = 0; i < padding; i++) { - out.writeByte(0); - } - index = getTargetOffset(); // Write default target offset - out.writeInt(index); - } - - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - padding = (4 - (bytes.getIndex() % 4)) % 4; // Compute number of pad bytes - for (int i = 0; i < padding; i++) { - bytes.readByte(); - } - // Default branch target common for both cases (TABLESWITCH, LOOKUPSWITCH) - index = bytes.readInt(); - } - - - /** - * @return mnemonic for instruction - */ - public String toString( boolean verbose ) { - StringBuilder buf = new StringBuilder(super.toString(verbose)); - if (verbose) { - for (int i = 0; i < match_length; i++) { - String s = "null"; - if (targets[i] != null) { - s = targets[i].getInstruction().toString(); - } - buf.append("(").append(match[i]).append(", ").append(s).append(" = {").append( - indices[i]).append("})"); - } - } else { - buf.append(" ..."); - } - return buf.toString(); - } - - - /** - * Set branch target for `i'th case - */ - public void setTarget( int i, InstructionHandle target ) { - notifyTarget(targets[i], target, this); - targets[i] = target; - } - - - /** - * @param old_ih old target - * @param new_ih new target - */ - public void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih ) { - boolean targeted = false; - if (target == old_ih) { - targeted = true; - setTarget(new_ih); - } - for (int i = 0; i < targets.length; i++) { - if (targets[i] == old_ih) { - targeted = true; - setTarget(i, new_ih); - } - } - if (!targeted) { - throw new ClassGenException("Not targeting " + old_ih); - } - } - - - /** - * @return true, if ih is target of this instruction - */ - public boolean containsTarget( InstructionHandle ih ) { - if (target == ih) { - return true; - } - for (int i = 0; i < targets.length; i++) { - if (targets[i] == ih) { - return true; - } - } - return false; - } - - - protected Object clone() throws CloneNotSupportedException { - Select copy = (Select) super.clone(); - copy.match = (int[]) match.clone(); - copy.indices = (int[]) indices.clone(); - copy.targets = (InstructionHandle[]) targets.clone(); - return copy; - } - - - /** - * Inform targets that they're not targeted anymore. - */ - void dispose() { - super.dispose(); - for (int i = 0; i < targets.length; i++) { - targets[i].removeTargeter(this); - } - } - - - /** - * @return array of match indices - */ - public int[] getMatchs() { - return match; - } - - - /** - * @return array of match target offsets - */ - public int[] getIndices() { - return indices; - } - - - /** - * @return array of match targets - */ - public InstructionHandle[] getTargets() { - return targets; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * Select - Abstract super class for LOOKUPSWITCH and TABLESWITCH instructions. + * + *

          We use our super's target property as the default target. + * + * @version $Id: Select.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see LOOKUPSWITCH + * @see TABLESWITCH + * @see InstructionList + */ +public abstract class Select extends BranchInstruction implements VariableLengthInstruction, + StackProducer { + + protected int[] match; // matches, i.e., case 1: ... + protected int[] indices; // target offsets + protected InstructionHandle[] targets; // target objects in instruction list + protected int fixed_length; // fixed length defined by subclasses + protected int match_length; // number of cases + protected int padding = 0; // number of pad bytes for alignment + + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + Select() { + } + + + /** + * (Match, target) pairs for switch. + * `Match' and `targets' must have the same length of course. + * + * @param match array of matching values + * @param targets instruction targets + * @param defaultTarget default instruction target + */ + Select(short opcode, int[] match, InstructionHandle[] targets, InstructionHandle defaultTarget) { + super(opcode, defaultTarget); + this.targets = targets; + for (int i = 0; i < targets.length; i++) { + notifyTarget(null, targets[i], this); + } + this.match = match; + if ((match_length = match.length) != targets.length) { + throw new ClassGenException("Match and target array have not the same length"); + } + indices = new int[match_length]; + } + + + /** + * Since this is a variable length instruction, it may shift the following + * instructions which then need to update their position. + * + * Called by InstructionList.setPositions when setting the position for every + * instruction. In the presence of variable length instructions `setPositions' + * performs multiple passes over the instruction list to calculate the + * correct (byte) positions and offsets by calling this function. + * + * @param offset additional offset caused by preceding (variable length) instructions + * @param max_offset the maximum offset that may be caused by these instructions + * @return additional offset caused by possible change of this instruction's length + */ + protected int updatePosition( int offset, int max_offset ) { + position += offset; // Additional offset caused by preceding SWITCHs, GOTOs, etc. + short old_length = length; + /* Alignment on 4-byte-boundary, + 1, because of tag byte. + */ + padding = (4 - ((position + 1) % 4)) % 4; + length = (short) (fixed_length + padding); // Update length + return length - old_length; + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + out.writeByte(opcode); + for (int i = 0; i < padding; i++) { + out.writeByte(0); + } + index = getTargetOffset(); // Write default target offset + out.writeInt(index); + } + + + /** + * Read needed data (e.g. index) from file. + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + padding = (4 - (bytes.getIndex() % 4)) % 4; // Compute number of pad bytes + for (int i = 0; i < padding; i++) { + bytes.readByte(); + } + // Default branch target common for both cases (TABLESWITCH, LOOKUPSWITCH) + index = bytes.readInt(); + } + + + /** + * @return mnemonic for instruction + */ + public String toString( boolean verbose ) { + StringBuilder buf = new StringBuilder(super.toString(verbose)); + if (verbose) { + for (int i = 0; i < match_length; i++) { + String s = "null"; + if (targets[i] != null) { + s = targets[i].getInstruction().toString(); + } + buf.append("(").append(match[i]).append(", ").append(s).append(" = {").append( + indices[i]).append("})"); + } + } else { + buf.append(" ..."); + } + return buf.toString(); + } + + + /** + * Set branch target for `i'th case + */ + public void setTarget( int i, InstructionHandle target ) { + notifyTarget(targets[i], target, this); + targets[i] = target; + } + + + /** + * @param old_ih old target + * @param new_ih new target + */ + public void updateTarget( InstructionHandle old_ih, InstructionHandle new_ih ) { + boolean targeted = false; + if (target == old_ih) { + targeted = true; + setTarget(new_ih); + } + for (int i = 0; i < targets.length; i++) { + if (targets[i] == old_ih) { + targeted = true; + setTarget(i, new_ih); + } + } + if (!targeted) { + throw new ClassGenException("Not targeting " + old_ih); + } + } + + + /** + * @return true, if ih is target of this instruction + */ + public boolean containsTarget( InstructionHandle ih ) { + if (target == ih) { + return true; + } + for (int i = 0; i < targets.length; i++) { + if (targets[i] == ih) { + return true; + } + } + return false; + } + + + protected Object clone() throws CloneNotSupportedException { + Select copy = (Select) super.clone(); + copy.match = (int[]) match.clone(); + copy.indices = (int[]) indices.clone(); + copy.targets = (InstructionHandle[]) targets.clone(); + return copy; + } + + + /** + * Inform targets that they're not targeted anymore. + */ + void dispose() { + super.dispose(); + for (int i = 0; i < targets.length; i++) { + targets[i].removeTargeter(this); + } + } + + + /** + * @return array of match indices + */ + public int[] getMatchs() { + return match; + } + + + /** + * @return array of match target offsets + */ + public int[] getIndices() { + return indices; + } + + + /** + * @return array of match targets + */ + public InstructionHandle[] getTargets() { + return targets; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StackConsumer.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StackConsumer.java index db487703..6be2f9c0 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StackConsumer.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StackConsumer.java @@ -1,30 +1,30 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denote an instruction that may consume a value from the stack. - * - * @version $Id: StackConsumer.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface StackConsumer { - - /** @return how many words are consumed from stack - */ - public int consumeStack( ConstantPoolGen cpg ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denote an instruction that may consume a value from the stack. + * + * @version $Id: StackConsumer.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface StackConsumer { + + /** @return how many words are consumed from stack + */ + public int consumeStack( ConstantPoolGen cpg ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StackInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StackInstruction.java index 393a11fe..4833d074 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StackInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StackInstruction.java @@ -1,48 +1,48 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Super class for stack operations like DUP and POP. - * - * @version $Id: StackInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class StackInstruction extends Instruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - StackInstruction() { - } - - - /** - * @param opcode instruction opcode - */ - protected StackInstruction(short opcode) { - super(opcode, (short) 1); - } - - - /** @return Type.UNKNOWN - */ - public Type getType( ConstantPoolGen cp ) { - return Type.UNKNOWN; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Super class for stack operations like DUP and POP. + * + * @version $Id: StackInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class StackInstruction extends Instruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + StackInstruction() { + } + + + /** + * @param opcode instruction opcode + */ + protected StackInstruction(short opcode) { + super(opcode, (short) 1); + } + + + /** @return Type.UNKNOWN + */ + public Type getType( ConstantPoolGen cp ) { + return Type.UNKNOWN; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StackProducer.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StackProducer.java index 5e549c16..c4c32a46 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StackProducer.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StackProducer.java @@ -1,31 +1,31 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denote an instruction that may produce a value on top of the stack - * (this excludes DUP_X1, e.g.) - * - * @version $Id: StackProducer.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface StackProducer { - - /** @return how many words are produced on stack - */ - public int produceStack( ConstantPoolGen cpg ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denote an instruction that may produce a value on top of the stack + * (this excludes DUP_X1, e.g.) + * + * @version $Id: StackProducer.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface StackProducer { + + /** @return how many words are produced on stack + */ + public int produceStack( ConstantPoolGen cpg ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StoreInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StoreInstruction.java index bbb8849d..fc99efc5 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StoreInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/StoreInstruction.java @@ -1,63 +1,63 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denotes an unparameterized instruction to store a value into a local variable, - * e.g. ISTORE. - * - * @version $Id: StoreInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class StoreInstruction extends LocalVariableInstruction implements PopInstruction { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - * tag and length are defined in readInstruction and initFromFile, respectively. - */ - StoreInstruction(short canon_tag, short c_tag) { - super(canon_tag, c_tag); - } - - - /** - * @param opcode Instruction opcode - * @param c_tag Instruction number for compact version, ASTORE_0, e.g. - * @param n local variable index (unsigned short) - */ - protected StoreInstruction(short opcode, short c_tag, int n) { - super(opcode, c_tag, n); - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitTypedInstruction(this); - v.visitLocalVariableInstruction(this); - v.visitStoreInstruction(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denotes an unparameterized instruction to store a value into a local variable, + * e.g. ISTORE. + * + * @version $Id: StoreInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public abstract class StoreInstruction extends LocalVariableInstruction implements PopInstruction { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + * tag and length are defined in readInstruction and initFromFile, respectively. + */ + StoreInstruction(short canon_tag, short c_tag) { + super(canon_tag, c_tag); + } + + + /** + * @param opcode Instruction opcode + * @param c_tag Instruction number for compact version, ASTORE_0, e.g. + * @param n local variable index (unsigned short) + */ + protected StoreInstruction(short opcode, short c_tag, int n) { + super(opcode, c_tag, n); + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitStackConsumer(this); + v.visitPopInstruction(this); + v.visitTypedInstruction(this); + v.visitLocalVariableInstruction(this); + v.visitStoreInstruction(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/TABLESWITCH.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/TABLESWITCH.java index 8db1620e..219b3a0c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/TABLESWITCH.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/TABLESWITCH.java @@ -1,108 +1,108 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -import org.apache.bcel5_2_0.util.ByteSequence; - -/** - * TABLESWITCH - Switch within given range of values, i.e., low..high - * - * @version $Id: TABLESWITCH.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see SWITCH - */ -public class TABLESWITCH extends Select { - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - TABLESWITCH() { - } - - - /** - * @param match sorted array of match values, match[0] must be low value, - * match[match_length - 1] high value - * @param targets where to branch for matched values - * @param defaultTarget default branch - */ - public TABLESWITCH(int[] match, InstructionHandle[] targets, InstructionHandle defaultTarget) { - super(org.apache.bcel5_2_0.Constants.TABLESWITCH, match, targets, defaultTarget); - length = (short) (13 + match_length * 4); /* Alignment remainder assumed - * 0 here, until dump time */ - fixed_length = length; - } - - - /** - * Dump instruction as byte code to stream out. - * @param out Output stream - */ - public void dump( DataOutputStream out ) throws IOException { - super.dump(out); - int low = (match_length > 0) ? match[0] : 0; - out.writeInt(low); - int high = (match_length > 0) ? match[match_length - 1] : 0; - out.writeInt(high); - for (int i = 0; i < match_length; i++) { - out.writeInt(indices[i] = getTargetOffset(targets[i])); - } - } - - - /** - * Read needed data (e.g. index) from file. - */ - protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { - super.initFromFile(bytes, wide); - int low = bytes.readInt(); - int high = bytes.readInt(); - match_length = high - low + 1; - fixed_length = (short) (13 + match_length * 4); - length = (short) (fixed_length + padding); - match = new int[match_length]; - indices = new int[match_length]; - targets = new InstructionHandle[match_length]; - for (int i = low; i <= high; i++) { - match[i - low] = i; - } - for (int i = 0; i < match_length; i++) { - indices[i] = bytes.readInt(); - } - } - - - /** - * Call corresponding visitor method(s). The order is: - * Call visitor methods of implemented interfaces first, then - * call methods according to the class hierarchy in descending order, - * i.e., the most specific visitXXX() call comes last. - * - * @param v Visitor object - */ - public void accept( Visitor v ) { - v.visitVariableLengthInstruction(this); - v.visitStackProducer(this); - v.visitBranchInstruction(this); - v.visitSelect(this); - v.visitTABLESWITCH(this); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel5_2_0.util.ByteSequence; + +/** + * TABLESWITCH - Switch within given range of values, i.e., low..high + * + * @version $Id: TABLESWITCH.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see SWITCH + */ +public class TABLESWITCH extends Select { + + /** + * Empty constructor needed for the Class.newInstance() statement in + * Instruction.readInstruction(). Not to be used otherwise. + */ + TABLESWITCH() { + } + + + /** + * @param match sorted array of match values, match[0] must be low value, + * match[match_length - 1] high value + * @param targets where to branch for matched values + * @param defaultTarget default branch + */ + public TABLESWITCH(int[] match, InstructionHandle[] targets, InstructionHandle defaultTarget) { + super(org.apache.bcel5_2_0.Constants.TABLESWITCH, match, targets, defaultTarget); + length = (short) (13 + match_length * 4); /* Alignment remainder assumed + * 0 here, until dump time */ + fixed_length = length; + } + + + /** + * Dump instruction as byte code to stream out. + * @param out Output stream + */ + public void dump( DataOutputStream out ) throws IOException { + super.dump(out); + int low = (match_length > 0) ? match[0] : 0; + out.writeInt(low); + int high = (match_length > 0) ? match[match_length - 1] : 0; + out.writeInt(high); + for (int i = 0; i < match_length; i++) { + out.writeInt(indices[i] = getTargetOffset(targets[i])); + } + } + + + /** + * Read needed data (e.g. index) from file. + */ + protected void initFromFile( ByteSequence bytes, boolean wide ) throws IOException { + super.initFromFile(bytes, wide); + int low = bytes.readInt(); + int high = bytes.readInt(); + match_length = high - low + 1; + fixed_length = (short) (13 + match_length * 4); + length = (short) (fixed_length + padding); + match = new int[match_length]; + indices = new int[match_length]; + targets = new InstructionHandle[match_length]; + for (int i = low; i <= high; i++) { + match[i - low] = i; + } + for (int i = 0; i < match_length; i++) { + indices[i] = bytes.readInt(); + } + } + + + /** + * Call corresponding visitor method(s). The order is: + * Call visitor methods of implemented interfaces first, then + * call methods according to the class hierarchy in descending order, + * i.e., the most specific visitXXX() call comes last. + * + * @param v Visitor object + */ + public void accept( Visitor v ) { + v.visitVariableLengthInstruction(this); + v.visitStackProducer(this); + v.visitBranchInstruction(this); + v.visitSelect(this); + v.visitTABLESWITCH(this); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/TargetLostException.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/TargetLostException.java index 0d737694..f965a12a 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/TargetLostException.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/TargetLostException.java @@ -1,67 +1,67 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Thrown by InstructionList.remove() when one or multiple disposed instruction - * are still being referenced by a InstructionTargeter object. I.e. the - * InstructionTargeter has to be notified that (one of) the InstructionHandle it - * is referencing is being removed from the InstructionList and thus not valid anymore. - * - * Making this an exception instead of a return value forces the user to handle - * these case explicitely in a try { ... } catch. The following code illustrates - * how this may be done: - * - *

          - *     ...
          - *     try {
          - *	il.delete(start_ih, end_ih);
          - *     } catch(TargetLostException e) {
          - *       InstructionHandle[] targets = e.getTargets();
          - *	 for(int i=0; i < targets.length; i++) {
          - *	   InstructionTargeter[] targeters = targets[i].getTargeters();
          - *     
          - *	   for(int j=0; j < targeters.length; j++)
          - *	     targeters[j].updateTarget(targets[i], new_target);
          - *       }
          - *     }
          - * 
          - * - * @see InstructionHandle - * @see InstructionList - * @see InstructionTargeter - * @version $Id: TargetLostException.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class TargetLostException extends Exception { - - private InstructionHandle[] targets; - - - TargetLostException(InstructionHandle[] t, String mesg) { - super(mesg); - targets = t; - } - - - /** - * @return list of instructions still being targeted. - */ - public InstructionHandle[] getTargets() { - return targets; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Thrown by InstructionList.remove() when one or multiple disposed instruction + * are still being referenced by a InstructionTargeter object. I.e. the + * InstructionTargeter has to be notified that (one of) the InstructionHandle it + * is referencing is being removed from the InstructionList and thus not valid anymore. + * + * Making this an exception instead of a return value forces the user to handle + * these case explicitely in a try { ... } catch. The following code illustrates + * how this may be done: + * + *
          + *     ...
          + *     try {
          + *	il.delete(start_ih, end_ih);
          + *     } catch(TargetLostException e) {
          + *       InstructionHandle[] targets = e.getTargets();
          + *	 for(int i=0; i < targets.length; i++) {
          + *	   InstructionTargeter[] targeters = targets[i].getTargeters();
          + *     
          + *	   for(int j=0; j < targeters.length; j++)
          + *	     targeters[j].updateTarget(targets[i], new_target);
          + *       }
          + *     }
          + * 
          + * + * @see InstructionHandle + * @see InstructionList + * @see InstructionTargeter + * @version $Id: TargetLostException.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public final class TargetLostException extends Exception { + + private InstructionHandle[] targets; + + + TargetLostException(InstructionHandle[] t, String mesg) { + super(mesg); + targets = t; + } + + + /** + * @return list of instructions still being targeted. + */ + public InstructionHandle[] getTargets() { + return targets; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Type.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Type.java index 0002af56..a17bc4c6 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Type.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Type.java @@ -1,311 +1,311 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.classfile.ClassFormatException; -import org.apache.bcel5_2_0.classfile.Utility; - -/** - * Abstract super class for all possible java types, namely basic types - * such as int, object types like String and array types, e.g. int[] - * - * @version $Id: Type.java 393344 2006-04-12 00:38:34Z tcurdt $ - * @author M. Dahm - */ -public abstract class Type implements java.io.Serializable { - - protected byte type; - protected String signature; // signature for the type - /** Predefined constants - */ - public static final BasicType VOID = new BasicType(Constants.T_VOID); - public static final BasicType BOOLEAN = new BasicType(Constants.T_BOOLEAN); - public static final BasicType INT = new BasicType(Constants.T_INT); - public static final BasicType SHORT = new BasicType(Constants.T_SHORT); - public static final BasicType BYTE = new BasicType(Constants.T_BYTE); - public static final BasicType LONG = new BasicType(Constants.T_LONG); - public static final BasicType DOUBLE = new BasicType(Constants.T_DOUBLE); - public static final BasicType FLOAT = new BasicType(Constants.T_FLOAT); - public static final BasicType CHAR = new BasicType(Constants.T_CHAR); - public static final ObjectType OBJECT = new ObjectType("java.lang.Object"); - public static final ObjectType CLASS = new ObjectType("java.lang.Class"); - public static final ObjectType STRING = new ObjectType("java.lang.String"); - public static final ObjectType STRINGBUFFER = new ObjectType("java.lang.StringBuffer"); - public static final ObjectType THROWABLE = new ObjectType("java.lang.Throwable"); - public static final Type[] NO_ARGS = new Type[0]; - public static final ReferenceType NULL = new ReferenceType() { - }; - public static final Type UNKNOWN = new Type(Constants.T_UNKNOWN, "") { - }; - - - protected Type(byte t, String s) { - type = t; - signature = s; - } - - - /** - * @return hashcode of Type - */ - public int hashCode() { - return type ^ signature.hashCode(); - } - - - /** - * @return whether the Types are equal - */ - public boolean equals(Object o) { - if (o instanceof Type) { - Type t = (Type)o; - return (type == t.type) && signature.equals(t.signature); - } - return false; - } - - - /** - * @return signature for given type. - */ - public String getSignature() { - return signature; - } - - - /** - * @return type as defined in Constants - */ - public byte getType() { - return type; - } - - - /** - * @return stack size of this type (2 for long and double, 0 for void, 1 otherwise) - */ - public int getSize() { - switch (type) { - case Constants.T_DOUBLE: - case Constants.T_LONG: - return 2; - case Constants.T_VOID: - return 0; - default: - return 1; - } - } - - - /** - * @return Type string, e.g. `int[]' - */ - public String toString() { - return ((this.equals(Type.NULL) || (type >= Constants.T_UNKNOWN))) ? signature : Utility - .signatureToString(signature, false); - } - - - /** - * Convert type to Java method signature, e.g. int[] f(java.lang.String x) - * becomes (Ljava/lang/String;)[I - * - * @param return_type what the method returns - * @param arg_types what are the argument types - * @return method signature for given type(s). - */ - public static String getMethodSignature( Type return_type, Type[] arg_types ) { - StringBuilder buf = new StringBuilder("("); - int length = (arg_types == null) ? 0 : arg_types.length; - for (int i = 0; i < length; i++) { - buf.append(arg_types[i].getSignature()); - } - buf.append(')'); - buf.append(return_type.getSignature()); - return buf.toString(); - } - - private static ThreadLocal consumed_chars = new ThreadLocal() { - - protected Object initialValue() { - return new Integer(0); - } - };//int consumed_chars=0; // Remember position in string, see getArgumentTypes - - - private static int unwrap( ThreadLocal tl ) { - return ((Integer) tl.get()).intValue(); - } - - - private static void wrap( ThreadLocal tl, int value ) { - tl.set(new Integer(value)); - } - - - /** - * Convert signature to a Type object. - * @param signature signature string such as Ljava/lang/String; - * @return type object - */ - public static final Type getType( String signature ) throws StringIndexOutOfBoundsException { - byte type = Utility.typeOfSignature(signature); - if (type <= Constants.T_VOID) { - //corrected concurrent private static field acess - wrap(consumed_chars, 1); - return BasicType.getType(type); - } else if (type == Constants.T_ARRAY) { - int dim = 0; - do { // Count dimensions - dim++; - } while (signature.charAt(dim) == '['); - // Recurse, but just once, if the signature is ok - Type t = getType(signature.substring(dim)); - //corrected concurrent private static field acess - // consumed_chars += dim; // update counter - is replaced by - int _temp = unwrap(consumed_chars) + dim; - wrap(consumed_chars, _temp); - return new ArrayType(t, dim); - } else { // type == T_REFERENCE - int index = signature.indexOf(';'); // Look for closing `;' - if (index < 0) { - throw new ClassFormatException("Invalid signature: " + signature); - } - //corrected concurrent private static field acess - wrap(consumed_chars, index + 1); // "Lblabla;" `L' and `;' are removed - return new ObjectType(signature.substring(1, index).replace('/', '.')); - } - } - - - /** - * Convert return value of a method (signature) to a Type object. - * - * @param signature signature string such as (Ljava/lang/String;)V - * @return return type - */ - public static Type getReturnType( String signature ) { - try { - // Read return type after `)' - int index = signature.lastIndexOf(')') + 1; - return getType(signature.substring(index)); - } catch (StringIndexOutOfBoundsException e) { // Should never occur - throw new ClassFormatException("Invalid method signature: " + signature); - } - } - - - /** - * Convert arguments of a method (signature) to an array of Type objects. - * @param signature signature string such as (Ljava/lang/String;)V - * @return array of argument types - */ - public static Type[] getArgumentTypes( String signature ) { - List vec = new ArrayList(); - int index; - Type[] types; - try { // Read all declarations between for `(' and `)' - if (signature.charAt(0) != '(') { - throw new ClassFormatException("Invalid method signature: " + signature); - } - index = 1; // current string position - while (signature.charAt(index) != ')') { - vec.add(getType(signature.substring(index))); - //corrected concurrent private static field acess - index += unwrap(consumed_chars); // update position - } - } catch (StringIndexOutOfBoundsException e) { // Should never occur - throw new ClassFormatException("Invalid method signature: " + signature); - } - types = new Type[vec.size()]; - vec.toArray(types); - return types; - } - - - /** Convert runtime java.lang.Class to BCEL Type object. - * @param cl Java class - * @return corresponding Type object - */ - public static Type getType( java.lang.Class cl ) { - if (cl == null) { - throw new IllegalArgumentException("Class must not be null"); - } - /* That's an amzingly easy case, because getName() returns - * the signature. That's what we would have liked anyway. - */ - if (cl.isArray()) { - return getType(cl.getName()); - } else if (cl.isPrimitive()) { - if (cl == Integer.TYPE) { - return INT; - } else if (cl == Void.TYPE) { - return VOID; - } else if (cl == Double.TYPE) { - return DOUBLE; - } else if (cl == Float.TYPE) { - return FLOAT; - } else if (cl == Boolean.TYPE) { - return BOOLEAN; - } else if (cl == Byte.TYPE) { - return BYTE; - } else if (cl == Short.TYPE) { - return SHORT; - } else if (cl == Byte.TYPE) { - return BYTE; - } else if (cl == Long.TYPE) { - return LONG; - } else if (cl == Character.TYPE) { - return CHAR; - } else { - throw new IllegalStateException("Ooops, what primitive type is " + cl); - } - } else { // "Real" class - return new ObjectType(cl.getName()); - } - } - - - /** - * Convert runtime java.lang.Class[] to BCEL Type objects. - * @param classes an array of runtime class objects - * @return array of corresponding Type objects - */ - public static Type[] getTypes( java.lang.Class[] classes ) { - Type[] ret = new Type[classes.length]; - for (int i = 0; i < ret.length; i++) { - ret[i] = getType(classes[i]); - } - return ret; - } - - - public static String getSignature( java.lang.reflect.Method meth ) { - StringBuilder sb = new StringBuilder("("); - Class[] params = meth.getParameterTypes(); // avoid clone - for (int j = 0; j < params.length; j++) { - sb.append(getType(params[j]).getSignature()); - } - sb.append(")"); - sb.append(getType(meth.getReturnType()).getSignature()); - return sb.toString(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.classfile.ClassFormatException; +import org.apache.bcel5_2_0.classfile.Utility; + +/** + * Abstract super class for all possible java types, namely basic types + * such as int, object types like String and array types, e.g. int[] + * + * @version $Id: Type.java 393344 2006-04-12 00:38:34Z tcurdt $ + * @author M. Dahm + */ +public abstract class Type implements java.io.Serializable { + + protected byte type; + protected String signature; // signature for the type + /** Predefined constants + */ + public static final BasicType VOID = new BasicType(Constants.T_VOID); + public static final BasicType BOOLEAN = new BasicType(Constants.T_BOOLEAN); + public static final BasicType INT = new BasicType(Constants.T_INT); + public static final BasicType SHORT = new BasicType(Constants.T_SHORT); + public static final BasicType BYTE = new BasicType(Constants.T_BYTE); + public static final BasicType LONG = new BasicType(Constants.T_LONG); + public static final BasicType DOUBLE = new BasicType(Constants.T_DOUBLE); + public static final BasicType FLOAT = new BasicType(Constants.T_FLOAT); + public static final BasicType CHAR = new BasicType(Constants.T_CHAR); + public static final ObjectType OBJECT = new ObjectType("java.lang.Object"); + public static final ObjectType CLASS = new ObjectType("java.lang.Class"); + public static final ObjectType STRING = new ObjectType("java.lang.String"); + public static final ObjectType STRINGBUFFER = new ObjectType("java.lang.StringBuffer"); + public static final ObjectType THROWABLE = new ObjectType("java.lang.Throwable"); + public static final Type[] NO_ARGS = new Type[0]; + public static final ReferenceType NULL = new ReferenceType() { + }; + public static final Type UNKNOWN = new Type(Constants.T_UNKNOWN, "") { + }; + + + protected Type(byte t, String s) { + type = t; + signature = s; + } + + + /** + * @return hashcode of Type + */ + public int hashCode() { + return type ^ signature.hashCode(); + } + + + /** + * @return whether the Types are equal + */ + public boolean equals(Object o) { + if (o instanceof Type) { + Type t = (Type)o; + return (type == t.type) && signature.equals(t.signature); + } + return false; + } + + + /** + * @return signature for given type. + */ + public String getSignature() { + return signature; + } + + + /** + * @return type as defined in Constants + */ + public byte getType() { + return type; + } + + + /** + * @return stack size of this type (2 for long and double, 0 for void, 1 otherwise) + */ + public int getSize() { + switch (type) { + case Constants.T_DOUBLE: + case Constants.T_LONG: + return 2; + case Constants.T_VOID: + return 0; + default: + return 1; + } + } + + + /** + * @return Type string, e.g. `int[]' + */ + public String toString() { + return ((this.equals(Type.NULL) || (type >= Constants.T_UNKNOWN))) ? signature : Utility + .signatureToString(signature, false); + } + + + /** + * Convert type to Java method signature, e.g. int[] f(java.lang.String x) + * becomes (Ljava/lang/String;)[I + * + * @param return_type what the method returns + * @param arg_types what are the argument types + * @return method signature for given type(s). + */ + public static String getMethodSignature( Type return_type, Type[] arg_types ) { + StringBuilder buf = new StringBuilder("("); + int length = (arg_types == null) ? 0 : arg_types.length; + for (int i = 0; i < length; i++) { + buf.append(arg_types[i].getSignature()); + } + buf.append(')'); + buf.append(return_type.getSignature()); + return buf.toString(); + } + + private static ThreadLocal consumed_chars = new ThreadLocal() { + + protected Object initialValue() { + return new Integer(0); + } + };//int consumed_chars=0; // Remember position in string, see getArgumentTypes + + + private static int unwrap( ThreadLocal tl ) { + return ((Integer) tl.get()).intValue(); + } + + + private static void wrap( ThreadLocal tl, int value ) { + tl.set(new Integer(value)); + } + + + /** + * Convert signature to a Type object. + * @param signature signature string such as Ljava/lang/String; + * @return type object + */ + public static final Type getType( String signature ) throws StringIndexOutOfBoundsException { + byte type = Utility.typeOfSignature(signature); + if (type <= Constants.T_VOID) { + //corrected concurrent private static field acess + wrap(consumed_chars, 1); + return BasicType.getType(type); + } else if (type == Constants.T_ARRAY) { + int dim = 0; + do { // Count dimensions + dim++; + } while (signature.charAt(dim) == '['); + // Recurse, but just once, if the signature is ok + Type t = getType(signature.substring(dim)); + //corrected concurrent private static field acess + // consumed_chars += dim; // update counter - is replaced by + int _temp = unwrap(consumed_chars) + dim; + wrap(consumed_chars, _temp); + return new ArrayType(t, dim); + } else { // type == T_REFERENCE + int index = signature.indexOf(';'); // Look for closing `;' + if (index < 0) { + throw new ClassFormatException("Invalid signature: " + signature); + } + //corrected concurrent private static field acess + wrap(consumed_chars, index + 1); // "Lblabla;" `L' and `;' are removed + return new ObjectType(signature.substring(1, index).replace('/', '.')); + } + } + + + /** + * Convert return value of a method (signature) to a Type object. + * + * @param signature signature string such as (Ljava/lang/String;)V + * @return return type + */ + public static Type getReturnType( String signature ) { + try { + // Read return type after `)' + int index = signature.lastIndexOf(')') + 1; + return getType(signature.substring(index)); + } catch (StringIndexOutOfBoundsException e) { // Should never occur + throw new ClassFormatException("Invalid method signature: " + signature); + } + } + + + /** + * Convert arguments of a method (signature) to an array of Type objects. + * @param signature signature string such as (Ljava/lang/String;)V + * @return array of argument types + */ + public static Type[] getArgumentTypes( String signature ) { + List vec = new ArrayList(); + int index; + Type[] types; + try { // Read all declarations between for `(' and `)' + if (signature.charAt(0) != '(') { + throw new ClassFormatException("Invalid method signature: " + signature); + } + index = 1; // current string position + while (signature.charAt(index) != ')') { + vec.add(getType(signature.substring(index))); + //corrected concurrent private static field acess + index += unwrap(consumed_chars); // update position + } + } catch (StringIndexOutOfBoundsException e) { // Should never occur + throw new ClassFormatException("Invalid method signature: " + signature); + } + types = new Type[vec.size()]; + vec.toArray(types); + return types; + } + + + /** Convert runtime java.lang.Class to BCEL Type object. + * @param cl Java class + * @return corresponding Type object + */ + public static Type getType( java.lang.Class cl ) { + if (cl == null) { + throw new IllegalArgumentException("Class must not be null"); + } + /* That's an amzingly easy case, because getName() returns + * the signature. That's what we would have liked anyway. + */ + if (cl.isArray()) { + return getType(cl.getName()); + } else if (cl.isPrimitive()) { + if (cl == Integer.TYPE) { + return INT; + } else if (cl == Void.TYPE) { + return VOID; + } else if (cl == Double.TYPE) { + return DOUBLE; + } else if (cl == Float.TYPE) { + return FLOAT; + } else if (cl == Boolean.TYPE) { + return BOOLEAN; + } else if (cl == Byte.TYPE) { + return BYTE; + } else if (cl == Short.TYPE) { + return SHORT; + } else if (cl == Byte.TYPE) { + return BYTE; + } else if (cl == Long.TYPE) { + return LONG; + } else if (cl == Character.TYPE) { + return CHAR; + } else { + throw new IllegalStateException("Ooops, what primitive type is " + cl); + } + } else { // "Real" class + return new ObjectType(cl.getName()); + } + } + + + /** + * Convert runtime java.lang.Class[] to BCEL Type objects. + * @param classes an array of runtime class objects + * @return array of corresponding Type objects + */ + public static Type[] getTypes( java.lang.Class[] classes ) { + Type[] ret = new Type[classes.length]; + for (int i = 0; i < ret.length; i++) { + ret[i] = getType(classes[i]); + } + return ret; + } + + + public static String getSignature( java.lang.reflect.Method meth ) { + StringBuilder sb = new StringBuilder("("); + Class[] params = meth.getParameterTypes(); // avoid clone + for (int j = 0; j < params.length; j++) { + sb.append(getType(params[j]).getSignature()); + } + sb.append(")"); + sb.append(getType(meth.getReturnType()).getSignature()); + return sb.toString(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/TypedInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/TypedInstruction.java index 9ae53842..29469a15 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/TypedInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/TypedInstruction.java @@ -1,29 +1,29 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Get the type associated with an instruction, int for ILOAD, or the type - * of the field of a PUTFIELD instruction, e.g.. - * - * @version $Id: TypedInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface TypedInstruction { - - public Type getType( ConstantPoolGen cpg ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Get the type associated with an instruction, int for ILOAD, or the type + * of the field of a PUTFIELD instruction, e.g.. + * + * @version $Id: TypedInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface TypedInstruction { + + public Type getType( ConstantPoolGen cpg ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/UnconditionalBranch.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/UnconditionalBranch.java index a0f516e6..2c81f441 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/UnconditionalBranch.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/UnconditionalBranch.java @@ -1,29 +1,29 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denotes an instruction to perform an unconditional branch, i.e., GOTO, JSR. - * - * @version $Id: UnconditionalBranch.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - - * @see GOTO - * @see JSR - */ -public interface UnconditionalBranch { -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denotes an instruction to perform an unconditional branch, i.e., GOTO, JSR. + * + * @version $Id: UnconditionalBranch.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + + * @see GOTO + * @see JSR + */ +public interface UnconditionalBranch { +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/VariableLengthInstruction.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/VariableLengthInstruction.java index 4d4199e5..9f11887c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/VariableLengthInstruction.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/VariableLengthInstruction.java @@ -1,32 +1,32 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Denotes an instruction to be a variable length instruction, such as - * GOTO, JSR, LOOKUPSWITCH and TABLESWITCH. - * - * @version $Id: VariableLengthInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - - * @see GOTO - * @see JSR - * @see LOOKUPSWITCH - * @see TABLESWITCH - */ -public interface VariableLengthInstruction { -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Denotes an instruction to be a variable length instruction, such as + * GOTO, JSR, LOOKUPSWITCH and TABLESWITCH. + * + * @version $Id: VariableLengthInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + + * @see GOTO + * @see JSR + * @see LOOKUPSWITCH + * @see TABLESWITCH + */ +public interface VariableLengthInstruction { +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Visitor.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Visitor.java index 896b9267..84ba1660 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Visitor.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/Visitor.java @@ -1,568 +1,568 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.generic; - -/** - * Interface implementing the Visitor pattern programming style. - * I.e., a class that implements this interface can handle all types of - * instructions with the properly typed methods just by calling the accept() - * method. - * - * @version $Id: Visitor.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface Visitor { - - public void visitStackInstruction( StackInstruction obj ); - - - public void visitLocalVariableInstruction( LocalVariableInstruction obj ); - - - public void visitBranchInstruction( BranchInstruction obj ); - - - public void visitLoadClass( LoadClass obj ); - - - public void visitFieldInstruction( FieldInstruction obj ); - - - public void visitIfInstruction( IfInstruction obj ); - - - public void visitConversionInstruction( ConversionInstruction obj ); - - - public void visitPopInstruction( PopInstruction obj ); - - - public void visitStoreInstruction( StoreInstruction obj ); - - - public void visitTypedInstruction( TypedInstruction obj ); - - - public void visitSelect( Select obj ); - - - public void visitJsrInstruction( JsrInstruction obj ); - - - public void visitGotoInstruction( GotoInstruction obj ); - - - public void visitUnconditionalBranch( UnconditionalBranch obj ); - - - public void visitPushInstruction( PushInstruction obj ); - - - public void visitArithmeticInstruction( ArithmeticInstruction obj ); - - - public void visitCPInstruction( CPInstruction obj ); - - - public void visitInvokeInstruction( InvokeInstruction obj ); - - - public void visitArrayInstruction( ArrayInstruction obj ); - - - public void visitAllocationInstruction( AllocationInstruction obj ); - - - public void visitReturnInstruction( ReturnInstruction obj ); - - - public void visitFieldOrMethod( FieldOrMethod obj ); - - - public void visitConstantPushInstruction( ConstantPushInstruction obj ); - - - public void visitExceptionThrower( ExceptionThrower obj ); - - - public void visitLoadInstruction( LoadInstruction obj ); - - - public void visitVariableLengthInstruction( VariableLengthInstruction obj ); - - - public void visitStackProducer( StackProducer obj ); - - - public void visitStackConsumer( StackConsumer obj ); - - - public void visitACONST_NULL( ACONST_NULL obj ); - - - public void visitGETSTATIC( GETSTATIC obj ); - - - public void visitIF_ICMPLT( IF_ICMPLT obj ); - - - public void visitMONITOREXIT( MONITOREXIT obj ); - - - public void visitIFLT( IFLT obj ); - - - public void visitLSTORE( LSTORE obj ); - - - public void visitPOP2( POP2 obj ); - - - public void visitBASTORE( BASTORE obj ); - - - public void visitISTORE( ISTORE obj ); - - - public void visitCHECKCAST( CHECKCAST obj ); - - - public void visitFCMPG( FCMPG obj ); - - - public void visitI2F( I2F obj ); - - - public void visitATHROW( ATHROW obj ); - - - public void visitDCMPL( DCMPL obj ); - - - public void visitARRAYLENGTH( ARRAYLENGTH obj ); - - - public void visitDUP( DUP obj ); - - - public void visitINVOKESTATIC( INVOKESTATIC obj ); - - - public void visitLCONST( LCONST obj ); - - - public void visitDREM( DREM obj ); - - - public void visitIFGE( IFGE obj ); - - - public void visitCALOAD( CALOAD obj ); - - - public void visitLASTORE( LASTORE obj ); - - - public void visitI2D( I2D obj ); - - - public void visitDADD( DADD obj ); - - - public void visitINVOKESPECIAL( INVOKESPECIAL obj ); - - - public void visitIAND( IAND obj ); - - - public void visitPUTFIELD( PUTFIELD obj ); - - - public void visitILOAD( ILOAD obj ); - - - public void visitDLOAD( DLOAD obj ); - - - public void visitDCONST( DCONST obj ); - - - public void visitNEW( NEW obj ); - - - public void visitIFNULL( IFNULL obj ); - - - public void visitLSUB( LSUB obj ); - - - public void visitL2I( L2I obj ); - - - public void visitISHR( ISHR obj ); - - - public void visitTABLESWITCH( TABLESWITCH obj ); - - - public void visitIINC( IINC obj ); - - - public void visitDRETURN( DRETURN obj ); - - - public void visitFSTORE( FSTORE obj ); - - - public void visitDASTORE( DASTORE obj ); - - - public void visitIALOAD( IALOAD obj ); - - - public void visitDDIV( DDIV obj ); - - - public void visitIF_ICMPGE( IF_ICMPGE obj ); - - - public void visitLAND( LAND obj ); - - - public void visitIDIV( IDIV obj ); - - - public void visitLOR( LOR obj ); - - - public void visitCASTORE( CASTORE obj ); - - - public void visitFREM( FREM obj ); - - - public void visitLDC( LDC obj ); - - - public void visitBIPUSH( BIPUSH obj ); - - - public void visitDSTORE( DSTORE obj ); - - - public void visitF2L( F2L obj ); - - - public void visitFMUL( FMUL obj ); - - - public void visitLLOAD( LLOAD obj ); - - - public void visitJSR( JSR obj ); - - - public void visitFSUB( FSUB obj ); - - - public void visitSASTORE( SASTORE obj ); - - - public void visitALOAD( ALOAD obj ); - - - public void visitDUP2_X2( DUP2_X2 obj ); - - - public void visitRETURN( RETURN obj ); - - - public void visitDALOAD( DALOAD obj ); - - - public void visitSIPUSH( SIPUSH obj ); - - - public void visitDSUB( DSUB obj ); - - - public void visitL2F( L2F obj ); - - - public void visitIF_ICMPGT( IF_ICMPGT obj ); - - - public void visitF2D( F2D obj ); - - - public void visitI2L( I2L obj ); - - - public void visitIF_ACMPNE( IF_ACMPNE obj ); - - - public void visitPOP( POP obj ); - - - public void visitI2S( I2S obj ); - - - public void visitIFEQ( IFEQ obj ); - - - public void visitSWAP( SWAP obj ); - - - public void visitIOR( IOR obj ); - - - public void visitIREM( IREM obj ); - - - public void visitIASTORE( IASTORE obj ); - - - public void visitNEWARRAY( NEWARRAY obj ); - - - public void visitINVOKEINTERFACE( INVOKEINTERFACE obj ); - - - public void visitINEG( INEG obj ); - - - public void visitLCMP( LCMP obj ); - - - public void visitJSR_W( JSR_W obj ); - - - public void visitMULTIANEWARRAY( MULTIANEWARRAY obj ); - - - public void visitDUP_X2( DUP_X2 obj ); - - - public void visitSALOAD( SALOAD obj ); - - - public void visitIFNONNULL( IFNONNULL obj ); - - - public void visitDMUL( DMUL obj ); - - - public void visitIFNE( IFNE obj ); - - - public void visitIF_ICMPLE( IF_ICMPLE obj ); - - - public void visitLDC2_W( LDC2_W obj ); - - - public void visitGETFIELD( GETFIELD obj ); - - - public void visitLADD( LADD obj ); - - - public void visitNOP( NOP obj ); - - - public void visitFALOAD( FALOAD obj ); - - - public void visitINSTANCEOF( INSTANCEOF obj ); - - - public void visitIFLE( IFLE obj ); - - - public void visitLXOR( LXOR obj ); - - - public void visitLRETURN( LRETURN obj ); - - - public void visitFCONST( FCONST obj ); - - - public void visitIUSHR( IUSHR obj ); - - - public void visitBALOAD( BALOAD obj ); - - - public void visitDUP2( DUP2 obj ); - - - public void visitIF_ACMPEQ( IF_ACMPEQ obj ); - - - public void visitIMPDEP1( IMPDEP1 obj ); - - - public void visitMONITORENTER( MONITORENTER obj ); - - - public void visitLSHL( LSHL obj ); - - - public void visitDCMPG( DCMPG obj ); - - - public void visitD2L( D2L obj ); - - - public void visitIMPDEP2( IMPDEP2 obj ); - - - public void visitL2D( L2D obj ); - - - public void visitRET( RET obj ); - - - public void visitIFGT( IFGT obj ); - - - public void visitIXOR( IXOR obj ); - - - public void visitINVOKEVIRTUAL( INVOKEVIRTUAL obj ); - - - public void visitFASTORE( FASTORE obj ); - - - public void visitIRETURN( IRETURN obj ); - - - public void visitIF_ICMPNE( IF_ICMPNE obj ); - - - public void visitFLOAD( FLOAD obj ); - - - public void visitLDIV( LDIV obj ); - - - public void visitPUTSTATIC( PUTSTATIC obj ); - - - public void visitAALOAD( AALOAD obj ); - - - public void visitD2I( D2I obj ); - - - public void visitIF_ICMPEQ( IF_ICMPEQ obj ); - - - public void visitAASTORE( AASTORE obj ); - - - public void visitARETURN( ARETURN obj ); - - - public void visitDUP2_X1( DUP2_X1 obj ); - - - public void visitFNEG( FNEG obj ); - - - public void visitGOTO_W( GOTO_W obj ); - - - public void visitD2F( D2F obj ); - - - public void visitGOTO( GOTO obj ); - - - public void visitISUB( ISUB obj ); - - - public void visitF2I( F2I obj ); - - - public void visitDNEG( DNEG obj ); - - - public void visitICONST( ICONST obj ); - - - public void visitFDIV( FDIV obj ); - - - public void visitI2B( I2B obj ); - - - public void visitLNEG( LNEG obj ); - - - public void visitLREM( LREM obj ); - - - public void visitIMUL( IMUL obj ); - - - public void visitIADD( IADD obj ); - - - public void visitLSHR( LSHR obj ); - - - public void visitLOOKUPSWITCH( LOOKUPSWITCH obj ); - - - public void visitDUP_X1( DUP_X1 obj ); - - - public void visitFCMPL( FCMPL obj ); - - - public void visitI2C( I2C obj ); - - - public void visitLMUL( LMUL obj ); - - - public void visitLUSHR( LUSHR obj ); - - - public void visitISHL( ISHL obj ); - - - public void visitLALOAD( LALOAD obj ); - - - public void visitASTORE( ASTORE obj ); - - - public void visitANEWARRAY( ANEWARRAY obj ); - - - public void visitFRETURN( FRETURN obj ); - - - public void visitFADD( FADD obj ); - - - public void visitBREAKPOINT( BREAKPOINT obj ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.generic; + +/** + * Interface implementing the Visitor pattern programming style. + * I.e., a class that implements this interface can handle all types of + * instructions with the properly typed methods just by calling the accept() + * method. + * + * @version $Id: Visitor.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public interface Visitor { + + public void visitStackInstruction( StackInstruction obj ); + + + public void visitLocalVariableInstruction( LocalVariableInstruction obj ); + + + public void visitBranchInstruction( BranchInstruction obj ); + + + public void visitLoadClass( LoadClass obj ); + + + public void visitFieldInstruction( FieldInstruction obj ); + + + public void visitIfInstruction( IfInstruction obj ); + + + public void visitConversionInstruction( ConversionInstruction obj ); + + + public void visitPopInstruction( PopInstruction obj ); + + + public void visitStoreInstruction( StoreInstruction obj ); + + + public void visitTypedInstruction( TypedInstruction obj ); + + + public void visitSelect( Select obj ); + + + public void visitJsrInstruction( JsrInstruction obj ); + + + public void visitGotoInstruction( GotoInstruction obj ); + + + public void visitUnconditionalBranch( UnconditionalBranch obj ); + + + public void visitPushInstruction( PushInstruction obj ); + + + public void visitArithmeticInstruction( ArithmeticInstruction obj ); + + + public void visitCPInstruction( CPInstruction obj ); + + + public void visitInvokeInstruction( InvokeInstruction obj ); + + + public void visitArrayInstruction( ArrayInstruction obj ); + + + public void visitAllocationInstruction( AllocationInstruction obj ); + + + public void visitReturnInstruction( ReturnInstruction obj ); + + + public void visitFieldOrMethod( FieldOrMethod obj ); + + + public void visitConstantPushInstruction( ConstantPushInstruction obj ); + + + public void visitExceptionThrower( ExceptionThrower obj ); + + + public void visitLoadInstruction( LoadInstruction obj ); + + + public void visitVariableLengthInstruction( VariableLengthInstruction obj ); + + + public void visitStackProducer( StackProducer obj ); + + + public void visitStackConsumer( StackConsumer obj ); + + + public void visitACONST_NULL( ACONST_NULL obj ); + + + public void visitGETSTATIC( GETSTATIC obj ); + + + public void visitIF_ICMPLT( IF_ICMPLT obj ); + + + public void visitMONITOREXIT( MONITOREXIT obj ); + + + public void visitIFLT( IFLT obj ); + + + public void visitLSTORE( LSTORE obj ); + + + public void visitPOP2( POP2 obj ); + + + public void visitBASTORE( BASTORE obj ); + + + public void visitISTORE( ISTORE obj ); + + + public void visitCHECKCAST( CHECKCAST obj ); + + + public void visitFCMPG( FCMPG obj ); + + + public void visitI2F( I2F obj ); + + + public void visitATHROW( ATHROW obj ); + + + public void visitDCMPL( DCMPL obj ); + + + public void visitARRAYLENGTH( ARRAYLENGTH obj ); + + + public void visitDUP( DUP obj ); + + + public void visitINVOKESTATIC( INVOKESTATIC obj ); + + + public void visitLCONST( LCONST obj ); + + + public void visitDREM( DREM obj ); + + + public void visitIFGE( IFGE obj ); + + + public void visitCALOAD( CALOAD obj ); + + + public void visitLASTORE( LASTORE obj ); + + + public void visitI2D( I2D obj ); + + + public void visitDADD( DADD obj ); + + + public void visitINVOKESPECIAL( INVOKESPECIAL obj ); + + + public void visitIAND( IAND obj ); + + + public void visitPUTFIELD( PUTFIELD obj ); + + + public void visitILOAD( ILOAD obj ); + + + public void visitDLOAD( DLOAD obj ); + + + public void visitDCONST( DCONST obj ); + + + public void visitNEW( NEW obj ); + + + public void visitIFNULL( IFNULL obj ); + + + public void visitLSUB( LSUB obj ); + + + public void visitL2I( L2I obj ); + + + public void visitISHR( ISHR obj ); + + + public void visitTABLESWITCH( TABLESWITCH obj ); + + + public void visitIINC( IINC obj ); + + + public void visitDRETURN( DRETURN obj ); + + + public void visitFSTORE( FSTORE obj ); + + + public void visitDASTORE( DASTORE obj ); + + + public void visitIALOAD( IALOAD obj ); + + + public void visitDDIV( DDIV obj ); + + + public void visitIF_ICMPGE( IF_ICMPGE obj ); + + + public void visitLAND( LAND obj ); + + + public void visitIDIV( IDIV obj ); + + + public void visitLOR( LOR obj ); + + + public void visitCASTORE( CASTORE obj ); + + + public void visitFREM( FREM obj ); + + + public void visitLDC( LDC obj ); + + + public void visitBIPUSH( BIPUSH obj ); + + + public void visitDSTORE( DSTORE obj ); + + + public void visitF2L( F2L obj ); + + + public void visitFMUL( FMUL obj ); + + + public void visitLLOAD( LLOAD obj ); + + + public void visitJSR( JSR obj ); + + + public void visitFSUB( FSUB obj ); + + + public void visitSASTORE( SASTORE obj ); + + + public void visitALOAD( ALOAD obj ); + + + public void visitDUP2_X2( DUP2_X2 obj ); + + + public void visitRETURN( RETURN obj ); + + + public void visitDALOAD( DALOAD obj ); + + + public void visitSIPUSH( SIPUSH obj ); + + + public void visitDSUB( DSUB obj ); + + + public void visitL2F( L2F obj ); + + + public void visitIF_ICMPGT( IF_ICMPGT obj ); + + + public void visitF2D( F2D obj ); + + + public void visitI2L( I2L obj ); + + + public void visitIF_ACMPNE( IF_ACMPNE obj ); + + + public void visitPOP( POP obj ); + + + public void visitI2S( I2S obj ); + + + public void visitIFEQ( IFEQ obj ); + + + public void visitSWAP( SWAP obj ); + + + public void visitIOR( IOR obj ); + + + public void visitIREM( IREM obj ); + + + public void visitIASTORE( IASTORE obj ); + + + public void visitNEWARRAY( NEWARRAY obj ); + + + public void visitINVOKEINTERFACE( INVOKEINTERFACE obj ); + + + public void visitINEG( INEG obj ); + + + public void visitLCMP( LCMP obj ); + + + public void visitJSR_W( JSR_W obj ); + + + public void visitMULTIANEWARRAY( MULTIANEWARRAY obj ); + + + public void visitDUP_X2( DUP_X2 obj ); + + + public void visitSALOAD( SALOAD obj ); + + + public void visitIFNONNULL( IFNONNULL obj ); + + + public void visitDMUL( DMUL obj ); + + + public void visitIFNE( IFNE obj ); + + + public void visitIF_ICMPLE( IF_ICMPLE obj ); + + + public void visitLDC2_W( LDC2_W obj ); + + + public void visitGETFIELD( GETFIELD obj ); + + + public void visitLADD( LADD obj ); + + + public void visitNOP( NOP obj ); + + + public void visitFALOAD( FALOAD obj ); + + + public void visitINSTANCEOF( INSTANCEOF obj ); + + + public void visitIFLE( IFLE obj ); + + + public void visitLXOR( LXOR obj ); + + + public void visitLRETURN( LRETURN obj ); + + + public void visitFCONST( FCONST obj ); + + + public void visitIUSHR( IUSHR obj ); + + + public void visitBALOAD( BALOAD obj ); + + + public void visitDUP2( DUP2 obj ); + + + public void visitIF_ACMPEQ( IF_ACMPEQ obj ); + + + public void visitIMPDEP1( IMPDEP1 obj ); + + + public void visitMONITORENTER( MONITORENTER obj ); + + + public void visitLSHL( LSHL obj ); + + + public void visitDCMPG( DCMPG obj ); + + + public void visitD2L( D2L obj ); + + + public void visitIMPDEP2( IMPDEP2 obj ); + + + public void visitL2D( L2D obj ); + + + public void visitRET( RET obj ); + + + public void visitIFGT( IFGT obj ); + + + public void visitIXOR( IXOR obj ); + + + public void visitINVOKEVIRTUAL( INVOKEVIRTUAL obj ); + + + public void visitFASTORE( FASTORE obj ); + + + public void visitIRETURN( IRETURN obj ); + + + public void visitIF_ICMPNE( IF_ICMPNE obj ); + + + public void visitFLOAD( FLOAD obj ); + + + public void visitLDIV( LDIV obj ); + + + public void visitPUTSTATIC( PUTSTATIC obj ); + + + public void visitAALOAD( AALOAD obj ); + + + public void visitD2I( D2I obj ); + + + public void visitIF_ICMPEQ( IF_ICMPEQ obj ); + + + public void visitAASTORE( AASTORE obj ); + + + public void visitARETURN( ARETURN obj ); + + + public void visitDUP2_X1( DUP2_X1 obj ); + + + public void visitFNEG( FNEG obj ); + + + public void visitGOTO_W( GOTO_W obj ); + + + public void visitD2F( D2F obj ); + + + public void visitGOTO( GOTO obj ); + + + public void visitISUB( ISUB obj ); + + + public void visitF2I( F2I obj ); + + + public void visitDNEG( DNEG obj ); + + + public void visitICONST( ICONST obj ); + + + public void visitFDIV( FDIV obj ); + + + public void visitI2B( I2B obj ); + + + public void visitLNEG( LNEG obj ); + + + public void visitLREM( LREM obj ); + + + public void visitIMUL( IMUL obj ); + + + public void visitIADD( IADD obj ); + + + public void visitLSHR( LSHR obj ); + + + public void visitLOOKUPSWITCH( LOOKUPSWITCH obj ); + + + public void visitDUP_X1( DUP_X1 obj ); + + + public void visitFCMPL( FCMPL obj ); + + + public void visitI2C( I2C obj ); + + + public void visitLMUL( LMUL obj ); + + + public void visitLUSHR( LUSHR obj ); + + + public void visitISHL( ISHL obj ); + + + public void visitLALOAD( LALOAD obj ); + + + public void visitASTORE( ASTORE obj ); + + + public void visitANEWARRAY( ANEWARRAY obj ); + + + public void visitFRETURN( FRETURN obj ); + + + public void visitFADD( FADD obj ); + + + public void visitBREAKPOINT( BREAKPOINT obj ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/package.html b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/package.html index 201d573f..b841ea11 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/package.html +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/generic/package.html @@ -1,16 +1,16 @@ - - - - - - -

          -This package contains the "generic" part of the -Byte Code Engineering -Library, i.e., classes to dynamically modify class objects and -byte code instructions. -

          - - + + + + + + +

          +This package contains the "generic" part of the +Byte Code Engineering +Library, i.e., classes to dynamically modify class objects and +byte code instructions. +

          + + diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/package.html b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/package.html index aaded505..58603348 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/package.html +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/package.html @@ -1,17 +1,17 @@ - - - - - - -

          -This package contains basic classes for the -Byte Code Engineering Library - and constants defined by the - - JVM specification. -

          - - + + + + + + +

          +This package contains basic classes for the +Byte Code Engineering Library + and constants defined by the + + JVM specification. +

          + + diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/AttributeHTML.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/AttributeHTML.java index 5f4e5227..8af0b193 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/AttributeHTML.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/AttributeHTML.java @@ -1,212 +1,212 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; - -import org.apache.bcel5_2_0.classfile.Attribute; -import org.apache.bcel5_2_0.classfile.Code; -import org.apache.bcel5_2_0.classfile.CodeException; -import org.apache.bcel5_2_0.classfile.ConstantPool; -import org.apache.bcel5_2_0.classfile.ConstantUtf8; -import org.apache.bcel5_2_0.classfile.ConstantValue; -import org.apache.bcel5_2_0.classfile.ExceptionTable; -import org.apache.bcel5_2_0.classfile.InnerClass; -import org.apache.bcel5_2_0.classfile.InnerClasses; -import org.apache.bcel5_2_0.classfile.LineNumber; -import org.apache.bcel5_2_0.classfile.LineNumberTable; -import org.apache.bcel5_2_0.classfile.LocalVariable; -import org.apache.bcel5_2_0.classfile.LocalVariableTable; -import org.apache.bcel5_2_0.classfile.SourceFile; -import org.apache.bcel5_2_0.classfile.Utility; - -/** - * Convert found attributes into HTML file. - * - * @version $Id: AttributeHTML.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * - */ -final class AttributeHTML implements org.apache.bcel5_2_0.Constants { - - private String class_name; // name of current class - private PrintWriter file; // file to write to - private int attr_count = 0; - private ConstantHTML constant_html; - private ConstantPool constant_pool; - - - AttributeHTML(String dir, String class_name, ConstantPool constant_pool, - ConstantHTML constant_html) throws IOException { - this.class_name = class_name; - this.constant_pool = constant_pool; - this.constant_html = constant_html; - file = new PrintWriter(new FileOutputStream(dir + class_name + "_attributes.html")); - file.println(""); - } - - - private final String codeLink( int link, int method_number ) { - return "" + link + ""; - } - - - final void close() { - file.println("
          "); - file.close(); - } - - - final void writeAttribute( Attribute attribute, String anchor ) throws IOException { - writeAttribute(attribute, anchor, 0); - } - - - final void writeAttribute( Attribute attribute, String anchor, int method_number ) - throws IOException { - byte tag = attribute.getTag(); - int index; - if (tag == ATTR_UNKNOWN) { - return; - } - attr_count++; // Increment number of attributes found so far - if (attr_count % 2 == 0) { - file.print(""); - } else { - file.print(""); - } - file.println("

          " + attr_count + " " + ATTRIBUTE_NAMES[tag] - + "

          "); - /* Handle different attributes - */ - switch (tag) { - case ATTR_CODE: - Code c = (Code) attribute; - // Some directly printable values - file.print("
          • Maximum stack size = " + c.getMaxStack() - + "
          • \n
          • Number of local variables = " + c.getMaxLocals() - + "
          • \n
          • Byte code
          \n"); - // Get handled exceptions and list them - CodeException[] ce = c.getExceptionTable(); - int len = ce.length; - if (len > 0) { - file.print("

          Exceptions handled

            "); - for (int i = 0; i < len; i++) { - int catch_type = ce[i].getCatchType(); // Index in constant pool - file.print("
          • "); - if (catch_type != 0) { - file.print(constant_html.referenceConstant(catch_type)); // Create Link to _cp.html - } else { - file.print("Any Exception"); - } - file.print("
            (Ranging from lines " - + codeLink(ce[i].getStartPC(), method_number) + " to " - + codeLink(ce[i].getEndPC(), method_number) + ", handled at line " - + codeLink(ce[i].getHandlerPC(), method_number) + ")
          • "); - } - file.print("
          "); - } - break; - case ATTR_CONSTANT_VALUE: - index = ((ConstantValue) attribute).getConstantValueIndex(); - // Reference _cp.html - file.print("\n"); - break; - case ATTR_SOURCE_FILE: - index = ((SourceFile) attribute).getSourceFileIndex(); - // Reference _cp.html - file.print("\n"); - break; - case ATTR_EXCEPTIONS: - // List thrown exceptions - int[] indices = ((ExceptionTable) attribute).getExceptionIndexTable(); - file.print("\n"); - break; - case ATTR_LINE_NUMBER_TABLE: - LineNumber[] line_numbers = ((LineNumberTable) attribute).getLineNumberTable(); - // List line number pairs - file.print("

          "); - for (int i = 0; i < line_numbers.length; i++) { - file.print("(" + line_numbers[i].getStartPC() + ", " - + line_numbers[i].getLineNumber() + ")"); - if (i < line_numbers.length - 1) { - file.print(", "); // breakable - } - } - break; - case ATTR_LOCAL_VARIABLE_TABLE: - LocalVariable[] vars = ((LocalVariableTable) attribute).getLocalVariableTable(); - // List name, range and type - file.print("

            "); - for (int i = 0; i < vars.length; i++) { - index = vars[i].getSignatureIndex(); - String signature = ((ConstantUtf8) constant_pool.getConstant(index, - CONSTANT_Utf8)).getBytes(); - signature = Utility.signatureToString(signature, false); - int start = vars[i].getStartPC(); - int end = (start + vars[i].getLength()); - file.println("
          • " + Class2HTML.referenceType(signature) + " " - + vars[i].getName() + " in slot %" + vars[i].getIndex() - + "
            Valid from lines " + "" - + start + " to " + "" + end + "
          • "); - } - file.print("
          \n"); - break; - case ATTR_INNER_CLASSES: - InnerClass[] classes = ((InnerClasses) attribute).getInnerClasses(); - // List inner classes - file.print("
            "); - for (int i = 0; i < classes.length; i++) { - String name, access; - index = classes[i].getInnerNameIndex(); - if (index > 0) { - name = ((ConstantUtf8) constant_pool.getConstant(index, CONSTANT_Utf8)) - .getBytes(); - } else { - name = "<anonymous>"; - } - access = Utility.accessToString(classes[i].getInnerAccessFlags()); - file.print("
          • " + access + " " - + constant_html.referenceConstant(classes[i].getInnerClassIndex()) - + " in class " - + constant_html.referenceConstant(classes[i].getOuterClassIndex()) - + " named " + name + "
          • \n"); - } - file.print("
          \n"); - break; - default: // Such as Unknown attribute or Deprecated - file.print("

          " + attribute.toString()); - } - file.println(""); - file.flush(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintWriter; + +import org.apache.bcel5_2_0.classfile.Attribute; +import org.apache.bcel5_2_0.classfile.Code; +import org.apache.bcel5_2_0.classfile.CodeException; +import org.apache.bcel5_2_0.classfile.ConstantPool; +import org.apache.bcel5_2_0.classfile.ConstantUtf8; +import org.apache.bcel5_2_0.classfile.ConstantValue; +import org.apache.bcel5_2_0.classfile.ExceptionTable; +import org.apache.bcel5_2_0.classfile.InnerClass; +import org.apache.bcel5_2_0.classfile.InnerClasses; +import org.apache.bcel5_2_0.classfile.LineNumber; +import org.apache.bcel5_2_0.classfile.LineNumberTable; +import org.apache.bcel5_2_0.classfile.LocalVariable; +import org.apache.bcel5_2_0.classfile.LocalVariableTable; +import org.apache.bcel5_2_0.classfile.SourceFile; +import org.apache.bcel5_2_0.classfile.Utility; + +/** + * Convert found attributes into HTML file. + * + * @version $Id: AttributeHTML.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * + */ +final class AttributeHTML implements org.apache.bcel5_2_0.Constants { + + private String class_name; // name of current class + private PrintWriter file; // file to write to + private int attr_count = 0; + private ConstantHTML constant_html; + private ConstantPool constant_pool; + + + AttributeHTML(String dir, String class_name, ConstantPool constant_pool, + ConstantHTML constant_html) throws IOException { + this.class_name = class_name; + this.constant_pool = constant_pool; + this.constant_html = constant_html; + file = new PrintWriter(new FileOutputStream(dir + class_name + "_attributes.html")); + file.println(""); + } + + + private final String codeLink( int link, int method_number ) { + return "" + link + ""; + } + + + final void close() { + file.println("
          "); + file.close(); + } + + + final void writeAttribute( Attribute attribute, String anchor ) throws IOException { + writeAttribute(attribute, anchor, 0); + } + + + final void writeAttribute( Attribute attribute, String anchor, int method_number ) + throws IOException { + byte tag = attribute.getTag(); + int index; + if (tag == ATTR_UNKNOWN) { + return; + } + attr_count++; // Increment number of attributes found so far + if (attr_count % 2 == 0) { + file.print(""); + } else { + file.print(""); + } + file.println("

          " + attr_count + " " + ATTRIBUTE_NAMES[tag] + + "

          "); + /* Handle different attributes + */ + switch (tag) { + case ATTR_CODE: + Code c = (Code) attribute; + // Some directly printable values + file.print("
          • Maximum stack size = " + c.getMaxStack() + + "
          • \n
          • Number of local variables = " + c.getMaxLocals() + + "
          • \n
          • Byte code
          \n"); + // Get handled exceptions and list them + CodeException[] ce = c.getExceptionTable(); + int len = ce.length; + if (len > 0) { + file.print("

          Exceptions handled

            "); + for (int i = 0; i < len; i++) { + int catch_type = ce[i].getCatchType(); // Index in constant pool + file.print("
          • "); + if (catch_type != 0) { + file.print(constant_html.referenceConstant(catch_type)); // Create Link to _cp.html + } else { + file.print("Any Exception"); + } + file.print("
            (Ranging from lines " + + codeLink(ce[i].getStartPC(), method_number) + " to " + + codeLink(ce[i].getEndPC(), method_number) + ", handled at line " + + codeLink(ce[i].getHandlerPC(), method_number) + ")
          • "); + } + file.print("
          "); + } + break; + case ATTR_CONSTANT_VALUE: + index = ((ConstantValue) attribute).getConstantValueIndex(); + // Reference _cp.html + file.print("\n"); + break; + case ATTR_SOURCE_FILE: + index = ((SourceFile) attribute).getSourceFileIndex(); + // Reference _cp.html + file.print("\n"); + break; + case ATTR_EXCEPTIONS: + // List thrown exceptions + int[] indices = ((ExceptionTable) attribute).getExceptionIndexTable(); + file.print("\n"); + break; + case ATTR_LINE_NUMBER_TABLE: + LineNumber[] line_numbers = ((LineNumberTable) attribute).getLineNumberTable(); + // List line number pairs + file.print("

          "); + for (int i = 0; i < line_numbers.length; i++) { + file.print("(" + line_numbers[i].getStartPC() + ", " + + line_numbers[i].getLineNumber() + ")"); + if (i < line_numbers.length - 1) { + file.print(", "); // breakable + } + } + break; + case ATTR_LOCAL_VARIABLE_TABLE: + LocalVariable[] vars = ((LocalVariableTable) attribute).getLocalVariableTable(); + // List name, range and type + file.print("

            "); + for (int i = 0; i < vars.length; i++) { + index = vars[i].getSignatureIndex(); + String signature = ((ConstantUtf8) constant_pool.getConstant(index, + CONSTANT_Utf8)).getBytes(); + signature = Utility.signatureToString(signature, false); + int start = vars[i].getStartPC(); + int end = (start + vars[i].getLength()); + file.println("
          • " + Class2HTML.referenceType(signature) + " " + + vars[i].getName() + " in slot %" + vars[i].getIndex() + + "
            Valid from lines " + "" + + start + " to " + "" + end + "
          • "); + } + file.print("
          \n"); + break; + case ATTR_INNER_CLASSES: + InnerClass[] classes = ((InnerClasses) attribute).getInnerClasses(); + // List inner classes + file.print("
            "); + for (int i = 0; i < classes.length; i++) { + String name, access; + index = classes[i].getInnerNameIndex(); + if (index > 0) { + name = ((ConstantUtf8) constant_pool.getConstant(index, CONSTANT_Utf8)) + .getBytes(); + } else { + name = "<anonymous>"; + } + access = Utility.accessToString(classes[i].getInnerAccessFlags()); + file.print("
          • " + access + " " + + constant_html.referenceConstant(classes[i].getInnerClassIndex()) + + " in class " + + constant_html.referenceConstant(classes[i].getOuterClassIndex()) + + " named " + name + "
          • \n"); + } + file.print("
          \n"); + break; + default: // Such as Unknown attribute or Deprecated + file.print("

          " + attribute.toString()); + } + file.println(""); + file.flush(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/BCELComparator.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/BCELComparator.java index cdf7715f..273b286b 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/BCELComparator.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/BCELComparator.java @@ -1,45 +1,45 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -/** - * Used for BCEL comparison strategy - * - * @author M. Dahm - * @version $Id: BCELComparator.java 410087 2006-05-29 12:12:19Z tcurdt $ - * @since 5.2 - */ -public interface BCELComparator { - - /** - * Compare two objects and return what THIS.equals(THAT) should return - * - * @param THIS - * @param THAT - * @return true if and only if THIS equals THAT - */ - public boolean equals( Object THIS, Object THAT ); - - - /** - * Return hashcode for THIS.hashCode() - * - * @param THIS - * @return hashcode for THIS.hashCode() - */ - public int hashCode( Object THIS ); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +/** + * Used for BCEL comparison strategy + * + * @author M. Dahm + * @version $Id: BCELComparator.java 410087 2006-05-29 12:12:19Z tcurdt $ + * @since 5.2 + */ +public interface BCELComparator { + + /** + * Compare two objects and return what THIS.equals(THAT) should return + * + * @param THIS + * @param THAT + * @return true if and only if THIS equals THAT + */ + public boolean equals( Object THIS, Object THAT ); + + + /** + * Return hashcode for THIS.hashCode() + * + * @param THIS + * @return hashcode for THIS.hashCode() + */ + public int hashCode( Object THIS ); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/BCELFactory.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/BCELFactory.java index 5dfddca2..a4037b20 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/BCELFactory.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/BCELFactory.java @@ -1,327 +1,327 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.classfile.Utility; -import org.apache.bcel5_2_0.generic.AllocationInstruction; -import org.apache.bcel5_2_0.generic.ArrayInstruction; -import org.apache.bcel5_2_0.generic.ArrayType; -import org.apache.bcel5_2_0.generic.BranchHandle; -import org.apache.bcel5_2_0.generic.BranchInstruction; -import org.apache.bcel5_2_0.generic.CHECKCAST; -import org.apache.bcel5_2_0.generic.CPInstruction; -import org.apache.bcel5_2_0.generic.CodeExceptionGen; -import org.apache.bcel5_2_0.generic.ConstantPoolGen; -import org.apache.bcel5_2_0.generic.ConstantPushInstruction; -import org.apache.bcel5_2_0.generic.EmptyVisitor; -import org.apache.bcel5_2_0.generic.FieldInstruction; -import org.apache.bcel5_2_0.generic.IINC; -import org.apache.bcel5_2_0.generic.INSTANCEOF; -import org.apache.bcel5_2_0.generic.Instruction; -import org.apache.bcel5_2_0.generic.InstructionConstants; -import org.apache.bcel5_2_0.generic.InstructionHandle; -import org.apache.bcel5_2_0.generic.InvokeInstruction; -import org.apache.bcel5_2_0.generic.LDC; -import org.apache.bcel5_2_0.generic.LDC2_W; -import org.apache.bcel5_2_0.generic.LocalVariableInstruction; -import org.apache.bcel5_2_0.generic.MULTIANEWARRAY; -import org.apache.bcel5_2_0.generic.MethodGen; -import org.apache.bcel5_2_0.generic.NEWARRAY; -import org.apache.bcel5_2_0.generic.ObjectType; -import org.apache.bcel5_2_0.generic.RET; -import org.apache.bcel5_2_0.generic.ReturnInstruction; -import org.apache.bcel5_2_0.generic.Select; -import org.apache.bcel5_2_0.generic.Type; - -/** - * Factory creates il.append() statements, and sets instruction targets. - * A helper class for BCELifier. - * - * @see BCELifier - * @version $Id: BCELFactory.java 410087 2006-05-29 12:12:19Z tcurdt $ - * @author M. Dahm - */ -class BCELFactory extends EmptyVisitor { - - private MethodGen _mg; - private PrintWriter _out; - private ConstantPoolGen _cp; - - - BCELFactory(MethodGen mg, PrintWriter out) { - _mg = mg; - _cp = mg.getConstantPool(); - _out = out; - } - - private Map branch_map = new HashMap(); // Map - - - public void start() { - if (!_mg.isAbstract() && !_mg.isNative()) { - for (InstructionHandle ih = _mg.getInstructionList().getStart(); ih != null; ih = ih - .getNext()) { - Instruction i = ih.getInstruction(); - if (i instanceof BranchInstruction) { - branch_map.put(i, ih); // memorize container - } - if (ih.hasTargeters()) { - if (i instanceof BranchInstruction) { - _out.println(" InstructionHandle ih_" + ih.getPosition() + ";"); - } else { - _out.print(" InstructionHandle ih_" + ih.getPosition() + " = "); - } - } else { - _out.print(" "); - } - if (!visitInstruction(i)) { - i.accept(this); - } - } - updateBranchTargets(); - updateExceptionHandlers(); - } - } - - - private boolean visitInstruction( Instruction i ) { - short opcode = i.getOpcode(); - if ((InstructionConstants.INSTRUCTIONS[opcode] != null) - && !(i instanceof ConstantPushInstruction) && !(i instanceof ReturnInstruction)) { // Handled below - _out.println("il.append(InstructionConstants." - + i.getName().toUpperCase(Locale.ENGLISH) + ");"); - return true; - } - return false; - } - - - public void visitLocalVariableInstruction( LocalVariableInstruction i ) { - short opcode = i.getOpcode(); - Type type = i.getType(_cp); - if (opcode == Constants.IINC) { - _out.println("il.append(new IINC(" + i.getIndex() + ", " + ((IINC) i).getIncrement() - + "));"); - } else { - String kind = (opcode < Constants.ISTORE) ? "Load" : "Store"; - _out.println("il.append(_factory.create" + kind + "(" + BCELifier.printType(type) - + ", " + i.getIndex() + "));"); - } - } - - - public void visitArrayInstruction( ArrayInstruction i ) { - short opcode = i.getOpcode(); - Type type = i.getType(_cp); - String kind = (opcode < Constants.IASTORE) ? "Load" : "Store"; - _out.println("il.append(_factory.createArray" + kind + "(" + BCELifier.printType(type) - + "));"); - } - - - public void visitFieldInstruction( FieldInstruction i ) { - short opcode = i.getOpcode(); - String class_name = i.getClassName(_cp); - String field_name = i.getFieldName(_cp); - Type type = i.getFieldType(_cp); - _out.println("il.append(_factory.createFieldAccess(\"" + class_name + "\", \"" + field_name - + "\", " + BCELifier.printType(type) + ", " + "Constants." - + Constants.OPCODE_NAMES[opcode].toUpperCase(Locale.ENGLISH) + "));"); - } - - - public void visitInvokeInstruction( InvokeInstruction i ) { - short opcode = i.getOpcode(); - String class_name = i.getClassName(_cp); - String method_name = i.getMethodName(_cp); - Type type = i.getReturnType(_cp); - Type[] arg_types = i.getArgumentTypes(_cp); - _out.println("il.append(_factory.createInvoke(\"" + class_name + "\", \"" + method_name - + "\", " + BCELifier.printType(type) + ", " - + BCELifier.printArgumentTypes(arg_types) + ", " + "Constants." - + Constants.OPCODE_NAMES[opcode].toUpperCase(Locale.ENGLISH) + "));"); - } - - - public void visitAllocationInstruction( AllocationInstruction i ) { - Type type; - if (i instanceof CPInstruction) { - type = ((CPInstruction) i).getType(_cp); - } else { - type = ((NEWARRAY) i).getType(); - } - short opcode = ((Instruction) i).getOpcode(); - int dim = 1; - switch (opcode) { - case Constants.NEW: - _out.println("il.append(_factory.createNew(\"" + ((ObjectType) type).getClassName() - + "\"));"); - break; - case Constants.MULTIANEWARRAY: - dim = ((MULTIANEWARRAY) i).getDimensions(); - case Constants.ANEWARRAY: - case Constants.NEWARRAY: - if (type instanceof ArrayType) { - type = ((ArrayType) type).getBasicType(); - } - _out.println("il.append(_factory.createNewArray(" + BCELifier.printType(type) - + ", (short) " + dim + "));"); - break; - default: - throw new RuntimeException("Oops: " + opcode); - } - } - - - private void createConstant( Object value ) { - String embed = value.toString(); - if (value instanceof String) { - embed = '"' + Utility.convertString(value.toString()) + '"'; - } else if (value instanceof Character) { - embed = "(char)0x" + Integer.toHexString(((Character) value).charValue()); - } - _out.println("il.append(new PUSH(_cp, " + embed + "));"); - } - - - public void visitLDC( LDC i ) { - createConstant(i.getValue(_cp)); - } - - - public void visitLDC2_W( LDC2_W i ) { - createConstant(i.getValue(_cp)); - } - - - public void visitConstantPushInstruction( ConstantPushInstruction i ) { - createConstant(i.getValue()); - } - - - public void visitINSTANCEOF( INSTANCEOF i ) { - Type type = i.getType(_cp); - _out.println("il.append(new INSTANCEOF(_cp.addClass(" + BCELifier.printType(type) + ")));"); - } - - - public void visitCHECKCAST( CHECKCAST i ) { - Type type = i.getType(_cp); - _out.println("il.append(_factory.createCheckCast(" + BCELifier.printType(type) + "));"); - } - - - public void visitReturnInstruction( ReturnInstruction i ) { - Type type = i.getType(_cp); - _out.println("il.append(_factory.createReturn(" + BCELifier.printType(type) + "));"); - } - - // Memorize BranchInstructions that need an update - private List branches = new ArrayList(); - - - public void visitBranchInstruction( BranchInstruction bi ) { - BranchHandle bh = (BranchHandle) branch_map.get(bi); - int pos = bh.getPosition(); - String name = bi.getName() + "_" + pos; - if (bi instanceof Select) { - Select s = (Select) bi; - branches.add(bi); - StringBuilder args = new StringBuilder("new int[] { "); - int[] matchs = s.getMatchs(); - for (int i = 0; i < matchs.length; i++) { - args.append(matchs[i]); - if (i < matchs.length - 1) { - args.append(", "); - } - } - args.append(" }"); - _out.print("Select " + name + " = new " + bi.getName().toUpperCase(Locale.ENGLISH) - + "(" + args + ", new InstructionHandle[] { "); - for (int i = 0; i < matchs.length; i++) { - _out.print("null"); - if (i < matchs.length - 1) { - _out.print(", "); - } - } - _out.println(" }, null);"); - } else { - int t_pos = bh.getTarget().getPosition(); - String target; - if (pos > t_pos) { - target = "ih_" + t_pos; - } else { - branches.add(bi); - target = "null"; - } - _out.println(" BranchInstruction " + name + " = _factory.createBranchInstruction(" - + "Constants." + bi.getName().toUpperCase(Locale.ENGLISH) + ", " + target - + ");"); - } - if (bh.hasTargeters()) { - _out.println(" ih_" + pos + " = il.append(" + name + ");"); - } else { - _out.println(" il.append(" + name + ");"); - } - } - - - public void visitRET( RET i ) { - _out.println("il.append(new RET(" + i.getIndex() + ")));"); - } - - - private void updateBranchTargets() { - for (Iterator i = branches.iterator(); i.hasNext();) { - BranchInstruction bi = (BranchInstruction) i.next(); - BranchHandle bh = (BranchHandle) branch_map.get(bi); - int pos = bh.getPosition(); - String name = bi.getName() + "_" + pos; - int t_pos = bh.getTarget().getPosition(); - _out.println(" " + name + ".setTarget(ih_" + t_pos + ");"); - if (bi instanceof Select) { - InstructionHandle[] ihs = ((Select) bi).getTargets(); - for (int j = 0; j < ihs.length; j++) { - t_pos = ihs[j].getPosition(); - _out.println(" " + name + ".setTarget(" + j + ", ih_" + t_pos + ");"); - } - } - } - } - - - private void updateExceptionHandlers() { - CodeExceptionGen[] handlers = _mg.getExceptionHandlers(); - for (int i = 0; i < handlers.length; i++) { - CodeExceptionGen h = handlers[i]; - String type = (h.getCatchType() == null) ? "null" : BCELifier.printType(h - .getCatchType()); - _out.println(" method.addExceptionHandler(" + "ih_" + h.getStartPC().getPosition() - + ", " + "ih_" + h.getEndPC().getPosition() + ", " + "ih_" - + h.getHandlerPC().getPosition() + ", " + type + ");"); - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.classfile.Utility; +import org.apache.bcel5_2_0.generic.AllocationInstruction; +import org.apache.bcel5_2_0.generic.ArrayInstruction; +import org.apache.bcel5_2_0.generic.ArrayType; +import org.apache.bcel5_2_0.generic.BranchHandle; +import org.apache.bcel5_2_0.generic.BranchInstruction; +import org.apache.bcel5_2_0.generic.CHECKCAST; +import org.apache.bcel5_2_0.generic.CPInstruction; +import org.apache.bcel5_2_0.generic.CodeExceptionGen; +import org.apache.bcel5_2_0.generic.ConstantPoolGen; +import org.apache.bcel5_2_0.generic.ConstantPushInstruction; +import org.apache.bcel5_2_0.generic.EmptyVisitor; +import org.apache.bcel5_2_0.generic.FieldInstruction; +import org.apache.bcel5_2_0.generic.IINC; +import org.apache.bcel5_2_0.generic.INSTANCEOF; +import org.apache.bcel5_2_0.generic.Instruction; +import org.apache.bcel5_2_0.generic.InstructionConstants; +import org.apache.bcel5_2_0.generic.InstructionHandle; +import org.apache.bcel5_2_0.generic.InvokeInstruction; +import org.apache.bcel5_2_0.generic.LDC; +import org.apache.bcel5_2_0.generic.LDC2_W; +import org.apache.bcel5_2_0.generic.LocalVariableInstruction; +import org.apache.bcel5_2_0.generic.MULTIANEWARRAY; +import org.apache.bcel5_2_0.generic.MethodGen; +import org.apache.bcel5_2_0.generic.NEWARRAY; +import org.apache.bcel5_2_0.generic.ObjectType; +import org.apache.bcel5_2_0.generic.RET; +import org.apache.bcel5_2_0.generic.ReturnInstruction; +import org.apache.bcel5_2_0.generic.Select; +import org.apache.bcel5_2_0.generic.Type; + +/** + * Factory creates il.append() statements, and sets instruction targets. + * A helper class for BCELifier. + * + * @see BCELifier + * @version $Id: BCELFactory.java 410087 2006-05-29 12:12:19Z tcurdt $ + * @author M. Dahm + */ +class BCELFactory extends EmptyVisitor { + + private MethodGen _mg; + private PrintWriter _out; + private ConstantPoolGen _cp; + + + BCELFactory(MethodGen mg, PrintWriter out) { + _mg = mg; + _cp = mg.getConstantPool(); + _out = out; + } + + private Map branch_map = new HashMap(); // Map + + + public void start() { + if (!_mg.isAbstract() && !_mg.isNative()) { + for (InstructionHandle ih = _mg.getInstructionList().getStart(); ih != null; ih = ih + .getNext()) { + Instruction i = ih.getInstruction(); + if (i instanceof BranchInstruction) { + branch_map.put(i, ih); // memorize container + } + if (ih.hasTargeters()) { + if (i instanceof BranchInstruction) { + _out.println(" InstructionHandle ih_" + ih.getPosition() + ";"); + } else { + _out.print(" InstructionHandle ih_" + ih.getPosition() + " = "); + } + } else { + _out.print(" "); + } + if (!visitInstruction(i)) { + i.accept(this); + } + } + updateBranchTargets(); + updateExceptionHandlers(); + } + } + + + private boolean visitInstruction( Instruction i ) { + short opcode = i.getOpcode(); + if ((InstructionConstants.INSTRUCTIONS[opcode] != null) + && !(i instanceof ConstantPushInstruction) && !(i instanceof ReturnInstruction)) { // Handled below + _out.println("il.append(InstructionConstants." + + i.getName().toUpperCase(Locale.ENGLISH) + ");"); + return true; + } + return false; + } + + + public void visitLocalVariableInstruction( LocalVariableInstruction i ) { + short opcode = i.getOpcode(); + Type type = i.getType(_cp); + if (opcode == Constants.IINC) { + _out.println("il.append(new IINC(" + i.getIndex() + ", " + ((IINC) i).getIncrement() + + "));"); + } else { + String kind = (opcode < Constants.ISTORE) ? "Load" : "Store"; + _out.println("il.append(_factory.create" + kind + "(" + BCELifier.printType(type) + + ", " + i.getIndex() + "));"); + } + } + + + public void visitArrayInstruction( ArrayInstruction i ) { + short opcode = i.getOpcode(); + Type type = i.getType(_cp); + String kind = (opcode < Constants.IASTORE) ? "Load" : "Store"; + _out.println("il.append(_factory.createArray" + kind + "(" + BCELifier.printType(type) + + "));"); + } + + + public void visitFieldInstruction( FieldInstruction i ) { + short opcode = i.getOpcode(); + String class_name = i.getClassName(_cp); + String field_name = i.getFieldName(_cp); + Type type = i.getFieldType(_cp); + _out.println("il.append(_factory.createFieldAccess(\"" + class_name + "\", \"" + field_name + + "\", " + BCELifier.printType(type) + ", " + "Constants." + + Constants.OPCODE_NAMES[opcode].toUpperCase(Locale.ENGLISH) + "));"); + } + + + public void visitInvokeInstruction( InvokeInstruction i ) { + short opcode = i.getOpcode(); + String class_name = i.getClassName(_cp); + String method_name = i.getMethodName(_cp); + Type type = i.getReturnType(_cp); + Type[] arg_types = i.getArgumentTypes(_cp); + _out.println("il.append(_factory.createInvoke(\"" + class_name + "\", \"" + method_name + + "\", " + BCELifier.printType(type) + ", " + + BCELifier.printArgumentTypes(arg_types) + ", " + "Constants." + + Constants.OPCODE_NAMES[opcode].toUpperCase(Locale.ENGLISH) + "));"); + } + + + public void visitAllocationInstruction( AllocationInstruction i ) { + Type type; + if (i instanceof CPInstruction) { + type = ((CPInstruction) i).getType(_cp); + } else { + type = ((NEWARRAY) i).getType(); + } + short opcode = ((Instruction) i).getOpcode(); + int dim = 1; + switch (opcode) { + case Constants.NEW: + _out.println("il.append(_factory.createNew(\"" + ((ObjectType) type).getClassName() + + "\"));"); + break; + case Constants.MULTIANEWARRAY: + dim = ((MULTIANEWARRAY) i).getDimensions(); + case Constants.ANEWARRAY: + case Constants.NEWARRAY: + if (type instanceof ArrayType) { + type = ((ArrayType) type).getBasicType(); + } + _out.println("il.append(_factory.createNewArray(" + BCELifier.printType(type) + + ", (short) " + dim + "));"); + break; + default: + throw new RuntimeException("Oops: " + opcode); + } + } + + + private void createConstant( Object value ) { + String embed = value.toString(); + if (value instanceof String) { + embed = '"' + Utility.convertString(value.toString()) + '"'; + } else if (value instanceof Character) { + embed = "(char)0x" + Integer.toHexString(((Character) value).charValue()); + } + _out.println("il.append(new PUSH(_cp, " + embed + "));"); + } + + + public void visitLDC( LDC i ) { + createConstant(i.getValue(_cp)); + } + + + public void visitLDC2_W( LDC2_W i ) { + createConstant(i.getValue(_cp)); + } + + + public void visitConstantPushInstruction( ConstantPushInstruction i ) { + createConstant(i.getValue()); + } + + + public void visitINSTANCEOF( INSTANCEOF i ) { + Type type = i.getType(_cp); + _out.println("il.append(new INSTANCEOF(_cp.addClass(" + BCELifier.printType(type) + ")));"); + } + + + public void visitCHECKCAST( CHECKCAST i ) { + Type type = i.getType(_cp); + _out.println("il.append(_factory.createCheckCast(" + BCELifier.printType(type) + "));"); + } + + + public void visitReturnInstruction( ReturnInstruction i ) { + Type type = i.getType(_cp); + _out.println("il.append(_factory.createReturn(" + BCELifier.printType(type) + "));"); + } + + // Memorize BranchInstructions that need an update + private List branches = new ArrayList(); + + + public void visitBranchInstruction( BranchInstruction bi ) { + BranchHandle bh = (BranchHandle) branch_map.get(bi); + int pos = bh.getPosition(); + String name = bi.getName() + "_" + pos; + if (bi instanceof Select) { + Select s = (Select) bi; + branches.add(bi); + StringBuilder args = new StringBuilder("new int[] { "); + int[] matchs = s.getMatchs(); + for (int i = 0; i < matchs.length; i++) { + args.append(matchs[i]); + if (i < matchs.length - 1) { + args.append(", "); + } + } + args.append(" }"); + _out.print("Select " + name + " = new " + bi.getName().toUpperCase(Locale.ENGLISH) + + "(" + args + ", new InstructionHandle[] { "); + for (int i = 0; i < matchs.length; i++) { + _out.print("null"); + if (i < matchs.length - 1) { + _out.print(", "); + } + } + _out.println(" }, null);"); + } else { + int t_pos = bh.getTarget().getPosition(); + String target; + if (pos > t_pos) { + target = "ih_" + t_pos; + } else { + branches.add(bi); + target = "null"; + } + _out.println(" BranchInstruction " + name + " = _factory.createBranchInstruction(" + + "Constants." + bi.getName().toUpperCase(Locale.ENGLISH) + ", " + target + + ");"); + } + if (bh.hasTargeters()) { + _out.println(" ih_" + pos + " = il.append(" + name + ");"); + } else { + _out.println(" il.append(" + name + ");"); + } + } + + + public void visitRET( RET i ) { + _out.println("il.append(new RET(" + i.getIndex() + ")));"); + } + + + private void updateBranchTargets() { + for (Iterator i = branches.iterator(); i.hasNext();) { + BranchInstruction bi = (BranchInstruction) i.next(); + BranchHandle bh = (BranchHandle) branch_map.get(bi); + int pos = bh.getPosition(); + String name = bi.getName() + "_" + pos; + int t_pos = bh.getTarget().getPosition(); + _out.println(" " + name + ".setTarget(ih_" + t_pos + ");"); + if (bi instanceof Select) { + InstructionHandle[] ihs = ((Select) bi).getTargets(); + for (int j = 0; j < ihs.length; j++) { + t_pos = ihs[j].getPosition(); + _out.println(" " + name + ".setTarget(" + j + ", ih_" + t_pos + ");"); + } + } + } + } + + + private void updateExceptionHandlers() { + CodeExceptionGen[] handlers = _mg.getExceptionHandlers(); + for (int i = 0; i < handlers.length; i++) { + CodeExceptionGen h = handlers[i]; + String type = (h.getCatchType() == null) ? "null" : BCELifier.printType(h + .getCatchType()); + _out.println(" method.addExceptionHandler(" + "ih_" + h.getStartPC().getPosition() + + ", " + "ih_" + h.getEndPC().getPosition() + ", " + "ih_" + + h.getHandlerPC().getPosition() + ", " + type + ");"); + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/BCELifier.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/BCELifier.java index 59a82233..287b8731 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/BCELifier.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/BCELifier.java @@ -1,269 +1,269 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.io.OutputStream; -import java.io.PrintWriter; -import java.util.Locale; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.Repository; -import org.apache.bcel5_2_0.classfile.ClassParser; -import org.apache.bcel5_2_0.classfile.ConstantValue; -import org.apache.bcel5_2_0.classfile.Field; -import org.apache.bcel5_2_0.classfile.JavaClass; -import org.apache.bcel5_2_0.classfile.Method; -import org.apache.bcel5_2_0.classfile.Utility; -import org.apache.bcel5_2_0.generic.ArrayType; -import org.apache.bcel5_2_0.generic.ConstantPoolGen; -import org.apache.bcel5_2_0.generic.MethodGen; -import org.apache.bcel5_2_0.generic.Type; - -/** - * This class takes a given JavaClass object and converts it to a - * Java program that creates that very class using BCEL. This - * gives new users of BCEL a useful example showing how things - * are done with BCEL. It does not cover all features of BCEL, - * but tries to mimic hand-written code as close as possible. - * - * @version $Id: BCELifier.java 394939 2006-04-18 13:23:49Z tcurdt $ - * @author M. Dahm - */ -public class BCELifier extends org.apache.bcel5_2_0.classfile.EmptyVisitor { - - private static final int FLAG_FOR_UNKNOWN = -1; - private static final int FLAG_FOR_CLASS = 0; - private static final int FLAG_FOR_METHOD = 1; - private JavaClass _clazz; - private PrintWriter _out; - private ConstantPoolGen _cp; - - - /** @param clazz Java class to "decompile" - * @param out where to output Java program - */ - public BCELifier(JavaClass clazz, OutputStream out) { - _clazz = clazz; - _out = new PrintWriter(out); - _cp = new ConstantPoolGen(_clazz.getConstantPool()); - } - - - /** Start Java code generation - */ - public void start() { - visitJavaClass(_clazz); - _out.flush(); - } - - - public void visitJavaClass( JavaClass clazz ) { - String class_name = clazz.getClassName(); - String super_name = clazz.getSuperclassName(); - String package_name = clazz.getPackageName(); - String inter = Utility.printArray(clazz.getInterfaceNames(), false, true); - if (!"".equals(package_name)) { - class_name = class_name.substring(package_name.length() + 1); - _out.println("package " + package_name + ";"); - _out.println(); - } - _out.println("import org.apache.bcel.generic.*;"); - _out.println("import org.apache.bcel.classfile.*;"); - _out.println("import org.apache.bcel.*;"); - _out.println("import java.io.*;"); - _out.println(); - _out.println("public class " + class_name + "Creator implements Constants {"); - _out.println(" private InstructionFactory _factory;"); - _out.println(" private ConstantPoolGen _cp;"); - _out.println(" private ClassGen _cg;"); - _out.println(); - _out.println(" public " + class_name + "Creator() {"); - _out.println(" _cg = new ClassGen(\"" - + (("".equals(package_name)) ? class_name : package_name + "." + class_name) - + "\", \"" + super_name + "\", " + "\"" + clazz.getSourceFileName() + "\", " - + printFlags(clazz.getAccessFlags(), FLAG_FOR_CLASS) + ", " + "new String[] { " - + inter + " });"); - _out.println(); - _out.println(" _cp = _cg.getConstantPool();"); - _out.println(" _factory = new InstructionFactory(_cg, _cp);"); - _out.println(" }"); - _out.println(); - printCreate(); - Field[] fields = clazz.getFields(); - if (fields.length > 0) { - _out.println(" private void createFields() {"); - _out.println(" FieldGen field;"); - for (int i = 0; i < fields.length; i++) { - fields[i].accept(this); - } - _out.println(" }"); - _out.println(); - } - Method[] methods = clazz.getMethods(); - for (int i = 0; i < methods.length; i++) { - _out.println(" private void createMethod_" + i + "() {"); - methods[i].accept(this); - _out.println(" }"); - _out.println(); - } - printMain(); - _out.println("}"); - } - - - private void printCreate() { - _out.println(" public void create(OutputStream out) throws IOException {"); - Field[] fields = _clazz.getFields(); - if (fields.length > 0) { - _out.println(" createFields();"); - } - Method[] methods = _clazz.getMethods(); - for (int i = 0; i < methods.length; i++) { - _out.println(" createMethod_" + i + "();"); - } - _out.println(" _cg.getJavaClass().dump(out);"); - _out.println(" }"); - _out.println(); - } - - - private void printMain() { - String class_name = _clazz.getClassName(); - _out.println(" public static void main(String[] args) throws Exception {"); - _out.println(" " + class_name + "Creator creator = new " + class_name + "Creator();"); - _out.println(" creator.create(new FileOutputStream(\"" + class_name + ".class\"));"); - _out.println(" }"); - } - - - public void visitField( Field field ) { - _out.println(); - _out.println(" field = new FieldGen(" + printFlags(field.getAccessFlags()) + ", " - + printType(field.getSignature()) + ", \"" + field.getName() + "\", _cp);"); - ConstantValue cv = field.getConstantValue(); - if (cv != null) { - String value = cv.toString(); - _out.println(" field.setInitValue(" + value + ")"); - } - _out.println(" _cg.addField(field.getField());"); - } - - - public void visitMethod( Method method ) { - MethodGen mg = new MethodGen(method, _clazz.getClassName(), _cp); - Type result_type = mg.getReturnType(); - Type[] arg_types = mg.getArgumentTypes(); - _out.println(" InstructionList il = new InstructionList();"); - _out.println(" MethodGen method = new MethodGen(" - + printFlags(method.getAccessFlags(), FLAG_FOR_METHOD) + ", " - + printType(result_type) + ", " + printArgumentTypes(arg_types) + ", " - + "new String[] { " + Utility.printArray(mg.getArgumentNames(), false, true) - + " }, \"" + method.getName() + "\", \"" + _clazz.getClassName() + "\", il, _cp);"); - _out.println(); - BCELFactory factory = new BCELFactory(mg, _out); - factory.start(); - _out.println(" method.setMaxStack();"); - _out.println(" method.setMaxLocals();"); - _out.println(" _cg.addMethod(method.getMethod());"); - _out.println(" il.dispose();"); - } - - - static String printFlags( int flags ) { - return printFlags(flags, FLAG_FOR_UNKNOWN); - } - - - static String printFlags( int flags, int reason ) { - if (flags == 0) { - return "0"; - } - StringBuilder buf = new StringBuilder(); - for (int i = 0, pow = 1; pow <= Constants.MAX_ACC_FLAG; i++) { - if ((flags & pow) != 0) { - if ((pow == Constants.ACC_SYNCHRONIZED) && (reason == FLAG_FOR_CLASS)) { - buf.append("ACC_SUPER | "); - } else if ((pow == Constants.ACC_VOLATILE) && (reason == FLAG_FOR_METHOD)) { - buf.append("ACC_BRIDGE | "); - } else if ((pow == Constants.ACC_TRANSIENT) && (reason == FLAG_FOR_METHOD)) { - buf.append("ACC_VARARGS | "); - } else { - buf.append("ACC_") - .append(Constants.ACCESS_NAMES[i].toUpperCase(Locale.ENGLISH)).append( - " | "); - } - } - pow <<= 1; - } - String str = buf.toString(); - return str.substring(0, str.length() - 3); - } - - - static String printArgumentTypes( Type[] arg_types ) { - if (arg_types.length == 0) { - return "Type.NO_ARGS"; - } - StringBuilder args = new StringBuilder(); - for (int i = 0; i < arg_types.length; i++) { - args.append(printType(arg_types[i])); - if (i < arg_types.length - 1) { - args.append(", "); - } - } - return "new Type[] { " + args.toString() + " }"; - } - - - static String printType( Type type ) { - return printType(type.getSignature()); - } - - - static String printType( String signature ) { - Type type = Type.getType(signature); - byte t = type.getType(); - if (t <= Constants.T_VOID) { - return "Type." + Constants.TYPE_NAMES[t].toUpperCase(Locale.ENGLISH); - } else if (type.toString().equals("java.lang.String")) { - return "Type.STRING"; - } else if (type.toString().equals("java.lang.Object")) { - return "Type.OBJECT"; - } else if (type.toString().equals("java.lang.StringBuffer")) { - return "Type.STRINGBUFFER"; - } else if (type instanceof ArrayType) { - ArrayType at = (ArrayType) type; - return "new ArrayType(" + printType(at.getBasicType()) + ", " + at.getDimensions() - + ")"; - } else { - return "new ObjectType(\"" + Utility.signatureToString(signature, false) + "\")"; - } - } - - - /** Default main method - */ - public static void main( String[] argv ) throws Exception { - JavaClass java_class; - String name = argv[0]; - if ((java_class = Repository.lookupClass(name)) == null) { - java_class = new ClassParser(name).parse(); // May throw IOException - } - BCELifier bcelifier = new BCELifier(java_class, System.out); - bcelifier.start(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.io.OutputStream; +import java.io.PrintWriter; +import java.util.Locale; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.Repository; +import org.apache.bcel5_2_0.classfile.ClassParser; +import org.apache.bcel5_2_0.classfile.ConstantValue; +import org.apache.bcel5_2_0.classfile.Field; +import org.apache.bcel5_2_0.classfile.JavaClass; +import org.apache.bcel5_2_0.classfile.Method; +import org.apache.bcel5_2_0.classfile.Utility; +import org.apache.bcel5_2_0.generic.ArrayType; +import org.apache.bcel5_2_0.generic.ConstantPoolGen; +import org.apache.bcel5_2_0.generic.MethodGen; +import org.apache.bcel5_2_0.generic.Type; + +/** + * This class takes a given JavaClass object and converts it to a + * Java program that creates that very class using BCEL. This + * gives new users of BCEL a useful example showing how things + * are done with BCEL. It does not cover all features of BCEL, + * but tries to mimic hand-written code as close as possible. + * + * @version $Id: BCELifier.java 394939 2006-04-18 13:23:49Z tcurdt $ + * @author M. Dahm + */ +public class BCELifier extends org.apache.bcel5_2_0.classfile.EmptyVisitor { + + private static final int FLAG_FOR_UNKNOWN = -1; + private static final int FLAG_FOR_CLASS = 0; + private static final int FLAG_FOR_METHOD = 1; + private JavaClass _clazz; + private PrintWriter _out; + private ConstantPoolGen _cp; + + + /** @param clazz Java class to "decompile" + * @param out where to output Java program + */ + public BCELifier(JavaClass clazz, OutputStream out) { + _clazz = clazz; + _out = new PrintWriter(out); + _cp = new ConstantPoolGen(_clazz.getConstantPool()); + } + + + /** Start Java code generation + */ + public void start() { + visitJavaClass(_clazz); + _out.flush(); + } + + + public void visitJavaClass( JavaClass clazz ) { + String class_name = clazz.getClassName(); + String super_name = clazz.getSuperclassName(); + String package_name = clazz.getPackageName(); + String inter = Utility.printArray(clazz.getInterfaceNames(), false, true); + if (!"".equals(package_name)) { + class_name = class_name.substring(package_name.length() + 1); + _out.println("package " + package_name + ";"); + _out.println(); + } + _out.println("import org.apache.bcel.generic.*;"); + _out.println("import org.apache.bcel.classfile.*;"); + _out.println("import org.apache.bcel.*;"); + _out.println("import java.io.*;"); + _out.println(); + _out.println("public class " + class_name + "Creator implements Constants {"); + _out.println(" private InstructionFactory _factory;"); + _out.println(" private ConstantPoolGen _cp;"); + _out.println(" private ClassGen _cg;"); + _out.println(); + _out.println(" public " + class_name + "Creator() {"); + _out.println(" _cg = new ClassGen(\"" + + (("".equals(package_name)) ? class_name : package_name + "." + class_name) + + "\", \"" + super_name + "\", " + "\"" + clazz.getSourceFileName() + "\", " + + printFlags(clazz.getAccessFlags(), FLAG_FOR_CLASS) + ", " + "new String[] { " + + inter + " });"); + _out.println(); + _out.println(" _cp = _cg.getConstantPool();"); + _out.println(" _factory = new InstructionFactory(_cg, _cp);"); + _out.println(" }"); + _out.println(); + printCreate(); + Field[] fields = clazz.getFields(); + if (fields.length > 0) { + _out.println(" private void createFields() {"); + _out.println(" FieldGen field;"); + for (int i = 0; i < fields.length; i++) { + fields[i].accept(this); + } + _out.println(" }"); + _out.println(); + } + Method[] methods = clazz.getMethods(); + for (int i = 0; i < methods.length; i++) { + _out.println(" private void createMethod_" + i + "() {"); + methods[i].accept(this); + _out.println(" }"); + _out.println(); + } + printMain(); + _out.println("}"); + } + + + private void printCreate() { + _out.println(" public void create(OutputStream out) throws IOException {"); + Field[] fields = _clazz.getFields(); + if (fields.length > 0) { + _out.println(" createFields();"); + } + Method[] methods = _clazz.getMethods(); + for (int i = 0; i < methods.length; i++) { + _out.println(" createMethod_" + i + "();"); + } + _out.println(" _cg.getJavaClass().dump(out);"); + _out.println(" }"); + _out.println(); + } + + + private void printMain() { + String class_name = _clazz.getClassName(); + _out.println(" public static void main(String[] args) throws Exception {"); + _out.println(" " + class_name + "Creator creator = new " + class_name + "Creator();"); + _out.println(" creator.create(new FileOutputStream(\"" + class_name + ".class\"));"); + _out.println(" }"); + } + + + public void visitField( Field field ) { + _out.println(); + _out.println(" field = new FieldGen(" + printFlags(field.getAccessFlags()) + ", " + + printType(field.getSignature()) + ", \"" + field.getName() + "\", _cp);"); + ConstantValue cv = field.getConstantValue(); + if (cv != null) { + String value = cv.toString(); + _out.println(" field.setInitValue(" + value + ")"); + } + _out.println(" _cg.addField(field.getField());"); + } + + + public void visitMethod( Method method ) { + MethodGen mg = new MethodGen(method, _clazz.getClassName(), _cp); + Type result_type = mg.getReturnType(); + Type[] arg_types = mg.getArgumentTypes(); + _out.println(" InstructionList il = new InstructionList();"); + _out.println(" MethodGen method = new MethodGen(" + + printFlags(method.getAccessFlags(), FLAG_FOR_METHOD) + ", " + + printType(result_type) + ", " + printArgumentTypes(arg_types) + ", " + + "new String[] { " + Utility.printArray(mg.getArgumentNames(), false, true) + + " }, \"" + method.getName() + "\", \"" + _clazz.getClassName() + "\", il, _cp);"); + _out.println(); + BCELFactory factory = new BCELFactory(mg, _out); + factory.start(); + _out.println(" method.setMaxStack();"); + _out.println(" method.setMaxLocals();"); + _out.println(" _cg.addMethod(method.getMethod());"); + _out.println(" il.dispose();"); + } + + + static String printFlags( int flags ) { + return printFlags(flags, FLAG_FOR_UNKNOWN); + } + + + static String printFlags( int flags, int reason ) { + if (flags == 0) { + return "0"; + } + StringBuilder buf = new StringBuilder(); + for (int i = 0, pow = 1; pow <= Constants.MAX_ACC_FLAG; i++) { + if ((flags & pow) != 0) { + if ((pow == Constants.ACC_SYNCHRONIZED) && (reason == FLAG_FOR_CLASS)) { + buf.append("ACC_SUPER | "); + } else if ((pow == Constants.ACC_VOLATILE) && (reason == FLAG_FOR_METHOD)) { + buf.append("ACC_BRIDGE | "); + } else if ((pow == Constants.ACC_TRANSIENT) && (reason == FLAG_FOR_METHOD)) { + buf.append("ACC_VARARGS | "); + } else { + buf.append("ACC_") + .append(Constants.ACCESS_NAMES[i].toUpperCase(Locale.ENGLISH)).append( + " | "); + } + } + pow <<= 1; + } + String str = buf.toString(); + return str.substring(0, str.length() - 3); + } + + + static String printArgumentTypes( Type[] arg_types ) { + if (arg_types.length == 0) { + return "Type.NO_ARGS"; + } + StringBuilder args = new StringBuilder(); + for (int i = 0; i < arg_types.length; i++) { + args.append(printType(arg_types[i])); + if (i < arg_types.length - 1) { + args.append(", "); + } + } + return "new Type[] { " + args.toString() + " }"; + } + + + static String printType( Type type ) { + return printType(type.getSignature()); + } + + + static String printType( String signature ) { + Type type = Type.getType(signature); + byte t = type.getType(); + if (t <= Constants.T_VOID) { + return "Type." + Constants.TYPE_NAMES[t].toUpperCase(Locale.ENGLISH); + } else if (type.toString().equals("java.lang.String")) { + return "Type.STRING"; + } else if (type.toString().equals("java.lang.Object")) { + return "Type.OBJECT"; + } else if (type.toString().equals("java.lang.StringBuffer")) { + return "Type.STRINGBUFFER"; + } else if (type instanceof ArrayType) { + ArrayType at = (ArrayType) type; + return "new ArrayType(" + printType(at.getBasicType()) + ", " + at.getDimensions() + + ")"; + } else { + return "new ObjectType(\"" + Utility.signatureToString(signature, false) + "\")"; + } + } + + + /** Default main method + */ + public static void main( String[] argv ) throws Exception { + JavaClass java_class; + String name = argv[0]; + if ((java_class = Repository.lookupClass(name)) == null) { + java_class = new ClassParser(name).parse(); // May throw IOException + } + BCELifier bcelifier = new BCELifier(java_class, System.out); + bcelifier.start(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ByteSequence.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ByteSequence.java index 802469b4..fb8abef4 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ByteSequence.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ByteSequence.java @@ -1,68 +1,68 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; - -/** - * Utility class that implements a sequence of bytes which can be read - * via the `readByte()' method. This is used to implement a wrapper for the - * Java byte code stream to gain some more readability. - * - * @version $Id: ByteSequence.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class ByteSequence extends DataInputStream { - - private ByteArrayStream byte_stream; - - - public ByteSequence(byte[] bytes) { - super(new ByteArrayStream(bytes)); - byte_stream = (ByteArrayStream) in; - } - - - public final int getIndex() { - return byte_stream.getPosition(); - } - - - final void unreadByte() { - byte_stream.unreadByte(); - } - - private static final class ByteArrayStream extends ByteArrayInputStream { - - ByteArrayStream(byte[] bytes) { - super(bytes); - } - - - final int getPosition() { - return pos; - } // is protected in ByteArrayInputStream - - - final void unreadByte() { - if (pos > 0) { - pos--; - } - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; + +/** + * Utility class that implements a sequence of bytes which can be read + * via the `readByte()' method. This is used to implement a wrapper for the + * Java byte code stream to gain some more readability. + * + * @version $Id: ByteSequence.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public final class ByteSequence extends DataInputStream { + + private ByteArrayStream byte_stream; + + + public ByteSequence(byte[] bytes) { + super(new ByteArrayStream(bytes)); + byte_stream = (ByteArrayStream) in; + } + + + public final int getIndex() { + return byte_stream.getPosition(); + } + + + final void unreadByte() { + byte_stream.unreadByte(); + } + + private static final class ByteArrayStream extends ByteArrayInputStream { + + ByteArrayStream(byte[] bytes) { + super(bytes); + } + + + final int getPosition() { + return pos; + } // is protected in ByteArrayInputStream + + + final void unreadByte() { + if (pos > 0) { + pos--; + } + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/Class2HTML.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/Class2HTML.java index 319cb223..d1f161df 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/Class2HTML.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/Class2HTML.java @@ -1,232 +1,232 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.classfile.Attribute; -import org.apache.bcel5_2_0.classfile.ClassParser; -import org.apache.bcel5_2_0.classfile.ConstantPool; -import org.apache.bcel5_2_0.classfile.JavaClass; -import org.apache.bcel5_2_0.classfile.Method; -import org.apache.bcel5_2_0.classfile.Utility; - -/** - * Read class file(s) and convert them into HTML files. - * - * Given a JavaClass object "class" that is in package "package" five files - * will be created in the specified directory. - * - *

            - *
          1. "package"."class".html as the main file which defines the frames for - * the following subfiles. - *
          2. "package"."class"_attributes.html contains all (known) attributes found in the file - *
          3. "package"."class"_cp.html contains the constant pool - *
          4. "package"."class"_code.html contains the byte code - *
          5. "package"."class"_methods.html contains references to all methods and fields of the class - *
          - * - * All subfiles reference each other appropiately, e.g. clicking on a - * method in the Method's frame will jump to the appropiate method in - * the Code frame. - * - * @version $Id: Class2HTML.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class Class2HTML implements Constants { - - private JavaClass java_class; // current class object - private String dir; - private static String class_package; // name of package, unclean to make it static, but ... - private static String class_name; // name of current class, dito - private static ConstantPool constant_pool; - - - /** - * Write contents of the given JavaClass into HTML files. - * - * @param java_class The class to write - * @param dir The directory to put the files in - */ - public Class2HTML(JavaClass java_class, String dir) throws IOException { - Method[] methods = java_class.getMethods(); - this.java_class = java_class; - this.dir = dir; - class_name = java_class.getClassName(); // Remember full name - constant_pool = java_class.getConstantPool(); - // Get package name by tacking off everything after the last `.' - int index = class_name.lastIndexOf('.'); - if (index > -1) { - class_package = class_name.substring(0, index); - } else { - class_package = ""; // default package - } - ConstantHTML constant_html = new ConstantHTML(dir, class_name, class_package, methods, - constant_pool); - /* Attributes can't be written in one step, so we just open a file - * which will be written consequently. - */ - AttributeHTML attribute_html = new AttributeHTML(dir, class_name, constant_pool, - constant_html); - MethodHTML method_html = new MethodHTML(dir, class_name, methods, java_class.getFields(), - constant_html, attribute_html); - // Write main file (with frames, yuk) - writeMainHTML(attribute_html); - new CodeHTML(dir, class_name, methods, constant_pool, constant_html); - attribute_html.close(); - } - - - public static void main( String argv[] ) { - String[] file_name = new String[argv.length]; - int files = 0; - ClassParser parser = null; - JavaClass java_class = null; - String zip_file = null; - char sep = System.getProperty("file.separator").toCharArray()[0]; - String dir = "." + sep; // Where to store HTML files - try { - /* Parse command line arguments. - */ - for (int i = 0; i < argv.length; i++) { - if (argv[i].charAt(0) == '-') { // command line switch - if (argv[i].equals("-d")) { // Specify target directory, default - dir = argv[++i]; - if (!dir.endsWith("" + sep)) { - dir = dir + sep; - } - new File(dir).mkdirs(); // Create target directory if necessary - } else if (argv[i].equals("-zip")) { - zip_file = argv[++i]; - } else { - System.out.println("Unknown option " + argv[i]); - } - } else { - file_name[files++] = argv[i]; - } - } - if (files == 0) { - System.err.println("Class2HTML: No input files specified."); - } else { // Loop through files ... - for (int i = 0; i < files; i++) { - System.out.print("Processing " + file_name[i] + "..."); - if (zip_file == null) { - parser = new ClassParser(file_name[i]); // Create parser object from file - } else { - parser = new ClassParser(zip_file, file_name[i]); // Create parser object from zip file - } - java_class = parser.parse(); - new Class2HTML(java_class, dir); - System.out.println("Done."); - } - } - } catch (Exception e) { - System.out.println(e); - e.printStackTrace(System.out); - } - } - - - /** - * Utility method that converts a class reference in the constant pool, - * i.e., an index to a string. - */ - static String referenceClass( int index ) { - String str = constant_pool.getConstantString(index, CONSTANT_Class); - str = Utility.compactClassName(str); - str = Utility.compactClassName(str, class_package + ".", true); - return "" + str - + ""; - } - - - static final String referenceType( String type ) { - String short_type = Utility.compactClassName(type); - short_type = Utility.compactClassName(short_type, class_package + ".", true); - int index = type.indexOf('['); // Type is an array? - String base_type = type; - if (index > -1) { - base_type = type.substring(0, index); // Tack of the `[' - } - // test for basic type - if (base_type.equals("int") || base_type.equals("short") || base_type.equals("boolean") - || base_type.equals("void") || base_type.equals("char") || base_type.equals("byte") - || base_type.equals("long") || base_type.equals("double") - || base_type.equals("float")) { - return "" + type + ""; - } else { - return "" + short_type + ""; - } - } - - - static String toHTML( String str ) { - StringBuilder buf = new StringBuilder(); - try { // Filter any characters HTML doesn't like such as < and > in particular - for (int i = 0; i < str.length(); i++) { - char ch; - switch (ch = str.charAt(i)) { - case '<': - buf.append("<"); - break; - case '>': - buf.append(">"); - break; - case '\n': - buf.append("\\n"); - break; - case '\r': - buf.append("\\r"); - break; - default: - buf.append(ch); - } - } - } catch (StringIndexOutOfBoundsException e) { - } // Never occurs - return buf.toString(); - } - - - private void writeMainHTML( AttributeHTML attribute_html ) throws IOException { - PrintWriter file = new PrintWriter(new FileOutputStream(dir + class_name + ".html")); - Attribute[] attributes = java_class.getAttributes(); - file.println("\n" + "Documentation for " + class_name + "" - + "\n" + "\n" - + "\n" + "\n" - + "\n" + "\n" - + "\n" + "\n" - + "\n" - + ""); - file.close(); - for (int i = 0; i < attributes.length; i++) { - attribute_html.writeAttribute(attributes[i], "class" + i); - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintWriter; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.classfile.Attribute; +import org.apache.bcel5_2_0.classfile.ClassParser; +import org.apache.bcel5_2_0.classfile.ConstantPool; +import org.apache.bcel5_2_0.classfile.JavaClass; +import org.apache.bcel5_2_0.classfile.Method; +import org.apache.bcel5_2_0.classfile.Utility; + +/** + * Read class file(s) and convert them into HTML files. + * + * Given a JavaClass object "class" that is in package "package" five files + * will be created in the specified directory. + * + *
            + *
          1. "package"."class".html as the main file which defines the frames for + * the following subfiles. + *
          2. "package"."class"_attributes.html contains all (known) attributes found in the file + *
          3. "package"."class"_cp.html contains the constant pool + *
          4. "package"."class"_code.html contains the byte code + *
          5. "package"."class"_methods.html contains references to all methods and fields of the class + *
          + * + * All subfiles reference each other appropiately, e.g. clicking on a + * method in the Method's frame will jump to the appropiate method in + * the Code frame. + * + * @version $Id: Class2HTML.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class Class2HTML implements Constants { + + private JavaClass java_class; // current class object + private String dir; + private static String class_package; // name of package, unclean to make it static, but ... + private static String class_name; // name of current class, dito + private static ConstantPool constant_pool; + + + /** + * Write contents of the given JavaClass into HTML files. + * + * @param java_class The class to write + * @param dir The directory to put the files in + */ + public Class2HTML(JavaClass java_class, String dir) throws IOException { + Method[] methods = java_class.getMethods(); + this.java_class = java_class; + this.dir = dir; + class_name = java_class.getClassName(); // Remember full name + constant_pool = java_class.getConstantPool(); + // Get package name by tacking off everything after the last `.' + int index = class_name.lastIndexOf('.'); + if (index > -1) { + class_package = class_name.substring(0, index); + } else { + class_package = ""; // default package + } + ConstantHTML constant_html = new ConstantHTML(dir, class_name, class_package, methods, + constant_pool); + /* Attributes can't be written in one step, so we just open a file + * which will be written consequently. + */ + AttributeHTML attribute_html = new AttributeHTML(dir, class_name, constant_pool, + constant_html); + MethodHTML method_html = new MethodHTML(dir, class_name, methods, java_class.getFields(), + constant_html, attribute_html); + // Write main file (with frames, yuk) + writeMainHTML(attribute_html); + new CodeHTML(dir, class_name, methods, constant_pool, constant_html); + attribute_html.close(); + } + + + public static void main( String argv[] ) { + String[] file_name = new String[argv.length]; + int files = 0; + ClassParser parser = null; + JavaClass java_class = null; + String zip_file = null; + char sep = System.getProperty("file.separator").toCharArray()[0]; + String dir = "." + sep; // Where to store HTML files + try { + /* Parse command line arguments. + */ + for (int i = 0; i < argv.length; i++) { + if (argv[i].charAt(0) == '-') { // command line switch + if (argv[i].equals("-d")) { // Specify target directory, default + dir = argv[++i]; + if (!dir.endsWith("" + sep)) { + dir = dir + sep; + } + new File(dir).mkdirs(); // Create target directory if necessary + } else if (argv[i].equals("-zip")) { + zip_file = argv[++i]; + } else { + System.out.println("Unknown option " + argv[i]); + } + } else { + file_name[files++] = argv[i]; + } + } + if (files == 0) { + System.err.println("Class2HTML: No input files specified."); + } else { // Loop through files ... + for (int i = 0; i < files; i++) { + System.out.print("Processing " + file_name[i] + "..."); + if (zip_file == null) { + parser = new ClassParser(file_name[i]); // Create parser object from file + } else { + parser = new ClassParser(zip_file, file_name[i]); // Create parser object from zip file + } + java_class = parser.parse(); + new Class2HTML(java_class, dir); + System.out.println("Done."); + } + } + } catch (Exception e) { + System.out.println(e); + e.printStackTrace(System.out); + } + } + + + /** + * Utility method that converts a class reference in the constant pool, + * i.e., an index to a string. + */ + static String referenceClass( int index ) { + String str = constant_pool.getConstantString(index, CONSTANT_Class); + str = Utility.compactClassName(str); + str = Utility.compactClassName(str, class_package + ".", true); + return "" + str + + ""; + } + + + static final String referenceType( String type ) { + String short_type = Utility.compactClassName(type); + short_type = Utility.compactClassName(short_type, class_package + ".", true); + int index = type.indexOf('['); // Type is an array? + String base_type = type; + if (index > -1) { + base_type = type.substring(0, index); // Tack of the `[' + } + // test for basic type + if (base_type.equals("int") || base_type.equals("short") || base_type.equals("boolean") + || base_type.equals("void") || base_type.equals("char") || base_type.equals("byte") + || base_type.equals("long") || base_type.equals("double") + || base_type.equals("float")) { + return "" + type + ""; + } else { + return "" + short_type + ""; + } + } + + + static String toHTML( String str ) { + StringBuilder buf = new StringBuilder(); + try { // Filter any characters HTML doesn't like such as < and > in particular + for (int i = 0; i < str.length(); i++) { + char ch; + switch (ch = str.charAt(i)) { + case '<': + buf.append("<"); + break; + case '>': + buf.append(">"); + break; + case '\n': + buf.append("\\n"); + break; + case '\r': + buf.append("\\r"); + break; + default: + buf.append(ch); + } + } + } catch (StringIndexOutOfBoundsException e) { + } // Never occurs + return buf.toString(); + } + + + private void writeMainHTML( AttributeHTML attribute_html ) throws IOException { + PrintWriter file = new PrintWriter(new FileOutputStream(dir + class_name + ".html")); + Attribute[] attributes = java_class.getAttributes(); + file.println("\n" + "Documentation for " + class_name + "" + + "\n" + "\n" + + "\n" + "\n" + + "\n" + "\n" + + "\n" + "\n" + + "\n" + + ""); + file.close(); + for (int i = 0; i < attributes.length; i++) { + attribute_html.writeAttribute(attributes[i], "class" + i); + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassLoader.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassLoader.java index 686d4f8e..eb02383a 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassLoader.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassLoader.java @@ -1,185 +1,185 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.io.ByteArrayInputStream; -import java.util.Hashtable; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.classfile.ClassParser; -import org.apache.bcel5_2_0.classfile.ConstantClass; -import org.apache.bcel5_2_0.classfile.ConstantPool; -import org.apache.bcel5_2_0.classfile.ConstantUtf8; -import org.apache.bcel5_2_0.classfile.JavaClass; -import org.apache.bcel5_2_0.classfile.Utility; - -/** - *

          Drop in replacement for the standard class loader of the JVM. You can use it - * in conjunction with the JavaWrapper to dynamically modify/create classes - * as they're requested.

          - * - *

          This class loader recognizes special requests in a distinct - * format, i.e., when the name of the requested class contains with - * "$$BCEL$$" it calls the createClass() method with that name - * (everything bevor the $$BCEL$$ is considered to be the package - * name. You can subclass the class loader and override that - * method. "Normal" classes class can be modified by overriding the - * modifyClass() method which is called just before defineClass().

          - * - *

          There may be a number of packages where you have to use the - * default class loader (which may also be faster). You can define the - * set of packages where to use the system class loader in the - * constructor. The default value contains "java.", "sun.", - * "javax."

          - * - * @version $Id: ClassLoader.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see JavaWrapper - * @see ClassPath - */ -public class ClassLoader extends java.lang.ClassLoader { - - public static final String[] DEFAULT_IGNORED_PACKAGES = { - "java.", "javax.", "sun." - }; - private Hashtable classes = new Hashtable(); // Hashtable is synchronized thus thread-safe - private String[] ignored_packages; - private Repository repository = SyntheticRepository.getInstance(); - - - /** Ignored packages are by default ( "java.", "sun.", - * "javax."), i.e. loaded by system class loader - */ - public ClassLoader() { - this(DEFAULT_IGNORED_PACKAGES); - } - - - /** @param deferTo delegate class loader to use for ignored packages - */ - public ClassLoader(java.lang.ClassLoader deferTo) { - super(deferTo); - this.ignored_packages = DEFAULT_IGNORED_PACKAGES; - this.repository = new ClassLoaderRepository(deferTo); - } - - - /** @param ignored_packages classes contained in these packages will be loaded - * with the system class loader - */ - public ClassLoader(String[] ignored_packages) { - this.ignored_packages = ignored_packages; - } - - - /** @param ignored_packages classes contained in these packages will be loaded - * with the system class loader - * @param deferTo delegate class loader to use for ignored packages - */ - public ClassLoader(java.lang.ClassLoader deferTo, String[] ignored_packages) { - this(ignored_packages); - this.repository = new ClassLoaderRepository(deferTo); - } - - - protected Class loadClass( String class_name, boolean resolve ) throws ClassNotFoundException { - Class cl = null; - /* First try: lookup hash table. - */ - if ((cl = (Class) classes.get(class_name)) == null) { - /* Second try: Load system class using system class loader. You better - * don't mess around with them. - */ - for (int i = 0; i < ignored_packages.length; i++) { - if (class_name.startsWith(ignored_packages[i])) { - cl = getParent().loadClass(class_name); - break; - } - } - if (cl == null) { - JavaClass clazz = null; - /* Third try: Special request? - */ - if (class_name.indexOf("$$BCEL$$") >= 0) { - clazz = createClass(class_name); - } else { // Fourth try: Load classes via repository - if ((clazz = repository.loadClass(class_name)) != null) { - clazz = modifyClass(clazz); - } else { - throw new ClassNotFoundException(class_name); - } - } - if (clazz != null) { - byte[] bytes = clazz.getBytes(); - cl = defineClass(class_name, bytes, 0, bytes.length); - } else { - cl = Class.forName(class_name); - } - } - if (resolve) { - resolveClass(cl); - } - } - classes.put(class_name, cl); - return cl; - } - - - /** Override this method if you want to alter a class before it gets actually - * loaded. Does nothing by default. - */ - protected JavaClass modifyClass( JavaClass clazz ) { - return clazz; - } - - - /** - * Override this method to create you own classes on the fly. The - * name contains the special token $$BCEL$$. Everything before that - * token is consddered to be a package name. You can encode you own - * arguments into the subsequent string. You must regard however not - * to use any "illegal" characters, i.e., characters that may not - * appear in a Java class name too
          - * - * The default implementation interprets the string as a encoded compressed - * Java class, unpacks and decodes it with the Utility.decode() method, and - * parses the resulting byte array and returns the resulting JavaClass object. - * - * @param class_name compressed byte code with "$$BCEL$$" in it - */ - protected JavaClass createClass( String class_name ) { - int index = class_name.indexOf("$$BCEL$$"); - String real_name = class_name.substring(index + 8); - JavaClass clazz = null; - try { - byte[] bytes = Utility.decode(real_name, true); - ClassParser parser = new ClassParser(new ByteArrayInputStream(bytes), "foo"); - clazz = parser.parse(); - } catch (Throwable e) { - e.printStackTrace(); - return null; - } - // Adapt the class name to the passed value - ConstantPool cp = clazz.getConstantPool(); - ConstantClass cl = (ConstantClass) cp.getConstant(clazz.getClassNameIndex(), - Constants.CONSTANT_Class); - ConstantUtf8 name = (ConstantUtf8) cp.getConstant(cl.getNameIndex(), - Constants.CONSTANT_Utf8); - name.setBytes(class_name.replace('.', '/')); - return clazz; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.io.ByteArrayInputStream; +import java.util.Hashtable; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.classfile.ClassParser; +import org.apache.bcel5_2_0.classfile.ConstantClass; +import org.apache.bcel5_2_0.classfile.ConstantPool; +import org.apache.bcel5_2_0.classfile.ConstantUtf8; +import org.apache.bcel5_2_0.classfile.JavaClass; +import org.apache.bcel5_2_0.classfile.Utility; + +/** + *

          Drop in replacement for the standard class loader of the JVM. You can use it + * in conjunction with the JavaWrapper to dynamically modify/create classes + * as they're requested.

          + * + *

          This class loader recognizes special requests in a distinct + * format, i.e., when the name of the requested class contains with + * "$$BCEL$$" it calls the createClass() method with that name + * (everything bevor the $$BCEL$$ is considered to be the package + * name. You can subclass the class loader and override that + * method. "Normal" classes class can be modified by overriding the + * modifyClass() method which is called just before defineClass().

          + * + *

          There may be a number of packages where you have to use the + * default class loader (which may also be faster). You can define the + * set of packages where to use the system class loader in the + * constructor. The default value contains "java.", "sun.", + * "javax."

          + * + * @version $Id: ClassLoader.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see JavaWrapper + * @see ClassPath + */ +public class ClassLoader extends java.lang.ClassLoader { + + public static final String[] DEFAULT_IGNORED_PACKAGES = { + "java.", "javax.", "sun." + }; + private Hashtable classes = new Hashtable(); // Hashtable is synchronized thus thread-safe + private String[] ignored_packages; + private Repository repository = SyntheticRepository.getInstance(); + + + /** Ignored packages are by default ( "java.", "sun.", + * "javax."), i.e. loaded by system class loader + */ + public ClassLoader() { + this(DEFAULT_IGNORED_PACKAGES); + } + + + /** @param deferTo delegate class loader to use for ignored packages + */ + public ClassLoader(java.lang.ClassLoader deferTo) { + super(deferTo); + this.ignored_packages = DEFAULT_IGNORED_PACKAGES; + this.repository = new ClassLoaderRepository(deferTo); + } + + + /** @param ignored_packages classes contained in these packages will be loaded + * with the system class loader + */ + public ClassLoader(String[] ignored_packages) { + this.ignored_packages = ignored_packages; + } + + + /** @param ignored_packages classes contained in these packages will be loaded + * with the system class loader + * @param deferTo delegate class loader to use for ignored packages + */ + public ClassLoader(java.lang.ClassLoader deferTo, String[] ignored_packages) { + this(ignored_packages); + this.repository = new ClassLoaderRepository(deferTo); + } + + + protected Class loadClass( String class_name, boolean resolve ) throws ClassNotFoundException { + Class cl = null; + /* First try: lookup hash table. + */ + if ((cl = (Class) classes.get(class_name)) == null) { + /* Second try: Load system class using system class loader. You better + * don't mess around with them. + */ + for (int i = 0; i < ignored_packages.length; i++) { + if (class_name.startsWith(ignored_packages[i])) { + cl = getParent().loadClass(class_name); + break; + } + } + if (cl == null) { + JavaClass clazz = null; + /* Third try: Special request? + */ + if (class_name.indexOf("$$BCEL$$") >= 0) { + clazz = createClass(class_name); + } else { // Fourth try: Load classes via repository + if ((clazz = repository.loadClass(class_name)) != null) { + clazz = modifyClass(clazz); + } else { + throw new ClassNotFoundException(class_name); + } + } + if (clazz != null) { + byte[] bytes = clazz.getBytes(); + cl = defineClass(class_name, bytes, 0, bytes.length); + } else { + cl = Class.forName(class_name); + } + } + if (resolve) { + resolveClass(cl); + } + } + classes.put(class_name, cl); + return cl; + } + + + /** Override this method if you want to alter a class before it gets actually + * loaded. Does nothing by default. + */ + protected JavaClass modifyClass( JavaClass clazz ) { + return clazz; + } + + + /** + * Override this method to create you own classes on the fly. The + * name contains the special token $$BCEL$$. Everything before that + * token is consddered to be a package name. You can encode you own + * arguments into the subsequent string. You must regard however not + * to use any "illegal" characters, i.e., characters that may not + * appear in a Java class name too
          + * + * The default implementation interprets the string as a encoded compressed + * Java class, unpacks and decodes it with the Utility.decode() method, and + * parses the resulting byte array and returns the resulting JavaClass object. + * + * @param class_name compressed byte code with "$$BCEL$$" in it + */ + protected JavaClass createClass( String class_name ) { + int index = class_name.indexOf("$$BCEL$$"); + String real_name = class_name.substring(index + 8); + JavaClass clazz = null; + try { + byte[] bytes = Utility.decode(real_name, true); + ClassParser parser = new ClassParser(new ByteArrayInputStream(bytes), "foo"); + clazz = parser.parse(); + } catch (Throwable e) { + e.printStackTrace(); + return null; + } + // Adapt the class name to the passed value + ConstantPool cp = clazz.getConstantPool(); + ConstantClass cl = (ConstantClass) cp.getConstant(clazz.getClassNameIndex(), + Constants.CONSTANT_Class); + ConstantUtf8 name = (ConstantUtf8) cp.getConstant(cl.getNameIndex(), + Constants.CONSTANT_Utf8); + name.setBytes(class_name.replace('.', '/')); + return clazz; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassLoaderRepository.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassLoaderRepository.java index 577d2122..90cfb778 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassLoaderRepository.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassLoaderRepository.java @@ -1,122 +1,122 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; - -import org.apache.bcel5_2_0.classfile.ClassParser; -import org.apache.bcel5_2_0.classfile.JavaClass; - -/** - * The repository maintains information about which classes have - * been loaded. - * - * It loads its data from the ClassLoader implementation - * passed into its constructor. - * - * @see org.apache.bcel5_2_0.Repository - * - * @version $Id: ClassLoaderRepository.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @author David Dixon-Peugh - */ -public class ClassLoaderRepository implements Repository { - - private java.lang.ClassLoader loader; - private Map loadedClasses = new HashMap(); // CLASSNAME X JAVACLASS - - - public ClassLoaderRepository(java.lang.ClassLoader loader) { - this.loader = loader; - } - - - /** - * Store a new JavaClass into this Repository. - */ - public void storeClass( JavaClass clazz ) { - loadedClasses.put(clazz.getClassName(), clazz); - clazz.setRepository(this); - } - - - /** - * Remove class from repository - */ - public void removeClass( JavaClass clazz ) { - loadedClasses.remove(clazz.getClassName()); - } - - - /** - * Find an already defined JavaClass. - */ - public JavaClass findClass( String className ) { - if (loadedClasses.containsKey(className)) { - return (JavaClass) loadedClasses.get(className); - } else { - return null; - } - } - - - /** - * Lookup a JavaClass object from the Class Name provided. - */ - public JavaClass loadClass( String className ) throws ClassNotFoundException { - String classFile = className.replace('.', '/'); - JavaClass RC = findClass(className); - if (RC != null) { - return RC; - } - try { - InputStream is = loader.getResourceAsStream(classFile + ".class"); - if (is == null) { - throw new ClassNotFoundException(className + " not found."); - } - ClassParser parser = new ClassParser(is, className); - RC = parser.parse(); - storeClass(RC); - return RC; - } catch (IOException e) { - throw new ClassNotFoundException(e.toString()); - } - } - - - public JavaClass loadClass( Class clazz ) throws ClassNotFoundException { - return loadClass(clazz.getName()); - } - - - /** Clear all entries from cache. - */ - public void clear() { - loadedClasses.clear(); - } - - - /* - * @return null - */ - public ClassPath getClassPath() { - return null; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +import org.apache.bcel5_2_0.classfile.ClassParser; +import org.apache.bcel5_2_0.classfile.JavaClass; + +/** + * The repository maintains information about which classes have + * been loaded. + * + * It loads its data from the ClassLoader implementation + * passed into its constructor. + * + * @see org.apache.bcel5_2_0.Repository + * + * @version $Id: ClassLoaderRepository.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @author David Dixon-Peugh + */ +public class ClassLoaderRepository implements Repository { + + private java.lang.ClassLoader loader; + private Map loadedClasses = new HashMap(); // CLASSNAME X JAVACLASS + + + public ClassLoaderRepository(java.lang.ClassLoader loader) { + this.loader = loader; + } + + + /** + * Store a new JavaClass into this Repository. + */ + public void storeClass( JavaClass clazz ) { + loadedClasses.put(clazz.getClassName(), clazz); + clazz.setRepository(this); + } + + + /** + * Remove class from repository + */ + public void removeClass( JavaClass clazz ) { + loadedClasses.remove(clazz.getClassName()); + } + + + /** + * Find an already defined JavaClass. + */ + public JavaClass findClass( String className ) { + if (loadedClasses.containsKey(className)) { + return (JavaClass) loadedClasses.get(className); + } else { + return null; + } + } + + + /** + * Lookup a JavaClass object from the Class Name provided. + */ + public JavaClass loadClass( String className ) throws ClassNotFoundException { + String classFile = className.replace('.', '/'); + JavaClass RC = findClass(className); + if (RC != null) { + return RC; + } + try { + InputStream is = loader.getResourceAsStream(classFile + ".class"); + if (is == null) { + throw new ClassNotFoundException(className + " not found."); + } + ClassParser parser = new ClassParser(is, className); + RC = parser.parse(); + storeClass(RC); + return RC; + } catch (IOException e) { + throw new ClassNotFoundException(e.toString()); + } + } + + + public JavaClass loadClass( Class clazz ) throws ClassNotFoundException { + return loadClass(clazz.getName()); + } + + + /** Clear all entries from cache. + */ + public void clear() { + loadedClasses.clear(); + } + + + /* + * @return null + */ + public ClassPath getClassPath() { + return null; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassPath.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassPath.java index 4eeca844..5f0903cb 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassPath.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassPath.java @@ -1,396 +1,396 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.io.DataInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FilenameFilter; -import java.io.IOException; -import java.io.InputStream; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.StringTokenizer; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -/** - * Responsible for loading (class) files from the CLASSPATH. Inspired by - * sun.tools.ClassPath. - * - * @version $Id: ClassPath.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ClassPath implements Serializable { - - public static final ClassPath SYSTEM_CLASS_PATH = new ClassPath(); - private PathEntry[] paths; - private String class_path; - - - /** - * Search for classes in given path. - */ - public ClassPath(String class_path) { - this.class_path = class_path; - List vec = new ArrayList(); - for (StringTokenizer tok = new StringTokenizer(class_path, System - .getProperty("path.separator")); tok.hasMoreTokens();) { - String path = tok.nextToken(); - if (!path.equals("")) { - File file = new File(path); - try { - if (file.exists()) { - if (file.isDirectory()) { - vec.add(new Dir(path)); - } else { - vec.add(new Zip(new ZipFile(file))); - } - } - } catch (IOException e) { - System.err.println("CLASSPATH component " + file + ": " + e); - } - } - } - paths = new PathEntry[vec.size()]; - vec.toArray(paths); - } - - - /** - * Search for classes in CLASSPATH. - * @deprecated Use SYSTEM_CLASS_PATH constant - */ - public ClassPath() { - this(getClassPath()); - } - - - /** @return used class path string - */ - public String toString() { - return class_path; - } - - - public int hashCode() { - return class_path.hashCode(); - } - - - public boolean equals( Object o ) { - if (o instanceof ClassPath) { - return class_path.equals(((ClassPath) o).class_path); - } - return false; - } - - - private static final void getPathComponents( String path, List list ) { - if (path != null) { - StringTokenizer tok = new StringTokenizer(path, File.pathSeparator); - while (tok.hasMoreTokens()) { - String name = tok.nextToken(); - File file = new File(name); - if (file.exists()) { - list.add(name); - } - } - } - } - - - /** Checks for class path components in the following properties: - * "java.class.path", "sun.boot.class.path", "java.ext.dirs" - * - * @return class path as used by default by BCEL - */ - public static final String getClassPath() { - String class_path = System.getProperty("java.class.path"); - String boot_path = System.getProperty("sun.boot.class.path"); - String ext_path = System.getProperty("java.ext.dirs"); - List list = new ArrayList(); - getPathComponents(class_path, list); - getPathComponents(boot_path, list); - List dirs = new ArrayList(); - getPathComponents(ext_path, dirs); - for (Iterator e = dirs.iterator(); e.hasNext();) { - File ext_dir = new File((String) e.next()); - String[] extensions = ext_dir.list(new FilenameFilter() { - - public boolean accept( File dir, String name ) { - name = name.toLowerCase(Locale.ENGLISH); - return name.endsWith(".zip") || name.endsWith(".jar"); - } - }); - if (extensions != null) { - for (int i = 0; i < extensions.length; i++) { - list.add(ext_dir.getPath() + File.separatorChar + extensions[i]); - } - } - } - StringBuilder buf = new StringBuilder(); - for (Iterator e = list.iterator(); e.hasNext();) { - buf.append((String) e.next()); - if (e.hasNext()) { - buf.append(File.pathSeparatorChar); - } - } - return buf.toString().intern(); - } - - - /** - * @param name fully qualified class name, e.g. java.lang.String - * @return input stream for class - */ - public InputStream getInputStream( String name ) throws IOException { - return getInputStream(name.replace('.', '/'), ".class"); - } - - - /** - * Return stream for class or resource on CLASSPATH. - * - * @param name fully qualified file name, e.g. java/lang/String - * @param suffix file name ends with suff, e.g. .java - * @return input stream for file on class path - */ - public InputStream getInputStream( String name, String suffix ) throws IOException { - InputStream is = null; - try { - is = getClass().getClassLoader().getResourceAsStream(name + suffix); - } catch (Exception e) { - } - if (is != null) { - return is; - } - return getClassFile(name, suffix).getInputStream(); - } - - - /** - * @param name fully qualified file name, e.g. java/lang/String - * @param suffix file name ends with suff, e.g. .java - * @return class file for the java class - */ - public ClassFile getClassFile( String name, String suffix ) throws IOException { - for (int i = 0; i < paths.length; i++) { - ClassFile cf; - if ((cf = paths[i].getClassFile(name, suffix)) != null) { - return cf; - } - } - throw new IOException("Couldn't find: " + name + suffix); - } - - - /** - * @param name fully qualified class name, e.g. java.lang.String - * @return input stream for class - */ - public ClassFile getClassFile( String name ) throws IOException { - return getClassFile(name, ".class"); - } - - - /** - * @param name fully qualified file name, e.g. java/lang/String - * @param suffix file name ends with suffix, e.g. .java - * @return byte array for file on class path - */ - public byte[] getBytes( String name, String suffix ) throws IOException { - DataInputStream dis = null; - try { - InputStream is = getInputStream(name, suffix); - if (is == null) { - throw new IOException("Couldn't find: " + name + suffix); - } - dis = new DataInputStream(is); - byte[] bytes = new byte[is.available()]; - dis.readFully(bytes); - return bytes; - } finally { - if (dis != null) { - dis.close(); - } - } - } - - - /** - * @return byte array for class - */ - public byte[] getBytes( String name ) throws IOException { - return getBytes(name, ".class"); - } - - - /** - * @param name name of file to search for, e.g. java/lang/String.java - * @return full (canonical) path for file - */ - public String getPath( String name ) throws IOException { - int index = name.lastIndexOf('.'); - String suffix = ""; - if (index > 0) { - suffix = name.substring(index); - name = name.substring(0, index); - } - return getPath(name, suffix); - } - - - /** - * @param name name of file to search for, e.g. java/lang/String - * @param suffix file name suffix, e.g. .java - * @return full (canonical) path for file, if it exists - */ - public String getPath( String name, String suffix ) throws IOException { - return getClassFile(name, suffix).getPath(); - } - - private static abstract class PathEntry implements Serializable { - - abstract ClassFile getClassFile( String name, String suffix ) throws IOException; - } - - /** Contains information about file/ZIP entry of the Java class. - */ - public interface ClassFile { - - /** @return input stream for class file. - */ - public abstract InputStream getInputStream() throws IOException; - - - /** @return canonical path to class file. - */ - public abstract String getPath(); - - - /** @return base path of found class, i.e. class is contained relative - * to that path, which may either denote a directory, or zip file - */ - public abstract String getBase(); - - - /** @return modification time of class file. - */ - public abstract long getTime(); - - - /** @return size of class file. - */ - public abstract long getSize(); - } - - private static class Dir extends PathEntry { - - private String dir; - - - Dir(String d) { - dir = d; - } - - - ClassFile getClassFile( String name, String suffix ) throws IOException { - final File file = new File(dir + File.separatorChar - + name.replace('.', File.separatorChar) + suffix); - return file.exists() ? new ClassFile() { - - public InputStream getInputStream() throws IOException { - return new FileInputStream(file); - } - - - public String getPath() { - try { - return file.getCanonicalPath(); - } catch (IOException e) { - return null; - } - } - - - public long getTime() { - return file.lastModified(); - } - - - public long getSize() { - return file.length(); - } - - - public String getBase() { - return dir; - } - } : null; - } - - - public String toString() { - return dir; - } - } - - private static class Zip extends PathEntry { - - private ZipFile zip; - - - Zip(ZipFile z) { - zip = z; - } - - - ClassFile getClassFile( String name, String suffix ) throws IOException { - final ZipEntry entry = zip.getEntry(name.replace('.', '/') + suffix); - return (entry != null) ? new ClassFile() { - - public InputStream getInputStream() throws IOException { - return zip.getInputStream(entry); - } - - - public String getPath() { - return entry.toString(); - } - - - public long getTime() { - return entry.getTime(); - } - - - public long getSize() { - return entry.getSize(); - } - - - public String getBase() { - return zip.getName(); - } - } : null; - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStream; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.StringTokenizer; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +/** + * Responsible for loading (class) files from the CLASSPATH. Inspired by + * sun.tools.ClassPath. + * + * @version $Id: ClassPath.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ClassPath implements Serializable { + + public static final ClassPath SYSTEM_CLASS_PATH = new ClassPath(); + private PathEntry[] paths; + private String class_path; + + + /** + * Search for classes in given path. + */ + public ClassPath(String class_path) { + this.class_path = class_path; + List vec = new ArrayList(); + for (StringTokenizer tok = new StringTokenizer(class_path, System + .getProperty("path.separator")); tok.hasMoreTokens();) { + String path = tok.nextToken(); + if (!path.equals("")) { + File file = new File(path); + try { + if (file.exists()) { + if (file.isDirectory()) { + vec.add(new Dir(path)); + } else { + vec.add(new Zip(new ZipFile(file))); + } + } + } catch (IOException e) { + System.err.println("CLASSPATH component " + file + ": " + e); + } + } + } + paths = new PathEntry[vec.size()]; + vec.toArray(paths); + } + + + /** + * Search for classes in CLASSPATH. + * @deprecated Use SYSTEM_CLASS_PATH constant + */ + public ClassPath() { + this(getClassPath()); + } + + + /** @return used class path string + */ + public String toString() { + return class_path; + } + + + public int hashCode() { + return class_path.hashCode(); + } + + + public boolean equals( Object o ) { + if (o instanceof ClassPath) { + return class_path.equals(((ClassPath) o).class_path); + } + return false; + } + + + private static final void getPathComponents( String path, List list ) { + if (path != null) { + StringTokenizer tok = new StringTokenizer(path, File.pathSeparator); + while (tok.hasMoreTokens()) { + String name = tok.nextToken(); + File file = new File(name); + if (file.exists()) { + list.add(name); + } + } + } + } + + + /** Checks for class path components in the following properties: + * "java.class.path", "sun.boot.class.path", "java.ext.dirs" + * + * @return class path as used by default by BCEL + */ + public static final String getClassPath() { + String class_path = System.getProperty("java.class.path"); + String boot_path = System.getProperty("sun.boot.class.path"); + String ext_path = System.getProperty("java.ext.dirs"); + List list = new ArrayList(); + getPathComponents(class_path, list); + getPathComponents(boot_path, list); + List dirs = new ArrayList(); + getPathComponents(ext_path, dirs); + for (Iterator e = dirs.iterator(); e.hasNext();) { + File ext_dir = new File((String) e.next()); + String[] extensions = ext_dir.list(new FilenameFilter() { + + public boolean accept( File dir, String name ) { + name = name.toLowerCase(Locale.ENGLISH); + return name.endsWith(".zip") || name.endsWith(".jar"); + } + }); + if (extensions != null) { + for (int i = 0; i < extensions.length; i++) { + list.add(ext_dir.getPath() + File.separatorChar + extensions[i]); + } + } + } + StringBuilder buf = new StringBuilder(); + for (Iterator e = list.iterator(); e.hasNext();) { + buf.append((String) e.next()); + if (e.hasNext()) { + buf.append(File.pathSeparatorChar); + } + } + return buf.toString().intern(); + } + + + /** + * @param name fully qualified class name, e.g. java.lang.String + * @return input stream for class + */ + public InputStream getInputStream( String name ) throws IOException { + return getInputStream(name.replace('.', '/'), ".class"); + } + + + /** + * Return stream for class or resource on CLASSPATH. + * + * @param name fully qualified file name, e.g. java/lang/String + * @param suffix file name ends with suff, e.g. .java + * @return input stream for file on class path + */ + public InputStream getInputStream( String name, String suffix ) throws IOException { + InputStream is = null; + try { + is = getClass().getClassLoader().getResourceAsStream(name + suffix); + } catch (Exception e) { + } + if (is != null) { + return is; + } + return getClassFile(name, suffix).getInputStream(); + } + + + /** + * @param name fully qualified file name, e.g. java/lang/String + * @param suffix file name ends with suff, e.g. .java + * @return class file for the java class + */ + public ClassFile getClassFile( String name, String suffix ) throws IOException { + for (int i = 0; i < paths.length; i++) { + ClassFile cf; + if ((cf = paths[i].getClassFile(name, suffix)) != null) { + return cf; + } + } + throw new IOException("Couldn't find: " + name + suffix); + } + + + /** + * @param name fully qualified class name, e.g. java.lang.String + * @return input stream for class + */ + public ClassFile getClassFile( String name ) throws IOException { + return getClassFile(name, ".class"); + } + + + /** + * @param name fully qualified file name, e.g. java/lang/String + * @param suffix file name ends with suffix, e.g. .java + * @return byte array for file on class path + */ + public byte[] getBytes( String name, String suffix ) throws IOException { + DataInputStream dis = null; + try { + InputStream is = getInputStream(name, suffix); + if (is == null) { + throw new IOException("Couldn't find: " + name + suffix); + } + dis = new DataInputStream(is); + byte[] bytes = new byte[is.available()]; + dis.readFully(bytes); + return bytes; + } finally { + if (dis != null) { + dis.close(); + } + } + } + + + /** + * @return byte array for class + */ + public byte[] getBytes( String name ) throws IOException { + return getBytes(name, ".class"); + } + + + /** + * @param name name of file to search for, e.g. java/lang/String.java + * @return full (canonical) path for file + */ + public String getPath( String name ) throws IOException { + int index = name.lastIndexOf('.'); + String suffix = ""; + if (index > 0) { + suffix = name.substring(index); + name = name.substring(0, index); + } + return getPath(name, suffix); + } + + + /** + * @param name name of file to search for, e.g. java/lang/String + * @param suffix file name suffix, e.g. .java + * @return full (canonical) path for file, if it exists + */ + public String getPath( String name, String suffix ) throws IOException { + return getClassFile(name, suffix).getPath(); + } + + private static abstract class PathEntry implements Serializable { + + abstract ClassFile getClassFile( String name, String suffix ) throws IOException; + } + + /** Contains information about file/ZIP entry of the Java class. + */ + public interface ClassFile { + + /** @return input stream for class file. + */ + public abstract InputStream getInputStream() throws IOException; + + + /** @return canonical path to class file. + */ + public abstract String getPath(); + + + /** @return base path of found class, i.e. class is contained relative + * to that path, which may either denote a directory, or zip file + */ + public abstract String getBase(); + + + /** @return modification time of class file. + */ + public abstract long getTime(); + + + /** @return size of class file. + */ + public abstract long getSize(); + } + + private static class Dir extends PathEntry { + + private String dir; + + + Dir(String d) { + dir = d; + } + + + ClassFile getClassFile( String name, String suffix ) throws IOException { + final File file = new File(dir + File.separatorChar + + name.replace('.', File.separatorChar) + suffix); + return file.exists() ? new ClassFile() { + + public InputStream getInputStream() throws IOException { + return new FileInputStream(file); + } + + + public String getPath() { + try { + return file.getCanonicalPath(); + } catch (IOException e) { + return null; + } + } + + + public long getTime() { + return file.lastModified(); + } + + + public long getSize() { + return file.length(); + } + + + public String getBase() { + return dir; + } + } : null; + } + + + public String toString() { + return dir; + } + } + + private static class Zip extends PathEntry { + + private ZipFile zip; + + + Zip(ZipFile z) { + zip = z; + } + + + ClassFile getClassFile( String name, String suffix ) throws IOException { + final ZipEntry entry = zip.getEntry(name.replace('.', '/') + suffix); + return (entry != null) ? new ClassFile() { + + public InputStream getInputStream() throws IOException { + return zip.getInputStream(entry); + } + + + public String getPath() { + return entry.toString(); + } + + + public long getTime() { + return entry.getTime(); + } + + + public long getSize() { + return entry.getSize(); + } + + + public String getBase() { + return zip.getName(); + } + } : null; + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassQueue.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassQueue.java index 12f32446..7d83cb3c 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassQueue.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassQueue.java @@ -1,53 +1,53 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.util.LinkedList; - -import org.apache.bcel5_2_0.classfile.JavaClass; - -/** - * Utility class implementing a (typesafe) queue of JavaClass - * objects. - * - * @version $Id: ClassQueue.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ClassQueue implements java.io.Serializable { - - protected LinkedList vec = new LinkedList(); - - - public void enqueue( JavaClass clazz ) { - vec.addLast(clazz); - } - - - public JavaClass dequeue() { - return (JavaClass) vec.removeFirst(); - } - - - public boolean empty() { - return vec.isEmpty(); - } - - - public String toString() { - return vec.toString(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.util.LinkedList; + +import org.apache.bcel5_2_0.classfile.JavaClass; + +/** + * Utility class implementing a (typesafe) queue of JavaClass + * objects. + * + * @version $Id: ClassQueue.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + */ +public class ClassQueue implements java.io.Serializable { + + protected LinkedList vec = new LinkedList(); + + + public void enqueue( JavaClass clazz ) { + vec.addLast(clazz); + } + + + public JavaClass dequeue() { + return (JavaClass) vec.removeFirst(); + } + + + public boolean empty() { + return vec.isEmpty(); + } + + + public String toString() { + return vec.toString(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassSet.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassSet.java index 4925e7b8..2157f536 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassSet.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassSet.java @@ -1,70 +1,70 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.apache.bcel5_2_0.classfile.JavaClass; - -/** - * Utility class implementing a (typesafe) set of JavaClass objects. - * Since JavaClass has no equals() method, the name of the class is - * used for comparison. - * - * @version $Id: ClassSet.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see ClassStack - */ -public class ClassSet implements java.io.Serializable { - - private Map _map = new HashMap(); - - - public boolean add( JavaClass clazz ) { - boolean result = false; - if (!_map.containsKey(clazz.getClassName())) { - result = true; - _map.put(clazz.getClassName(), clazz); - } - return result; - } - - - public void remove( JavaClass clazz ) { - _map.remove(clazz.getClassName()); - } - - - public boolean empty() { - return _map.isEmpty(); - } - - - public JavaClass[] toArray() { - Collection values = _map.values(); - JavaClass[] classes = new JavaClass[values.size()]; - values.toArray(classes); - return classes; - } - - - public String[] getClassNames() { - return (String[]) _map.keySet().toArray(new String[_map.keySet().size()]); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.apache.bcel5_2_0.classfile.JavaClass; + +/** + * Utility class implementing a (typesafe) set of JavaClass objects. + * Since JavaClass has no equals() method, the name of the class is + * used for comparison. + * + * @version $Id: ClassSet.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see ClassStack + */ +public class ClassSet implements java.io.Serializable { + + private Map _map = new HashMap(); + + + public boolean add( JavaClass clazz ) { + boolean result = false; + if (!_map.containsKey(clazz.getClassName())) { + result = true; + _map.put(clazz.getClassName(), clazz); + } + return result; + } + + + public void remove( JavaClass clazz ) { + _map.remove(clazz.getClassName()); + } + + + public boolean empty() { + return _map.isEmpty(); + } + + + public JavaClass[] toArray() { + Collection values = _map.values(); + JavaClass[] classes = new JavaClass[values.size()]; + values.toArray(classes); + return classes; + } + + + public String[] getClassNames() { + return (String[]) _map.keySet().toArray(new String[_map.keySet().size()]); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassStack.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassStack.java index 553014e9..c5ac8aae 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassStack.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassStack.java @@ -1,53 +1,53 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.util.Stack; - -import org.apache.bcel5_2_0.classfile.JavaClass; - -/** - * Utility class implementing a (typesafe) stack of JavaClass objects. - * - * @version $Id: ClassStack.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Stack - */ -public class ClassStack implements java.io.Serializable { - - private Stack stack = new Stack(); - - - public void push( JavaClass clazz ) { - stack.push(clazz); - } - - - public JavaClass pop() { - return (JavaClass) stack.pop(); - } - - - public JavaClass top() { - return (JavaClass) stack.peek(); - } - - - public boolean empty() { - return stack.empty(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.util.Stack; + +import org.apache.bcel5_2_0.classfile.JavaClass; + +/** + * Utility class implementing a (typesafe) stack of JavaClass objects. + * + * @version $Id: ClassStack.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Stack + */ +public class ClassStack implements java.io.Serializable { + + private Stack stack = new Stack(); + + + public void push( JavaClass clazz ) { + stack.push(clazz); + } + + + public JavaClass pop() { + return (JavaClass) stack.pop(); + } + + + public JavaClass top() { + return (JavaClass) stack.peek(); + } + + + public boolean empty() { + return stack.empty(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassVector.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassVector.java index 237597f8..714c22e5 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassVector.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ClassVector.java @@ -1,58 +1,58 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.bcel5_2_0.classfile.JavaClass; - -/** - * Utility class implementing a (typesafe) collection of JavaClass - * objects. Contains the most important methods of a Vector. - * - * @version $Id: ClassVector.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * - * @deprecated as of 5.1.1 - 7/17/2005 - */ -public class ClassVector implements java.io.Serializable { - - protected List vec = new ArrayList(); - - - public void addElement( JavaClass clazz ) { - vec.add(clazz); - } - - - public JavaClass elementAt( int index ) { - return (JavaClass) vec.get(index); - } - - - public void removeElementAt( int index ) { - vec.remove(index); - } - - - public JavaClass[] toArray() { - JavaClass[] classes = new JavaClass[vec.size()]; - vec.toArray(classes); - return classes; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.bcel5_2_0.classfile.JavaClass; + +/** + * Utility class implementing a (typesafe) collection of JavaClass + * objects. Contains the most important methods of a Vector. + * + * @version $Id: ClassVector.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * + * @deprecated as of 5.1.1 - 7/17/2005 + */ +public class ClassVector implements java.io.Serializable { + + protected List vec = new ArrayList(); + + + public void addElement( JavaClass clazz ) { + vec.add(clazz); + } + + + public JavaClass elementAt( int index ) { + return (JavaClass) vec.get(index); + } + + + public void removeElementAt( int index ) { + vec.remove(index); + } + + + public JavaClass[] toArray() { + JavaClass[] classes = new JavaClass[vec.size()]; + vec.toArray(classes); + return classes; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/CodeHTML.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/CodeHTML.java index 6045c31c..5a6d549d 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/CodeHTML.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/CodeHTML.java @@ -1,565 +1,565 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.BitSet; - -import org.apache.bcel5_2_0.classfile.Attribute; -import org.apache.bcel5_2_0.classfile.Code; -import org.apache.bcel5_2_0.classfile.CodeException; -import org.apache.bcel5_2_0.classfile.ConstantFieldref; -import org.apache.bcel5_2_0.classfile.ConstantInterfaceMethodref; -import org.apache.bcel5_2_0.classfile.ConstantMethodref; -import org.apache.bcel5_2_0.classfile.ConstantNameAndType; -import org.apache.bcel5_2_0.classfile.ConstantPool; -import org.apache.bcel5_2_0.classfile.LocalVariable; -import org.apache.bcel5_2_0.classfile.LocalVariableTable; -import org.apache.bcel5_2_0.classfile.Method; -import org.apache.bcel5_2_0.classfile.Utility; - -/** - * Convert code into HTML file. - * - * @version $Id: CodeHTML.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * - */ -final class CodeHTML implements org.apache.bcel5_2_0.Constants { - - private String class_name; // name of current class - private Method[] methods; // Methods to print - private PrintWriter file; // file to write to - private BitSet goto_set; - private ConstantPool constant_pool; - private ConstantHTML constant_html; - private static boolean wide = false; - - - CodeHTML(String dir, String class_name, Method[] methods, ConstantPool constant_pool, - ConstantHTML constant_html) throws IOException { - this.class_name = class_name; - this.methods = methods; - this.constant_pool = constant_pool; - this.constant_html = constant_html; - file = new PrintWriter(new FileOutputStream(dir + class_name + "_code.html")); - file.println(""); - for (int i = 0; i < methods.length; i++) { - writeMethod(methods[i], i); - } - file.println(""); - file.close(); - } - - - /** - * Disassemble a stream of byte codes and return the - * string representation. - * - * @param stream data input stream - * @return String representation of byte code - */ - private final String codeToHTML( ByteSequence bytes, int method_number ) throws IOException { - short opcode = (short) bytes.readUnsignedByte(); - StringBuilder buf; - String name, signature; - int default_offset = 0, low, high; - int index, class_index, vindex, constant; - int[] jump_table; - int no_pad_bytes = 0, offset; - buf = new StringBuilder(256); - buf.append("").append(OPCODE_NAMES[opcode]).append(""); - /* Special case: Skip (0-3) padding bytes, i.e., the - * following bytes are 4-byte-aligned - */ - if ((opcode == TABLESWITCH) || (opcode == LOOKUPSWITCH)) { - int remainder = bytes.getIndex() % 4; - no_pad_bytes = (remainder == 0) ? 0 : 4 - remainder; - for (int i = 0; i < no_pad_bytes; i++) { - bytes.readByte(); - } - // Both cases have a field default_offset in common - default_offset = bytes.readInt(); - } - switch (opcode) { - case TABLESWITCH: - low = bytes.readInt(); - high = bytes.readInt(); - offset = bytes.getIndex() - 12 - no_pad_bytes - 1; - default_offset += offset; - buf.append(""); - // Print switch indices in first row (and default) - jump_table = new int[high - low + 1]; - for (int i = 0; i < jump_table.length; i++) { - jump_table[i] = offset + bytes.readInt(); - buf.append(""); - } - buf.append("\n"); - // Print target and default indices in second row - for (int i = 0; i < jump_table.length; i++) { - buf.append(""); - } - buf.append("\n
          ").append(low + i).append("default
          ").append(jump_table[i]).append("").append(default_offset).append( - "
          \n"); - break; - /* Lookup switch has variable length arguments. - */ - case LOOKUPSWITCH: - int npairs = bytes.readInt(); - offset = bytes.getIndex() - 8 - no_pad_bytes - 1; - jump_table = new int[npairs]; - default_offset += offset; - buf.append(""); - // Print switch indices in first row (and default) - for (int i = 0; i < npairs; i++) { - int match = bytes.readInt(); - jump_table[i] = offset + bytes.readInt(); - buf.append(""); - } - buf.append("\n"); - // Print target and default indices in second row - for (int i = 0; i < npairs; i++) { - buf.append(""); - } - buf.append("\n
          ").append(match).append("default
          ").append(jump_table[i]).append("").append(default_offset).append( - "
          \n"); - break; - /* Two address bytes + offset from start of byte stream form the - * jump target. - */ - case GOTO: - case IFEQ: - case IFGE: - case IFGT: - case IFLE: - case IFLT: - case IFNE: - case IFNONNULL: - case IFNULL: - case IF_ACMPEQ: - case IF_ACMPNE: - case IF_ICMPEQ: - case IF_ICMPGE: - case IF_ICMPGT: - case IF_ICMPLE: - case IF_ICMPLT: - case IF_ICMPNE: - case JSR: - index = (int) (bytes.getIndex() + bytes.readShort() - 1); - buf.append("").append(index).append(""); - break; - /* Same for 32-bit wide jumps - */ - case GOTO_W: - case JSR_W: - int windex = bytes.getIndex() + bytes.readInt() - 1; - buf.append("").append(windex).append(""); - break; - /* Index byte references local variable (register) - */ - case ALOAD: - case ASTORE: - case DLOAD: - case DSTORE: - case FLOAD: - case FSTORE: - case ILOAD: - case ISTORE: - case LLOAD: - case LSTORE: - case RET: - if (wide) { - vindex = bytes.readShort(); - wide = false; // Clear flag - } else { - vindex = bytes.readUnsignedByte(); - } - buf.append("%").append(vindex); - break; - /* - * Remember wide byte which is used to form a 16-bit address in the - * following instruction. Relies on that the method is called again with - * the following opcode. - */ - case WIDE: - wide = true; - buf.append("(wide)"); - break; - /* Array of basic type. - */ - case NEWARRAY: - buf.append("").append(TYPE_NAMES[bytes.readByte()]).append( - ""); - break; - /* Access object/class fields. - */ - case GETFIELD: - case GETSTATIC: - case PUTFIELD: - case PUTSTATIC: - index = bytes.readShort(); - ConstantFieldref c1 = (ConstantFieldref) constant_pool.getConstant(index, - CONSTANT_Fieldref); - class_index = c1.getClassIndex(); - name = constant_pool.getConstantString(class_index, CONSTANT_Class); - name = Utility.compactClassName(name, false); - index = c1.getNameAndTypeIndex(); - String field_name = constant_pool.constantToString(index, CONSTANT_NameAndType); - if (name.equals(class_name)) { // Local field - buf.append("").append(field_name) - .append("\n"); - } else { - buf.append(constant_html.referenceConstant(class_index)).append(".").append( - field_name); - } - break; - /* Operands are references to classes in constant pool - */ - case CHECKCAST: - case INSTANCEOF: - case NEW: - index = bytes.readShort(); - buf.append(constant_html.referenceConstant(index)); - break; - /* Operands are references to methods in constant pool - */ - case INVOKESPECIAL: - case INVOKESTATIC: - case INVOKEVIRTUAL: - case INVOKEINTERFACE: - int m_index = bytes.readShort(); - String str; - if (opcode == INVOKEINTERFACE) { // Special treatment needed - int nargs = bytes.readUnsignedByte(); // Redundant - int reserved = bytes.readUnsignedByte(); // Reserved - ConstantInterfaceMethodref c = (ConstantInterfaceMethodref) constant_pool - .getConstant(m_index, CONSTANT_InterfaceMethodref); - class_index = c.getClassIndex(); - str = constant_pool.constantToString(c); - index = c.getNameAndTypeIndex(); - } else { - ConstantMethodref c = (ConstantMethodref) constant_pool.getConstant(m_index, - CONSTANT_Methodref); - class_index = c.getClassIndex(); - str = constant_pool.constantToString(c); - index = c.getNameAndTypeIndex(); - } - name = Class2HTML.referenceClass(class_index); - str = Class2HTML.toHTML(constant_pool.constantToString(constant_pool.getConstant( - index, CONSTANT_NameAndType))); - // Get signature, i.e., types - ConstantNameAndType c2 = (ConstantNameAndType) constant_pool.getConstant(index, - CONSTANT_NameAndType); - signature = constant_pool.constantToString(c2.getSignatureIndex(), CONSTANT_Utf8); - String[] args = Utility.methodSignatureArgumentTypes(signature, false); - String type = Utility.methodSignatureReturnType(signature, false); - buf.append(name).append(".").append(str).append( - "").append("("); - // List arguments - for (int i = 0; i < args.length; i++) { - buf.append(Class2HTML.referenceType(args[i])); - if (i < args.length - 1) { - buf.append(", "); - } - } - // Attach return type - buf.append("):").append(Class2HTML.referenceType(type)); - break; - /* Operands are references to items in constant pool - */ - case LDC_W: - case LDC2_W: - index = bytes.readShort(); - buf.append("").append( - Class2HTML.toHTML(constant_pool.constantToString(index, - constant_pool.getConstant(index).getTag()))).append(""); - break; - case LDC: - index = bytes.readUnsignedByte(); - buf.append("").append( - Class2HTML.toHTML(constant_pool.constantToString(index, - constant_pool.getConstant(index).getTag()))).append(""); - break; - /* Array of references. - */ - case ANEWARRAY: - index = bytes.readShort(); - buf.append(constant_html.referenceConstant(index)); - break; - /* Multidimensional array of references. - */ - case MULTIANEWARRAY: - index = bytes.readShort(); - int dimensions = bytes.readByte(); - buf.append(constant_html.referenceConstant(index)).append(":").append(dimensions) - .append("-dimensional"); - break; - /* Increment local variable. - */ - case IINC: - if (wide) { - vindex = bytes.readShort(); - constant = bytes.readShort(); - wide = false; - } else { - vindex = bytes.readUnsignedByte(); - constant = bytes.readByte(); - } - buf.append("%").append(vindex).append(" ").append(constant); - break; - default: - if (NO_OF_OPERANDS[opcode] > 0) { - for (int i = 0; i < TYPE_OF_OPERANDS[opcode].length; i++) { - switch (TYPE_OF_OPERANDS[opcode][i]) { - case T_BYTE: - buf.append(bytes.readUnsignedByte()); - break; - case T_SHORT: // Either branch or index - buf.append(bytes.readShort()); - break; - case T_INT: - buf.append(bytes.readInt()); - break; - default: // Never reached - System.err.println("Unreachable default case reached!"); - System.exit(-1); - } - buf.append(" "); - } - } - } - buf.append(""); - return buf.toString(); - } - - - /** - * Find all target addresses in code, so that they can be marked - * with <A NAME = ...>. Target addresses are kept in an BitSet object. - */ - private final void findGotos( ByteSequence bytes, Method method, Code code ) throws IOException { - int index; - goto_set = new BitSet(bytes.available()); - int opcode; - /* First get Code attribute from method and the exceptions handled - * (try .. catch) in this method. We only need the line number here. - */ - if (code != null) { - CodeException[] ce = code.getExceptionTable(); - int len = ce.length; - for (int i = 0; i < len; i++) { - goto_set.set(ce[i].getStartPC()); - goto_set.set(ce[i].getEndPC()); - goto_set.set(ce[i].getHandlerPC()); - } - // Look for local variables and their range - Attribute[] attributes = code.getAttributes(); - for (int i = 0; i < attributes.length; i++) { - if (attributes[i].getTag() == ATTR_LOCAL_VARIABLE_TABLE) { - LocalVariable[] vars = ((LocalVariableTable) attributes[i]) - .getLocalVariableTable(); - for (int j = 0; j < vars.length; j++) { - int start = vars[j].getStartPC(); - int end = (int) (start + vars[j].getLength()); - goto_set.set(start); - goto_set.set(end); - } - break; - } - } - } - // Get target addresses from GOTO, JSR, TABLESWITCH, etc. - for (int i = 0; bytes.available() > 0; i++) { - opcode = bytes.readUnsignedByte(); - //System.out.println(OPCODE_NAMES[opcode]); - switch (opcode) { - case TABLESWITCH: - case LOOKUPSWITCH: - //bytes.readByte(); // Skip already read byte - int remainder = bytes.getIndex() % 4; - int no_pad_bytes = (remainder == 0) ? 0 : 4 - remainder; - int default_offset, - offset; - for (int j = 0; j < no_pad_bytes; j++) { - bytes.readByte(); - } - // Both cases have a field default_offset in common - default_offset = bytes.readInt(); - if (opcode == TABLESWITCH) { - int low = bytes.readInt(); - int high = bytes.readInt(); - offset = bytes.getIndex() - 12 - no_pad_bytes - 1; - default_offset += offset; - goto_set.set(default_offset); - for (int j = 0; j < (high - low + 1); j++) { - index = offset + bytes.readInt(); - goto_set.set(index); - } - } else { // LOOKUPSWITCH - int npairs = bytes.readInt(); - offset = bytes.getIndex() - 8 - no_pad_bytes - 1; - default_offset += offset; - goto_set.set(default_offset); - for (int j = 0; j < npairs; j++) { - int match = bytes.readInt(); - index = offset + bytes.readInt(); - goto_set.set(index); - } - } - break; - case GOTO: - case IFEQ: - case IFGE: - case IFGT: - case IFLE: - case IFLT: - case IFNE: - case IFNONNULL: - case IFNULL: - case IF_ACMPEQ: - case IF_ACMPNE: - case IF_ICMPEQ: - case IF_ICMPGE: - case IF_ICMPGT: - case IF_ICMPLE: - case IF_ICMPLT: - case IF_ICMPNE: - case JSR: - //bytes.readByte(); // Skip already read byte - index = bytes.getIndex() + bytes.readShort() - 1; - goto_set.set(index); - break; - case GOTO_W: - case JSR_W: - //bytes.readByte(); // Skip already read byte - index = bytes.getIndex() + bytes.readInt() - 1; - goto_set.set(index); - break; - default: - bytes.unreadByte(); - codeToHTML(bytes, 0); // Ignore output - } - } - } - - - /** - * Write a single method with the byte code associated with it. - */ - private void writeMethod( Method method, int method_number ) throws IOException { - // Get raw signature - String signature = method.getSignature(); - // Get array of strings containing the argument types - String[] args = Utility.methodSignatureArgumentTypes(signature, false); - // Get return type string - String type = Utility.methodSignatureReturnType(signature, false); - // Get method name - String name = method.getName(); - String html_name = Class2HTML.toHTML(name); - // Get method's access flags - String access = Utility.accessToString(method.getAccessFlags()); - access = Utility.replace(access, " ", " "); - // Get the method's attributes, the Code Attribute in particular - Attribute[] attributes = method.getAttributes(); - file.print("

          " + access + " " + "" + Class2HTML.referenceType(type) + " " - + html_name + "("); - for (int i = 0; i < args.length; i++) { - file.print(Class2HTML.referenceType(args[i])); - if (i < args.length - 1) { - file.print(", "); - } - } - file.println(")

          "); - Code c = null; - byte[] code = null; - if (attributes.length > 0) { - file.print("

          Attributes

            \n"); - for (int i = 0; i < attributes.length; i++) { - byte tag = attributes[i].getTag(); - if (tag != ATTR_UNKNOWN) { - file.print("
          • " - + ATTRIBUTE_NAMES[tag] + "
          • \n"); - } else { - file.print("
          • " + attributes[i] + "
          • "); - } - if (tag == ATTR_CODE) { - c = (Code) attributes[i]; - Attribute[] attributes2 = c.getAttributes(); - code = c.getCode(); - file.print("
              "); - for (int j = 0; j < attributes2.length; j++) { - tag = attributes2[j].getTag(); - file.print("
            • " - + ATTRIBUTE_NAMES[tag] + "
            • \n"); - } - file.print("
            "); - } - } - file.println("
          "); - } - if (code != null) { // No code, an abstract method, e.g. - //System.out.println(name + "\n" + Utility.codeToString(code, constant_pool, 0, -1)); - // Print the byte code - ByteSequence stream = new ByteSequence(code); - stream.mark(stream.available()); - findGotos(stream, method, c); - stream.reset(); - file.println("" - + ""); - for (int i = 0; stream.available() > 0; i++) { - int offset = stream.getIndex(); - String str = codeToHTML(stream, method_number); - String anchor = ""; - /* Set an anchor mark if this line is targetted by a goto, jsr, etc. - * Defining an anchor for every line is very inefficient! - */ - if (goto_set.get(offset)) { - anchor = ""; - } - String anchor2; - if (stream.getIndex() == code.length) { - anchor2 = "" + offset - + ""; - } else { - anchor2 = "" + offset; - } - file - .println(""); - } - // Mark last line, may be targetted from Attributes window - file.println(""); - file.println("
          Byte
          offset
          InstructionArgument
          " + anchor2 + "" + anchor + str - + "
          "); - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.BitSet; + +import org.apache.bcel5_2_0.classfile.Attribute; +import org.apache.bcel5_2_0.classfile.Code; +import org.apache.bcel5_2_0.classfile.CodeException; +import org.apache.bcel5_2_0.classfile.ConstantFieldref; +import org.apache.bcel5_2_0.classfile.ConstantInterfaceMethodref; +import org.apache.bcel5_2_0.classfile.ConstantMethodref; +import org.apache.bcel5_2_0.classfile.ConstantNameAndType; +import org.apache.bcel5_2_0.classfile.ConstantPool; +import org.apache.bcel5_2_0.classfile.LocalVariable; +import org.apache.bcel5_2_0.classfile.LocalVariableTable; +import org.apache.bcel5_2_0.classfile.Method; +import org.apache.bcel5_2_0.classfile.Utility; + +/** + * Convert code into HTML file. + * + * @version $Id: CodeHTML.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * + */ +final class CodeHTML implements org.apache.bcel5_2_0.Constants { + + private String class_name; // name of current class + private Method[] methods; // Methods to print + private PrintWriter file; // file to write to + private BitSet goto_set; + private ConstantPool constant_pool; + private ConstantHTML constant_html; + private static boolean wide = false; + + + CodeHTML(String dir, String class_name, Method[] methods, ConstantPool constant_pool, + ConstantHTML constant_html) throws IOException { + this.class_name = class_name; + this.methods = methods; + this.constant_pool = constant_pool; + this.constant_html = constant_html; + file = new PrintWriter(new FileOutputStream(dir + class_name + "_code.html")); + file.println(""); + for (int i = 0; i < methods.length; i++) { + writeMethod(methods[i], i); + } + file.println(""); + file.close(); + } + + + /** + * Disassemble a stream of byte codes and return the + * string representation. + * + * @param stream data input stream + * @return String representation of byte code + */ + private final String codeToHTML( ByteSequence bytes, int method_number ) throws IOException { + short opcode = (short) bytes.readUnsignedByte(); + StringBuilder buf; + String name, signature; + int default_offset = 0, low, high; + int index, class_index, vindex, constant; + int[] jump_table; + int no_pad_bytes = 0, offset; + buf = new StringBuilder(256); + buf.append("").append(OPCODE_NAMES[opcode]).append(""); + /* Special case: Skip (0-3) padding bytes, i.e., the + * following bytes are 4-byte-aligned + */ + if ((opcode == TABLESWITCH) || (opcode == LOOKUPSWITCH)) { + int remainder = bytes.getIndex() % 4; + no_pad_bytes = (remainder == 0) ? 0 : 4 - remainder; + for (int i = 0; i < no_pad_bytes; i++) { + bytes.readByte(); + } + // Both cases have a field default_offset in common + default_offset = bytes.readInt(); + } + switch (opcode) { + case TABLESWITCH: + low = bytes.readInt(); + high = bytes.readInt(); + offset = bytes.getIndex() - 12 - no_pad_bytes - 1; + default_offset += offset; + buf.append(""); + // Print switch indices in first row (and default) + jump_table = new int[high - low + 1]; + for (int i = 0; i < jump_table.length; i++) { + jump_table[i] = offset + bytes.readInt(); + buf.append(""); + } + buf.append("\n"); + // Print target and default indices in second row + for (int i = 0; i < jump_table.length; i++) { + buf.append(""); + } + buf.append("\n
          ").append(low + i).append("default
          ").append(jump_table[i]).append("").append(default_offset).append( + "
          \n"); + break; + /* Lookup switch has variable length arguments. + */ + case LOOKUPSWITCH: + int npairs = bytes.readInt(); + offset = bytes.getIndex() - 8 - no_pad_bytes - 1; + jump_table = new int[npairs]; + default_offset += offset; + buf.append(""); + // Print switch indices in first row (and default) + for (int i = 0; i < npairs; i++) { + int match = bytes.readInt(); + jump_table[i] = offset + bytes.readInt(); + buf.append(""); + } + buf.append("\n"); + // Print target and default indices in second row + for (int i = 0; i < npairs; i++) { + buf.append(""); + } + buf.append("\n
          ").append(match).append("default
          ").append(jump_table[i]).append("").append(default_offset).append( + "
          \n"); + break; + /* Two address bytes + offset from start of byte stream form the + * jump target. + */ + case GOTO: + case IFEQ: + case IFGE: + case IFGT: + case IFLE: + case IFLT: + case IFNE: + case IFNONNULL: + case IFNULL: + case IF_ACMPEQ: + case IF_ACMPNE: + case IF_ICMPEQ: + case IF_ICMPGE: + case IF_ICMPGT: + case IF_ICMPLE: + case IF_ICMPLT: + case IF_ICMPNE: + case JSR: + index = (int) (bytes.getIndex() + bytes.readShort() - 1); + buf.append("").append(index).append(""); + break; + /* Same for 32-bit wide jumps + */ + case GOTO_W: + case JSR_W: + int windex = bytes.getIndex() + bytes.readInt() - 1; + buf.append("").append(windex).append(""); + break; + /* Index byte references local variable (register) + */ + case ALOAD: + case ASTORE: + case DLOAD: + case DSTORE: + case FLOAD: + case FSTORE: + case ILOAD: + case ISTORE: + case LLOAD: + case LSTORE: + case RET: + if (wide) { + vindex = bytes.readShort(); + wide = false; // Clear flag + } else { + vindex = bytes.readUnsignedByte(); + } + buf.append("%").append(vindex); + break; + /* + * Remember wide byte which is used to form a 16-bit address in the + * following instruction. Relies on that the method is called again with + * the following opcode. + */ + case WIDE: + wide = true; + buf.append("(wide)"); + break; + /* Array of basic type. + */ + case NEWARRAY: + buf.append("").append(TYPE_NAMES[bytes.readByte()]).append( + ""); + break; + /* Access object/class fields. + */ + case GETFIELD: + case GETSTATIC: + case PUTFIELD: + case PUTSTATIC: + index = bytes.readShort(); + ConstantFieldref c1 = (ConstantFieldref) constant_pool.getConstant(index, + CONSTANT_Fieldref); + class_index = c1.getClassIndex(); + name = constant_pool.getConstantString(class_index, CONSTANT_Class); + name = Utility.compactClassName(name, false); + index = c1.getNameAndTypeIndex(); + String field_name = constant_pool.constantToString(index, CONSTANT_NameAndType); + if (name.equals(class_name)) { // Local field + buf.append("").append(field_name) + .append("\n"); + } else { + buf.append(constant_html.referenceConstant(class_index)).append(".").append( + field_name); + } + break; + /* Operands are references to classes in constant pool + */ + case CHECKCAST: + case INSTANCEOF: + case NEW: + index = bytes.readShort(); + buf.append(constant_html.referenceConstant(index)); + break; + /* Operands are references to methods in constant pool + */ + case INVOKESPECIAL: + case INVOKESTATIC: + case INVOKEVIRTUAL: + case INVOKEINTERFACE: + int m_index = bytes.readShort(); + String str; + if (opcode == INVOKEINTERFACE) { // Special treatment needed + int nargs = bytes.readUnsignedByte(); // Redundant + int reserved = bytes.readUnsignedByte(); // Reserved + ConstantInterfaceMethodref c = (ConstantInterfaceMethodref) constant_pool + .getConstant(m_index, CONSTANT_InterfaceMethodref); + class_index = c.getClassIndex(); + str = constant_pool.constantToString(c); + index = c.getNameAndTypeIndex(); + } else { + ConstantMethodref c = (ConstantMethodref) constant_pool.getConstant(m_index, + CONSTANT_Methodref); + class_index = c.getClassIndex(); + str = constant_pool.constantToString(c); + index = c.getNameAndTypeIndex(); + } + name = Class2HTML.referenceClass(class_index); + str = Class2HTML.toHTML(constant_pool.constantToString(constant_pool.getConstant( + index, CONSTANT_NameAndType))); + // Get signature, i.e., types + ConstantNameAndType c2 = (ConstantNameAndType) constant_pool.getConstant(index, + CONSTANT_NameAndType); + signature = constant_pool.constantToString(c2.getSignatureIndex(), CONSTANT_Utf8); + String[] args = Utility.methodSignatureArgumentTypes(signature, false); + String type = Utility.methodSignatureReturnType(signature, false); + buf.append(name).append(".").append(str).append( + "").append("("); + // List arguments + for (int i = 0; i < args.length; i++) { + buf.append(Class2HTML.referenceType(args[i])); + if (i < args.length - 1) { + buf.append(", "); + } + } + // Attach return type + buf.append("):").append(Class2HTML.referenceType(type)); + break; + /* Operands are references to items in constant pool + */ + case LDC_W: + case LDC2_W: + index = bytes.readShort(); + buf.append("").append( + Class2HTML.toHTML(constant_pool.constantToString(index, + constant_pool.getConstant(index).getTag()))).append(""); + break; + case LDC: + index = bytes.readUnsignedByte(); + buf.append("").append( + Class2HTML.toHTML(constant_pool.constantToString(index, + constant_pool.getConstant(index).getTag()))).append(""); + break; + /* Array of references. + */ + case ANEWARRAY: + index = bytes.readShort(); + buf.append(constant_html.referenceConstant(index)); + break; + /* Multidimensional array of references. + */ + case MULTIANEWARRAY: + index = bytes.readShort(); + int dimensions = bytes.readByte(); + buf.append(constant_html.referenceConstant(index)).append(":").append(dimensions) + .append("-dimensional"); + break; + /* Increment local variable. + */ + case IINC: + if (wide) { + vindex = bytes.readShort(); + constant = bytes.readShort(); + wide = false; + } else { + vindex = bytes.readUnsignedByte(); + constant = bytes.readByte(); + } + buf.append("%").append(vindex).append(" ").append(constant); + break; + default: + if (NO_OF_OPERANDS[opcode] > 0) { + for (int i = 0; i < TYPE_OF_OPERANDS[opcode].length; i++) { + switch (TYPE_OF_OPERANDS[opcode][i]) { + case T_BYTE: + buf.append(bytes.readUnsignedByte()); + break; + case T_SHORT: // Either branch or index + buf.append(bytes.readShort()); + break; + case T_INT: + buf.append(bytes.readInt()); + break; + default: // Never reached + System.err.println("Unreachable default case reached!"); + System.exit(-1); + } + buf.append(" "); + } + } + } + buf.append(""); + return buf.toString(); + } + + + /** + * Find all target addresses in code, so that they can be marked + * with <A NAME = ...>. Target addresses are kept in an BitSet object. + */ + private final void findGotos( ByteSequence bytes, Method method, Code code ) throws IOException { + int index; + goto_set = new BitSet(bytes.available()); + int opcode; + /* First get Code attribute from method and the exceptions handled + * (try .. catch) in this method. We only need the line number here. + */ + if (code != null) { + CodeException[] ce = code.getExceptionTable(); + int len = ce.length; + for (int i = 0; i < len; i++) { + goto_set.set(ce[i].getStartPC()); + goto_set.set(ce[i].getEndPC()); + goto_set.set(ce[i].getHandlerPC()); + } + // Look for local variables and their range + Attribute[] attributes = code.getAttributes(); + for (int i = 0; i < attributes.length; i++) { + if (attributes[i].getTag() == ATTR_LOCAL_VARIABLE_TABLE) { + LocalVariable[] vars = ((LocalVariableTable) attributes[i]) + .getLocalVariableTable(); + for (int j = 0; j < vars.length; j++) { + int start = vars[j].getStartPC(); + int end = (int) (start + vars[j].getLength()); + goto_set.set(start); + goto_set.set(end); + } + break; + } + } + } + // Get target addresses from GOTO, JSR, TABLESWITCH, etc. + for (int i = 0; bytes.available() > 0; i++) { + opcode = bytes.readUnsignedByte(); + //System.out.println(OPCODE_NAMES[opcode]); + switch (opcode) { + case TABLESWITCH: + case LOOKUPSWITCH: + //bytes.readByte(); // Skip already read byte + int remainder = bytes.getIndex() % 4; + int no_pad_bytes = (remainder == 0) ? 0 : 4 - remainder; + int default_offset, + offset; + for (int j = 0; j < no_pad_bytes; j++) { + bytes.readByte(); + } + // Both cases have a field default_offset in common + default_offset = bytes.readInt(); + if (opcode == TABLESWITCH) { + int low = bytes.readInt(); + int high = bytes.readInt(); + offset = bytes.getIndex() - 12 - no_pad_bytes - 1; + default_offset += offset; + goto_set.set(default_offset); + for (int j = 0; j < (high - low + 1); j++) { + index = offset + bytes.readInt(); + goto_set.set(index); + } + } else { // LOOKUPSWITCH + int npairs = bytes.readInt(); + offset = bytes.getIndex() - 8 - no_pad_bytes - 1; + default_offset += offset; + goto_set.set(default_offset); + for (int j = 0; j < npairs; j++) { + int match = bytes.readInt(); + index = offset + bytes.readInt(); + goto_set.set(index); + } + } + break; + case GOTO: + case IFEQ: + case IFGE: + case IFGT: + case IFLE: + case IFLT: + case IFNE: + case IFNONNULL: + case IFNULL: + case IF_ACMPEQ: + case IF_ACMPNE: + case IF_ICMPEQ: + case IF_ICMPGE: + case IF_ICMPGT: + case IF_ICMPLE: + case IF_ICMPLT: + case IF_ICMPNE: + case JSR: + //bytes.readByte(); // Skip already read byte + index = bytes.getIndex() + bytes.readShort() - 1; + goto_set.set(index); + break; + case GOTO_W: + case JSR_W: + //bytes.readByte(); // Skip already read byte + index = bytes.getIndex() + bytes.readInt() - 1; + goto_set.set(index); + break; + default: + bytes.unreadByte(); + codeToHTML(bytes, 0); // Ignore output + } + } + } + + + /** + * Write a single method with the byte code associated with it. + */ + private void writeMethod( Method method, int method_number ) throws IOException { + // Get raw signature + String signature = method.getSignature(); + // Get array of strings containing the argument types + String[] args = Utility.methodSignatureArgumentTypes(signature, false); + // Get return type string + String type = Utility.methodSignatureReturnType(signature, false); + // Get method name + String name = method.getName(); + String html_name = Class2HTML.toHTML(name); + // Get method's access flags + String access = Utility.accessToString(method.getAccessFlags()); + access = Utility.replace(access, " ", " "); + // Get the method's attributes, the Code Attribute in particular + Attribute[] attributes = method.getAttributes(); + file.print("

          " + access + " " + "" + Class2HTML.referenceType(type) + " " + + html_name + "("); + for (int i = 0; i < args.length; i++) { + file.print(Class2HTML.referenceType(args[i])); + if (i < args.length - 1) { + file.print(", "); + } + } + file.println(")

          "); + Code c = null; + byte[] code = null; + if (attributes.length > 0) { + file.print("

          Attributes

            \n"); + for (int i = 0; i < attributes.length; i++) { + byte tag = attributes[i].getTag(); + if (tag != ATTR_UNKNOWN) { + file.print("
          • " + + ATTRIBUTE_NAMES[tag] + "
          • \n"); + } else { + file.print("
          • " + attributes[i] + "
          • "); + } + if (tag == ATTR_CODE) { + c = (Code) attributes[i]; + Attribute[] attributes2 = c.getAttributes(); + code = c.getCode(); + file.print("
              "); + for (int j = 0; j < attributes2.length; j++) { + tag = attributes2[j].getTag(); + file.print("
            • " + + ATTRIBUTE_NAMES[tag] + "
            • \n"); + } + file.print("
            "); + } + } + file.println("
          "); + } + if (code != null) { // No code, an abstract method, e.g. + //System.out.println(name + "\n" + Utility.codeToString(code, constant_pool, 0, -1)); + // Print the byte code + ByteSequence stream = new ByteSequence(code); + stream.mark(stream.available()); + findGotos(stream, method, c); + stream.reset(); + file.println("" + + ""); + for (int i = 0; stream.available() > 0; i++) { + int offset = stream.getIndex(); + String str = codeToHTML(stream, method_number); + String anchor = ""; + /* Set an anchor mark if this line is targetted by a goto, jsr, etc. + * Defining an anchor for every line is very inefficient! + */ + if (goto_set.get(offset)) { + anchor = ""; + } + String anchor2; + if (stream.getIndex() == code.length) { + anchor2 = "" + offset + + ""; + } else { + anchor2 = "" + offset; + } + file + .println(""); + } + // Mark last line, may be targetted from Attributes window + file.println(""); + file.println("
          Byte
          offset
          InstructionArgument
          " + anchor2 + "" + anchor + str + + "
          "); + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ConstantHTML.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ConstantHTML.java index 2afd9f37..36e6fdb7 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ConstantHTML.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/ConstantHTML.java @@ -1,235 +1,235 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; - -import org.apache.bcel5_2_0.classfile.Constant; -import org.apache.bcel5_2_0.classfile.ConstantClass; -import org.apache.bcel5_2_0.classfile.ConstantFieldref; -import org.apache.bcel5_2_0.classfile.ConstantInterfaceMethodref; -import org.apache.bcel5_2_0.classfile.ConstantMethodref; -import org.apache.bcel5_2_0.classfile.ConstantNameAndType; -import org.apache.bcel5_2_0.classfile.ConstantPool; -import org.apache.bcel5_2_0.classfile.ConstantString; -import org.apache.bcel5_2_0.classfile.Method; -import org.apache.bcel5_2_0.classfile.Utility; - -/** - * Convert constant pool into HTML file. - * - * @version $Id: ConstantHTML.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * - */ -final class ConstantHTML implements org.apache.bcel5_2_0.Constants { - - private String class_name; // name of current class - private String class_package; // name of package - private ConstantPool constant_pool; // reference to constant pool - private PrintWriter file; // file to write to - private String[] constant_ref; // String to return for cp[i] - private Constant[] constants; // The constants in the cp - private Method[] methods; - - - ConstantHTML(String dir, String class_name, String class_package, Method[] methods, - ConstantPool constant_pool) throws IOException { - this.class_name = class_name; - this.class_package = class_package; - this.constant_pool = constant_pool; - this.methods = methods; - constants = constant_pool.getConstantPool(); - file = new PrintWriter(new FileOutputStream(dir + class_name + "_cp.html")); - constant_ref = new String[constants.length]; - constant_ref[0] = "<unknown>"; - file.println(""); - // Loop through constants, constants[0] is reserved - for (int i = 1; i < constants.length; i++) { - if (i % 2 == 0) { - file.print("\n"); - } - file.println("
          "); - } else { - file.print("
          "); - } - if (constants[i] != null) { - writeConstant(i); - } - file.print("
          "); - file.close(); - } - - - String referenceConstant( int index ) { - return constant_ref[index]; - } - - - private void writeConstant( int index ) { - byte tag = constants[index].getTag(); - int class_index, name_index; - String ref; - // The header is always the same - file.println("

          " + index + " " + CONSTANT_NAMES[tag] - + "

          "); - /* For every constant type get the needed parameters and print them appropiately - */ - switch (tag) { - case CONSTANT_InterfaceMethodref: - case CONSTANT_Methodref: - // Get class_index and name_and_type_index, depending on type - if (tag == CONSTANT_Methodref) { - ConstantMethodref c = (ConstantMethodref) constant_pool.getConstant(index, - CONSTANT_Methodref); - class_index = c.getClassIndex(); - name_index = c.getNameAndTypeIndex(); - } else { - ConstantInterfaceMethodref c1 = (ConstantInterfaceMethodref) constant_pool - .getConstant(index, CONSTANT_InterfaceMethodref); - class_index = c1.getClassIndex(); - name_index = c1.getNameAndTypeIndex(); - } - // Get method name and its class - String method_name = constant_pool.constantToString(name_index, - CONSTANT_NameAndType); - String html_method_name = Class2HTML.toHTML(method_name); - // Partially compacted class name, i.e., / -> . - String method_class = constant_pool.constantToString(class_index, CONSTANT_Class); - String short_method_class = Utility.compactClassName(method_class); // I.e., remove java.lang. - short_method_class = Utility.compactClassName(method_class); // I.e., remove java.lang. - short_method_class = Utility.compactClassName(short_method_class, class_package - + ".", true); // Remove class package prefix - // Get method signature - ConstantNameAndType c2 = (ConstantNameAndType) constant_pool.getConstant( - name_index, CONSTANT_NameAndType); - String signature = constant_pool.constantToString(c2.getSignatureIndex(), - CONSTANT_Utf8); - // Get array of strings containing the argument types - String[] args = Utility.methodSignatureArgumentTypes(signature, false); - // Get return type string - String type = Utility.methodSignatureReturnType(signature, false); - String ret_type = Class2HTML.referenceType(type); - StringBuilder buf = new StringBuilder("("); - for (int i = 0; i < args.length; i++) { - buf.append(Class2HTML.referenceType(args[i])); - if (i < args.length - 1) { - buf.append(", "); - } - } - buf.append(")"); - String arg_types = buf.toString(); - if (method_class.equals(class_name)) { - ref = "" - + html_method_name + ""; - } else { - ref = "" - + short_method_class + "." + html_method_name; - } - constant_ref[index] = ret_type + " " + short_method_class - + "." + html_method_name + " " + arg_types; - file.println("

          " + ret_type + " " + ref + arg_types - + " \n

          "); - break; - case CONSTANT_Fieldref: - // Get class_index and name_and_type_index - ConstantFieldref c3 = (ConstantFieldref) constant_pool.getConstant(index, - CONSTANT_Fieldref); - class_index = c3.getClassIndex(); - name_index = c3.getNameAndTypeIndex(); - // Get method name and its class (compacted) - String field_class = constant_pool.constantToString(class_index, CONSTANT_Class); - String short_field_class = Utility.compactClassName(field_class); // I.e., remove java.lang. - short_field_class = Utility.compactClassName(short_field_class, - class_package + ".", true); // Remove class package prefix - String field_name = constant_pool - .constantToString(name_index, CONSTANT_NameAndType); - if (field_class.equals(class_name)) { - ref = "" + field_name + ""; - } else { - ref = "" + short_field_class - + "." + field_name + "\n"; - } - constant_ref[index] = "" + short_field_class + "." - + field_name + ""; - file.println("

          " + ref + "
          \n" + "

          "); - break; - case CONSTANT_Class: - ConstantClass c4 = (ConstantClass) constant_pool.getConstant(index, CONSTANT_Class); - name_index = c4.getNameIndex(); - String class_name2 = constant_pool.constantToString(index, tag); // / -> . - String short_class_name = Utility.compactClassName(class_name2); // I.e., remove java.lang. - short_class_name = Utility.compactClassName(short_class_name, class_package + ".", - true); // Remove class package prefix - ref = "" + short_class_name - + ""; - constant_ref[index] = "" + short_class_name + ""; - file.println("

          " + ref + "

          \n"); - break; - case CONSTANT_String: - ConstantString c5 = (ConstantString) constant_pool.getConstant(index, - CONSTANT_String); - name_index = c5.getStringIndex(); - String str = Class2HTML.toHTML(constant_pool.constantToString(index, tag)); - file.println("

          " + str + "

          \n"); - break; - case CONSTANT_NameAndType: - ConstantNameAndType c6 = (ConstantNameAndType) constant_pool.getConstant(index, - CONSTANT_NameAndType); - name_index = c6.getNameIndex(); - int signature_index = c6.getSignatureIndex(); - file.println("

          " - + Class2HTML.toHTML(constant_pool.constantToString(index, tag)) - + "

          \n"); - break; - default: - file - .println("

          " - + Class2HTML.toHTML(constant_pool.constantToString(index, tag)) - + "\n"); - } // switch - } - - - private final int getMethodNumber( String str ) { - for (int i = 0; i < methods.length; i++) { - String cmp = methods[i].getName() + methods[i].getSignature(); - if (cmp.equals(str)) { - return i; - } - } - return -1; - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintWriter; + +import org.apache.bcel5_2_0.classfile.Constant; +import org.apache.bcel5_2_0.classfile.ConstantClass; +import org.apache.bcel5_2_0.classfile.ConstantFieldref; +import org.apache.bcel5_2_0.classfile.ConstantInterfaceMethodref; +import org.apache.bcel5_2_0.classfile.ConstantMethodref; +import org.apache.bcel5_2_0.classfile.ConstantNameAndType; +import org.apache.bcel5_2_0.classfile.ConstantPool; +import org.apache.bcel5_2_0.classfile.ConstantString; +import org.apache.bcel5_2_0.classfile.Method; +import org.apache.bcel5_2_0.classfile.Utility; + +/** + * Convert constant pool into HTML file. + * + * @version $Id: ConstantHTML.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * + */ +final class ConstantHTML implements org.apache.bcel5_2_0.Constants { + + private String class_name; // name of current class + private String class_package; // name of package + private ConstantPool constant_pool; // reference to constant pool + private PrintWriter file; // file to write to + private String[] constant_ref; // String to return for cp[i] + private Constant[] constants; // The constants in the cp + private Method[] methods; + + + ConstantHTML(String dir, String class_name, String class_package, Method[] methods, + ConstantPool constant_pool) throws IOException { + this.class_name = class_name; + this.class_package = class_package; + this.constant_pool = constant_pool; + this.methods = methods; + constants = constant_pool.getConstantPool(); + file = new PrintWriter(new FileOutputStream(dir + class_name + "_cp.html")); + constant_ref = new String[constants.length]; + constant_ref[0] = "<unknown>"; + file.println(""); + // Loop through constants, constants[0] is reserved + for (int i = 1; i < constants.length; i++) { + if (i % 2 == 0) { + file.print("\n"); + } + file.println("
          "); + } else { + file.print("
          "); + } + if (constants[i] != null) { + writeConstant(i); + } + file.print("
          "); + file.close(); + } + + + String referenceConstant( int index ) { + return constant_ref[index]; + } + + + private void writeConstant( int index ) { + byte tag = constants[index].getTag(); + int class_index, name_index; + String ref; + // The header is always the same + file.println("

          " + index + " " + CONSTANT_NAMES[tag] + + "

          "); + /* For every constant type get the needed parameters and print them appropiately + */ + switch (tag) { + case CONSTANT_InterfaceMethodref: + case CONSTANT_Methodref: + // Get class_index and name_and_type_index, depending on type + if (tag == CONSTANT_Methodref) { + ConstantMethodref c = (ConstantMethodref) constant_pool.getConstant(index, + CONSTANT_Methodref); + class_index = c.getClassIndex(); + name_index = c.getNameAndTypeIndex(); + } else { + ConstantInterfaceMethodref c1 = (ConstantInterfaceMethodref) constant_pool + .getConstant(index, CONSTANT_InterfaceMethodref); + class_index = c1.getClassIndex(); + name_index = c1.getNameAndTypeIndex(); + } + // Get method name and its class + String method_name = constant_pool.constantToString(name_index, + CONSTANT_NameAndType); + String html_method_name = Class2HTML.toHTML(method_name); + // Partially compacted class name, i.e., / -> . + String method_class = constant_pool.constantToString(class_index, CONSTANT_Class); + String short_method_class = Utility.compactClassName(method_class); // I.e., remove java.lang. + short_method_class = Utility.compactClassName(method_class); // I.e., remove java.lang. + short_method_class = Utility.compactClassName(short_method_class, class_package + + ".", true); // Remove class package prefix + // Get method signature + ConstantNameAndType c2 = (ConstantNameAndType) constant_pool.getConstant( + name_index, CONSTANT_NameAndType); + String signature = constant_pool.constantToString(c2.getSignatureIndex(), + CONSTANT_Utf8); + // Get array of strings containing the argument types + String[] args = Utility.methodSignatureArgumentTypes(signature, false); + // Get return type string + String type = Utility.methodSignatureReturnType(signature, false); + String ret_type = Class2HTML.referenceType(type); + StringBuilder buf = new StringBuilder("("); + for (int i = 0; i < args.length; i++) { + buf.append(Class2HTML.referenceType(args[i])); + if (i < args.length - 1) { + buf.append(", "); + } + } + buf.append(")"); + String arg_types = buf.toString(); + if (method_class.equals(class_name)) { + ref = "" + + html_method_name + ""; + } else { + ref = "" + + short_method_class + "." + html_method_name; + } + constant_ref[index] = ret_type + " " + short_method_class + + "." + html_method_name + " " + arg_types; + file.println("

          " + ret_type + " " + ref + arg_types + + " \n

          "); + break; + case CONSTANT_Fieldref: + // Get class_index and name_and_type_index + ConstantFieldref c3 = (ConstantFieldref) constant_pool.getConstant(index, + CONSTANT_Fieldref); + class_index = c3.getClassIndex(); + name_index = c3.getNameAndTypeIndex(); + // Get method name and its class (compacted) + String field_class = constant_pool.constantToString(class_index, CONSTANT_Class); + String short_field_class = Utility.compactClassName(field_class); // I.e., remove java.lang. + short_field_class = Utility.compactClassName(short_field_class, + class_package + ".", true); // Remove class package prefix + String field_name = constant_pool + .constantToString(name_index, CONSTANT_NameAndType); + if (field_class.equals(class_name)) { + ref = "" + field_name + ""; + } else { + ref = "" + short_field_class + + "." + field_name + "\n"; + } + constant_ref[index] = "" + short_field_class + "." + + field_name + ""; + file.println("

          " + ref + "
          \n" + "

          "); + break; + case CONSTANT_Class: + ConstantClass c4 = (ConstantClass) constant_pool.getConstant(index, CONSTANT_Class); + name_index = c4.getNameIndex(); + String class_name2 = constant_pool.constantToString(index, tag); // / -> . + String short_class_name = Utility.compactClassName(class_name2); // I.e., remove java.lang. + short_class_name = Utility.compactClassName(short_class_name, class_package + ".", + true); // Remove class package prefix + ref = "" + short_class_name + + ""; + constant_ref[index] = "" + short_class_name + ""; + file.println("

          " + ref + "

          \n"); + break; + case CONSTANT_String: + ConstantString c5 = (ConstantString) constant_pool.getConstant(index, + CONSTANT_String); + name_index = c5.getStringIndex(); + String str = Class2HTML.toHTML(constant_pool.constantToString(index, tag)); + file.println("

          " + str + "

          \n"); + break; + case CONSTANT_NameAndType: + ConstantNameAndType c6 = (ConstantNameAndType) constant_pool.getConstant(index, + CONSTANT_NameAndType); + name_index = c6.getNameIndex(); + int signature_index = c6.getSignatureIndex(); + file.println("

          " + + Class2HTML.toHTML(constant_pool.constantToString(index, tag)) + + "

          \n"); + break; + default: + file + .println("

          " + + Class2HTML.toHTML(constant_pool.constantToString(index, tag)) + + "\n"); + } // switch + } + + + private final int getMethodNumber( String str ) { + for (int i = 0; i < methods.length; i++) { + String cmp = methods[i].getName() + methods[i].getSignature(); + if (cmp.equals(str)) { + return i; + } + } + return -1; + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/InstructionFinder.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/InstructionFinder.java index 0668ce66..f1f30864 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/InstructionFinder.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/InstructionFinder.java @@ -1,473 +1,473 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.bcel5_2_0.Constants; -import org.apache.bcel5_2_0.generic.ClassGenException; -import org.apache.bcel5_2_0.generic.Instruction; -import org.apache.bcel5_2_0.generic.InstructionHandle; -import org.apache.bcel5_2_0.generic.InstructionList; - -/** - * InstructionFinder is a tool to search for given instructions patterns, i.e., - * match sequences of instructions in an instruction list via regular - * expressions. This can be used, e.g., in order to implement a peep hole - * optimizer that looks for code patterns and replaces them with faster - * equivalents. - * - *

          - * This class internally uses the - * Regexp package to search for regular expressions. - * - * A typical application would look like this: - * - *

          - * 
          - *  
          - *   InstructionFinder f   = new InstructionFinder(il);
          - *   String            pat = "IfInstruction ICONST_0 GOTO ICONST_1 NOP (IFEQ|IFNE)";
          - *   
          - *   for(Iterator i = f.search(pat, constraint); i.hasNext(); ) {
          - *   InstructionHandle[] match = (InstructionHandle[])i.next();
          - *   ...
          - *   il.delete(match[1], match[5]);
          - *   ...
          - *   }
          - *   
          - *  
          - * 
          - * - * @version $Id: InstructionFinder.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Instruction - * @see InstructionList - */ -public class InstructionFinder { - - private static final int OFFSET = 32767; // char + OFFSET is - // outside of - // LATIN-1 - private static final int NO_OPCODES = 256; // Potential number, - // some are not used - private static final Map map = new HashMap(); // Map - private InstructionList il; - private String il_string; // instruction list - // as string - private InstructionHandle[] handles; // map instruction - - - // list to array - /** - * @param il - * instruction list to search for given patterns - */ - public InstructionFinder(InstructionList il) { - this.il = il; - reread(); - } - - - /** - * Reread the instruction list, e.g., after you've altered the list upon a - * match. - */ - public final void reread() { - int size = il.getLength(); - char[] buf = new char[size]; // Create a string with length equal to il - // length - handles = il.getInstructionHandles(); - // Map opcodes to characters - for (int i = 0; i < size; i++) { - buf[i] = makeChar(handles[i].getInstruction().getOpcode()); - } - il_string = new String(buf); - } - - - /** - * Map symbolic instruction names like "getfield" to a single character. - * - * @param pattern - * instruction pattern in lower case - * @return encoded string for a pattern such as "BranchInstruction". - */ - private static final String mapName( String pattern ) { - String result = (String) map.get(pattern); - if (result != null) { - return result; - } - for (short i = 0; i < NO_OPCODES; i++) { - if (pattern.equals(Constants.OPCODE_NAMES[i])) { - return "" + makeChar(i); - } - } - throw new RuntimeException("Instruction unknown: " + pattern); - } - - - /** - * Replace symbolic names of instructions with the appropiate character and - * remove all white space from string. Meta characters such as +, * are - * ignored. - * - * @param pattern - * The pattern to compile - * @return translated regular expression string - */ - private static final String compilePattern( String pattern ) { - //Bug: 38787 - Instructions are assumed to be english, to avoid odd Locale issues - String lower = pattern.toLowerCase(Locale.ENGLISH); - StringBuilder buf = new StringBuilder(); - int size = pattern.length(); - for (int i = 0; i < size; i++) { - char ch = lower.charAt(i); - if (Character.isLetterOrDigit(ch)) { - StringBuilder name = new StringBuilder(); - while ((Character.isLetterOrDigit(ch) || ch == '_') && i < size) { - name.append(ch); - if (++i < size) { - ch = lower.charAt(i); - } else { - break; - } - } - i--; - buf.append(mapName(name.toString())); - } else if (!Character.isWhitespace(ch)) { - buf.append(ch); - } - } - return buf.toString(); - } - - - /** - * @return the matched piece of code as an array of instruction (handles) - */ - private InstructionHandle[] getMatch( int matched_from, int match_length ) { - InstructionHandle[] match = new InstructionHandle[match_length]; - System.arraycopy(handles, matched_from, match, 0, match_length); - return match; - } - - - /** - * Search for the given pattern in the instruction list. You can search for - * any valid opcode via its symbolic name, e.g. "istore". You can also use a - * super class or an interface name to match a whole set of instructions, e.g. - * "BranchInstruction" or "LoadInstruction". "istore" is also an alias for all - * "istore_x" instructions. Additional aliases are "if" for "ifxx", "if_icmp" - * for "if_icmpxx", "if_acmp" for "if_acmpxx". - * - * Consecutive instruction names must be separated by white space which will - * be removed during the compilation of the pattern. - * - * For the rest the usual pattern matching rules for regular expressions - * apply. - *

          - * Example pattern: - * - *

          -     * search("BranchInstruction NOP ((IfInstruction|GOTO)+ ISTORE Instruction)*");
          -     * 
          - * - *

          - * If you alter the instruction list upon a match such that other matching - * areas are affected, you should call reread() to update the finder and call - * search() again, because the matches are cached. - * - * @param pattern - * the instruction pattern to search for, where case is ignored - * @param from - * where to start the search in the instruction list - * @param constraint - * optional CodeConstraint to check the found code pattern for - * user-defined constraints - * @return iterator of matches where e.nextElement() returns an array of - * instruction handles describing the matched area - */ - public final Iterator search( String pattern, InstructionHandle from, CodeConstraint constraint ) { - String search = compilePattern(pattern); - int start = -1; - for (int i = 0; i < handles.length; i++) { - if (handles[i] == from) { - start = i; // Where to start search from (index) - break; - } - } - if (start == -1) { - throw new ClassGenException("Instruction handle " + from - + " not found in instruction list."); - } - Pattern regex = Pattern.compile(search); - List matches = new ArrayList(); - Matcher matcher = regex.matcher(il_string); - while (start < il_string.length() && matcher.find(start)) { - int startExpr = matcher.start(); - int endExpr = matcher.end(); - int lenExpr = (endExpr - startExpr) + 1; - InstructionHandle[] match = getMatch(startExpr, lenExpr); - if ((constraint == null) || constraint.checkCode(match)) { - matches.add(match); - } - start = endExpr; - } - return matches.iterator(); - } - - - /** - * Start search beginning from the start of the given instruction list. - * - * @param pattern - * the instruction pattern to search for, where case is ignored - * @return iterator of matches where e.nextElement() returns an array of - * instruction handles describing the matched area - */ - public final Iterator search( String pattern ) { - return search(pattern, il.getStart(), null); - } - - - /** - * Start search beginning from `from'. - * - * @param pattern - * the instruction pattern to search for, where case is ignored - * @param from - * where to start the search in the instruction list - * @return iterator of matches where e.nextElement() returns an array of - * instruction handles describing the matched area - */ - public final Iterator search( String pattern, InstructionHandle from ) { - return search(pattern, from, null); - } - - - /** - * Start search beginning from the start of the given instruction list. Check - * found matches with the constraint object. - * - * @param pattern - * the instruction pattern to search for, case is ignored - * @param constraint - * constraints to be checked on matching code - * @return instruction handle or `null' if the match failed - */ - public final Iterator search( String pattern, CodeConstraint constraint ) { - return search(pattern, il.getStart(), constraint); - } - - - /** - * Convert opcode number to char. - */ - private static final char makeChar( short opcode ) { - return (char) (opcode + OFFSET); - } - - - /** - * @return the inquired instruction list - */ - public final InstructionList getInstructionList() { - return il; - } - - /** - * Code patterns found may be checked using an additional user-defined - * constraint object whether they really match the needed criterion. I.e., - * check constraints that can not expressed with regular expressions. - * - */ - public static interface CodeConstraint { - - /** - * @param match - * array of instructions matching the requested pattern - * @return true if the matched area is really useful - */ - public boolean checkCode( InstructionHandle[] match ); - } - - // Initialize pattern map - static { - map - .put( - "arithmeticinstruction", - "(irem|lrem|iand|ior|ineg|isub|lneg|fneg|fmul|ldiv|fadd|lxor|frem|idiv|land|ixor|ishr|fsub|lshl|fdiv|iadd|lor|dmul|lsub|ishl|imul|lmul|lushr|dneg|iushr|lshr|ddiv|drem|dadd|ladd|dsub)"); - map.put("invokeinstruction", "(invokevirtual|invokeinterface|invokestatic|invokespecial)"); - map - .put( - "arrayinstruction", - "(baload|aastore|saload|caload|fastore|lastore|iaload|castore|iastore|aaload|bastore|sastore|faload|laload|daload|dastore)"); - map.put("gotoinstruction", "(goto|goto_w)"); - map.put("conversioninstruction", - "(d2l|l2d|i2s|d2i|l2i|i2b|l2f|d2f|f2i|i2d|i2l|f2d|i2c|f2l|i2f)"); - map.put("localvariableinstruction", - "(fstore|iinc|lload|dstore|dload|iload|aload|astore|istore|fload|lstore)"); - map.put("loadinstruction", "(fload|dload|lload|iload|aload)"); - map.put("fieldinstruction", "(getfield|putstatic|getstatic|putfield)"); - map - .put( - "cpinstruction", - "(ldc2_w|invokeinterface|multianewarray|putstatic|instanceof|getstatic|checkcast|getfield|invokespecial|ldc_w|invokestatic|invokevirtual|putfield|ldc|new|anewarray)"); - map.put("stackinstruction", "(dup2|swap|dup2_x2|pop|pop2|dup|dup2_x1|dup_x2|dup_x1)"); - map - .put( - "branchinstruction", - "(ifle|if_acmpne|if_icmpeq|if_acmpeq|ifnonnull|goto_w|iflt|ifnull|if_icmpne|tableswitch|if_icmple|ifeq|if_icmplt|jsr_w|if_icmpgt|ifgt|jsr|goto|ifne|ifge|lookupswitch|if_icmpge)"); - map.put("returninstruction", "(lreturn|ireturn|freturn|dreturn|areturn|return)"); - map.put("storeinstruction", "(istore|fstore|dstore|astore|lstore)"); - map.put("select", "(tableswitch|lookupswitch)"); - map - .put( - "ifinstruction", - "(ifeq|ifgt|if_icmpne|if_icmpeq|ifge|ifnull|ifne|if_icmple|if_icmpge|if_acmpeq|if_icmplt|if_acmpne|ifnonnull|iflt|if_icmpgt|ifle)"); - map.put("jsrinstruction", "(jsr|jsr_w)"); - map.put("variablelengthinstruction", "(tableswitch|jsr|goto|lookupswitch)"); - map.put("unconditionalbranch", "(goto|jsr|jsr_w|athrow|goto_w)"); - map.put("constantpushinstruction", "(dconst|bipush|sipush|fconst|iconst|lconst)"); - map - .put( - "typedinstruction", - "(imul|lsub|aload|fload|lor|new|aaload|fcmpg|iand|iaload|lrem|idiv|d2l|isub|dcmpg|dastore|ret|f2d|f2i|drem|iinc|i2c|checkcast|frem|lreturn|astore|lushr|daload|dneg|fastore|istore|lshl|ldiv|lstore|areturn|ishr|ldc_w|invokeinterface|aastore|lxor|ishl|l2d|i2f|return|faload|sipush|iushr|caload|instanceof|invokespecial|putfield|fmul|ireturn|laload|d2f|lneg|ixor|i2l|fdiv|lastore|multianewarray|i2b|getstatic|i2d|putstatic|fcmpl|saload|ladd|irem|dload|jsr_w|dconst|dcmpl|fsub|freturn|ldc|aconst_null|castore|lmul|ldc2_w|dadd|iconst|f2l|ddiv|dstore|land|jsr|anewarray|dmul|bipush|dsub|sastore|d2i|i2s|lshr|iadd|l2i|lload|bastore|fstore|fneg|iload|fadd|baload|fconst|ior|ineg|dreturn|l2f|lconst|getfield|invokevirtual|invokestatic|iastore)"); - map.put("popinstruction", "(fstore|dstore|pop|pop2|astore|putstatic|istore|lstore)"); - map.put("allocationinstruction", "(multianewarray|new|anewarray|newarray)"); - map - .put( - "indexedinstruction", - "(lload|lstore|fload|ldc2_w|invokeinterface|multianewarray|astore|dload|putstatic|instanceof|getstatic|checkcast|getfield|invokespecial|dstore|istore|iinc|ldc_w|ret|fstore|invokestatic|iload|putfield|invokevirtual|ldc|new|aload|anewarray)"); - map - .put( - "pushinstruction", - "(dup|lload|dup2|bipush|fload|ldc2_w|sipush|lconst|fconst|dload|getstatic|ldc_w|aconst_null|dconst|iload|ldc|iconst|aload)"); - map - .put( - "stackproducer", - "(imul|lsub|aload|fload|lor|new|aaload|fcmpg|iand|iaload|lrem|idiv|d2l|isub|dcmpg|dup|f2d|f2i|drem|i2c|checkcast|frem|lushr|daload|dneg|lshl|ldiv|ishr|ldc_w|invokeinterface|lxor|ishl|l2d|i2f|faload|sipush|iushr|caload|instanceof|invokespecial|fmul|laload|d2f|lneg|ixor|i2l|fdiv|getstatic|i2b|swap|i2d|dup2|fcmpl|saload|ladd|irem|dload|jsr_w|dconst|dcmpl|fsub|ldc|arraylength|aconst_null|tableswitch|lmul|ldc2_w|iconst|dadd|f2l|ddiv|land|jsr|anewarray|dmul|bipush|dsub|d2i|newarray|i2s|lshr|iadd|lload|l2i|fneg|iload|fadd|baload|fconst|lookupswitch|ior|ineg|lconst|l2f|getfield|invokevirtual|invokestatic)"); - map - .put( - "stackconsumer", - "(imul|lsub|lor|iflt|fcmpg|if_icmpgt|iand|ifeq|if_icmplt|lrem|ifnonnull|idiv|d2l|isub|dcmpg|dastore|if_icmpeq|f2d|f2i|drem|i2c|checkcast|frem|lreturn|astore|lushr|pop2|monitorexit|dneg|fastore|istore|lshl|ldiv|lstore|areturn|if_icmpge|ishr|monitorenter|invokeinterface|aastore|lxor|ishl|l2d|i2f|return|iushr|instanceof|invokespecial|fmul|ireturn|d2f|lneg|ixor|pop|i2l|ifnull|fdiv|lastore|i2b|if_acmpeq|ifge|swap|i2d|putstatic|fcmpl|ladd|irem|dcmpl|fsub|freturn|ifgt|castore|lmul|dadd|f2l|ddiv|dstore|land|if_icmpne|if_acmpne|dmul|dsub|sastore|ifle|d2i|i2s|lshr|iadd|l2i|bastore|fstore|fneg|fadd|ior|ineg|ifne|dreturn|l2f|if_icmple|getfield|invokevirtual|invokestatic|iastore)"); - map - .put( - "exceptionthrower", - "(irem|lrem|laload|putstatic|baload|dastore|areturn|getstatic|ldiv|anewarray|iastore|castore|idiv|saload|lastore|fastore|putfield|lreturn|caload|getfield|return|aastore|freturn|newarray|instanceof|multianewarray|athrow|faload|iaload|aaload|dreturn|monitorenter|checkcast|bastore|arraylength|new|invokevirtual|sastore|ldc_w|ireturn|invokespecial|monitorexit|invokeinterface|ldc|invokestatic|daload)"); - map - .put( - "loadclass", - "(multianewarray|invokeinterface|instanceof|invokespecial|putfield|checkcast|putstatic|invokevirtual|new|getstatic|invokestatic|getfield|anewarray)"); - map - .put( - "instructiontargeter", - "(ifle|if_acmpne|if_icmpeq|if_acmpeq|ifnonnull|goto_w|iflt|ifnull|if_icmpne|tableswitch|if_icmple|ifeq|if_icmplt|jsr_w|if_icmpgt|ifgt|jsr|goto|ifne|ifge|lookupswitch|if_icmpge)"); - // Some aliases - map.put("if_icmp", "(if_icmpne|if_icmpeq|if_icmple|if_icmpge|if_icmplt|if_icmpgt)"); - map.put("if_acmp", "(if_acmpeq|if_acmpne)"); - map.put("if", "(ifeq|ifne|iflt|ifge|ifgt|ifle)"); - // Precompile some aliases first - map.put("iconst", precompile(Constants.ICONST_0, Constants.ICONST_5, Constants.ICONST_M1)); - map.put("lconst", new String(new char[] { - '(', makeChar(Constants.LCONST_0), '|', makeChar(Constants.LCONST_1), ')' - })); - map.put("dconst", new String(new char[] { - '(', makeChar(Constants.DCONST_0), '|', makeChar(Constants.DCONST_1), ')' - })); - map.put("fconst", new String(new char[] { - '(', makeChar(Constants.FCONST_0), '|', makeChar(Constants.FCONST_1), ')' - })); - map.put("iload", precompile(Constants.ILOAD_0, Constants.ILOAD_3, Constants.ILOAD)); - map.put("dload", precompile(Constants.DLOAD_0, Constants.DLOAD_3, Constants.DLOAD)); - map.put("fload", precompile(Constants.FLOAD_0, Constants.FLOAD_3, Constants.FLOAD)); - map.put("aload", precompile(Constants.ALOAD_0, Constants.ALOAD_3, Constants.ALOAD)); - map.put("istore", precompile(Constants.ISTORE_0, Constants.ISTORE_3, Constants.ISTORE)); - map.put("dstore", precompile(Constants.DSTORE_0, Constants.DSTORE_3, Constants.DSTORE)); - map.put("fstore", precompile(Constants.FSTORE_0, Constants.FSTORE_3, Constants.FSTORE)); - map.put("astore", precompile(Constants.ASTORE_0, Constants.ASTORE_3, Constants.ASTORE)); - // Compile strings - for (Iterator i = map.keySet().iterator(); i.hasNext();) { - String key = (String) i.next(); - String value = (String) map.get(key); - char ch = value.charAt(1); // Omit already precompiled patterns - if (ch < OFFSET) { - map.put(key, compilePattern(value)); // precompile all patterns - } - } - // Add instruction alias to match anything - StringBuilder buf = new StringBuilder("("); - for (short i = 0; i < NO_OPCODES; i++) { - if (Constants.NO_OF_OPERANDS[i] != Constants.UNDEFINED) { // Not an - // invalid - // opcode - buf.append(makeChar(i)); - if (i < NO_OPCODES - 1) { - buf.append('|'); - } - } - } - buf.append(')'); - map.put("instruction", buf.toString()); - } - - - private static String precompile( short from, short to, short extra ) { - StringBuilder buf = new StringBuilder("("); - for (short i = from; i <= to; i++) { - buf.append(makeChar(i)); - buf.append('|'); - } - buf.append(makeChar(extra)); - buf.append(")"); - return buf.toString(); - } - - - /* - * Internal debugging routines. - */ - private static final String pattern2string( String pattern ) { - return pattern2string(pattern, true); - } - - - private static final String pattern2string( String pattern, boolean make_string ) { - StringBuilder buf = new StringBuilder(); - for (int i = 0; i < pattern.length(); i++) { - char ch = pattern.charAt(i); - if (ch >= OFFSET) { - if (make_string) { - buf.append(Constants.OPCODE_NAMES[ch - OFFSET]); - } else { - buf.append((ch - OFFSET)); - } - } else { - buf.append(ch); - } - } - return buf.toString(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.bcel5_2_0.Constants; +import org.apache.bcel5_2_0.generic.ClassGenException; +import org.apache.bcel5_2_0.generic.Instruction; +import org.apache.bcel5_2_0.generic.InstructionHandle; +import org.apache.bcel5_2_0.generic.InstructionList; + +/** + * InstructionFinder is a tool to search for given instructions patterns, i.e., + * match sequences of instructions in an instruction list via regular + * expressions. This can be used, e.g., in order to implement a peep hole + * optimizer that looks for code patterns and replaces them with faster + * equivalents. + * + *

          + * This class internally uses the + * Regexp package to search for regular expressions. + * + * A typical application would look like this: + * + *

          + * 
          + *  
          + *   InstructionFinder f   = new InstructionFinder(il);
          + *   String            pat = "IfInstruction ICONST_0 GOTO ICONST_1 NOP (IFEQ|IFNE)";
          + *   
          + *   for(Iterator i = f.search(pat, constraint); i.hasNext(); ) {
          + *   InstructionHandle[] match = (InstructionHandle[])i.next();
          + *   ...
          + *   il.delete(match[1], match[5]);
          + *   ...
          + *   }
          + *   
          + *  
          + * 
          + * + * @version $Id: InstructionFinder.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see Instruction + * @see InstructionList + */ +public class InstructionFinder { + + private static final int OFFSET = 32767; // char + OFFSET is + // outside of + // LATIN-1 + private static final int NO_OPCODES = 256; // Potential number, + // some are not used + private static final Map map = new HashMap(); // Map + private InstructionList il; + private String il_string; // instruction list + // as string + private InstructionHandle[] handles; // map instruction + + + // list to array + /** + * @param il + * instruction list to search for given patterns + */ + public InstructionFinder(InstructionList il) { + this.il = il; + reread(); + } + + + /** + * Reread the instruction list, e.g., after you've altered the list upon a + * match. + */ + public final void reread() { + int size = il.getLength(); + char[] buf = new char[size]; // Create a string with length equal to il + // length + handles = il.getInstructionHandles(); + // Map opcodes to characters + for (int i = 0; i < size; i++) { + buf[i] = makeChar(handles[i].getInstruction().getOpcode()); + } + il_string = new String(buf); + } + + + /** + * Map symbolic instruction names like "getfield" to a single character. + * + * @param pattern + * instruction pattern in lower case + * @return encoded string for a pattern such as "BranchInstruction". + */ + private static final String mapName( String pattern ) { + String result = (String) map.get(pattern); + if (result != null) { + return result; + } + for (short i = 0; i < NO_OPCODES; i++) { + if (pattern.equals(Constants.OPCODE_NAMES[i])) { + return "" + makeChar(i); + } + } + throw new RuntimeException("Instruction unknown: " + pattern); + } + + + /** + * Replace symbolic names of instructions with the appropiate character and + * remove all white space from string. Meta characters such as +, * are + * ignored. + * + * @param pattern + * The pattern to compile + * @return translated regular expression string + */ + private static final String compilePattern( String pattern ) { + //Bug: 38787 - Instructions are assumed to be english, to avoid odd Locale issues + String lower = pattern.toLowerCase(Locale.ENGLISH); + StringBuilder buf = new StringBuilder(); + int size = pattern.length(); + for (int i = 0; i < size; i++) { + char ch = lower.charAt(i); + if (Character.isLetterOrDigit(ch)) { + StringBuilder name = new StringBuilder(); + while ((Character.isLetterOrDigit(ch) || ch == '_') && i < size) { + name.append(ch); + if (++i < size) { + ch = lower.charAt(i); + } else { + break; + } + } + i--; + buf.append(mapName(name.toString())); + } else if (!Character.isWhitespace(ch)) { + buf.append(ch); + } + } + return buf.toString(); + } + + + /** + * @return the matched piece of code as an array of instruction (handles) + */ + private InstructionHandle[] getMatch( int matched_from, int match_length ) { + InstructionHandle[] match = new InstructionHandle[match_length]; + System.arraycopy(handles, matched_from, match, 0, match_length); + return match; + } + + + /** + * Search for the given pattern in the instruction list. You can search for + * any valid opcode via its symbolic name, e.g. "istore". You can also use a + * super class or an interface name to match a whole set of instructions, e.g. + * "BranchInstruction" or "LoadInstruction". "istore" is also an alias for all + * "istore_x" instructions. Additional aliases are "if" for "ifxx", "if_icmp" + * for "if_icmpxx", "if_acmp" for "if_acmpxx". + * + * Consecutive instruction names must be separated by white space which will + * be removed during the compilation of the pattern. + * + * For the rest the usual pattern matching rules for regular expressions + * apply. + *

          + * Example pattern: + * + *

          +     * search("BranchInstruction NOP ((IfInstruction|GOTO)+ ISTORE Instruction)*");
          +     * 
          + * + *

          + * If you alter the instruction list upon a match such that other matching + * areas are affected, you should call reread() to update the finder and call + * search() again, because the matches are cached. + * + * @param pattern + * the instruction pattern to search for, where case is ignored + * @param from + * where to start the search in the instruction list + * @param constraint + * optional CodeConstraint to check the found code pattern for + * user-defined constraints + * @return iterator of matches where e.nextElement() returns an array of + * instruction handles describing the matched area + */ + public final Iterator search( String pattern, InstructionHandle from, CodeConstraint constraint ) { + String search = compilePattern(pattern); + int start = -1; + for (int i = 0; i < handles.length; i++) { + if (handles[i] == from) { + start = i; // Where to start search from (index) + break; + } + } + if (start == -1) { + throw new ClassGenException("Instruction handle " + from + + " not found in instruction list."); + } + Pattern regex = Pattern.compile(search); + List matches = new ArrayList(); + Matcher matcher = regex.matcher(il_string); + while (start < il_string.length() && matcher.find(start)) { + int startExpr = matcher.start(); + int endExpr = matcher.end(); + int lenExpr = (endExpr - startExpr) + 1; + InstructionHandle[] match = getMatch(startExpr, lenExpr); + if ((constraint == null) || constraint.checkCode(match)) { + matches.add(match); + } + start = endExpr; + } + return matches.iterator(); + } + + + /** + * Start search beginning from the start of the given instruction list. + * + * @param pattern + * the instruction pattern to search for, where case is ignored + * @return iterator of matches where e.nextElement() returns an array of + * instruction handles describing the matched area + */ + public final Iterator search( String pattern ) { + return search(pattern, il.getStart(), null); + } + + + /** + * Start search beginning from `from'. + * + * @param pattern + * the instruction pattern to search for, where case is ignored + * @param from + * where to start the search in the instruction list + * @return iterator of matches where e.nextElement() returns an array of + * instruction handles describing the matched area + */ + public final Iterator search( String pattern, InstructionHandle from ) { + return search(pattern, from, null); + } + + + /** + * Start search beginning from the start of the given instruction list. Check + * found matches with the constraint object. + * + * @param pattern + * the instruction pattern to search for, case is ignored + * @param constraint + * constraints to be checked on matching code + * @return instruction handle or `null' if the match failed + */ + public final Iterator search( String pattern, CodeConstraint constraint ) { + return search(pattern, il.getStart(), constraint); + } + + + /** + * Convert opcode number to char. + */ + private static final char makeChar( short opcode ) { + return (char) (opcode + OFFSET); + } + + + /** + * @return the inquired instruction list + */ + public final InstructionList getInstructionList() { + return il; + } + + /** + * Code patterns found may be checked using an additional user-defined + * constraint object whether they really match the needed criterion. I.e., + * check constraints that can not expressed with regular expressions. + * + */ + public static interface CodeConstraint { + + /** + * @param match + * array of instructions matching the requested pattern + * @return true if the matched area is really useful + */ + public boolean checkCode( InstructionHandle[] match ); + } + + // Initialize pattern map + static { + map + .put( + "arithmeticinstruction", + "(irem|lrem|iand|ior|ineg|isub|lneg|fneg|fmul|ldiv|fadd|lxor|frem|idiv|land|ixor|ishr|fsub|lshl|fdiv|iadd|lor|dmul|lsub|ishl|imul|lmul|lushr|dneg|iushr|lshr|ddiv|drem|dadd|ladd|dsub)"); + map.put("invokeinstruction", "(invokevirtual|invokeinterface|invokestatic|invokespecial)"); + map + .put( + "arrayinstruction", + "(baload|aastore|saload|caload|fastore|lastore|iaload|castore|iastore|aaload|bastore|sastore|faload|laload|daload|dastore)"); + map.put("gotoinstruction", "(goto|goto_w)"); + map.put("conversioninstruction", + "(d2l|l2d|i2s|d2i|l2i|i2b|l2f|d2f|f2i|i2d|i2l|f2d|i2c|f2l|i2f)"); + map.put("localvariableinstruction", + "(fstore|iinc|lload|dstore|dload|iload|aload|astore|istore|fload|lstore)"); + map.put("loadinstruction", "(fload|dload|lload|iload|aload)"); + map.put("fieldinstruction", "(getfield|putstatic|getstatic|putfield)"); + map + .put( + "cpinstruction", + "(ldc2_w|invokeinterface|multianewarray|putstatic|instanceof|getstatic|checkcast|getfield|invokespecial|ldc_w|invokestatic|invokevirtual|putfield|ldc|new|anewarray)"); + map.put("stackinstruction", "(dup2|swap|dup2_x2|pop|pop2|dup|dup2_x1|dup_x2|dup_x1)"); + map + .put( + "branchinstruction", + "(ifle|if_acmpne|if_icmpeq|if_acmpeq|ifnonnull|goto_w|iflt|ifnull|if_icmpne|tableswitch|if_icmple|ifeq|if_icmplt|jsr_w|if_icmpgt|ifgt|jsr|goto|ifne|ifge|lookupswitch|if_icmpge)"); + map.put("returninstruction", "(lreturn|ireturn|freturn|dreturn|areturn|return)"); + map.put("storeinstruction", "(istore|fstore|dstore|astore|lstore)"); + map.put("select", "(tableswitch|lookupswitch)"); + map + .put( + "ifinstruction", + "(ifeq|ifgt|if_icmpne|if_icmpeq|ifge|ifnull|ifne|if_icmple|if_icmpge|if_acmpeq|if_icmplt|if_acmpne|ifnonnull|iflt|if_icmpgt|ifle)"); + map.put("jsrinstruction", "(jsr|jsr_w)"); + map.put("variablelengthinstruction", "(tableswitch|jsr|goto|lookupswitch)"); + map.put("unconditionalbranch", "(goto|jsr|jsr_w|athrow|goto_w)"); + map.put("constantpushinstruction", "(dconst|bipush|sipush|fconst|iconst|lconst)"); + map + .put( + "typedinstruction", + "(imul|lsub|aload|fload|lor|new|aaload|fcmpg|iand|iaload|lrem|idiv|d2l|isub|dcmpg|dastore|ret|f2d|f2i|drem|iinc|i2c|checkcast|frem|lreturn|astore|lushr|daload|dneg|fastore|istore|lshl|ldiv|lstore|areturn|ishr|ldc_w|invokeinterface|aastore|lxor|ishl|l2d|i2f|return|faload|sipush|iushr|caload|instanceof|invokespecial|putfield|fmul|ireturn|laload|d2f|lneg|ixor|i2l|fdiv|lastore|multianewarray|i2b|getstatic|i2d|putstatic|fcmpl|saload|ladd|irem|dload|jsr_w|dconst|dcmpl|fsub|freturn|ldc|aconst_null|castore|lmul|ldc2_w|dadd|iconst|f2l|ddiv|dstore|land|jsr|anewarray|dmul|bipush|dsub|sastore|d2i|i2s|lshr|iadd|l2i|lload|bastore|fstore|fneg|iload|fadd|baload|fconst|ior|ineg|dreturn|l2f|lconst|getfield|invokevirtual|invokestatic|iastore)"); + map.put("popinstruction", "(fstore|dstore|pop|pop2|astore|putstatic|istore|lstore)"); + map.put("allocationinstruction", "(multianewarray|new|anewarray|newarray)"); + map + .put( + "indexedinstruction", + "(lload|lstore|fload|ldc2_w|invokeinterface|multianewarray|astore|dload|putstatic|instanceof|getstatic|checkcast|getfield|invokespecial|dstore|istore|iinc|ldc_w|ret|fstore|invokestatic|iload|putfield|invokevirtual|ldc|new|aload|anewarray)"); + map + .put( + "pushinstruction", + "(dup|lload|dup2|bipush|fload|ldc2_w|sipush|lconst|fconst|dload|getstatic|ldc_w|aconst_null|dconst|iload|ldc|iconst|aload)"); + map + .put( + "stackproducer", + "(imul|lsub|aload|fload|lor|new|aaload|fcmpg|iand|iaload|lrem|idiv|d2l|isub|dcmpg|dup|f2d|f2i|drem|i2c|checkcast|frem|lushr|daload|dneg|lshl|ldiv|ishr|ldc_w|invokeinterface|lxor|ishl|l2d|i2f|faload|sipush|iushr|caload|instanceof|invokespecial|fmul|laload|d2f|lneg|ixor|i2l|fdiv|getstatic|i2b|swap|i2d|dup2|fcmpl|saload|ladd|irem|dload|jsr_w|dconst|dcmpl|fsub|ldc|arraylength|aconst_null|tableswitch|lmul|ldc2_w|iconst|dadd|f2l|ddiv|land|jsr|anewarray|dmul|bipush|dsub|d2i|newarray|i2s|lshr|iadd|lload|l2i|fneg|iload|fadd|baload|fconst|lookupswitch|ior|ineg|lconst|l2f|getfield|invokevirtual|invokestatic)"); + map + .put( + "stackconsumer", + "(imul|lsub|lor|iflt|fcmpg|if_icmpgt|iand|ifeq|if_icmplt|lrem|ifnonnull|idiv|d2l|isub|dcmpg|dastore|if_icmpeq|f2d|f2i|drem|i2c|checkcast|frem|lreturn|astore|lushr|pop2|monitorexit|dneg|fastore|istore|lshl|ldiv|lstore|areturn|if_icmpge|ishr|monitorenter|invokeinterface|aastore|lxor|ishl|l2d|i2f|return|iushr|instanceof|invokespecial|fmul|ireturn|d2f|lneg|ixor|pop|i2l|ifnull|fdiv|lastore|i2b|if_acmpeq|ifge|swap|i2d|putstatic|fcmpl|ladd|irem|dcmpl|fsub|freturn|ifgt|castore|lmul|dadd|f2l|ddiv|dstore|land|if_icmpne|if_acmpne|dmul|dsub|sastore|ifle|d2i|i2s|lshr|iadd|l2i|bastore|fstore|fneg|fadd|ior|ineg|ifne|dreturn|l2f|if_icmple|getfield|invokevirtual|invokestatic|iastore)"); + map + .put( + "exceptionthrower", + "(irem|lrem|laload|putstatic|baload|dastore|areturn|getstatic|ldiv|anewarray|iastore|castore|idiv|saload|lastore|fastore|putfield|lreturn|caload|getfield|return|aastore|freturn|newarray|instanceof|multianewarray|athrow|faload|iaload|aaload|dreturn|monitorenter|checkcast|bastore|arraylength|new|invokevirtual|sastore|ldc_w|ireturn|invokespecial|monitorexit|invokeinterface|ldc|invokestatic|daload)"); + map + .put( + "loadclass", + "(multianewarray|invokeinterface|instanceof|invokespecial|putfield|checkcast|putstatic|invokevirtual|new|getstatic|invokestatic|getfield|anewarray)"); + map + .put( + "instructiontargeter", + "(ifle|if_acmpne|if_icmpeq|if_acmpeq|ifnonnull|goto_w|iflt|ifnull|if_icmpne|tableswitch|if_icmple|ifeq|if_icmplt|jsr_w|if_icmpgt|ifgt|jsr|goto|ifne|ifge|lookupswitch|if_icmpge)"); + // Some aliases + map.put("if_icmp", "(if_icmpne|if_icmpeq|if_icmple|if_icmpge|if_icmplt|if_icmpgt)"); + map.put("if_acmp", "(if_acmpeq|if_acmpne)"); + map.put("if", "(ifeq|ifne|iflt|ifge|ifgt|ifle)"); + // Precompile some aliases first + map.put("iconst", precompile(Constants.ICONST_0, Constants.ICONST_5, Constants.ICONST_M1)); + map.put("lconst", new String(new char[] { + '(', makeChar(Constants.LCONST_0), '|', makeChar(Constants.LCONST_1), ')' + })); + map.put("dconst", new String(new char[] { + '(', makeChar(Constants.DCONST_0), '|', makeChar(Constants.DCONST_1), ')' + })); + map.put("fconst", new String(new char[] { + '(', makeChar(Constants.FCONST_0), '|', makeChar(Constants.FCONST_1), ')' + })); + map.put("iload", precompile(Constants.ILOAD_0, Constants.ILOAD_3, Constants.ILOAD)); + map.put("dload", precompile(Constants.DLOAD_0, Constants.DLOAD_3, Constants.DLOAD)); + map.put("fload", precompile(Constants.FLOAD_0, Constants.FLOAD_3, Constants.FLOAD)); + map.put("aload", precompile(Constants.ALOAD_0, Constants.ALOAD_3, Constants.ALOAD)); + map.put("istore", precompile(Constants.ISTORE_0, Constants.ISTORE_3, Constants.ISTORE)); + map.put("dstore", precompile(Constants.DSTORE_0, Constants.DSTORE_3, Constants.DSTORE)); + map.put("fstore", precompile(Constants.FSTORE_0, Constants.FSTORE_3, Constants.FSTORE)); + map.put("astore", precompile(Constants.ASTORE_0, Constants.ASTORE_3, Constants.ASTORE)); + // Compile strings + for (Iterator i = map.keySet().iterator(); i.hasNext();) { + String key = (String) i.next(); + String value = (String) map.get(key); + char ch = value.charAt(1); // Omit already precompiled patterns + if (ch < OFFSET) { + map.put(key, compilePattern(value)); // precompile all patterns + } + } + // Add instruction alias to match anything + StringBuilder buf = new StringBuilder("("); + for (short i = 0; i < NO_OPCODES; i++) { + if (Constants.NO_OF_OPERANDS[i] != Constants.UNDEFINED) { // Not an + // invalid + // opcode + buf.append(makeChar(i)); + if (i < NO_OPCODES - 1) { + buf.append('|'); + } + } + } + buf.append(')'); + map.put("instruction", buf.toString()); + } + + + private static String precompile( short from, short to, short extra ) { + StringBuilder buf = new StringBuilder("("); + for (short i = from; i <= to; i++) { + buf.append(makeChar(i)); + buf.append('|'); + } + buf.append(makeChar(extra)); + buf.append(")"); + return buf.toString(); + } + + + /* + * Internal debugging routines. + */ + private static final String pattern2string( String pattern ) { + return pattern2string(pattern, true); + } + + + private static final String pattern2string( String pattern, boolean make_string ) { + StringBuilder buf = new StringBuilder(); + for (int i = 0; i < pattern.length(); i++) { + char ch = pattern.charAt(i); + if (ch >= OFFSET) { + if (make_string) { + buf.append(Constants.OPCODE_NAMES[ch - OFFSET]); + } else { + buf.append((ch - OFFSET)); + } + } else { + buf.append(ch); + } + } + return buf.toString(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/JavaWrapper.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/JavaWrapper.java index 4e44aae9..7dddd2ac 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/JavaWrapper.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/JavaWrapper.java @@ -1,117 +1,117 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; - -/** - * Java interpreter replacement, i.e., wrapper that uses its own ClassLoader - * to modify/generate classes as they're requested. You can take this as a template - * for your own applications.
          - * Call this wrapper with - *

          java org.apache.bcel.util.JavaWrapper <real.class.name> [arguments]
          - *

          - * To use your own class loader you can set the "bcel.classloader" system property - * which defaults to "org.apache.bcel.util.ClassLoader", e.g., with - *

          java org.apache.bcel.util.JavaWrapper -Dbcel.classloader=foo.MyLoader <real.class.name> [arguments]
          - *

          - * - * @version $Id: JavaWrapper.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see ClassLoader - */ -public class JavaWrapper { - - private java.lang.ClassLoader loader; - - - private static java.lang.ClassLoader getClassLoader() { - String s = System.getProperty("bcel.classloader"); - if ((s == null) || "".equals(s)) { - s = "org.apache.bcel.util.ClassLoader"; - } - try { - return (java.lang.ClassLoader) Class.forName(s).newInstance(); - } catch (Exception e) { - throw new RuntimeException(e.toString()); - } - } - - - public JavaWrapper(java.lang.ClassLoader loader) { - this.loader = loader; - } - - - public JavaWrapper() { - this(getClassLoader()); - } - - - /** Runs the main method of the given class with the arguments passed in argv - * - * @param class_name the fully qualified class name - * @param argv the arguments just as you would pass them directly - */ - public void runMain( String class_name, String[] argv ) throws ClassNotFoundException { - Class cl = loader.loadClass(class_name); - Method method = null; - try { - method = cl.getMethod("main", new Class[] { - argv.getClass() - }); - /* Method main is sane ? - */ - int m = method.getModifiers(); - Class r = method.getReturnType(); - if (!(Modifier.isPublic(m) && Modifier.isStatic(m)) || Modifier.isAbstract(m) - || (r != Void.TYPE)) { - throw new NoSuchMethodException(); - } - } catch (NoSuchMethodException no) { - System.out.println("In class " + class_name - + ": public static void main(String[] argv) is not defined"); - return; - } - try { - method.invoke(null, new Object[] { - argv - }); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - - /** Default main method used as wrapper, expects the fully qualified class name - * of the real class as the first argument. - */ - public static void main( String[] argv ) throws Exception { - /* Expects class name as first argument, other arguments are by-passed. - */ - if (argv.length == 0) { - System.out.println("Missing class name."); - return; - } - String class_name = argv[0]; - String[] new_argv = new String[argv.length - 1]; - System.arraycopy(argv, 1, new_argv, 0, new_argv.length); - JavaWrapper wrapper = new JavaWrapper(); - wrapper.runMain(class_name, new_argv); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; + +/** + * Java interpreter replacement, i.e., wrapper that uses its own ClassLoader + * to modify/generate classes as they're requested. You can take this as a template + * for your own applications.
          + * Call this wrapper with + *
          java org.apache.bcel.util.JavaWrapper <real.class.name> [arguments]
          + *

          + * To use your own class loader you can set the "bcel.classloader" system property + * which defaults to "org.apache.bcel.util.ClassLoader", e.g., with + *

          java org.apache.bcel.util.JavaWrapper -Dbcel.classloader=foo.MyLoader <real.class.name> [arguments]
          + *

          + * + * @version $Id: JavaWrapper.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @see ClassLoader + */ +public class JavaWrapper { + + private java.lang.ClassLoader loader; + + + private static java.lang.ClassLoader getClassLoader() { + String s = System.getProperty("bcel.classloader"); + if ((s == null) || "".equals(s)) { + s = "org.apache.bcel.util.ClassLoader"; + } + try { + return (java.lang.ClassLoader) Class.forName(s).newInstance(); + } catch (Exception e) { + throw new RuntimeException(e.toString()); + } + } + + + public JavaWrapper(java.lang.ClassLoader loader) { + this.loader = loader; + } + + + public JavaWrapper() { + this(getClassLoader()); + } + + + /** Runs the main method of the given class with the arguments passed in argv + * + * @param class_name the fully qualified class name + * @param argv the arguments just as you would pass them directly + */ + public void runMain( String class_name, String[] argv ) throws ClassNotFoundException { + Class cl = loader.loadClass(class_name); + Method method = null; + try { + method = cl.getMethod("main", new Class[] { + argv.getClass() + }); + /* Method main is sane ? + */ + int m = method.getModifiers(); + Class r = method.getReturnType(); + if (!(Modifier.isPublic(m) && Modifier.isStatic(m)) || Modifier.isAbstract(m) + || (r != Void.TYPE)) { + throw new NoSuchMethodException(); + } + } catch (NoSuchMethodException no) { + System.out.println("In class " + class_name + + ": public static void main(String[] argv) is not defined"); + return; + } + try { + method.invoke(null, new Object[] { + argv + }); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + + /** Default main method used as wrapper, expects the fully qualified class name + * of the real class as the first argument. + */ + public static void main( String[] argv ) throws Exception { + /* Expects class name as first argument, other arguments are by-passed. + */ + if (argv.length == 0) { + System.out.println("Missing class name."); + return; + } + String class_name = argv[0]; + String[] new_argv = new String[argv.length - 1]; + System.arraycopy(argv, 1, new_argv, 0, new_argv.length); + JavaWrapper wrapper = new JavaWrapper(); + wrapper.runMain(class_name, new_argv); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/MethodHTML.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/MethodHTML.java index 79031659..4e597cba 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/MethodHTML.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/MethodHTML.java @@ -1,157 +1,157 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; - -import org.apache.bcel5_2_0.classfile.Attribute; -import org.apache.bcel5_2_0.classfile.Code; -import org.apache.bcel5_2_0.classfile.ConstantValue; -import org.apache.bcel5_2_0.classfile.ExceptionTable; -import org.apache.bcel5_2_0.classfile.Field; -import org.apache.bcel5_2_0.classfile.Method; -import org.apache.bcel5_2_0.classfile.Utility; - -/** - * Convert methods and fields into HTML file. - * - * @version $Id: MethodHTML.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * - */ -final class MethodHTML implements org.apache.bcel5_2_0.Constants { - - private String class_name; // name of current class - private PrintWriter file; // file to write to - private ConstantHTML constant_html; - private AttributeHTML attribute_html; - - - MethodHTML(String dir, String class_name, Method[] methods, Field[] fields, - ConstantHTML constant_html, AttributeHTML attribute_html) throws IOException { - this.class_name = class_name; - this.attribute_html = attribute_html; - this.constant_html = constant_html; - file = new PrintWriter(new FileOutputStream(dir + class_name + "_methods.html")); - file.println(""); - file.println("" - + ""); - for (int i = 0; i < fields.length; i++) { - writeField(fields[i]); - } - file.println("
          Access flagsTypeField name
          "); - file.println("" - + "" - + ""); - for (int i = 0; i < methods.length; i++) { - writeMethod(methods[i], i); - } - file.println("
          Access flagsReturn typeMethod nameArguments
          "); - file.close(); - } - - - /** - * Print field of class. - * - * @param field field to print - * @exception java.io.IOException - */ - private void writeField( Field field ) throws IOException { - String type = Utility.signatureToString(field.getSignature()); - String name = field.getName(); - String access = Utility.accessToString(field.getAccessFlags()); - Attribute[] attributes; - access = Utility.replace(access, " ", " "); - file.print("" + access + "\n" - + Class2HTML.referenceType(type) + "" + name - + ""); - attributes = field.getAttributes(); - // Write them to the Attributes.html file with anchor "[]" - for (int i = 0; i < attributes.length; i++) { - attribute_html.writeAttribute(attributes[i], name + "@" + i); - } - for (int i = 0; i < attributes.length; i++) { - if (attributes[i].getTag() == ATTR_CONSTANT_VALUE) { // Default value - String str = ((ConstantValue) attributes[i]).toString(); - // Reference attribute in _attributes.html - file.print("= " + str + "\n"); - break; - } - } - file.println(""); - } - - - private final void writeMethod( Method method, int method_number ) throws IOException { - // Get raw signature - String signature = method.getSignature(); - // Get array of strings containing the argument types - String[] args = Utility.methodSignatureArgumentTypes(signature, false); - // Get return type string - String type = Utility.methodSignatureReturnType(signature, false); - // Get method name - String name = method.getName(), html_name; - // Get method's access flags - String access = Utility.accessToString(method.getAccessFlags()); - // Get the method's attributes, the Code Attribute in particular - Attribute[] attributes = method.getAttributes(); - /* HTML doesn't like names like and spaces are places to break - * lines. Both we don't want... - */ - access = Utility.replace(access, " ", " "); - html_name = Class2HTML.toHTML(name); - file.print("" + access + ""); - file.print("" + Class2HTML.referenceType(type) + "" + "" + html_name - + "\n("); - for (int i = 0; i < args.length; i++) { - file.print(Class2HTML.referenceType(args[i])); - if (i < args.length - 1) { - file.print(", "); - } - } - file.print(")"); - // Check for thrown exceptions - for (int i = 0; i < attributes.length; i++) { - attribute_html.writeAttribute(attributes[i], "method" + method_number + "@" + i, - method_number); - byte tag = attributes[i].getTag(); - if (tag == ATTR_EXCEPTIONS) { - file.print("throws"); - int[] exceptions = ((ExceptionTable) attributes[i]).getExceptionIndexTable(); - for (int j = 0; j < exceptions.length; j++) { - file.print(constant_html.referenceConstant(exceptions[j])); - if (j < exceptions.length - 1) { - file.print(", "); - } - } - file.println(""); - } else if (tag == ATTR_CODE) { - Attribute[] c_a = ((Code) attributes[i]).getAttributes(); - for (int j = 0; j < c_a.length; j++) { - attribute_html.writeAttribute(c_a[j], "method" + method_number + "@" + i + "@" - + j, method_number); - } - } - } - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintWriter; + +import org.apache.bcel5_2_0.classfile.Attribute; +import org.apache.bcel5_2_0.classfile.Code; +import org.apache.bcel5_2_0.classfile.ConstantValue; +import org.apache.bcel5_2_0.classfile.ExceptionTable; +import org.apache.bcel5_2_0.classfile.Field; +import org.apache.bcel5_2_0.classfile.Method; +import org.apache.bcel5_2_0.classfile.Utility; + +/** + * Convert methods and fields into HTML file. + * + * @version $Id: MethodHTML.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * + */ +final class MethodHTML implements org.apache.bcel5_2_0.Constants { + + private String class_name; // name of current class + private PrintWriter file; // file to write to + private ConstantHTML constant_html; + private AttributeHTML attribute_html; + + + MethodHTML(String dir, String class_name, Method[] methods, Field[] fields, + ConstantHTML constant_html, AttributeHTML attribute_html) throws IOException { + this.class_name = class_name; + this.attribute_html = attribute_html; + this.constant_html = constant_html; + file = new PrintWriter(new FileOutputStream(dir + class_name + "_methods.html")); + file.println(""); + file.println("" + + ""); + for (int i = 0; i < fields.length; i++) { + writeField(fields[i]); + } + file.println("
          Access flagsTypeField name
          "); + file.println("" + + "" + + ""); + for (int i = 0; i < methods.length; i++) { + writeMethod(methods[i], i); + } + file.println("
          Access flagsReturn typeMethod nameArguments
          "); + file.close(); + } + + + /** + * Print field of class. + * + * @param field field to print + * @exception java.io.IOException + */ + private void writeField( Field field ) throws IOException { + String type = Utility.signatureToString(field.getSignature()); + String name = field.getName(); + String access = Utility.accessToString(field.getAccessFlags()); + Attribute[] attributes; + access = Utility.replace(access, " ", " "); + file.print("" + access + "\n" + + Class2HTML.referenceType(type) + "" + name + + ""); + attributes = field.getAttributes(); + // Write them to the Attributes.html file with anchor "[]" + for (int i = 0; i < attributes.length; i++) { + attribute_html.writeAttribute(attributes[i], name + "@" + i); + } + for (int i = 0; i < attributes.length; i++) { + if (attributes[i].getTag() == ATTR_CONSTANT_VALUE) { // Default value + String str = ((ConstantValue) attributes[i]).toString(); + // Reference attribute in _attributes.html + file.print("= " + str + "\n"); + break; + } + } + file.println(""); + } + + + private final void writeMethod( Method method, int method_number ) throws IOException { + // Get raw signature + String signature = method.getSignature(); + // Get array of strings containing the argument types + String[] args = Utility.methodSignatureArgumentTypes(signature, false); + // Get return type string + String type = Utility.methodSignatureReturnType(signature, false); + // Get method name + String name = method.getName(), html_name; + // Get method's access flags + String access = Utility.accessToString(method.getAccessFlags()); + // Get the method's attributes, the Code Attribute in particular + Attribute[] attributes = method.getAttributes(); + /* HTML doesn't like names like and spaces are places to break + * lines. Both we don't want... + */ + access = Utility.replace(access, " ", " "); + html_name = Class2HTML.toHTML(name); + file.print("" + access + ""); + file.print("" + Class2HTML.referenceType(type) + "" + "" + html_name + + "\n("); + for (int i = 0; i < args.length; i++) { + file.print(Class2HTML.referenceType(args[i])); + if (i < args.length - 1) { + file.print(", "); + } + } + file.print(")"); + // Check for thrown exceptions + for (int i = 0; i < attributes.length; i++) { + attribute_html.writeAttribute(attributes[i], "method" + method_number + "@" + i, + method_number); + byte tag = attributes[i].getTag(); + if (tag == ATTR_EXCEPTIONS) { + file.print("throws"); + int[] exceptions = ((ExceptionTable) attributes[i]).getExceptionIndexTable(); + for (int j = 0; j < exceptions.length; j++) { + file.print(constant_html.referenceConstant(exceptions[j])); + if (j < exceptions.length - 1) { + file.print(", "); + } + } + file.println(""); + } else if (tag == ATTR_CODE) { + Attribute[] c_a = ((Code) attributes[i]).getAttributes(); + for (int j = 0; j < c_a.length; j++) { + attribute_html.writeAttribute(c_a[j], "method" + method_number + "@" + i + "@" + + j, method_number); + } + } + } + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/Repository.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/Repository.java index 1065e0fd..edf90e90 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/Repository.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/Repository.java @@ -1,73 +1,73 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import org.apache.bcel5_2_0.classfile.JavaClass; - -/** - * Abstract definition of a class repository. Instances may be used - * to load classes from different sources and may be used in the - * Repository.setRepository method. - * - * @see org.apache.bcel5_2_0.Repository - * @version $Id: Repository.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @author David Dixon-Peugh - */ -public interface Repository extends java.io.Serializable { - - /** - * Store the provided class under "clazz.getClassName()" - */ - public void storeClass( JavaClass clazz ); - - - /** - * Remove class from repository - */ - public void removeClass( JavaClass clazz ); - - - /** - * Find the class with the name provided, if the class - * isn't there, return NULL. - */ - public JavaClass findClass( String className ); - - - /** - * Find the class with the name provided, if the class - * isn't there, make an attempt to load it. - */ - public JavaClass loadClass( String className ) throws java.lang.ClassNotFoundException; - - - /** - * Find the JavaClass instance for the given run-time class object - */ - public JavaClass loadClass( Class clazz ) throws java.lang.ClassNotFoundException; - - - /** Clear all entries from cache. - */ - public void clear(); - - - /** Get the ClassPath associated with this Repository - */ - public ClassPath getClassPath(); -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import org.apache.bcel5_2_0.classfile.JavaClass; + +/** + * Abstract definition of a class repository. Instances may be used + * to load classes from different sources and may be used in the + * Repository.setRepository method. + * + * @see org.apache.bcel5_2_0.Repository + * @version $Id: Repository.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @author David Dixon-Peugh + */ +public interface Repository extends java.io.Serializable { + + /** + * Store the provided class under "clazz.getClassName()" + */ + public void storeClass( JavaClass clazz ); + + + /** + * Remove class from repository + */ + public void removeClass( JavaClass clazz ); + + + /** + * Find the class with the name provided, if the class + * isn't there, return NULL. + */ + public JavaClass findClass( String className ); + + + /** + * Find the class with the name provided, if the class + * isn't there, make an attempt to load it. + */ + public JavaClass loadClass( String className ) throws java.lang.ClassNotFoundException; + + + /** + * Find the JavaClass instance for the given run-time class object + */ + public JavaClass loadClass( Class clazz ) throws java.lang.ClassNotFoundException; + + + /** Clear all entries from cache. + */ + public void clear(); + + + /** Get the ClassPath associated with this Repository + */ + public ClassPath getClassPath(); +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/SyntheticRepository.java b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/SyntheticRepository.java index c98a95fc..9c01e86f 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/SyntheticRepository.java +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/SyntheticRepository.java @@ -1,191 +1,191 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel5_2_0.util; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.ref.SoftReference; -import java.util.HashMap; -import java.util.Map; - -import org.apache.bcel5_2_0.classfile.ClassParser; -import org.apache.bcel5_2_0.classfile.JavaClass; - -/** - * This repository is used in situations where a Class is created - * outside the realm of a ClassLoader. Classes are loaded from - * the file systems using the paths specified in the given - * class path. By default, this is the value returned by - * ClassPath.getClassPath(). - *
          - * It is designed to be used as a singleton, however it - * can also be used with custom classpaths. - * - /** - * Abstract definition of a class repository. Instances may be used - * to load classes from different sources and may be used in the - * Repository.setRepository method. - * - * @see org.apache.bcel5_2_0.Repository - * - * @version $Id: SyntheticRepository.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @author David Dixon-Peugh - */ -public class SyntheticRepository implements Repository { - - private static final String DEFAULT_PATH = ClassPath.getClassPath(); - private static Map _instances = new HashMap(); // CLASSPATH X REPOSITORY - private ClassPath _path = null; - private Map _loadedClasses = new HashMap(); // CLASSNAME X JAVACLASS - - - private SyntheticRepository(ClassPath path) { - _path = path; - } - - - public static SyntheticRepository getInstance() { - return getInstance(ClassPath.SYSTEM_CLASS_PATH); - } - - - public static SyntheticRepository getInstance( ClassPath classPath ) { - SyntheticRepository rep = (SyntheticRepository) _instances.get(classPath); - if (rep == null) { - rep = new SyntheticRepository(classPath); - _instances.put(classPath, rep); - } - return rep; - } - - - /** - * Store a new JavaClass instance into this Repository. - */ - public void storeClass( JavaClass clazz ) { - _loadedClasses.put(clazz.getClassName(), new SoftReference(clazz)); - clazz.setRepository(this); - } - - - /** - * Remove class from repository - */ - public void removeClass( JavaClass clazz ) { - _loadedClasses.remove(clazz.getClassName()); - } - - - /** - * Find an already defined (cached) JavaClass object by name. - */ - public JavaClass findClass( String className ) { - SoftReference ref = (SoftReference) _loadedClasses.get(className); - if (ref == null) { - return null; - } - return (JavaClass) ref.get(); - } - - - /** - * Find a JavaClass object by name. - * If it is already in this Repository, the Repository version - * is returned. Otherwise, the Repository's classpath is searched for - * the class (and it is added to the Repository if found). - * - * @param className the name of the class - * @return the JavaClass object - * @throws ClassNotFoundException if the class is not in the - * Repository, and could not be found on the classpath - */ - public JavaClass loadClass( String className ) throws ClassNotFoundException { - if (className == null || className.equals("")) { - throw new IllegalArgumentException("Invalid class name " + className); - } - className = className.replace('/', '.'); // Just in case, canonical form - JavaClass clazz = findClass(className); - if (clazz != null) { - return clazz; - } - try { - return loadClass(_path.getInputStream(className), className); - } catch (IOException e) { - throw new ClassNotFoundException("Exception while looking for class " + className - + ": " + e.toString()); - } - } - - - /** - * Find the JavaClass object for a runtime Class object. - * If a class with the same name is already in this Repository, - * the Repository version is returned. Otherwise, getResourceAsStream() - * is called on the Class object to find the class's representation. - * If the representation is found, it is added to the Repository. - * - * @see Class - * @param clazz the runtime Class object - * @return JavaClass object for given runtime class - * @throws ClassNotFoundException if the class is not in the - * Repository, and its representation could not be found - */ - public JavaClass loadClass( Class clazz ) throws ClassNotFoundException { - String className = clazz.getName(); - JavaClass repositoryClass = findClass(className); - if (repositoryClass != null) { - return repositoryClass; - } - String name = className; - int i = name.lastIndexOf('.'); - if (i > 0) { - name = name.substring(i + 1); - } - return loadClass(clazz.getResourceAsStream(name + ".class"), className); - } - - - private JavaClass loadClass( InputStream is, String className ) throws ClassNotFoundException { - try { - if (is != null) { - ClassParser parser = new ClassParser(is, className); - JavaClass clazz = parser.parse(); - storeClass(clazz); - return clazz; - } - } catch (IOException e) { - throw new ClassNotFoundException("Exception while looking for class " + className - + ": " + e.toString()); - } - throw new ClassNotFoundException("SyntheticRepository could not load " + className); - } - - - /** ClassPath associated with the Repository. - */ - public ClassPath getClassPath() { - return _path; - } - - - /** Clear all entries from cache. - */ - public void clear() { - _loadedClasses.clear(); - } -} +/* + * Copyright 2000-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.bcel5_2_0.util; + +import java.io.IOException; +import java.io.InputStream; +import java.lang.ref.SoftReference; +import java.util.HashMap; +import java.util.Map; + +import org.apache.bcel5_2_0.classfile.ClassParser; +import org.apache.bcel5_2_0.classfile.JavaClass; + +/** + * This repository is used in situations where a Class is created + * outside the realm of a ClassLoader. Classes are loaded from + * the file systems using the paths specified in the given + * class path. By default, this is the value returned by + * ClassPath.getClassPath(). + *
          + * It is designed to be used as a singleton, however it + * can also be used with custom classpaths. + * + /** + * Abstract definition of a class repository. Instances may be used + * to load classes from different sources and may be used in the + * Repository.setRepository method. + * + * @see org.apache.bcel5_2_0.Repository + * + * @version $Id: SyntheticRepository.java 386056 2006-03-15 11:31:56Z tcurdt $ + * @author M. Dahm + * @author David Dixon-Peugh + */ +public class SyntheticRepository implements Repository { + + private static final String DEFAULT_PATH = ClassPath.getClassPath(); + private static Map _instances = new HashMap(); // CLASSPATH X REPOSITORY + private ClassPath _path = null; + private Map _loadedClasses = new HashMap(); // CLASSNAME X JAVACLASS + + + private SyntheticRepository(ClassPath path) { + _path = path; + } + + + public static SyntheticRepository getInstance() { + return getInstance(ClassPath.SYSTEM_CLASS_PATH); + } + + + public static SyntheticRepository getInstance( ClassPath classPath ) { + SyntheticRepository rep = (SyntheticRepository) _instances.get(classPath); + if (rep == null) { + rep = new SyntheticRepository(classPath); + _instances.put(classPath, rep); + } + return rep; + } + + + /** + * Store a new JavaClass instance into this Repository. + */ + public void storeClass( JavaClass clazz ) { + _loadedClasses.put(clazz.getClassName(), new SoftReference(clazz)); + clazz.setRepository(this); + } + + + /** + * Remove class from repository + */ + public void removeClass( JavaClass clazz ) { + _loadedClasses.remove(clazz.getClassName()); + } + + + /** + * Find an already defined (cached) JavaClass object by name. + */ + public JavaClass findClass( String className ) { + SoftReference ref = (SoftReference) _loadedClasses.get(className); + if (ref == null) { + return null; + } + return (JavaClass) ref.get(); + } + + + /** + * Find a JavaClass object by name. + * If it is already in this Repository, the Repository version + * is returned. Otherwise, the Repository's classpath is searched for + * the class (and it is added to the Repository if found). + * + * @param className the name of the class + * @return the JavaClass object + * @throws ClassNotFoundException if the class is not in the + * Repository, and could not be found on the classpath + */ + public JavaClass loadClass( String className ) throws ClassNotFoundException { + if (className == null || className.equals("")) { + throw new IllegalArgumentException("Invalid class name " + className); + } + className = className.replace('/', '.'); // Just in case, canonical form + JavaClass clazz = findClass(className); + if (clazz != null) { + return clazz; + } + try { + return loadClass(_path.getInputStream(className), className); + } catch (IOException e) { + throw new ClassNotFoundException("Exception while looking for class " + className + + ": " + e.toString()); + } + } + + + /** + * Find the JavaClass object for a runtime Class object. + * If a class with the same name is already in this Repository, + * the Repository version is returned. Otherwise, getResourceAsStream() + * is called on the Class object to find the class's representation. + * If the representation is found, it is added to the Repository. + * + * @see Class + * @param clazz the runtime Class object + * @return JavaClass object for given runtime class + * @throws ClassNotFoundException if the class is not in the + * Repository, and its representation could not be found + */ + public JavaClass loadClass( Class clazz ) throws ClassNotFoundException { + String className = clazz.getName(); + JavaClass repositoryClass = findClass(className); + if (repositoryClass != null) { + return repositoryClass; + } + String name = className; + int i = name.lastIndexOf('.'); + if (i > 0) { + name = name.substring(i + 1); + } + return loadClass(clazz.getResourceAsStream(name + ".class"), className); + } + + + private JavaClass loadClass( InputStream is, String className ) throws ClassNotFoundException { + try { + if (is != null) { + ClassParser parser = new ClassParser(is, className); + JavaClass clazz = parser.parse(); + storeClass(clazz); + return clazz; + } + } catch (IOException e) { + throw new ClassNotFoundException("Exception while looking for class " + className + + ": " + e.toString()); + } + throw new ClassNotFoundException("SyntheticRepository could not load " + className); + } + + + /** ClassPath associated with the Repository. + */ + public ClassPath getClassPath() { + return _path; + } + + + /** Clear all entries from cache. + */ + public void clear() { + _loadedClasses.clear(); + } +} diff --git a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/package.html b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/package.html index a58b20f5..dd76f4c1 100755 --- a/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/package.html +++ b/Core/org.emftext.language.java.resource.bcel/src-bcel/org/apache/bcel5_2_0/util/package.html @@ -1,25 +1,25 @@ - - - - - - -

          -This package contains utility classes for the -Byte Code Engineering -Library, namely: -

          -

          -

            -
          • Collection classes for JavaClass objects
          • -
          • A converter for class files to HTML
          • -
          • A tool to find instructions patterns via regular expressions
          • -
          • A class to find classes as defined in the CLASSPATH
          • -
          • A class loader that allows to create classes at run time
          • -
          - -

          - - + + + + + + +

          +This package contains utility classes for the +Byte Code Engineering +Library, namely: +

          +

          +

            +
          • Collection classes for JavaClass objects
          • +
          • A converter for class files to HTML
          • +
          • A tool to find instructions patterns via regular expressions
          • +
          • A class to find classes as defined in the CLASSPATH
          • +
          • A class loader that allows to create classes at run time
          • +
          + +

          + + diff --git a/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/JavaReferenceResolverSwitchFactory.java b/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/JavaReferenceResolverSwitchFactory.java new file mode 100644 index 00000000..6677b9b9 --- /dev/null +++ b/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/JavaReferenceResolverSwitchFactory.java @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2006-2013 + * Software Technology Group, Dresden University of Technology + * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 + * + * 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: + * Software Technology Group - TU Dresden, Germany; + * DevBoost GmbH - Berlin, Germany + * Benjamin Klatt - initial API and implementation + ******************************************************************************/ +package org.emftext.language.java.resource.java; + +import org.emftext.language.java.resource.java.mopp.JavaReferenceResolverSwitch; + +/** + * Factory to receive a JavaReferenceResolverSwitch instances. + * + * Returns a singleton instance of the switch. + */ +public class JavaReferenceResolverSwitchFactory { + + /** The singleton instance. */ + private static JavaReferenceResolverSwitch resolverSwitch = new JavaReferenceResolverSwitch(); + + /** + * Get the switch instance to use. + * + * @return The global singleton. + */ + public static JavaReferenceResolverSwitch getSwitch() { + return resolverSwitch; + } + +} diff --git a/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/analysis/decider/ConcreteClassifierDecider.java b/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/analysis/decider/ConcreteClassifierDecider.java index c6e3d944..19a53911 100644 --- a/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/analysis/decider/ConcreteClassifierDecider.java +++ b/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/analysis/decider/ConcreteClassifierDecider.java @@ -2,12 +2,12 @@ * Copyright (c) 2006-2012 * Software Technology Group, Dresden University of Technology * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 - * + * * 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: * Software Technology Group - TU Dresden, Germany; * DevBoost GmbH - Berlin, Germany @@ -85,8 +85,7 @@ public EList getAdditionalCandidates(String identifier, EObje if (container instanceof PackageReference) { PackageReference p = (PackageReference) container; String packageName = packageName(p); - resultList.addAll(JavaClasspath.get(resource).getClassifiers( - packageName, "*")); + resultList.addAll(JavaClasspath.get(resource).getClassifiers(packageName, "*")); } if(container instanceof Classifier @@ -136,9 +135,9 @@ public EList getAdditionalCandidates(String identifier, EObje //this is required for classes that contain '$' in their name if(container instanceof CompilationUnit && identifier.contains(JavaUniquePathConstructor.CLASSIFIER_SEPARATOR)) { - String[] path = identifier.split("\\" + JavaUniquePathConstructor.CLASSIFIER_SEPARATOR, -1); + String[] path = JavaUniquePathConstructor.CLASSIFIER_SEPARATOR_REGEX_PATTERN.split(identifier, -1); EList innerClassifiers = new BasicEList(resultList); - String outerName = null; + StringBuilder outerName = null; outer: for(int i = 0; i < path.length; i++) { for(EObject cand : innerClassifiers) { if (cand instanceof ConcreteClassifier) { @@ -146,12 +145,15 @@ public EList getAdditionalCandidates(String identifier, EObje if(path[i].equals(innerClassifier.getName())) { innerClassifiers.clear(); if (outerName != null) { - outerName = outerName + path[i] + "$"; + outerName.append(path[i]); + outerName.append(JavaUniquePathConstructor.CLASSIFIER_SEPARATOR); } if (!innerClassifier.eIsProxy()) { if (outerName == null) { - outerName = innerClassifier.getContainingCompilationUnit().getNamespacesAsString() + - innerClassifier.getName() + "$"; + outerName = new StringBuilder(); + outerName.append(innerClassifier.getContainingCompilationUnit().getNamespacesAsString()); + outerName.append(innerClassifier.getName()); + outerName.append(JavaUniquePathConstructor.CLASSIFIER_SEPARATOR); } innerClassifiers.addAll(innerClassifier.getInnerClassifiers()); for(ConcreteClassifier superClassifier : innerClassifier.getAllSuperClassifiers()) { @@ -164,46 +166,55 @@ public EList getAdditionalCandidates(String identifier, EObje //(without $) is a class. The proxy we have points at the class, but the //class does not exist as such. if (outerName == null) { - outerName = ((InternalEObject) innerClassifier).eProxyURI().trimFragment().toString().substring( - JavaUniquePathConstructor.JAVA_CLASSIFIER_PATHMAP.length()); - outerName = outerName.subSequence( - 0, outerName.length() - JavaUniquePathConstructor.JAVA_FILE_EXTENSION.length()) + "$"; + outerName = new StringBuilder(); + String classifierURI = ((InternalEObject) innerClassifier).eProxyURI().trimFragment().toString().substring(JavaUniquePathConstructor.JAVA_CLASSIFIER_PATHMAP.length()); + outerName.append(classifierURI.subSequence(0, classifierURI.length() - JavaUniquePathConstructor.JAVA_FILE_EXTENSION.length())); + outerName.append(JavaUniquePathConstructor.CLASSIFIER_SEPARATOR); } - for(EObject innerClassifierProxy : JavaClasspath.get(container).getClassifiers( - outerName, "*")) { - innerClassifiers.add((ConcreteClassifier) EcoreUtil.resolve( - innerClassifierProxy, container)); + for(EObject innerClassifierProxy : JavaClasspath.get(container).getClassifiers(outerName.toString(), "*")) { + innerClassifiers.add((ConcreteClassifier) EcoreUtil.resolve(innerClassifierProxy, container)); } } if (i + 1 == path.length - 1) { resultList.addAll(innerClassifiers); } continue outer; - } + } } } } } - + return resultList; } - private String packageName(PackageReference p) { - String s = ""; - while (p != null) { - s = p.getName() + "." + s; - EObject container = p.eContainer(); - if (container instanceof PackageReference) { - p = (PackageReference) container; - } else { - p = null; - } - } - return s; + /** + * Get the full qualified name of a package. + * @param pckg The package to get the name for. + * @return The full qualified name separated with "." + */ + private String packageName(PackageReference pckg) { + StringBuilder builder = new StringBuilder(); + packageName(pckg,builder); + return builder.toString(); } - private void addImportsAndInnerClasses(EObject container, + /** + * Recursively fill the {@link StringBuilder} with the full qualified name. + * Recursively to fill the builder in a performance optimized way. + * @param pckg The package to get the name. + * @param builder The {@link StringBuilder} to fill. + */ + private void packageName(PackageReference pckg, StringBuilder builder) { + if (pckg.eContainer() instanceof PackageReference) { + packageName((PackageReference) pckg.eContainer(),builder); + builder.append(JavaUniquePathConstructor.PACKAGE_SEPARATOR); + } + builder.append(pckg.getName()); + } + + private void addImportsAndInnerClasses(EObject container, EList resultList) { //1) Inner classifiers of superclasses if(container instanceof JavaRoot) { @@ -264,8 +275,8 @@ public boolean isPossibleTarget(String id, EObject element) { } // this is needed because classifiers with '$'-signs in their name are // allowed which interferes with the usage of '$' as separator. - if(id.contains("$")) { - String mainID = id.substring(id.lastIndexOf("$") + 1); + if(id.contains(JavaUniquePathConstructor.CLASSIFIER_SEPARATOR)) { + String mainID = id.substring(id.lastIndexOf(JavaUniquePathConstructor.CLASSIFIER_SEPARATOR) + 1); if (mainID.equals(concreteClassifier.getName())) { //set the full id for reprint if(concreteClassifier.eIsProxy()) { diff --git a/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/analysis/helper/ScopedTreeWalker.java b/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/analysis/helper/ScopedTreeWalker.java index a6883e77..72e7373d 100644 --- a/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/analysis/helper/ScopedTreeWalker.java +++ b/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/analysis/helper/ScopedTreeWalker.java @@ -2,12 +2,12 @@ * Copyright (c) 2006-2012 * Software Technology Group, Dresden University of Technology * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 - * + * * 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: * Software Technology Group - TU Dresden, Germany; * DevBoost GmbH - Berlin, Germany @@ -212,14 +212,14 @@ private void searchInAdditionalContent(String identifier, EObject container, ERe if (!currentBestResult.eIsProxy() && currentBestResult.eResource() == null) { Resource containerResource = container.eResource(); if (containerResource != null) { - //for package references and the array length field: - //check if there already is a suitable element in + //for package references and the array length field: + //check if there already is a suitable element in //the resource, or create one if not. for (EObject content : container.eResource().getContents()) { if (content.eClass().equals(currentBestResult.eClass())) { if (content instanceof NamedElement) { NamedElement cand = (NamedElement) content; - if (((NamedElement) content).getName().equals(((NamedElement)currentBestResult).getName())) { + if (cand.getName().equals(((NamedElement)currentBestResult).getName())) { currentBestResult = cand; } } diff --git a/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/grammar/JavaGrammarInformationProvider.java b/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/grammar/JavaGrammarInformationProvider.java new file mode 100644 index 00000000..cecf8d03 --- /dev/null +++ b/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/grammar/JavaGrammarInformationProvider.java @@ -0,0 +1,1933 @@ +/******************************************************************************* + * Copyright (c) 2006-2013 + * Software Technology Group, Dresden University of Technology + * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 + * + * 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: + * Software Technology Group - TU Dresden, Germany; + * DevBoost GmbH - Berlin, Germany + * - initial API and implementation + * Benjamin Klatt - Performance improvement + ******************************************************************************/ +package org.emftext.language.java.resource.java.grammar; + +import java.lang.reflect.Field; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.EcoreFactory; + +public class JavaGrammarInformationProvider { + + public final static EStructuralFeature ANONYMOUS_FEATURE = EcoreFactory.eINSTANCE.createEAttribute(); + static { + ANONYMOUS_FEATURE.setName("_"); + } + + public final static JavaGrammarInformationProvider INSTANCE = new JavaGrammarInformationProvider(); + + private java.util.Set keywords; + + public final static JavaContainment JAVA_0_0_0_0_0_0_0 = new JavaContainment(org.emftext.language.java.containers.ContainersPackage.eINSTANCE.getEmptyModel().getEStructuralFeature(org.emftext.language.java.containers.ContainersPackage.EMPTY_MODEL__IMPORTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getImport(), }, 0); + public final static JavaKeyword JAVA_0_0_0_0_0_0_1 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_0_0_0_0_0_0_2 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_0_0_0_0_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_0_0_0_0_0_0_0, JAVA_0_0_0_0_0_0_1, JAVA_0_0_0_0_0_0_2); + public final static JavaChoice JAVA_0_0_0_0_0 = new JavaChoice(JavaCardinality.ONE, JAVA_0_0_0_0_0_0); + public final static JavaCompound JAVA_0_0_0_0 = new JavaCompound(JAVA_0_0_0_0_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_0_0_0_1_0_0_0 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_0_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_0_0_0_1_0_0_0); + public final static JavaChoice JAVA_0_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_0_0_0_1_0_0); + public final static JavaCompound JAVA_0_0_0_1 = new JavaCompound(JAVA_0_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_0_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_0_0_0_0, JAVA_0_0_0_1); + public final static JavaChoice JAVA_0_0 = new JavaChoice(JavaCardinality.ONE, JAVA_0_0_0); + public final static JavaRule JAVA_0 = new JavaRule(org.emftext.language.java.containers.ContainersPackage.eINSTANCE.getEmptyModel(), JAVA_0_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_1_0_0_0 = new JavaContainment(org.emftext.language.java.containers.ContainersPackage.eINSTANCE.getPackage().getEStructuralFeature(org.emftext.language.java.containers.ContainersPackage.PACKAGE__ANNOTATIONS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationInstance(), }, 0); + public final static JavaKeyword JAVA_1_0_0_1 = new JavaKeyword("package", JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_1_0_0_2_0_0_0 = new JavaPlaceholder(org.emftext.language.java.containers.ContainersPackage.eINSTANCE.getPackage().getEStructuralFeature(org.emftext.language.java.containers.ContainersPackage.PACKAGE__NAMESPACES), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_1_0_0_2_0_0_1 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaSequence JAVA_1_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_1_0_0_2_0_0_0, JAVA_1_0_0_2_0_0_1); + public final static JavaChoice JAVA_1_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_1_0_0_2_0_0); + public final static JavaCompound JAVA_1_0_0_2 = new JavaCompound(JAVA_1_0_0_2_0, JavaCardinality.STAR); + public final static JavaPlaceholder JAVA_1_0_0_3 = new JavaPlaceholder(org.emftext.language.java.containers.ContainersPackage.eINSTANCE.getPackage().getEStructuralFeature(org.emftext.language.java.containers.ContainersPackage.PACKAGE__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_1_0_0_4 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaKeyword JAVA_1_0_0_5_0_0_0 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_1_0_0_5_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_1_0_0_5_0_0_0); + public final static JavaChoice JAVA_1_0_0_5_0 = new JavaChoice(JavaCardinality.ONE, JAVA_1_0_0_5_0_0); + public final static JavaCompound JAVA_1_0_0_5 = new JavaCompound(JAVA_1_0_0_5_0, JavaCardinality.QUESTIONMARK); + public final static JavaLineBreak JAVA_1_0_0_6 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaLineBreak JAVA_1_0_0_7 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaContainment JAVA_1_0_0_8_0_0_0 = new JavaContainment(org.emftext.language.java.containers.ContainersPackage.eINSTANCE.getPackage().getEStructuralFeature(org.emftext.language.java.containers.ContainersPackage.PACKAGE__IMPORTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getImport(), }, 0); + public final static JavaLineBreak JAVA_1_0_0_8_0_0_1 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_1_0_0_8_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_1_0_0_8_0_0_0, JAVA_1_0_0_8_0_0_1); + public final static JavaChoice JAVA_1_0_0_8_0 = new JavaChoice(JavaCardinality.ONE, JAVA_1_0_0_8_0_0); + public final static JavaCompound JAVA_1_0_0_8 = new JavaCompound(JAVA_1_0_0_8_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_1_0_0_9_0_0_0 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_1_0_0_9_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_1_0_0_9_0_0_0); + public final static JavaChoice JAVA_1_0_0_9_0 = new JavaChoice(JavaCardinality.ONE, JAVA_1_0_0_9_0_0); + public final static JavaCompound JAVA_1_0_0_9 = new JavaCompound(JAVA_1_0_0_9_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_1_0_0_0, JAVA_1_0_0_1, JAVA_1_0_0_2, JAVA_1_0_0_3, JAVA_1_0_0_4, JAVA_1_0_0_5, JAVA_1_0_0_6, JAVA_1_0_0_7, JAVA_1_0_0_8, JAVA_1_0_0_9); + public final static JavaChoice JAVA_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_1_0_0); + public final static JavaRule JAVA_1 = new JavaRule(org.emftext.language.java.containers.ContainersPackage.eINSTANCE.getPackage(), JAVA_1_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_2_0_0_0_0_0_0 = new JavaKeyword("package", JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_2_0_0_0_0_0_1 = new JavaPlaceholder(org.emftext.language.java.containers.ContainersPackage.eINSTANCE.getCompilationUnit().getEStructuralFeature(org.emftext.language.java.containers.ContainersPackage.COMPILATION_UNIT__NAMESPACES), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_2_0_0_0_0_0_2_0_0_0 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_2_0_0_0_0_0_2_0_0_1 = new JavaPlaceholder(org.emftext.language.java.containers.ContainersPackage.eINSTANCE.getCompilationUnit().getEStructuralFeature(org.emftext.language.java.containers.ContainersPackage.COMPILATION_UNIT__NAMESPACES), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_2_0_0_0_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_2_0_0_0_0_0_2_0_0_0, JAVA_2_0_0_0_0_0_2_0_0_1); + public final static JavaChoice JAVA_2_0_0_0_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_2_0_0_0_0_0_2_0_0); + public final static JavaCompound JAVA_2_0_0_0_0_0_2 = new JavaCompound(JAVA_2_0_0_0_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_2_0_0_0_0_0_3 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_2_0_0_0_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_2_0_0_0_0_0_0, JAVA_2_0_0_0_0_0_1, JAVA_2_0_0_0_0_0_2, JAVA_2_0_0_0_0_0_3); + public final static JavaChoice JAVA_2_0_0_0_0 = new JavaChoice(JavaCardinality.ONE, JAVA_2_0_0_0_0_0); + public final static JavaCompound JAVA_2_0_0_0 = new JavaCompound(JAVA_2_0_0_0_0, JavaCardinality.QUESTIONMARK); + public final static JavaLineBreak JAVA_2_0_0_1 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaLineBreak JAVA_2_0_0_2 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaContainment JAVA_2_0_0_3_0_0_0 = new JavaContainment(org.emftext.language.java.containers.ContainersPackage.eINSTANCE.getCompilationUnit().getEStructuralFeature(org.emftext.language.java.containers.ContainersPackage.COMPILATION_UNIT__IMPORTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getImport(), }, 0); + public final static JavaLineBreak JAVA_2_0_0_3_0_0_1 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_2_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_2_0_0_3_0_0_0, JAVA_2_0_0_3_0_0_1); + public final static JavaChoice JAVA_2_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_2_0_0_3_0_0); + public final static JavaCompound JAVA_2_0_0_3 = new JavaCompound(JAVA_2_0_0_3_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_2_0_0_4_0_0_0 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_2_0_0_4_0_0_1 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_2_0_0_4_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_2_0_0_4_0_0_0, JAVA_2_0_0_4_0_0_1); + public final static JavaChoice JAVA_2_0_0_4_0 = new JavaChoice(JavaCardinality.ONE, JAVA_2_0_0_4_0_0); + public final static JavaCompound JAVA_2_0_0_4 = new JavaCompound(JAVA_2_0_0_4_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_2_0_0_5 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaContainment JAVA_2_0_0_6_0_0_0 = new JavaContainment(org.emftext.language.java.containers.ContainersPackage.eINSTANCE.getCompilationUnit().getEStructuralFeature(org.emftext.language.java.containers.ContainersPackage.COMPILATION_UNIT__CLASSIFIERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getConcreteClassifier(), }, 0); + public final static JavaKeyword JAVA_2_0_0_6_0_0_1_0_0_0 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_2_0_0_6_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_2_0_0_6_0_0_1_0_0_0); + public final static JavaChoice JAVA_2_0_0_6_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_2_0_0_6_0_0_1_0_0); + public final static JavaCompound JAVA_2_0_0_6_0_0_1 = new JavaCompound(JAVA_2_0_0_6_0_0_1_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_2_0_0_6_0_0_2 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaLineBreak JAVA_2_0_0_6_0_0_3 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_2_0_0_6_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_2_0_0_6_0_0_0, JAVA_2_0_0_6_0_0_1, JAVA_2_0_0_6_0_0_2, JAVA_2_0_0_6_0_0_3); + public final static JavaChoice JAVA_2_0_0_6_0 = new JavaChoice(JavaCardinality.ONE, JAVA_2_0_0_6_0_0); + public final static JavaCompound JAVA_2_0_0_6 = new JavaCompound(JAVA_2_0_0_6_0, JavaCardinality.PLUS); + public final static JavaKeyword JAVA_2_0_0_7_0_0_0 = new JavaKeyword("\u001a", JavaCardinality.ONE); + public final static JavaSequence JAVA_2_0_0_7_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_2_0_0_7_0_0_0); + public final static JavaChoice JAVA_2_0_0_7_0 = new JavaChoice(JavaCardinality.ONE, JAVA_2_0_0_7_0_0); + public final static JavaCompound JAVA_2_0_0_7 = new JavaCompound(JAVA_2_0_0_7_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_2_0_0_0, JAVA_2_0_0_1, JAVA_2_0_0_2, JAVA_2_0_0_3, JAVA_2_0_0_4, JAVA_2_0_0_5, JAVA_2_0_0_6, JAVA_2_0_0_7); + public final static JavaChoice JAVA_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_2_0_0); + public final static JavaRule JAVA_2 = new JavaRule(org.emftext.language.java.containers.ContainersPackage.eINSTANCE.getCompilationUnit(), JAVA_2_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_3_0_0_0 = new JavaKeyword("import", JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_3_0_0_1_0_0_0 = new JavaPlaceholder(org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getClassifierImport().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.CLASSIFIER_IMPORT__NAMESPACES), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_3_0_0_1_0_0_1 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaSequence JAVA_3_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_3_0_0_1_0_0_0, JAVA_3_0_0_1_0_0_1); + public final static JavaChoice JAVA_3_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_3_0_0_1_0_0); + public final static JavaCompound JAVA_3_0_0_1 = new JavaCompound(JAVA_3_0_0_1_0, JavaCardinality.STAR); + public final static JavaPlaceholder JAVA_3_0_0_2 = new JavaPlaceholder(org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getClassifierImport().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.CLASSIFIER_IMPORT__CLASSIFIER), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_3_0_0_3 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_3_0_0_0, JAVA_3_0_0_1, JAVA_3_0_0_2, JAVA_3_0_0_3); + public final static JavaChoice JAVA_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_3_0_0); + public final static JavaRule JAVA_3 = new JavaRule(org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getClassifierImport(), JAVA_3_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_4_0_0_0 = new JavaKeyword("import", JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_4_0_0_1_0_0_0 = new JavaPlaceholder(org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getPackageImport().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.PACKAGE_IMPORT__NAMESPACES), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_4_0_0_1_0_0_1 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaSequence JAVA_4_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_4_0_0_1_0_0_0, JAVA_4_0_0_1_0_0_1); + public final static JavaChoice JAVA_4_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_4_0_0_1_0_0); + public final static JavaCompound JAVA_4_0_0_1 = new JavaCompound(JAVA_4_0_0_1_0, JavaCardinality.PLUS); + public final static JavaKeyword JAVA_4_0_0_2 = new JavaKeyword("*", JavaCardinality.ONE); + public final static JavaKeyword JAVA_4_0_0_3 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_4_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_4_0_0_0, JAVA_4_0_0_1, JAVA_4_0_0_2, JAVA_4_0_0_3); + public final static JavaChoice JAVA_4_0 = new JavaChoice(JavaCardinality.ONE, JAVA_4_0_0); + public final static JavaRule JAVA_4 = new JavaRule(org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getPackageImport(), JAVA_4_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_5_0_0_0 = new JavaKeyword("import", JavaCardinality.ONE); + public final static JavaContainment JAVA_5_0_0_1 = new JavaContainment(org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getStaticMemberImport().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.STATIC_MEMBER_IMPORT__STATIC), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getStatic(), }, 0); + public final static JavaPlaceholder JAVA_5_0_0_2_0_0_0 = new JavaPlaceholder(org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getStaticMemberImport().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.STATIC_MEMBER_IMPORT__NAMESPACES), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_5_0_0_2_0_0_1 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaSequence JAVA_5_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_5_0_0_2_0_0_0, JAVA_5_0_0_2_0_0_1); + public final static JavaChoice JAVA_5_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_5_0_0_2_0_0); + public final static JavaCompound JAVA_5_0_0_2 = new JavaCompound(JAVA_5_0_0_2_0, JavaCardinality.STAR); + public final static JavaPlaceholder JAVA_5_0_0_3 = new JavaPlaceholder(org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getStaticMemberImport().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.STATIC_MEMBER_IMPORT__STATIC_MEMBERS), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_5_0_0_4 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_5_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_5_0_0_0, JAVA_5_0_0_1, JAVA_5_0_0_2, JAVA_5_0_0_3, JAVA_5_0_0_4); + public final static JavaChoice JAVA_5_0 = new JavaChoice(JavaCardinality.ONE, JAVA_5_0_0); + public final static JavaRule JAVA_5 = new JavaRule(org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getStaticMemberImport(), JAVA_5_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_6_0_0_0 = new JavaKeyword("import", JavaCardinality.ONE); + public final static JavaContainment JAVA_6_0_0_1 = new JavaContainment(org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getStaticClassifierImport().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.STATIC_CLASSIFIER_IMPORT__STATIC), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getStatic(), }, 0); + public final static JavaPlaceholder JAVA_6_0_0_2_0_0_0 = new JavaPlaceholder(org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getStaticClassifierImport().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.STATIC_CLASSIFIER_IMPORT__NAMESPACES), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_6_0_0_2_0_0_1 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaSequence JAVA_6_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_6_0_0_2_0_0_0, JAVA_6_0_0_2_0_0_1); + public final static JavaChoice JAVA_6_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_6_0_0_2_0_0); + public final static JavaCompound JAVA_6_0_0_2 = new JavaCompound(JAVA_6_0_0_2_0, JavaCardinality.PLUS); + public final static JavaKeyword JAVA_6_0_0_3 = new JavaKeyword("*", JavaCardinality.ONE); + public final static JavaKeyword JAVA_6_0_0_4 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_6_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_6_0_0_0, JAVA_6_0_0_1, JAVA_6_0_0_2, JAVA_6_0_0_3, JAVA_6_0_0_4); + public final static JavaChoice JAVA_6_0 = new JavaChoice(JavaCardinality.ONE, JAVA_6_0_0); + public final static JavaRule JAVA_6 = new JavaRule(org.emftext.language.java.imports.ImportsPackage.eINSTANCE.getStaticClassifierImport(), JAVA_6_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_7_0_0_0 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getClass_().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__ANNOTATIONS_AND_MODIFIERS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getAnnotationInstanceOrModifier(), }, 0); + public final static JavaKeyword JAVA_7_0_0_1 = new JavaKeyword("class", JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_7_0_0_2 = new JavaPlaceholder(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getClass_().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_7_0_0_3_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_7_0_0_3_0_0_1 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getClass_().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__TYPE_PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter(), }, 0); + public final static JavaKeyword JAVA_7_0_0_3_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_7_0_0_3_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getClass_().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__TYPE_PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter(), }, 0); + public final static JavaSequence JAVA_7_0_0_3_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_7_0_0_3_0_0_2_0_0_0, JAVA_7_0_0_3_0_0_2_0_0_1); + public final static JavaChoice JAVA_7_0_0_3_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_7_0_0_3_0_0_2_0_0); + public final static JavaCompound JAVA_7_0_0_3_0_0_2 = new JavaCompound(JAVA_7_0_0_3_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_7_0_0_3_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_7_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_7_0_0_3_0_0_0, JAVA_7_0_0_3_0_0_1, JAVA_7_0_0_3_0_0_2, JAVA_7_0_0_3_0_0_3); + public final static JavaChoice JAVA_7_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_7_0_0_3_0_0); + public final static JavaCompound JAVA_7_0_0_3 = new JavaCompound(JAVA_7_0_0_3_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_7_0_0_4_0_0_0 = new JavaKeyword("extends", JavaCardinality.ONE); + public final static JavaContainment JAVA_7_0_0_4_0_0_1 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getClass_().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__EXTENDS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaSequence JAVA_7_0_0_4_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_7_0_0_4_0_0_0, JAVA_7_0_0_4_0_0_1); + public final static JavaChoice JAVA_7_0_0_4_0 = new JavaChoice(JavaCardinality.ONE, JAVA_7_0_0_4_0_0); + public final static JavaCompound JAVA_7_0_0_4 = new JavaCompound(JAVA_7_0_0_4_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_7_0_0_5_0_0_0 = new JavaKeyword("implements", JavaCardinality.ONE); + public final static JavaContainment JAVA_7_0_0_5_0_0_1_0_0_0 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getClass_().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__IMPLEMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaKeyword JAVA_7_0_0_5_0_0_1_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_7_0_0_5_0_0_1_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getClass_().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__IMPLEMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaSequence JAVA_7_0_0_5_0_0_1_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_7_0_0_5_0_0_1_0_0_1_0_0_0, JAVA_7_0_0_5_0_0_1_0_0_1_0_0_1); + public final static JavaChoice JAVA_7_0_0_5_0_0_1_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_7_0_0_5_0_0_1_0_0_1_0_0); + public final static JavaCompound JAVA_7_0_0_5_0_0_1_0_0_1 = new JavaCompound(JAVA_7_0_0_5_0_0_1_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_7_0_0_5_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_7_0_0_5_0_0_1_0_0_0, JAVA_7_0_0_5_0_0_1_0_0_1); + public final static JavaChoice JAVA_7_0_0_5_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_7_0_0_5_0_0_1_0_0); + public final static JavaCompound JAVA_7_0_0_5_0_0_1 = new JavaCompound(JAVA_7_0_0_5_0_0_1_0, JavaCardinality.ONE); + public final static JavaSequence JAVA_7_0_0_5_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_7_0_0_5_0_0_0, JAVA_7_0_0_5_0_0_1); + public final static JavaChoice JAVA_7_0_0_5_0 = new JavaChoice(JavaCardinality.ONE, JAVA_7_0_0_5_0_0); + public final static JavaCompound JAVA_7_0_0_5 = new JavaCompound(JAVA_7_0_0_5_0, JavaCardinality.QUESTIONMARK); + public final static JavaWhiteSpace JAVA_7_0_0_6 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_7_0_0_7 = new JavaKeyword("{", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_7_0_0_8_0_0_0 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaContainment JAVA_7_0_0_8_0_0_1 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getClass_().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__MEMBERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.members.MembersPackage.eINSTANCE.getMember(), }, 0); + public final static JavaSequence JAVA_7_0_0_8_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_7_0_0_8_0_0_0, JAVA_7_0_0_8_0_0_1); + public final static JavaChoice JAVA_7_0_0_8_0 = new JavaChoice(JavaCardinality.ONE, JAVA_7_0_0_8_0_0); + public final static JavaCompound JAVA_7_0_0_8 = new JavaCompound(JAVA_7_0_0_8_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_7_0_0_9 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_7_0_0_10 = new JavaKeyword("}", JavaCardinality.ONE); + public final static JavaSequence JAVA_7_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_7_0_0_0, JAVA_7_0_0_1, JAVA_7_0_0_2, JAVA_7_0_0_3, JAVA_7_0_0_4, JAVA_7_0_0_5, JAVA_7_0_0_6, JAVA_7_0_0_7, JAVA_7_0_0_8, JAVA_7_0_0_9, JAVA_7_0_0_10); + public final static JavaChoice JAVA_7_0 = new JavaChoice(JavaCardinality.ONE, JAVA_7_0_0); + public final static JavaRule JAVA_7 = new JavaRule(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getClass_(), JAVA_7_0, JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_8_0_0_0 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_8_0_0_1 = new JavaKeyword("{", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_8_0_0_2_0_0_0 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaContainment JAVA_8_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getAnonymousClass().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ANONYMOUS_CLASS__MEMBERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.members.MembersPackage.eINSTANCE.getMember(), }, 0); + public final static JavaSequence JAVA_8_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_8_0_0_2_0_0_0, JAVA_8_0_0_2_0_0_1); + public final static JavaChoice JAVA_8_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_8_0_0_2_0_0); + public final static JavaCompound JAVA_8_0_0_2 = new JavaCompound(JAVA_8_0_0_2_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_8_0_0_3 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_8_0_0_4 = new JavaKeyword("}", JavaCardinality.ONE); + public final static JavaSequence JAVA_8_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_8_0_0_0, JAVA_8_0_0_1, JAVA_8_0_0_2, JAVA_8_0_0_3, JAVA_8_0_0_4); + public final static JavaChoice JAVA_8_0 = new JavaChoice(JavaCardinality.ONE, JAVA_8_0_0); + public final static JavaRule JAVA_8 = new JavaRule(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getAnonymousClass(), JAVA_8_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_9_0_0_0 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getInterface().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__ANNOTATIONS_AND_MODIFIERS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getAnnotationInstanceOrModifier(), }, 0); + public final static JavaKeyword JAVA_9_0_0_1 = new JavaKeyword("interface", JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_9_0_0_2 = new JavaPlaceholder(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getInterface().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_9_0_0_3_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_9_0_0_3_0_0_1 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getInterface().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__TYPE_PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter(), }, 0); + public final static JavaKeyword JAVA_9_0_0_3_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_9_0_0_3_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getInterface().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__TYPE_PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter(), }, 0); + public final static JavaSequence JAVA_9_0_0_3_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_9_0_0_3_0_0_2_0_0_0, JAVA_9_0_0_3_0_0_2_0_0_1); + public final static JavaChoice JAVA_9_0_0_3_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_9_0_0_3_0_0_2_0_0); + public final static JavaCompound JAVA_9_0_0_3_0_0_2 = new JavaCompound(JAVA_9_0_0_3_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_9_0_0_3_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_9_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_9_0_0_3_0_0_0, JAVA_9_0_0_3_0_0_1, JAVA_9_0_0_3_0_0_2, JAVA_9_0_0_3_0_0_3); + public final static JavaChoice JAVA_9_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_9_0_0_3_0_0); + public final static JavaCompound JAVA_9_0_0_3 = new JavaCompound(JAVA_9_0_0_3_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_9_0_0_4_0_0_0 = new JavaKeyword("extends", JavaCardinality.ONE); + public final static JavaContainment JAVA_9_0_0_4_0_0_1_0_0_0 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getInterface().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__EXTENDS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaKeyword JAVA_9_0_0_4_0_0_1_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_9_0_0_4_0_0_1_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getInterface().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__EXTENDS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaSequence JAVA_9_0_0_4_0_0_1_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_9_0_0_4_0_0_1_0_0_1_0_0_0, JAVA_9_0_0_4_0_0_1_0_0_1_0_0_1); + public final static JavaChoice JAVA_9_0_0_4_0_0_1_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_9_0_0_4_0_0_1_0_0_1_0_0); + public final static JavaCompound JAVA_9_0_0_4_0_0_1_0_0_1 = new JavaCompound(JAVA_9_0_0_4_0_0_1_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_9_0_0_4_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_9_0_0_4_0_0_1_0_0_0, JAVA_9_0_0_4_0_0_1_0_0_1); + public final static JavaChoice JAVA_9_0_0_4_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_9_0_0_4_0_0_1_0_0); + public final static JavaCompound JAVA_9_0_0_4_0_0_1 = new JavaCompound(JAVA_9_0_0_4_0_0_1_0, JavaCardinality.ONE); + public final static JavaSequence JAVA_9_0_0_4_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_9_0_0_4_0_0_0, JAVA_9_0_0_4_0_0_1); + public final static JavaChoice JAVA_9_0_0_4_0 = new JavaChoice(JavaCardinality.ONE, JAVA_9_0_0_4_0_0); + public final static JavaCompound JAVA_9_0_0_4 = new JavaCompound(JAVA_9_0_0_4_0, JavaCardinality.QUESTIONMARK); + public final static JavaWhiteSpace JAVA_9_0_0_5 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_9_0_0_6 = new JavaKeyword("{", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_9_0_0_7_0_0_0 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaContainment JAVA_9_0_0_7_0_0_1 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getInterface().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__MEMBERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.members.MembersPackage.eINSTANCE.getMember(), }, 0); + public final static JavaSequence JAVA_9_0_0_7_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_9_0_0_7_0_0_0, JAVA_9_0_0_7_0_0_1); + public final static JavaChoice JAVA_9_0_0_7_0 = new JavaChoice(JavaCardinality.ONE, JAVA_9_0_0_7_0_0); + public final static JavaCompound JAVA_9_0_0_7 = new JavaCompound(JAVA_9_0_0_7_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_9_0_0_8 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_9_0_0_9 = new JavaKeyword("}", JavaCardinality.ONE); + public final static JavaSequence JAVA_9_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_9_0_0_0, JAVA_9_0_0_1, JAVA_9_0_0_2, JAVA_9_0_0_3, JAVA_9_0_0_4, JAVA_9_0_0_5, JAVA_9_0_0_6, JAVA_9_0_0_7, JAVA_9_0_0_8, JAVA_9_0_0_9); + public final static JavaChoice JAVA_9_0 = new JavaChoice(JavaCardinality.ONE, JAVA_9_0_0); + public final static JavaRule JAVA_9 = new JavaRule(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getInterface(), JAVA_9_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_10_0_0_0 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getEnumeration().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__ANNOTATIONS_AND_MODIFIERS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getAnnotationInstanceOrModifier(), }, 0); + public final static JavaKeyword JAVA_10_0_0_1 = new JavaKeyword("enum", JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_10_0_0_2 = new JavaPlaceholder(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getEnumeration().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_10_0_0_3_0_0_0 = new JavaKeyword("implements", JavaCardinality.ONE); + public final static JavaContainment JAVA_10_0_0_3_0_0_1_0_0_0 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getEnumeration().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__IMPLEMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaKeyword JAVA_10_0_0_3_0_0_1_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_10_0_0_3_0_0_1_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getEnumeration().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__IMPLEMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaSequence JAVA_10_0_0_3_0_0_1_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_10_0_0_3_0_0_1_0_0_1_0_0_0, JAVA_10_0_0_3_0_0_1_0_0_1_0_0_1); + public final static JavaChoice JAVA_10_0_0_3_0_0_1_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_10_0_0_3_0_0_1_0_0_1_0_0); + public final static JavaCompound JAVA_10_0_0_3_0_0_1_0_0_1 = new JavaCompound(JAVA_10_0_0_3_0_0_1_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_10_0_0_3_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_10_0_0_3_0_0_1_0_0_0, JAVA_10_0_0_3_0_0_1_0_0_1); + public final static JavaChoice JAVA_10_0_0_3_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_10_0_0_3_0_0_1_0_0); + public final static JavaCompound JAVA_10_0_0_3_0_0_1 = new JavaCompound(JAVA_10_0_0_3_0_0_1_0, JavaCardinality.ONE); + public final static JavaSequence JAVA_10_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_10_0_0_3_0_0_0, JAVA_10_0_0_3_0_0_1); + public final static JavaChoice JAVA_10_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_10_0_0_3_0_0); + public final static JavaCompound JAVA_10_0_0_3 = new JavaCompound(JAVA_10_0_0_3_0, JavaCardinality.QUESTIONMARK); + public final static JavaWhiteSpace JAVA_10_0_0_4 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_10_0_0_5 = new JavaKeyword("{", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_10_0_0_6_0_0_0 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaContainment JAVA_10_0_0_6_0_0_1 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getEnumeration().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__CONSTANTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.members.MembersPackage.eINSTANCE.getEnumConstant(), }, 0); + public final static JavaKeyword JAVA_10_0_0_6_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_10_0_0_6_0_0_2_0_0_1 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaContainment JAVA_10_0_0_6_0_0_2_0_0_2 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getEnumeration().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__CONSTANTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.members.MembersPackage.eINSTANCE.getEnumConstant(), }, 0); + public final static JavaSequence JAVA_10_0_0_6_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_10_0_0_6_0_0_2_0_0_0, JAVA_10_0_0_6_0_0_2_0_0_1, JAVA_10_0_0_6_0_0_2_0_0_2); + public final static JavaChoice JAVA_10_0_0_6_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_10_0_0_6_0_0_2_0_0); + public final static JavaCompound JAVA_10_0_0_6_0_0_2 = new JavaCompound(JAVA_10_0_0_6_0_0_2_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_10_0_0_6_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_10_0_0_6_0_0_0, JAVA_10_0_0_6_0_0_1, JAVA_10_0_0_6_0_0_2); + public final static JavaChoice JAVA_10_0_0_6_0 = new JavaChoice(JavaCardinality.ONE, JAVA_10_0_0_6_0_0); + public final static JavaCompound JAVA_10_0_0_6 = new JavaCompound(JAVA_10_0_0_6_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_10_0_0_7_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaSequence JAVA_10_0_0_7_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_10_0_0_7_0_0_0); + public final static JavaChoice JAVA_10_0_0_7_0 = new JavaChoice(JavaCardinality.ONE, JAVA_10_0_0_7_0_0); + public final static JavaCompound JAVA_10_0_0_7 = new JavaCompound(JAVA_10_0_0_7_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_10_0_0_8_0_0_0 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_10_0_0_8_0_0_1_0_0_0 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaContainment JAVA_10_0_0_8_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getEnumeration().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__MEMBERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.members.MembersPackage.eINSTANCE.getMember(), }, 0); + public final static JavaSequence JAVA_10_0_0_8_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_10_0_0_8_0_0_1_0_0_0, JAVA_10_0_0_8_0_0_1_0_0_1); + public final static JavaChoice JAVA_10_0_0_8_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_10_0_0_8_0_0_1_0_0); + public final static JavaCompound JAVA_10_0_0_8_0_0_1 = new JavaCompound(JAVA_10_0_0_8_0_0_1_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_10_0_0_8_0_0_2 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_10_0_0_8_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_10_0_0_8_0_0_0, JAVA_10_0_0_8_0_0_1, JAVA_10_0_0_8_0_0_2); + public final static JavaChoice JAVA_10_0_0_8_0 = new JavaChoice(JavaCardinality.ONE, JAVA_10_0_0_8_0_0); + public final static JavaCompound JAVA_10_0_0_8 = new JavaCompound(JAVA_10_0_0_8_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_10_0_0_9 = new JavaKeyword("}", JavaCardinality.ONE); + public final static JavaSequence JAVA_10_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_10_0_0_0, JAVA_10_0_0_1, JAVA_10_0_0_2, JAVA_10_0_0_3, JAVA_10_0_0_4, JAVA_10_0_0_5, JAVA_10_0_0_6, JAVA_10_0_0_7, JAVA_10_0_0_8, JAVA_10_0_0_9); + public final static JavaChoice JAVA_10_0 = new JavaChoice(JavaCardinality.ONE, JAVA_10_0_0); + public final static JavaRule JAVA_10 = new JavaRule(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getEnumeration(), JAVA_10_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_11_0_0_0 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getAnnotation().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ANNOTATION__ANNOTATIONS_AND_MODIFIERS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getAnnotationInstanceOrModifier(), }, 0); + public final static JavaKeyword JAVA_11_0_0_1 = new JavaKeyword("@", JavaCardinality.ONE); + public final static JavaKeyword JAVA_11_0_0_2 = new JavaKeyword("interface", JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_11_0_0_3 = new JavaPlaceholder(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getAnnotation().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ANNOTATION__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaWhiteSpace JAVA_11_0_0_4 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_11_0_0_5 = new JavaKeyword("{", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_11_0_0_6_0_0_0 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaContainment JAVA_11_0_0_6_0_0_1 = new JavaContainment(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getAnnotation().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ANNOTATION__MEMBERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.members.MembersPackage.eINSTANCE.getMember(), }, 0); + public final static JavaSequence JAVA_11_0_0_6_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_11_0_0_6_0_0_0, JAVA_11_0_0_6_0_0_1); + public final static JavaChoice JAVA_11_0_0_6_0 = new JavaChoice(JavaCardinality.ONE, JAVA_11_0_0_6_0_0); + public final static JavaCompound JAVA_11_0_0_6 = new JavaCompound(JAVA_11_0_0_6_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_11_0_0_7 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_11_0_0_8 = new JavaKeyword("}", JavaCardinality.ONE); + public final static JavaSequence JAVA_11_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_11_0_0_0, JAVA_11_0_0_1, JAVA_11_0_0_2, JAVA_11_0_0_3, JAVA_11_0_0_4, JAVA_11_0_0_5, JAVA_11_0_0_6, JAVA_11_0_0_7, JAVA_11_0_0_8); + public final static JavaChoice JAVA_11_0 = new JavaChoice(JavaCardinality.ONE, JAVA_11_0_0); + public final static JavaRule JAVA_11 = new JavaRule(org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getAnnotation(), JAVA_11_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_12_0_0_0 = new JavaKeyword("@", JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_12_0_0_1_0_0_0 = new JavaPlaceholder(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationInstance().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_INSTANCE__NAMESPACES), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_12_0_0_1_0_0_1 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaSequence JAVA_12_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_12_0_0_1_0_0_0, JAVA_12_0_0_1_0_0_1); + public final static JavaChoice JAVA_12_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_12_0_0_1_0_0); + public final static JavaCompound JAVA_12_0_0_1 = new JavaCompound(JAVA_12_0_0_1_0, JavaCardinality.STAR); + public final static JavaPlaceholder JAVA_12_0_0_2 = new JavaPlaceholder(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationInstance().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_INSTANCE__ANNOTATION), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaContainment JAVA_12_0_0_3_0_0_0 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationInstance().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_INSTANCE__PARAMETER), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationParameter(), }, 0); + public final static JavaSequence JAVA_12_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_12_0_0_3_0_0_0); + public final static JavaChoice JAVA_12_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_12_0_0_3_0_0); + public final static JavaCompound JAVA_12_0_0_3 = new JavaCompound(JAVA_12_0_0_3_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_12_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_12_0_0_0, JAVA_12_0_0_1, JAVA_12_0_0_2, JAVA_12_0_0_3); + public final static JavaChoice JAVA_12_0 = new JavaChoice(JavaCardinality.ONE, JAVA_12_0_0); + public final static JavaRule JAVA_12 = new JavaRule(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationInstance(), JAVA_12_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_13_0_0_0 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_13_0_0_1 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getSingleAnnotationParameter().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.SINGLE_ANNOTATION_PARAMETER__VALUE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInitializer(), org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalExpression(), }, 0); + public final static JavaKeyword JAVA_13_0_0_2 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaSequence JAVA_13_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_13_0_0_0, JAVA_13_0_0_1, JAVA_13_0_0_2); + public final static JavaChoice JAVA_13_0 = new JavaChoice(JavaCardinality.ONE, JAVA_13_0_0); + public final static JavaRule JAVA_13 = new JavaRule(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getSingleAnnotationParameter(), JAVA_13_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_14_0_0_0 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_14_0_0_1_0_0_0 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationParameterList().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_PARAMETER_LIST__SETTINGS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttributeSetting(), }, 0); + public final static JavaKeyword JAVA_14_0_0_1_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_14_0_0_1_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationParameterList().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_PARAMETER_LIST__SETTINGS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttributeSetting(), }, 0); + public final static JavaSequence JAVA_14_0_0_1_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_14_0_0_1_0_0_1_0_0_0, JAVA_14_0_0_1_0_0_1_0_0_1); + public final static JavaChoice JAVA_14_0_0_1_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_14_0_0_1_0_0_1_0_0); + public final static JavaCompound JAVA_14_0_0_1_0_0_1 = new JavaCompound(JAVA_14_0_0_1_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_14_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_14_0_0_1_0_0_0, JAVA_14_0_0_1_0_0_1); + public final static JavaChoice JAVA_14_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_14_0_0_1_0_0); + public final static JavaCompound JAVA_14_0_0_1 = new JavaCompound(JAVA_14_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_14_0_0_2 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaSequence JAVA_14_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_14_0_0_0, JAVA_14_0_0_1, JAVA_14_0_0_2); + public final static JavaChoice JAVA_14_0 = new JavaChoice(JavaCardinality.ONE, JAVA_14_0_0); + public final static JavaRule JAVA_14 = new JavaRule(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationParameterList(), JAVA_14_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_15_0_0_0 = new JavaPlaceholder(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttributeSetting().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE_SETTING__ATTRIBUTE), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaWhiteSpace JAVA_15_0_0_1 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_15_0_0_2 = new JavaKeyword("=", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_15_0_0_3 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_15_0_0_4 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttributeSetting().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE_SETTING__VALUE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInitializer(), org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalExpression(), }, 0); + public final static JavaSequence JAVA_15_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_15_0_0_0, JAVA_15_0_0_1, JAVA_15_0_0_2, JAVA_15_0_0_3, JAVA_15_0_0_4); + public final static JavaChoice JAVA_15_0 = new JavaChoice(JavaCardinality.ONE, JAVA_15_0_0); + public final static JavaRule JAVA_15 = new JavaRule(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttributeSetting(), JAVA_15_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_16_0_0_0 = new JavaPlaceholder(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter().getEStructuralFeature(org.emftext.language.java.generics.GenericsPackage.TYPE_PARAMETER__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_16_0_0_1_0_0_0 = new JavaKeyword("extends", JavaCardinality.ONE); + public final static JavaContainment JAVA_16_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter().getEStructuralFeature(org.emftext.language.java.generics.GenericsPackage.TYPE_PARAMETER__EXTEND_TYPES), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaKeyword JAVA_16_0_0_1_0_0_2_0_0_0 = new JavaKeyword("&", JavaCardinality.ONE); + public final static JavaContainment JAVA_16_0_0_1_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter().getEStructuralFeature(org.emftext.language.java.generics.GenericsPackage.TYPE_PARAMETER__EXTEND_TYPES), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaSequence JAVA_16_0_0_1_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_16_0_0_1_0_0_2_0_0_0, JAVA_16_0_0_1_0_0_2_0_0_1); + public final static JavaChoice JAVA_16_0_0_1_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_16_0_0_1_0_0_2_0_0); + public final static JavaCompound JAVA_16_0_0_1_0_0_2 = new JavaCompound(JAVA_16_0_0_1_0_0_2_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_16_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_16_0_0_1_0_0_0, JAVA_16_0_0_1_0_0_1, JAVA_16_0_0_1_0_0_2); + public final static JavaChoice JAVA_16_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_16_0_0_1_0_0); + public final static JavaCompound JAVA_16_0_0_1 = new JavaCompound(JAVA_16_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_16_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_16_0_0_0, JAVA_16_0_0_1); + public final static JavaChoice JAVA_16_0 = new JavaChoice(JavaCardinality.ONE, JAVA_16_0_0); + public final static JavaRule JAVA_16 = new JavaRule(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter(), JAVA_16_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_17_0_0_0 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getEnumConstant().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.ENUM_CONSTANT__ANNOTATIONS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationInstance(), }, 0); + public final static JavaPlaceholder JAVA_17_0_0_1 = new JavaPlaceholder(org.emftext.language.java.members.MembersPackage.eINSTANCE.getEnumConstant().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.ENUM_CONSTANT__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaWhiteSpace JAVA_17_0_0_2_0_0_0 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_17_0_0_2_0_0_1 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_17_0_0_2_0_0_2_0_0_0 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getEnumConstant().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.ENUM_CONSTANT__ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_17_0_0_2_0_0_2_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_17_0_0_2_0_0_2_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getEnumConstant().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.ENUM_CONSTANT__ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaSequence JAVA_17_0_0_2_0_0_2_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_17_0_0_2_0_0_2_0_0_1_0_0_0, JAVA_17_0_0_2_0_0_2_0_0_1_0_0_1); + public final static JavaChoice JAVA_17_0_0_2_0_0_2_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_17_0_0_2_0_0_2_0_0_1_0_0); + public final static JavaCompound JAVA_17_0_0_2_0_0_2_0_0_1 = new JavaCompound(JAVA_17_0_0_2_0_0_2_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_17_0_0_2_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_17_0_0_2_0_0_2_0_0_0, JAVA_17_0_0_2_0_0_2_0_0_1); + public final static JavaChoice JAVA_17_0_0_2_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_17_0_0_2_0_0_2_0_0); + public final static JavaCompound JAVA_17_0_0_2_0_0_2 = new JavaCompound(JAVA_17_0_0_2_0_0_2_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_17_0_0_2_0_0_3 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaSequence JAVA_17_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_17_0_0_2_0_0_0, JAVA_17_0_0_2_0_0_1, JAVA_17_0_0_2_0_0_2, JAVA_17_0_0_2_0_0_3); + public final static JavaChoice JAVA_17_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_17_0_0_2_0_0); + public final static JavaCompound JAVA_17_0_0_2 = new JavaCompound(JAVA_17_0_0_2_0, JavaCardinality.QUESTIONMARK); + public final static JavaContainment JAVA_17_0_0_3_0_0_0 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getEnumConstant().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.ENUM_CONSTANT__ANONYMOUS_CLASS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getAnonymousClass(), }, 0); + public final static JavaSequence JAVA_17_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_17_0_0_3_0_0_0); + public final static JavaChoice JAVA_17_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_17_0_0_3_0_0); + public final static JavaCompound JAVA_17_0_0_3 = new JavaCompound(JAVA_17_0_0_3_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_17_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_17_0_0_0, JAVA_17_0_0_1, JAVA_17_0_0_2, JAVA_17_0_0_3); + public final static JavaChoice JAVA_17_0 = new JavaChoice(JavaCardinality.ONE, JAVA_17_0_0); + public final static JavaRule JAVA_17 = new JavaRule(org.emftext.language.java.members.MembersPackage.eINSTANCE.getEnumConstant(), JAVA_17_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_18_0_0_0 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getBlock().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.BLOCK__MODIFIERS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getModifier(), }, 0); + public final static JavaWhiteSpace JAVA_18_0_0_1 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_18_0_0_2 = new JavaKeyword("{", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_18_0_0_3_0_0_0 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaContainment JAVA_18_0_0_3_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getBlock().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.BLOCK__STATEMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaSequence JAVA_18_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_18_0_0_3_0_0_0, JAVA_18_0_0_3_0_0_1); + public final static JavaChoice JAVA_18_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_18_0_0_3_0_0); + public final static JavaCompound JAVA_18_0_0_3 = new JavaCompound(JAVA_18_0_0_3_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_18_0_0_4 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_18_0_0_5 = new JavaKeyword("}", JavaCardinality.ONE); + public final static JavaSequence JAVA_18_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_18_0_0_0, JAVA_18_0_0_1, JAVA_18_0_0_2, JAVA_18_0_0_3, JAVA_18_0_0_4, JAVA_18_0_0_5); + public final static JavaChoice JAVA_18_0 = new JavaChoice(JavaCardinality.ONE, JAVA_18_0_0); + public final static JavaRule JAVA_18 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getBlock(), JAVA_18_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_19_0_0_0 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getConstructor().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__ANNOTATIONS_AND_MODIFIERS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getAnnotationInstanceOrModifier(), }, 0); + public final static JavaKeyword JAVA_19_0_0_1_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_19_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getConstructor().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__TYPE_PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter(), }, 0); + public final static JavaKeyword JAVA_19_0_0_1_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_19_0_0_1_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getConstructor().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__TYPE_PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter(), }, 0); + public final static JavaSequence JAVA_19_0_0_1_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_19_0_0_1_0_0_2_0_0_0, JAVA_19_0_0_1_0_0_2_0_0_1); + public final static JavaChoice JAVA_19_0_0_1_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_19_0_0_1_0_0_2_0_0); + public final static JavaCompound JAVA_19_0_0_1_0_0_2 = new JavaCompound(JAVA_19_0_0_1_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_19_0_0_1_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_19_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_19_0_0_1_0_0_0, JAVA_19_0_0_1_0_0_1, JAVA_19_0_0_1_0_0_2, JAVA_19_0_0_1_0_0_3); + public final static JavaChoice JAVA_19_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_19_0_0_1_0_0); + public final static JavaCompound JAVA_19_0_0_1 = new JavaCompound(JAVA_19_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaPlaceholder JAVA_19_0_0_2 = new JavaPlaceholder(org.emftext.language.java.members.MembersPackage.eINSTANCE.getConstructor().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_19_0_0_3 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_19_0_0_4_0_0_0 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getConstructor().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getParameter(), }, 0); + public final static JavaKeyword JAVA_19_0_0_4_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_19_0_0_4_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getConstructor().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getParameter(), }, 0); + public final static JavaSequence JAVA_19_0_0_4_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_19_0_0_4_0_0_1_0_0_0, JAVA_19_0_0_4_0_0_1_0_0_1); + public final static JavaChoice JAVA_19_0_0_4_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_19_0_0_4_0_0_1_0_0); + public final static JavaCompound JAVA_19_0_0_4_0_0_1 = new JavaCompound(JAVA_19_0_0_4_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_19_0_0_4_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_19_0_0_4_0_0_0, JAVA_19_0_0_4_0_0_1); + public final static JavaChoice JAVA_19_0_0_4_0 = new JavaChoice(JavaCardinality.ONE, JAVA_19_0_0_4_0_0); + public final static JavaCompound JAVA_19_0_0_4 = new JavaCompound(JAVA_19_0_0_4_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_19_0_0_5 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaKeyword JAVA_19_0_0_6_0_0_0 = new JavaKeyword("throws", JavaCardinality.ONE); + public final static JavaContainment JAVA_19_0_0_6_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getConstructor().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__EXCEPTIONS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getNamespaceClassifierReference(), }, 0); + public final static JavaKeyword JAVA_19_0_0_6_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_19_0_0_6_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getConstructor().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__EXCEPTIONS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getNamespaceClassifierReference(), }, 0); + public final static JavaSequence JAVA_19_0_0_6_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_19_0_0_6_0_0_2_0_0_0, JAVA_19_0_0_6_0_0_2_0_0_1); + public final static JavaChoice JAVA_19_0_0_6_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_19_0_0_6_0_0_2_0_0); + public final static JavaCompound JAVA_19_0_0_6_0_0_2 = new JavaCompound(JAVA_19_0_0_6_0_0_2_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_19_0_0_6_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_19_0_0_6_0_0_0, JAVA_19_0_0_6_0_0_1, JAVA_19_0_0_6_0_0_2); + public final static JavaChoice JAVA_19_0_0_6_0 = new JavaChoice(JavaCardinality.ONE, JAVA_19_0_0_6_0_0); + public final static JavaCompound JAVA_19_0_0_6 = new JavaCompound(JAVA_19_0_0_6_0, JavaCardinality.QUESTIONMARK); + public final static JavaWhiteSpace JAVA_19_0_0_7 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_19_0_0_8 = new JavaKeyword("{", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_19_0_0_9_0_0_0 = new JavaLineBreak(JavaCardinality.ONE, 2); + public final static JavaContainment JAVA_19_0_0_9_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getConstructor().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__STATEMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaSequence JAVA_19_0_0_9_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_19_0_0_9_0_0_0, JAVA_19_0_0_9_0_0_1); + public final static JavaChoice JAVA_19_0_0_9_0 = new JavaChoice(JavaCardinality.ONE, JAVA_19_0_0_9_0_0); + public final static JavaCompound JAVA_19_0_0_9 = new JavaCompound(JAVA_19_0_0_9_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_19_0_0_10 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaKeyword JAVA_19_0_0_11 = new JavaKeyword("}", JavaCardinality.ONE); + public final static JavaSequence JAVA_19_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_19_0_0_0, JAVA_19_0_0_1, JAVA_19_0_0_2, JAVA_19_0_0_3, JAVA_19_0_0_4, JAVA_19_0_0_5, JAVA_19_0_0_6, JAVA_19_0_0_7, JAVA_19_0_0_8, JAVA_19_0_0_9, JAVA_19_0_0_10, JAVA_19_0_0_11); + public final static JavaChoice JAVA_19_0 = new JavaChoice(JavaCardinality.ONE, JAVA_19_0_0); + public final static JavaRule JAVA_19 = new JavaRule(org.emftext.language.java.members.MembersPackage.eINSTANCE.getConstructor(), JAVA_19_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_20_0_0_0 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getInterfaceMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__ANNOTATIONS_AND_MODIFIERS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getAnnotationInstanceOrModifier(), }, 0); + public final static JavaKeyword JAVA_20_0_0_1_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_20_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getInterfaceMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__TYPE_PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter(), }, 0); + public final static JavaKeyword JAVA_20_0_0_1_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_20_0_0_1_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getInterfaceMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__TYPE_PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter(), }, 0); + public final static JavaSequence JAVA_20_0_0_1_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_20_0_0_1_0_0_2_0_0_0, JAVA_20_0_0_1_0_0_2_0_0_1); + public final static JavaChoice JAVA_20_0_0_1_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_20_0_0_1_0_0_2_0_0); + public final static JavaCompound JAVA_20_0_0_1_0_0_2 = new JavaCompound(JAVA_20_0_0_1_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_20_0_0_1_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_20_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_20_0_0_1_0_0_0, JAVA_20_0_0_1_0_0_1, JAVA_20_0_0_1_0_0_2, JAVA_20_0_0_1_0_0_3); + public final static JavaChoice JAVA_20_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_20_0_0_1_0_0); + public final static JavaCompound JAVA_20_0_0_1 = new JavaCompound(JAVA_20_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaContainment JAVA_20_0_0_2_0_0_0 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getInterfaceMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__TYPE_REFERENCE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaContainment JAVA_20_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getInterfaceMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__ARRAY_DIMENSIONS_BEFORE), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaSequence JAVA_20_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_20_0_0_2_0_0_0, JAVA_20_0_0_2_0_0_1); + public final static JavaChoice JAVA_20_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_20_0_0_2_0_0); + public final static JavaCompound JAVA_20_0_0_2 = new JavaCompound(JAVA_20_0_0_2_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_20_0_0_3 = new JavaPlaceholder(org.emftext.language.java.members.MembersPackage.eINSTANCE.getInterfaceMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_20_0_0_4 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_20_0_0_5_0_0_0 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getInterfaceMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getParameter(), }, 0); + public final static JavaKeyword JAVA_20_0_0_5_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_20_0_0_5_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getInterfaceMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getParameter(), }, 0); + public final static JavaSequence JAVA_20_0_0_5_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_20_0_0_5_0_0_1_0_0_0, JAVA_20_0_0_5_0_0_1_0_0_1); + public final static JavaChoice JAVA_20_0_0_5_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_20_0_0_5_0_0_1_0_0); + public final static JavaCompound JAVA_20_0_0_5_0_0_1 = new JavaCompound(JAVA_20_0_0_5_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_20_0_0_5_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_20_0_0_5_0_0_0, JAVA_20_0_0_5_0_0_1); + public final static JavaChoice JAVA_20_0_0_5_0 = new JavaChoice(JavaCardinality.ONE, JAVA_20_0_0_5_0_0); + public final static JavaCompound JAVA_20_0_0_5 = new JavaCompound(JAVA_20_0_0_5_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_20_0_0_6 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaContainment JAVA_20_0_0_7 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getInterfaceMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__ARRAY_DIMENSIONS_AFTER), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaKeyword JAVA_20_0_0_8_0_0_0 = new JavaKeyword("throws", JavaCardinality.ONE); + public final static JavaContainment JAVA_20_0_0_8_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getInterfaceMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__EXCEPTIONS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getNamespaceClassifierReference(), }, 0); + public final static JavaKeyword JAVA_20_0_0_8_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_20_0_0_8_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getInterfaceMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__EXCEPTIONS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getNamespaceClassifierReference(), }, 0); + public final static JavaSequence JAVA_20_0_0_8_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_20_0_0_8_0_0_2_0_0_0, JAVA_20_0_0_8_0_0_2_0_0_1); + public final static JavaChoice JAVA_20_0_0_8_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_20_0_0_8_0_0_2_0_0); + public final static JavaCompound JAVA_20_0_0_8_0_0_2 = new JavaCompound(JAVA_20_0_0_8_0_0_2_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_20_0_0_8_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_20_0_0_8_0_0_0, JAVA_20_0_0_8_0_0_1, JAVA_20_0_0_8_0_0_2); + public final static JavaChoice JAVA_20_0_0_8_0 = new JavaChoice(JavaCardinality.ONE, JAVA_20_0_0_8_0_0); + public final static JavaCompound JAVA_20_0_0_8 = new JavaCompound(JAVA_20_0_0_8_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_20_0_0_9 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_20_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_20_0_0_0, JAVA_20_0_0_1, JAVA_20_0_0_2, JAVA_20_0_0_3, JAVA_20_0_0_4, JAVA_20_0_0_5, JAVA_20_0_0_6, JAVA_20_0_0_7, JAVA_20_0_0_8, JAVA_20_0_0_9); + public final static JavaChoice JAVA_20_0 = new JavaChoice(JavaCardinality.ONE, JAVA_20_0_0); + public final static JavaRule JAVA_20 = new JavaRule(org.emftext.language.java.members.MembersPackage.eINSTANCE.getInterfaceMethod(), JAVA_20_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_21_0_0_0 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getClassMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__ANNOTATIONS_AND_MODIFIERS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getAnnotationInstanceOrModifier(), }, 0); + public final static JavaKeyword JAVA_21_0_0_1_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_21_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getClassMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__TYPE_PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter(), }, 0); + public final static JavaKeyword JAVA_21_0_0_1_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_21_0_0_1_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getClassMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__TYPE_PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter(), }, 0); + public final static JavaSequence JAVA_21_0_0_1_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_21_0_0_1_0_0_2_0_0_0, JAVA_21_0_0_1_0_0_2_0_0_1); + public final static JavaChoice JAVA_21_0_0_1_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_21_0_0_1_0_0_2_0_0); + public final static JavaCompound JAVA_21_0_0_1_0_0_2 = new JavaCompound(JAVA_21_0_0_1_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_21_0_0_1_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_21_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_21_0_0_1_0_0_0, JAVA_21_0_0_1_0_0_1, JAVA_21_0_0_1_0_0_2, JAVA_21_0_0_1_0_0_3); + public final static JavaChoice JAVA_21_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_21_0_0_1_0_0); + public final static JavaCompound JAVA_21_0_0_1 = new JavaCompound(JAVA_21_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaContainment JAVA_21_0_0_2_0_0_0 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getClassMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__TYPE_REFERENCE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaContainment JAVA_21_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getClassMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__ARRAY_DIMENSIONS_BEFORE), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaSequence JAVA_21_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_21_0_0_2_0_0_0, JAVA_21_0_0_2_0_0_1); + public final static JavaChoice JAVA_21_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_21_0_0_2_0_0); + public final static JavaCompound JAVA_21_0_0_2 = new JavaCompound(JAVA_21_0_0_2_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_21_0_0_3 = new JavaPlaceholder(org.emftext.language.java.members.MembersPackage.eINSTANCE.getClassMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_21_0_0_4 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_21_0_0_5_0_0_0 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getClassMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getParameter(), }, 0); + public final static JavaKeyword JAVA_21_0_0_5_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_21_0_0_5_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getClassMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getParameter(), }, 0); + public final static JavaSequence JAVA_21_0_0_5_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_21_0_0_5_0_0_1_0_0_0, JAVA_21_0_0_5_0_0_1_0_0_1); + public final static JavaChoice JAVA_21_0_0_5_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_21_0_0_5_0_0_1_0_0); + public final static JavaCompound JAVA_21_0_0_5_0_0_1 = new JavaCompound(JAVA_21_0_0_5_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_21_0_0_5_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_21_0_0_5_0_0_0, JAVA_21_0_0_5_0_0_1); + public final static JavaChoice JAVA_21_0_0_5_0 = new JavaChoice(JavaCardinality.ONE, JAVA_21_0_0_5_0_0); + public final static JavaCompound JAVA_21_0_0_5 = new JavaCompound(JAVA_21_0_0_5_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_21_0_0_6 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaContainment JAVA_21_0_0_7 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getClassMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__ARRAY_DIMENSIONS_AFTER), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaKeyword JAVA_21_0_0_8_0_0_0 = new JavaKeyword("throws", JavaCardinality.ONE); + public final static JavaContainment JAVA_21_0_0_8_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getClassMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__EXCEPTIONS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getNamespaceClassifierReference(), }, 0); + public final static JavaKeyword JAVA_21_0_0_8_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_21_0_0_8_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getClassMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__EXCEPTIONS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getNamespaceClassifierReference(), }, 0); + public final static JavaSequence JAVA_21_0_0_8_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_21_0_0_8_0_0_2_0_0_0, JAVA_21_0_0_8_0_0_2_0_0_1); + public final static JavaChoice JAVA_21_0_0_8_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_21_0_0_8_0_0_2_0_0); + public final static JavaCompound JAVA_21_0_0_8_0_0_2 = new JavaCompound(JAVA_21_0_0_8_0_0_2_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_21_0_0_8_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_21_0_0_8_0_0_0, JAVA_21_0_0_8_0_0_1, JAVA_21_0_0_8_0_0_2); + public final static JavaChoice JAVA_21_0_0_8_0 = new JavaChoice(JavaCardinality.ONE, JAVA_21_0_0_8_0_0); + public final static JavaCompound JAVA_21_0_0_8 = new JavaCompound(JAVA_21_0_0_8_0, JavaCardinality.QUESTIONMARK); + public final static JavaWhiteSpace JAVA_21_0_0_9 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_21_0_0_10 = new JavaKeyword("{", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_21_0_0_11_0_0_0 = new JavaLineBreak(JavaCardinality.ONE, 2); + public final static JavaContainment JAVA_21_0_0_11_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getClassMethod().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__STATEMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaSequence JAVA_21_0_0_11_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_21_0_0_11_0_0_0, JAVA_21_0_0_11_0_0_1); + public final static JavaChoice JAVA_21_0_0_11_0 = new JavaChoice(JavaCardinality.ONE, JAVA_21_0_0_11_0_0); + public final static JavaCompound JAVA_21_0_0_11 = new JavaCompound(JAVA_21_0_0_11_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_21_0_0_12 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaKeyword JAVA_21_0_0_13 = new JavaKeyword("}", JavaCardinality.ONE); + public final static JavaSequence JAVA_21_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_21_0_0_0, JAVA_21_0_0_1, JAVA_21_0_0_2, JAVA_21_0_0_3, JAVA_21_0_0_4, JAVA_21_0_0_5, JAVA_21_0_0_6, JAVA_21_0_0_7, JAVA_21_0_0_8, JAVA_21_0_0_9, JAVA_21_0_0_10, JAVA_21_0_0_11, JAVA_21_0_0_12, JAVA_21_0_0_13); + public final static JavaChoice JAVA_21_0 = new JavaChoice(JavaCardinality.ONE, JAVA_21_0_0); + public final static JavaRule JAVA_21 = new JavaRule(org.emftext.language.java.members.MembersPackage.eINSTANCE.getClassMethod(), JAVA_21_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_22_0_0_0 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttribute().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__ANNOTATIONS_AND_MODIFIERS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getAnnotationInstanceOrModifier(), }, 0); + public final static JavaKeyword JAVA_22_0_0_1_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_22_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttribute().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__TYPE_PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter(), }, 0); + public final static JavaKeyword JAVA_22_0_0_1_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_22_0_0_1_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttribute().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__TYPE_PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeParameter(), }, 0); + public final static JavaSequence JAVA_22_0_0_1_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_22_0_0_1_0_0_2_0_0_0, JAVA_22_0_0_1_0_0_2_0_0_1); + public final static JavaChoice JAVA_22_0_0_1_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_22_0_0_1_0_0_2_0_0); + public final static JavaCompound JAVA_22_0_0_1_0_0_2 = new JavaCompound(JAVA_22_0_0_1_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_22_0_0_1_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_22_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_22_0_0_1_0_0_0, JAVA_22_0_0_1_0_0_1, JAVA_22_0_0_1_0_0_2, JAVA_22_0_0_1_0_0_3); + public final static JavaChoice JAVA_22_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_22_0_0_1_0_0); + public final static JavaCompound JAVA_22_0_0_1 = new JavaCompound(JAVA_22_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaContainment JAVA_22_0_0_2_0_0_0 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttribute().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__TYPE_REFERENCE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaContainment JAVA_22_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttribute().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__ARRAY_DIMENSIONS_BEFORE), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaSequence JAVA_22_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_22_0_0_2_0_0_0, JAVA_22_0_0_2_0_0_1); + public final static JavaChoice JAVA_22_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_22_0_0_2_0_0); + public final static JavaCompound JAVA_22_0_0_2 = new JavaCompound(JAVA_22_0_0_2_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_22_0_0_3 = new JavaPlaceholder(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttribute().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_22_0_0_4 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_22_0_0_5_0_0_0 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttribute().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getParameter(), }, 0); + public final static JavaKeyword JAVA_22_0_0_5_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_22_0_0_5_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttribute().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__PARAMETERS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getParameter(), }, 0); + public final static JavaSequence JAVA_22_0_0_5_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_22_0_0_5_0_0_1_0_0_0, JAVA_22_0_0_5_0_0_1_0_0_1); + public final static JavaChoice JAVA_22_0_0_5_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_22_0_0_5_0_0_1_0_0); + public final static JavaCompound JAVA_22_0_0_5_0_0_1 = new JavaCompound(JAVA_22_0_0_5_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_22_0_0_5_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_22_0_0_5_0_0_0, JAVA_22_0_0_5_0_0_1); + public final static JavaChoice JAVA_22_0_0_5_0 = new JavaChoice(JavaCardinality.ONE, JAVA_22_0_0_5_0_0); + public final static JavaCompound JAVA_22_0_0_5 = new JavaCompound(JAVA_22_0_0_5_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_22_0_0_6 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaContainment JAVA_22_0_0_7 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttribute().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__ARRAY_DIMENSIONS_AFTER), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaKeyword JAVA_22_0_0_8_0_0_0 = new JavaKeyword("throws", JavaCardinality.ONE); + public final static JavaContainment JAVA_22_0_0_8_0_0_1 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttribute().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__EXCEPTIONS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getNamespaceClassifierReference(), }, 0); + public final static JavaKeyword JAVA_22_0_0_8_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_22_0_0_8_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttribute().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__EXCEPTIONS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getNamespaceClassifierReference(), }, 0); + public final static JavaSequence JAVA_22_0_0_8_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_22_0_0_8_0_0_2_0_0_0, JAVA_22_0_0_8_0_0_2_0_0_1); + public final static JavaChoice JAVA_22_0_0_8_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_22_0_0_8_0_0_2_0_0); + public final static JavaCompound JAVA_22_0_0_8_0_0_2 = new JavaCompound(JAVA_22_0_0_8_0_0_2_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_22_0_0_8_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_22_0_0_8_0_0_0, JAVA_22_0_0_8_0_0_1, JAVA_22_0_0_8_0_0_2); + public final static JavaChoice JAVA_22_0_0_8_0 = new JavaChoice(JavaCardinality.ONE, JAVA_22_0_0_8_0_0); + public final static JavaCompound JAVA_22_0_0_8 = new JavaCompound(JAVA_22_0_0_8_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_22_0_0_9 = new JavaKeyword("default", JavaCardinality.ONE); + public final static JavaContainment JAVA_22_0_0_10 = new JavaContainment(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttribute().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__DEFAULT_VALUE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_22_0_0_11 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_22_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_22_0_0_0, JAVA_22_0_0_1, JAVA_22_0_0_2, JAVA_22_0_0_3, JAVA_22_0_0_4, JAVA_22_0_0_5, JAVA_22_0_0_6, JAVA_22_0_0_7, JAVA_22_0_0_8, JAVA_22_0_0_9, JAVA_22_0_0_10, JAVA_22_0_0_11); + public final static JavaChoice JAVA_22_0 = new JavaChoice(JavaCardinality.ONE, JAVA_22_0_0); + public final static JavaRule JAVA_22 = new JavaRule(org.emftext.language.java.annotations.AnnotationsPackage.eINSTANCE.getAnnotationAttribute(), JAVA_22_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_23_0_0_0 = new JavaContainment(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getOrdinaryParameter().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__ANNOTATIONS_AND_MODIFIERS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getAnnotationInstanceOrModifier(), }, 0); + public final static JavaContainment JAVA_23_0_0_1 = new JavaContainment(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getOrdinaryParameter().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__TYPE_REFERENCE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaContainment JAVA_23_0_0_2 = new JavaContainment(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getOrdinaryParameter().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__ARRAY_DIMENSIONS_BEFORE), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaKeyword JAVA_23_0_0_3_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_23_0_0_3_0_0_1 = new JavaContainment(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getOrdinaryParameter().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaKeyword JAVA_23_0_0_3_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_23_0_0_3_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getOrdinaryParameter().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaSequence JAVA_23_0_0_3_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_23_0_0_3_0_0_2_0_0_0, JAVA_23_0_0_3_0_0_2_0_0_1); + public final static JavaChoice JAVA_23_0_0_3_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_23_0_0_3_0_0_2_0_0); + public final static JavaCompound JAVA_23_0_0_3_0_0_2 = new JavaCompound(JAVA_23_0_0_3_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_23_0_0_3_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_23_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_23_0_0_3_0_0_0, JAVA_23_0_0_3_0_0_1, JAVA_23_0_0_3_0_0_2, JAVA_23_0_0_3_0_0_3); + public final static JavaChoice JAVA_23_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_23_0_0_3_0_0); + public final static JavaCompound JAVA_23_0_0_3 = new JavaCompound(JAVA_23_0_0_3_0, JavaCardinality.QUESTIONMARK); + public final static JavaPlaceholder JAVA_23_0_0_4 = new JavaPlaceholder(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getOrdinaryParameter().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaContainment JAVA_23_0_0_5 = new JavaContainment(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getOrdinaryParameter().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__ARRAY_DIMENSIONS_AFTER), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaSequence JAVA_23_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_23_0_0_0, JAVA_23_0_0_1, JAVA_23_0_0_2, JAVA_23_0_0_3, JAVA_23_0_0_4, JAVA_23_0_0_5); + public final static JavaChoice JAVA_23_0 = new JavaChoice(JavaCardinality.ONE, JAVA_23_0_0); + public final static JavaRule JAVA_23 = new JavaRule(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getOrdinaryParameter(), JAVA_23_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_24_0_0_0 = new JavaContainment(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getVariableLengthParameter().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.VARIABLE_LENGTH_PARAMETER__ANNOTATIONS_AND_MODIFIERS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getAnnotationInstanceOrModifier(), }, 0); + public final static JavaContainment JAVA_24_0_0_1 = new JavaContainment(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getVariableLengthParameter().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.VARIABLE_LENGTH_PARAMETER__TYPE_REFERENCE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaContainment JAVA_24_0_0_2 = new JavaContainment(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getVariableLengthParameter().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.VARIABLE_LENGTH_PARAMETER__ARRAY_DIMENSIONS_BEFORE), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaKeyword JAVA_24_0_0_3_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_24_0_0_3_0_0_1 = new JavaContainment(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getVariableLengthParameter().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.VARIABLE_LENGTH_PARAMETER__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaKeyword JAVA_24_0_0_3_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_24_0_0_3_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getVariableLengthParameter().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.VARIABLE_LENGTH_PARAMETER__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaSequence JAVA_24_0_0_3_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_24_0_0_3_0_0_2_0_0_0, JAVA_24_0_0_3_0_0_2_0_0_1); + public final static JavaChoice JAVA_24_0_0_3_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_24_0_0_3_0_0_2_0_0); + public final static JavaCompound JAVA_24_0_0_3_0_0_2 = new JavaCompound(JAVA_24_0_0_3_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_24_0_0_3_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_24_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_24_0_0_3_0_0_0, JAVA_24_0_0_3_0_0_1, JAVA_24_0_0_3_0_0_2, JAVA_24_0_0_3_0_0_3); + public final static JavaChoice JAVA_24_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_24_0_0_3_0_0); + public final static JavaCompound JAVA_24_0_0_3 = new JavaCompound(JAVA_24_0_0_3_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_24_0_0_4 = new JavaKeyword("...", JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_24_0_0_5 = new JavaPlaceholder(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getVariableLengthParameter().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.VARIABLE_LENGTH_PARAMETER__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_24_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_24_0_0_0, JAVA_24_0_0_1, JAVA_24_0_0_2, JAVA_24_0_0_3, JAVA_24_0_0_4, JAVA_24_0_0_5); + public final static JavaChoice JAVA_24_0 = new JavaChoice(JavaCardinality.ONE, JAVA_24_0_0); + public final static JavaRule JAVA_24 = new JavaRule(org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getVariableLengthParameter(), JAVA_24_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_25_0_0_0 = new JavaContainment(org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getLocalVariable().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__ANNOTATIONS_AND_MODIFIERS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getAnnotationInstanceOrModifier(), }, 0); + public final static JavaContainment JAVA_25_0_0_1 = new JavaContainment(org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getLocalVariable().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__TYPE_REFERENCE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaContainment JAVA_25_0_0_2 = new JavaContainment(org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getLocalVariable().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__ARRAY_DIMENSIONS_BEFORE), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaKeyword JAVA_25_0_0_3_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_25_0_0_3_0_0_1 = new JavaContainment(org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getLocalVariable().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaKeyword JAVA_25_0_0_3_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_25_0_0_3_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getLocalVariable().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaSequence JAVA_25_0_0_3_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_25_0_0_3_0_0_2_0_0_0, JAVA_25_0_0_3_0_0_2_0_0_1); + public final static JavaChoice JAVA_25_0_0_3_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_25_0_0_3_0_0_2_0_0); + public final static JavaCompound JAVA_25_0_0_3_0_0_2 = new JavaCompound(JAVA_25_0_0_3_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_25_0_0_3_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_25_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_25_0_0_3_0_0_0, JAVA_25_0_0_3_0_0_1, JAVA_25_0_0_3_0_0_2, JAVA_25_0_0_3_0_0_3); + public final static JavaChoice JAVA_25_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_25_0_0_3_0_0); + public final static JavaCompound JAVA_25_0_0_3 = new JavaCompound(JAVA_25_0_0_3_0, JavaCardinality.QUESTIONMARK); + public final static JavaPlaceholder JAVA_25_0_0_4 = new JavaPlaceholder(org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getLocalVariable().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaContainment JAVA_25_0_0_5 = new JavaContainment(org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getLocalVariable().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__ARRAY_DIMENSIONS_AFTER), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaWhiteSpace JAVA_25_0_0_6_0_0_0 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_25_0_0_6_0_0_1 = new JavaKeyword("=", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_25_0_0_6_0_0_2 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_25_0_0_6_0_0_3 = new JavaContainment(org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getLocalVariable().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__INITIAL_VALUE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaSequence JAVA_25_0_0_6_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_25_0_0_6_0_0_0, JAVA_25_0_0_6_0_0_1, JAVA_25_0_0_6_0_0_2, JAVA_25_0_0_6_0_0_3); + public final static JavaChoice JAVA_25_0_0_6_0 = new JavaChoice(JavaCardinality.ONE, JAVA_25_0_0_6_0_0); + public final static JavaCompound JAVA_25_0_0_6 = new JavaCompound(JAVA_25_0_0_6_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_25_0_0_7_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_25_0_0_7_0_0_1 = new JavaContainment(org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getLocalVariable().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__ADDITIONAL_LOCAL_VARIABLES), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getAdditionalLocalVariable(), }, 0); + public final static JavaSequence JAVA_25_0_0_7_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_25_0_0_7_0_0_0, JAVA_25_0_0_7_0_0_1); + public final static JavaChoice JAVA_25_0_0_7_0 = new JavaChoice(JavaCardinality.ONE, JAVA_25_0_0_7_0_0); + public final static JavaCompound JAVA_25_0_0_7 = new JavaCompound(JAVA_25_0_0_7_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_25_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_25_0_0_0, JAVA_25_0_0_1, JAVA_25_0_0_2, JAVA_25_0_0_3, JAVA_25_0_0_4, JAVA_25_0_0_5, JAVA_25_0_0_6, JAVA_25_0_0_7); + public final static JavaChoice JAVA_25_0 = new JavaChoice(JavaCardinality.ONE, JAVA_25_0_0); + public final static JavaRule JAVA_25 = new JavaRule(org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getLocalVariable(), JAVA_25_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_26_0_0_0 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getLocalVariableStatement().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.LOCAL_VARIABLE_STATEMENT__VARIABLE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getLocalVariable(), }, 0); + public final static JavaKeyword JAVA_26_0_0_1 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_26_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_26_0_0_0, JAVA_26_0_0_1); + public final static JavaChoice JAVA_26_0 = new JavaChoice(JavaCardinality.ONE, JAVA_26_0_0); + public final static JavaRule JAVA_26 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getLocalVariableStatement(), JAVA_26_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_27_0_0_0 = new JavaPlaceholder(org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getAdditionalLocalVariable().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.ADDITIONAL_LOCAL_VARIABLE__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaContainment JAVA_27_0_0_1 = new JavaContainment(org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getAdditionalLocalVariable().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.ADDITIONAL_LOCAL_VARIABLE__ARRAY_DIMENSIONS_AFTER), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaWhiteSpace JAVA_27_0_0_2_0_0_0 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_27_0_0_2_0_0_1 = new JavaKeyword("=", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_27_0_0_2_0_0_2 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_27_0_0_2_0_0_3 = new JavaContainment(org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getAdditionalLocalVariable().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.ADDITIONAL_LOCAL_VARIABLE__INITIAL_VALUE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaSequence JAVA_27_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_27_0_0_2_0_0_0, JAVA_27_0_0_2_0_0_1, JAVA_27_0_0_2_0_0_2, JAVA_27_0_0_2_0_0_3); + public final static JavaChoice JAVA_27_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_27_0_0_2_0_0); + public final static JavaCompound JAVA_27_0_0_2 = new JavaCompound(JAVA_27_0_0_2_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_27_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_27_0_0_0, JAVA_27_0_0_1, JAVA_27_0_0_2); + public final static JavaChoice JAVA_27_0 = new JavaChoice(JavaCardinality.ONE, JAVA_27_0_0); + public final static JavaRule JAVA_27 = new JavaRule(org.emftext.language.java.variables.VariablesPackage.eINSTANCE.getAdditionalLocalVariable(), JAVA_27_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_28_0_0_0 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getField().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.FIELD__ANNOTATIONS_AND_MODIFIERS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getAnnotationInstanceOrModifier(), }, 0); + public final static JavaContainment JAVA_28_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getField().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.FIELD__TYPE_REFERENCE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaContainment JAVA_28_0_0_2 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getField().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.FIELD__ARRAY_DIMENSIONS_BEFORE), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaKeyword JAVA_28_0_0_3_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_28_0_0_3_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getField().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.FIELD__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaKeyword JAVA_28_0_0_3_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_28_0_0_3_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getField().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.FIELD__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaSequence JAVA_28_0_0_3_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_28_0_0_3_0_0_2_0_0_0, JAVA_28_0_0_3_0_0_2_0_0_1); + public final static JavaChoice JAVA_28_0_0_3_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_28_0_0_3_0_0_2_0_0); + public final static JavaCompound JAVA_28_0_0_3_0_0_2 = new JavaCompound(JAVA_28_0_0_3_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_28_0_0_3_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_28_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_28_0_0_3_0_0_0, JAVA_28_0_0_3_0_0_1, JAVA_28_0_0_3_0_0_2, JAVA_28_0_0_3_0_0_3); + public final static JavaChoice JAVA_28_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_28_0_0_3_0_0); + public final static JavaCompound JAVA_28_0_0_3 = new JavaCompound(JAVA_28_0_0_3_0, JavaCardinality.QUESTIONMARK); + public final static JavaPlaceholder JAVA_28_0_0_4 = new JavaPlaceholder(org.emftext.language.java.members.MembersPackage.eINSTANCE.getField().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.FIELD__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaContainment JAVA_28_0_0_5 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getField().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.FIELD__ARRAY_DIMENSIONS_AFTER), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaWhiteSpace JAVA_28_0_0_6_0_0_0 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_28_0_0_6_0_0_1 = new JavaKeyword("=", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_28_0_0_6_0_0_2 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_28_0_0_6_0_0_3 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getField().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.FIELD__INITIAL_VALUE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaSequence JAVA_28_0_0_6_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_28_0_0_6_0_0_0, JAVA_28_0_0_6_0_0_1, JAVA_28_0_0_6_0_0_2, JAVA_28_0_0_6_0_0_3); + public final static JavaChoice JAVA_28_0_0_6_0 = new JavaChoice(JavaCardinality.ONE, JAVA_28_0_0_6_0_0); + public final static JavaCompound JAVA_28_0_0_6 = new JavaCompound(JAVA_28_0_0_6_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_28_0_0_7_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_28_0_0_7_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getField().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.FIELD__ADDITIONAL_FIELDS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.members.MembersPackage.eINSTANCE.getAdditionalField(), }, 0); + public final static JavaSequence JAVA_28_0_0_7_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_28_0_0_7_0_0_0, JAVA_28_0_0_7_0_0_1); + public final static JavaChoice JAVA_28_0_0_7_0 = new JavaChoice(JavaCardinality.ONE, JAVA_28_0_0_7_0_0); + public final static JavaCompound JAVA_28_0_0_7 = new JavaCompound(JAVA_28_0_0_7_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_28_0_0_8 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_28_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_28_0_0_0, JAVA_28_0_0_1, JAVA_28_0_0_2, JAVA_28_0_0_3, JAVA_28_0_0_4, JAVA_28_0_0_5, JAVA_28_0_0_6, JAVA_28_0_0_7, JAVA_28_0_0_8); + public final static JavaChoice JAVA_28_0 = new JavaChoice(JavaCardinality.ONE, JAVA_28_0_0); + public final static JavaRule JAVA_28 = new JavaRule(org.emftext.language.java.members.MembersPackage.eINSTANCE.getField(), JAVA_28_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_29_0_0_0 = new JavaPlaceholder(org.emftext.language.java.members.MembersPackage.eINSTANCE.getAdditionalField().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.ADDITIONAL_FIELD__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaContainment JAVA_29_0_0_1 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getAdditionalField().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.ADDITIONAL_FIELD__ARRAY_DIMENSIONS_AFTER), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaWhiteSpace JAVA_29_0_0_2_0_0_0 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_29_0_0_2_0_0_1 = new JavaKeyword("=", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_29_0_0_2_0_0_2 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_29_0_0_2_0_0_3 = new JavaContainment(org.emftext.language.java.members.MembersPackage.eINSTANCE.getAdditionalField().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.ADDITIONAL_FIELD__INITIAL_VALUE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaSequence JAVA_29_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_29_0_0_2_0_0_0, JAVA_29_0_0_2_0_0_1, JAVA_29_0_0_2_0_0_2, JAVA_29_0_0_2_0_0_3); + public final static JavaChoice JAVA_29_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_29_0_0_2_0_0); + public final static JavaCompound JAVA_29_0_0_2 = new JavaCompound(JAVA_29_0_0_2_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_29_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_29_0_0_0, JAVA_29_0_0_1, JAVA_29_0_0_2); + public final static JavaChoice JAVA_29_0 = new JavaChoice(JavaCardinality.ONE, JAVA_29_0_0); + public final static JavaRule JAVA_29 = new JavaRule(org.emftext.language.java.members.MembersPackage.eINSTANCE.getAdditionalField(), JAVA_29_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_30_0_0_0 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_30_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_30_0_0_0); + public final static JavaChoice JAVA_30_0 = new JavaChoice(JavaCardinality.ONE, JAVA_30_0_0); + public final static JavaRule JAVA_30 = new JavaRule(org.emftext.language.java.members.MembersPackage.eINSTANCE.getEmptyMember(), JAVA_30_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_31_0_0_0 = new JavaKeyword("new", JavaCardinality.ONE); + public final static JavaKeyword JAVA_31_0_0_1_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_31_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getNewConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaKeyword JAVA_31_0_0_1_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_31_0_0_1_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getNewConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaSequence JAVA_31_0_0_1_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_31_0_0_1_0_0_2_0_0_0, JAVA_31_0_0_1_0_0_2_0_0_1); + public final static JavaChoice JAVA_31_0_0_1_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_31_0_0_1_0_0_2_0_0); + public final static JavaCompound JAVA_31_0_0_1_0_0_2 = new JavaCompound(JAVA_31_0_0_1_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_31_0_0_1_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_31_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_31_0_0_1_0_0_0, JAVA_31_0_0_1_0_0_1, JAVA_31_0_0_1_0_0_2, JAVA_31_0_0_1_0_0_3); + public final static JavaChoice JAVA_31_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_31_0_0_1_0_0); + public final static JavaCompound JAVA_31_0_0_1 = new JavaCompound(JAVA_31_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaContainment JAVA_31_0_0_2 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getNewConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__TYPE_REFERENCE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaKeyword JAVA_31_0_0_3_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_31_0_0_3_0_0_1 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getNewConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__CALL_TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaKeyword JAVA_31_0_0_3_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_31_0_0_3_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getNewConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__CALL_TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaSequence JAVA_31_0_0_3_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_31_0_0_3_0_0_2_0_0_0, JAVA_31_0_0_3_0_0_2_0_0_1); + public final static JavaChoice JAVA_31_0_0_3_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_31_0_0_3_0_0_2_0_0); + public final static JavaCompound JAVA_31_0_0_3_0_0_2 = new JavaCompound(JAVA_31_0_0_3_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_31_0_0_3_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_31_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_31_0_0_3_0_0_0, JAVA_31_0_0_3_0_0_1, JAVA_31_0_0_3_0_0_2, JAVA_31_0_0_3_0_0_3); + public final static JavaChoice JAVA_31_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_31_0_0_3_0_0); + public final static JavaCompound JAVA_31_0_0_3 = new JavaCompound(JAVA_31_0_0_3_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_31_0_0_4 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_31_0_0_5_0_0_0 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getNewConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_31_0_0_5_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_31_0_0_5_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getNewConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaSequence JAVA_31_0_0_5_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_31_0_0_5_0_0_1_0_0_0, JAVA_31_0_0_5_0_0_1_0_0_1); + public final static JavaChoice JAVA_31_0_0_5_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_31_0_0_5_0_0_1_0_0); + public final static JavaCompound JAVA_31_0_0_5_0_0_1 = new JavaCompound(JAVA_31_0_0_5_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_31_0_0_5_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_31_0_0_5_0_0_0, JAVA_31_0_0_5_0_0_1); + public final static JavaChoice JAVA_31_0_0_5_0 = new JavaChoice(JavaCardinality.ONE, JAVA_31_0_0_5_0_0); + public final static JavaCompound JAVA_31_0_0_5 = new JavaCompound(JAVA_31_0_0_5_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_31_0_0_6 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaContainment JAVA_31_0_0_7 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getNewConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__ANONYMOUS_CLASS), JavaCardinality.QUESTIONMARK, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.classifiers.ClassifiersPackage.eINSTANCE.getAnonymousClass(), }, 0); + public final static JavaKeyword JAVA_31_0_0_8_0_0_0 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaContainment JAVA_31_0_0_8_0_0_1 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getNewConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__NEXT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getReference(), }, 0); + public final static JavaSequence JAVA_31_0_0_8_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_31_0_0_8_0_0_0, JAVA_31_0_0_8_0_0_1); + public final static JavaChoice JAVA_31_0_0_8_0 = new JavaChoice(JavaCardinality.ONE, JAVA_31_0_0_8_0_0); + public final static JavaCompound JAVA_31_0_0_8 = new JavaCompound(JAVA_31_0_0_8_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_31_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_31_0_0_0, JAVA_31_0_0_1, JAVA_31_0_0_2, JAVA_31_0_0_3, JAVA_31_0_0_4, JAVA_31_0_0_5, JAVA_31_0_0_6, JAVA_31_0_0_7, JAVA_31_0_0_8); + public final static JavaChoice JAVA_31_0 = new JavaChoice(JavaCardinality.ONE, JAVA_31_0_0); + public final static JavaRule JAVA_31 = new JavaRule(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getNewConstructorCall(), JAVA_31_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_32_0_0_0_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_32_0_0_0_0_0_1 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getExplicitConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.EXPLICIT_CONSTRUCTOR_CALL__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaKeyword JAVA_32_0_0_0_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_32_0_0_0_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getExplicitConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.EXPLICIT_CONSTRUCTOR_CALL__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaSequence JAVA_32_0_0_0_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_32_0_0_0_0_0_2_0_0_0, JAVA_32_0_0_0_0_0_2_0_0_1); + public final static JavaChoice JAVA_32_0_0_0_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_32_0_0_0_0_0_2_0_0); + public final static JavaCompound JAVA_32_0_0_0_0_0_2 = new JavaCompound(JAVA_32_0_0_0_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_32_0_0_0_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_32_0_0_0_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_32_0_0_0_0_0_0, JAVA_32_0_0_0_0_0_1, JAVA_32_0_0_0_0_0_2, JAVA_32_0_0_0_0_0_3); + public final static JavaChoice JAVA_32_0_0_0_0 = new JavaChoice(JavaCardinality.ONE, JAVA_32_0_0_0_0_0); + public final static JavaCompound JAVA_32_0_0_0 = new JavaCompound(JAVA_32_0_0_0_0, JavaCardinality.QUESTIONMARK); + public final static JavaContainment JAVA_32_0_0_1 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getExplicitConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.EXPLICIT_CONSTRUCTOR_CALL__CALL_TARGET), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getSelf(), }, 0); + public final static JavaKeyword JAVA_32_0_0_2 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_32_0_0_3_0_0_0 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getExplicitConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.EXPLICIT_CONSTRUCTOR_CALL__ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_32_0_0_3_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_32_0_0_3_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getExplicitConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.EXPLICIT_CONSTRUCTOR_CALL__ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaSequence JAVA_32_0_0_3_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_32_0_0_3_0_0_1_0_0_0, JAVA_32_0_0_3_0_0_1_0_0_1); + public final static JavaChoice JAVA_32_0_0_3_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_32_0_0_3_0_0_1_0_0); + public final static JavaCompound JAVA_32_0_0_3_0_0_1 = new JavaCompound(JAVA_32_0_0_3_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_32_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_32_0_0_3_0_0_0, JAVA_32_0_0_3_0_0_1); + public final static JavaChoice JAVA_32_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_32_0_0_3_0_0); + public final static JavaCompound JAVA_32_0_0_3 = new JavaCompound(JAVA_32_0_0_3_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_32_0_0_4 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaKeyword JAVA_32_0_0_5_0_0_0 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaContainment JAVA_32_0_0_5_0_0_1 = new JavaContainment(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getExplicitConstructorCall().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.EXPLICIT_CONSTRUCTOR_CALL__NEXT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getReference(), }, 0); + public final static JavaSequence JAVA_32_0_0_5_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_32_0_0_5_0_0_0, JAVA_32_0_0_5_0_0_1); + public final static JavaChoice JAVA_32_0_0_5_0 = new JavaChoice(JavaCardinality.ONE, JAVA_32_0_0_5_0_0); + public final static JavaCompound JAVA_32_0_0_5 = new JavaCompound(JAVA_32_0_0_5_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_32_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_32_0_0_0, JAVA_32_0_0_1, JAVA_32_0_0_2, JAVA_32_0_0_3, JAVA_32_0_0_4, JAVA_32_0_0_5); + public final static JavaChoice JAVA_32_0 = new JavaChoice(JavaCardinality.ONE, JAVA_32_0_0); + public final static JavaRule JAVA_32 = new JavaRule(org.emftext.language.java.instantiations.InstantiationsPackage.eINSTANCE.getExplicitConstructorCall(), JAVA_32_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_33_0_0_0 = new JavaKeyword("new", JavaCardinality.ONE); + public final static JavaContainment JAVA_33_0_0_1 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationByValuesTyped().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_TYPED__TYPE_REFERENCE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaContainment JAVA_33_0_0_2 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationByValuesTyped().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_TYPED__ARRAY_DIMENSIONS_BEFORE), JavaCardinality.PLUS, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaContainment JAVA_33_0_0_3 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationByValuesTyped().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_TYPED__ARRAY_INITIALIZER), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInitializer(), }, 0); + public final static JavaContainment JAVA_33_0_0_4 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationByValuesTyped().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_TYPED__ARRAY_SELECTORS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArraySelector(), }, 0); + public final static JavaKeyword JAVA_33_0_0_5_0_0_0 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaContainment JAVA_33_0_0_5_0_0_1 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationByValuesTyped().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_TYPED__NEXT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getReference(), }, 0); + public final static JavaSequence JAVA_33_0_0_5_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_33_0_0_5_0_0_0, JAVA_33_0_0_5_0_0_1); + public final static JavaChoice JAVA_33_0_0_5_0 = new JavaChoice(JavaCardinality.ONE, JAVA_33_0_0_5_0_0); + public final static JavaCompound JAVA_33_0_0_5 = new JavaCompound(JAVA_33_0_0_5_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_33_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_33_0_0_0, JAVA_33_0_0_1, JAVA_33_0_0_2, JAVA_33_0_0_3, JAVA_33_0_0_4, JAVA_33_0_0_5); + public final static JavaChoice JAVA_33_0 = new JavaChoice(JavaCardinality.ONE, JAVA_33_0_0); + public final static JavaRule JAVA_33 = new JavaRule(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationByValuesTyped(), JAVA_33_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_34_0_0_0 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationByValuesUntyped().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_UNTYPED__ARRAY_INITIALIZER), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInitializer(), }, 0); + public final static JavaContainment JAVA_34_0_0_1 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationByValuesUntyped().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_UNTYPED__ARRAY_SELECTORS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArraySelector(), }, 0); + public final static JavaKeyword JAVA_34_0_0_2_0_0_0 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaContainment JAVA_34_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationByValuesUntyped().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_UNTYPED__NEXT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getReference(), }, 0); + public final static JavaSequence JAVA_34_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_34_0_0_2_0_0_0, JAVA_34_0_0_2_0_0_1); + public final static JavaChoice JAVA_34_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_34_0_0_2_0_0); + public final static JavaCompound JAVA_34_0_0_2 = new JavaCompound(JAVA_34_0_0_2_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_34_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_34_0_0_0, JAVA_34_0_0_1, JAVA_34_0_0_2); + public final static JavaChoice JAVA_34_0 = new JavaChoice(JavaCardinality.ONE, JAVA_34_0_0); + public final static JavaRule JAVA_34 = new JavaRule(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationByValuesUntyped(), JAVA_34_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_35_0_0_0 = new JavaKeyword("new", JavaCardinality.ONE); + public final static JavaContainment JAVA_35_0_0_1 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationBySize().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_SIZE__TYPE_REFERENCE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaKeyword JAVA_35_0_0_2_0_0_0 = new JavaKeyword("[", JavaCardinality.ONE); + public final static JavaContainment JAVA_35_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationBySize().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_SIZE__SIZES), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_35_0_0_2_0_0_2 = new JavaKeyword("]", JavaCardinality.ONE); + public final static JavaSequence JAVA_35_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_35_0_0_2_0_0_0, JAVA_35_0_0_2_0_0_1, JAVA_35_0_0_2_0_0_2); + public final static JavaChoice JAVA_35_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_35_0_0_2_0_0); + public final static JavaCompound JAVA_35_0_0_2 = new JavaCompound(JAVA_35_0_0_2_0, JavaCardinality.PLUS); + public final static JavaContainment JAVA_35_0_0_3 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationBySize().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_SIZE__ARRAY_DIMENSIONS_BEFORE), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaKeyword JAVA_35_0_0_4_0_0_0 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaContainment JAVA_35_0_0_4_0_0_1 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationBySize().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_SIZE__NEXT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getReference(), }, 0); + public final static JavaSequence JAVA_35_0_0_4_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_35_0_0_4_0_0_0, JAVA_35_0_0_4_0_0_1); + public final static JavaChoice JAVA_35_0_0_4_0 = new JavaChoice(JavaCardinality.ONE, JAVA_35_0_0_4_0_0); + public final static JavaCompound JAVA_35_0_0_4 = new JavaCompound(JAVA_35_0_0_4_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_35_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_35_0_0_0, JAVA_35_0_0_1, JAVA_35_0_0_2, JAVA_35_0_0_3, JAVA_35_0_0_4); + public final static JavaChoice JAVA_35_0 = new JavaChoice(JavaCardinality.ONE, JAVA_35_0_0); + public final static JavaRule JAVA_35 = new JavaRule(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInstantiationBySize(), JAVA_35_0, JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_36_0_0_0 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_36_0_0_1 = new JavaKeyword("{", JavaCardinality.ONE); + public final static JavaContainment JAVA_36_0_0_2_0_0_0 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInitializer().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INITIALIZER__INITIAL_VALUES), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInitializer(), }, 0); + public final static JavaKeyword JAVA_36_0_0_2_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_36_0_0_2_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInitializer().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INITIALIZER__INITIAL_VALUES), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInitializer(), }, 0); + public final static JavaSequence JAVA_36_0_0_2_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_36_0_0_2_0_0_1_0_0_0, JAVA_36_0_0_2_0_0_1_0_0_1); + public final static JavaChoice JAVA_36_0_0_2_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_36_0_0_2_0_0_1_0_0); + public final static JavaCompound JAVA_36_0_0_2_0_0_1 = new JavaCompound(JAVA_36_0_0_2_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_36_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_36_0_0_2_0_0_0, JAVA_36_0_0_2_0_0_1); + public final static JavaChoice JAVA_36_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_36_0_0_2_0_0); + public final static JavaCompound JAVA_36_0_0_2 = new JavaCompound(JAVA_36_0_0_2_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_36_0_0_3_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaSequence JAVA_36_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_36_0_0_3_0_0_0); + public final static JavaChoice JAVA_36_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_36_0_0_3_0_0); + public final static JavaCompound JAVA_36_0_0_3 = new JavaCompound(JAVA_36_0_0_3_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_36_0_0_4 = new JavaKeyword("}", JavaCardinality.ONE); + public final static JavaSequence JAVA_36_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_36_0_0_0, JAVA_36_0_0_1, JAVA_36_0_0_2, JAVA_36_0_0_3, JAVA_36_0_0_4); + public final static JavaChoice JAVA_36_0 = new JavaChoice(JavaCardinality.ONE, JAVA_36_0_0); + public final static JavaRule JAVA_36 = new JavaRule(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayInitializer(), JAVA_36_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_37_0_0_0 = new JavaKeyword("[", JavaCardinality.ONE); + public final static JavaContainment JAVA_37_0_0_1 = new JavaContainment(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArraySelector().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_SELECTOR__POSITION), JavaCardinality.QUESTIONMARK, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_37_0_0_2 = new JavaKeyword("]", JavaCardinality.ONE); + public final static JavaSequence JAVA_37_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_37_0_0_0, JAVA_37_0_0_1, JAVA_37_0_0_2); + public final static JavaChoice JAVA_37_0 = new JavaChoice(JavaCardinality.ONE, JAVA_37_0_0); + public final static JavaRule JAVA_37 = new JavaRule(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArraySelector(), JAVA_37_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_38_0_0_0_0_0_0 = new JavaPlaceholder(org.emftext.language.java.types.TypesPackage.eINSTANCE.getNamespaceClassifierReference().getEStructuralFeature(org.emftext.language.java.types.TypesPackage.NAMESPACE_CLASSIFIER_REFERENCE__NAMESPACES), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_38_0_0_0_0_0_1 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaSequence JAVA_38_0_0_0_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_38_0_0_0_0_0_0, JAVA_38_0_0_0_0_0_1); + public final static JavaChoice JAVA_38_0_0_0_0 = new JavaChoice(JavaCardinality.ONE, JAVA_38_0_0_0_0_0); + public final static JavaCompound JAVA_38_0_0_0 = new JavaCompound(JAVA_38_0_0_0_0, JavaCardinality.STAR); + public final static JavaContainment JAVA_38_0_0_1_0_0_0 = new JavaContainment(org.emftext.language.java.types.TypesPackage.eINSTANCE.getNamespaceClassifierReference().getEStructuralFeature(org.emftext.language.java.types.TypesPackage.NAMESPACE_CLASSIFIER_REFERENCE__CLASSIFIER_REFERENCES), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getClassifierReference(), }, 1); + public final static JavaKeyword JAVA_38_0_0_1_0_0_1 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaSequence JAVA_38_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_38_0_0_1_0_0_0, JAVA_38_0_0_1_0_0_1); + public final static JavaChoice JAVA_38_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_38_0_0_1_0_0); + public final static JavaCompound JAVA_38_0_0_1 = new JavaCompound(JAVA_38_0_0_1_0, JavaCardinality.STAR); + public final static JavaContainment JAVA_38_0_0_2 = new JavaContainment(org.emftext.language.java.types.TypesPackage.eINSTANCE.getNamespaceClassifierReference().getEStructuralFeature(org.emftext.language.java.types.TypesPackage.NAMESPACE_CLASSIFIER_REFERENCE__CLASSIFIER_REFERENCES), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getClassifierReference(), }, 0); + public final static JavaSequence JAVA_38_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_38_0_0_0, JAVA_38_0_0_1, JAVA_38_0_0_2); + public final static JavaChoice JAVA_38_0 = new JavaChoice(JavaCardinality.ONE, JAVA_38_0_0); + public final static JavaRule JAVA_38 = new JavaRule(org.emftext.language.java.types.TypesPackage.eINSTANCE.getNamespaceClassifierReference(), JAVA_38_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_39_0_0_0 = new JavaPlaceholder(org.emftext.language.java.types.TypesPackage.eINSTANCE.getClassifierReference().getEStructuralFeature(org.emftext.language.java.types.TypesPackage.CLASSIFIER_REFERENCE__TARGET), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_39_0_0_1_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_39_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.types.TypesPackage.eINSTANCE.getClassifierReference().getEStructuralFeature(org.emftext.language.java.types.TypesPackage.CLASSIFIER_REFERENCE__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaKeyword JAVA_39_0_0_1_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_39_0_0_1_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.types.TypesPackage.eINSTANCE.getClassifierReference().getEStructuralFeature(org.emftext.language.java.types.TypesPackage.CLASSIFIER_REFERENCE__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaSequence JAVA_39_0_0_1_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_39_0_0_1_0_0_2_0_0_0, JAVA_39_0_0_1_0_0_2_0_0_1); + public final static JavaChoice JAVA_39_0_0_1_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_39_0_0_1_0_0_2_0_0); + public final static JavaCompound JAVA_39_0_0_1_0_0_2 = new JavaCompound(JAVA_39_0_0_1_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_39_0_0_1_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_39_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_39_0_0_1_0_0_0, JAVA_39_0_0_1_0_0_1, JAVA_39_0_0_1_0_0_2, JAVA_39_0_0_1_0_0_3); + public final static JavaChoice JAVA_39_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_39_0_0_1_0_0); + public final static JavaCompound JAVA_39_0_0_1 = new JavaCompound(JAVA_39_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_39_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_39_0_0_0, JAVA_39_0_0_1); + public final static JavaChoice JAVA_39_0 = new JavaChoice(JavaCardinality.ONE, JAVA_39_0_0); + public final static JavaRule JAVA_39 = new JavaRule(org.emftext.language.java.types.TypesPackage.eINSTANCE.getClassifierReference(), JAVA_39_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_40_0_0_0_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_40_0_0_0_0_0_1 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getMethodCall().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__CALL_TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaKeyword JAVA_40_0_0_0_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_40_0_0_0_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getMethodCall().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__CALL_TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaSequence JAVA_40_0_0_0_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_40_0_0_0_0_0_2_0_0_0, JAVA_40_0_0_0_0_0_2_0_0_1); + public final static JavaChoice JAVA_40_0_0_0_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_40_0_0_0_0_0_2_0_0); + public final static JavaCompound JAVA_40_0_0_0_0_0_2 = new JavaCompound(JAVA_40_0_0_0_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_40_0_0_0_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_40_0_0_0_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_40_0_0_0_0_0_0, JAVA_40_0_0_0_0_0_1, JAVA_40_0_0_0_0_0_2, JAVA_40_0_0_0_0_0_3); + public final static JavaChoice JAVA_40_0_0_0_0 = new JavaChoice(JavaCardinality.ONE, JAVA_40_0_0_0_0_0); + public final static JavaCompound JAVA_40_0_0_0 = new JavaCompound(JAVA_40_0_0_0_0, JavaCardinality.QUESTIONMARK); + public final static JavaPlaceholder JAVA_40_0_0_1 = new JavaPlaceholder(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getMethodCall().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__TARGET), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_40_0_0_2_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_40_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getMethodCall().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaKeyword JAVA_40_0_0_2_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_40_0_0_2_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getMethodCall().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaSequence JAVA_40_0_0_2_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_40_0_0_2_0_0_2_0_0_0, JAVA_40_0_0_2_0_0_2_0_0_1); + public final static JavaChoice JAVA_40_0_0_2_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_40_0_0_2_0_0_2_0_0); + public final static JavaCompound JAVA_40_0_0_2_0_0_2 = new JavaCompound(JAVA_40_0_0_2_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_40_0_0_2_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_40_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_40_0_0_2_0_0_0, JAVA_40_0_0_2_0_0_1, JAVA_40_0_0_2_0_0_2, JAVA_40_0_0_2_0_0_3); + public final static JavaChoice JAVA_40_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_40_0_0_2_0_0); + public final static JavaCompound JAVA_40_0_0_2 = new JavaCompound(JAVA_40_0_0_2_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_40_0_0_3 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_40_0_0_4_0_0_0 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getMethodCall().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_40_0_0_4_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_40_0_0_4_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getMethodCall().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaSequence JAVA_40_0_0_4_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_40_0_0_4_0_0_1_0_0_0, JAVA_40_0_0_4_0_0_1_0_0_1); + public final static JavaChoice JAVA_40_0_0_4_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_40_0_0_4_0_0_1_0_0); + public final static JavaCompound JAVA_40_0_0_4_0_0_1 = new JavaCompound(JAVA_40_0_0_4_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_40_0_0_4_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_40_0_0_4_0_0_0, JAVA_40_0_0_4_0_0_1); + public final static JavaChoice JAVA_40_0_0_4_0 = new JavaChoice(JavaCardinality.ONE, JAVA_40_0_0_4_0_0); + public final static JavaCompound JAVA_40_0_0_4 = new JavaCompound(JAVA_40_0_0_4_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_40_0_0_5 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaContainment JAVA_40_0_0_6 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getMethodCall().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__ARRAY_SELECTORS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArraySelector(), }, 0); + public final static JavaKeyword JAVA_40_0_0_7_0_0_0 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaContainment JAVA_40_0_0_7_0_0_1 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getMethodCall().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__NEXT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getReference(), }, 0); + public final static JavaSequence JAVA_40_0_0_7_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_40_0_0_7_0_0_0, JAVA_40_0_0_7_0_0_1); + public final static JavaChoice JAVA_40_0_0_7_0 = new JavaChoice(JavaCardinality.ONE, JAVA_40_0_0_7_0_0); + public final static JavaCompound JAVA_40_0_0_7 = new JavaCompound(JAVA_40_0_0_7_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_40_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_40_0_0_0, JAVA_40_0_0_1, JAVA_40_0_0_2, JAVA_40_0_0_3, JAVA_40_0_0_4, JAVA_40_0_0_5, JAVA_40_0_0_6, JAVA_40_0_0_7); + public final static JavaChoice JAVA_40_0 = new JavaChoice(JavaCardinality.ONE, JAVA_40_0_0); + public final static JavaRule JAVA_40 = new JavaRule(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getMethodCall(), JAVA_40_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_41_0_0_0 = new JavaPlaceholder(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getIdentifierReference().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.IDENTIFIER_REFERENCE__TARGET), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_41_0_0_1_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaContainment JAVA_41_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getIdentifierReference().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.IDENTIFIER_REFERENCE__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaKeyword JAVA_41_0_0_1_0_0_2_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_41_0_0_1_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getIdentifierReference().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.IDENTIFIER_REFERENCE__TYPE_ARGUMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getTypeArgument(), }, 0); + public final static JavaSequence JAVA_41_0_0_1_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_41_0_0_1_0_0_2_0_0_0, JAVA_41_0_0_1_0_0_2_0_0_1); + public final static JavaChoice JAVA_41_0_0_1_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_41_0_0_1_0_0_2_0_0); + public final static JavaCompound JAVA_41_0_0_1_0_0_2 = new JavaCompound(JAVA_41_0_0_1_0_0_2_0, JavaCardinality.STAR); + public final static JavaKeyword JAVA_41_0_0_1_0_0_3 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_41_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_41_0_0_1_0_0_0, JAVA_41_0_0_1_0_0_1, JAVA_41_0_0_1_0_0_2, JAVA_41_0_0_1_0_0_3); + public final static JavaChoice JAVA_41_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_41_0_0_1_0_0); + public final static JavaCompound JAVA_41_0_0_1 = new JavaCompound(JAVA_41_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaContainment JAVA_41_0_0_2 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getIdentifierReference().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.IDENTIFIER_REFERENCE__ARRAY_SELECTORS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArraySelector(), }, 0); + public final static JavaKeyword JAVA_41_0_0_3_0_0_0 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaContainment JAVA_41_0_0_3_0_0_1 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getIdentifierReference().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.IDENTIFIER_REFERENCE__NEXT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getReference(), }, 0); + public final static JavaSequence JAVA_41_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_41_0_0_3_0_0_0, JAVA_41_0_0_3_0_0_1); + public final static JavaChoice JAVA_41_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_41_0_0_3_0_0); + public final static JavaCompound JAVA_41_0_0_3 = new JavaCompound(JAVA_41_0_0_3_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_41_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_41_0_0_0, JAVA_41_0_0_1, JAVA_41_0_0_2, JAVA_41_0_0_3); + public final static JavaChoice JAVA_41_0 = new JavaChoice(JavaCardinality.ONE, JAVA_41_0_0); + public final static JavaRule JAVA_41 = new JavaRule(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getIdentifierReference(), JAVA_41_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_42_0_0_0 = new JavaKeyword("class", JavaCardinality.ONE); + public final static JavaKeyword JAVA_42_0_0_1_0_0_0 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaContainment JAVA_42_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getReflectiveClassReference().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.REFLECTIVE_CLASS_REFERENCE__NEXT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getReference(), }, 0); + public final static JavaSequence JAVA_42_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_42_0_0_1_0_0_0, JAVA_42_0_0_1_0_0_1); + public final static JavaChoice JAVA_42_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_42_0_0_1_0_0); + public final static JavaCompound JAVA_42_0_0_1 = new JavaCompound(JAVA_42_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_42_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_42_0_0_0, JAVA_42_0_0_1); + public final static JavaChoice JAVA_42_0 = new JavaChoice(JavaCardinality.ONE, JAVA_42_0_0); + public final static JavaRule JAVA_42 = new JavaRule(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getReflectiveClassReference(), JAVA_42_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_43_0_0_0 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getSelfReference().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.SELF_REFERENCE__SELF), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getSelf(), }, 0); + public final static JavaKeyword JAVA_43_0_0_1_0_0_0 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaContainment JAVA_43_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getSelfReference().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.SELF_REFERENCE__NEXT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getReference(), }, 0); + public final static JavaSequence JAVA_43_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_43_0_0_1_0_0_0, JAVA_43_0_0_1_0_0_1); + public final static JavaChoice JAVA_43_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_43_0_0_1_0_0); + public final static JavaCompound JAVA_43_0_0_1 = new JavaCompound(JAVA_43_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_43_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_43_0_0_0, JAVA_43_0_0_1); + public final static JavaChoice JAVA_43_0 = new JavaChoice(JavaCardinality.ONE, JAVA_43_0_0); + public final static JavaRule JAVA_43 = new JavaRule(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getSelfReference(), JAVA_43_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_44_0_0_0 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getPrimitiveTypeReference().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.PRIMITIVE_TYPE_REFERENCE__PRIMITIVE_TYPE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getPrimitiveType(), }, 0); + public final static JavaContainment JAVA_44_0_0_1 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getPrimitiveTypeReference().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.PRIMITIVE_TYPE_REFERENCE__ARRAY_SELECTORS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArraySelector(), }, 0); + public final static JavaKeyword JAVA_44_0_0_2_0_0_0 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaContainment JAVA_44_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getPrimitiveTypeReference().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.PRIMITIVE_TYPE_REFERENCE__NEXT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getReference(), }, 0); + public final static JavaSequence JAVA_44_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_44_0_0_2_0_0_0, JAVA_44_0_0_2_0_0_1); + public final static JavaChoice JAVA_44_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_44_0_0_2_0_0); + public final static JavaCompound JAVA_44_0_0_2 = new JavaCompound(JAVA_44_0_0_2_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_44_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_44_0_0_0, JAVA_44_0_0_1, JAVA_44_0_0_2); + public final static JavaChoice JAVA_44_0 = new JavaChoice(JavaCardinality.ONE, JAVA_44_0_0); + public final static JavaRule JAVA_44 = new JavaRule(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getPrimitiveTypeReference(), JAVA_44_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_45_0_0_0 = new JavaKeyword("this", JavaCardinality.ONE); + public final static JavaSequence JAVA_45_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_45_0_0_0); + public final static JavaChoice JAVA_45_0 = new JavaChoice(JavaCardinality.ONE, JAVA_45_0_0); + public final static JavaRule JAVA_45 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getThis(), JAVA_45_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_46_0_0_0 = new JavaKeyword("super", JavaCardinality.ONE); + public final static JavaSequence JAVA_46_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_46_0_0_0); + public final static JavaChoice JAVA_46_0 = new JavaChoice(JavaCardinality.ONE, JAVA_46_0_0); + public final static JavaRule JAVA_46 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getSuper(), JAVA_46_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_47_0_0_0 = new JavaPlaceholder(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getStringReference().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.STRING_REFERENCE__VALUE), "STRING_LITERAL", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_47_0_0_1_0_0_0 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaContainment JAVA_47_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getStringReference().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.STRING_REFERENCE__NEXT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getReference(), }, 0); + public final static JavaSequence JAVA_47_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_47_0_0_1_0_0_0, JAVA_47_0_0_1_0_0_1); + public final static JavaChoice JAVA_47_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_47_0_0_1_0_0); + public final static JavaCompound JAVA_47_0_0_1 = new JavaCompound(JAVA_47_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_47_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_47_0_0_0, JAVA_47_0_0_1); + public final static JavaChoice JAVA_47_0 = new JavaChoice(JavaCardinality.ONE, JAVA_47_0_0); + public final static JavaRule JAVA_47 = new JavaRule(org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getStringReference(), JAVA_47_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_48_0_0_0 = new JavaContainment(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getQualifiedTypeArgument().getEStructuralFeature(org.emftext.language.java.generics.GenericsPackage.QUALIFIED_TYPE_ARGUMENT__TYPE_REFERENCE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaContainment JAVA_48_0_0_1 = new JavaContainment(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getQualifiedTypeArgument().getEStructuralFeature(org.emftext.language.java.generics.GenericsPackage.QUALIFIED_TYPE_ARGUMENT__ARRAY_DIMENSIONS_BEFORE), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaSequence JAVA_48_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_48_0_0_0, JAVA_48_0_0_1); + public final static JavaChoice JAVA_48_0 = new JavaChoice(JavaCardinality.ONE, JAVA_48_0_0); + public final static JavaRule JAVA_48 = new JavaRule(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getQualifiedTypeArgument(), JAVA_48_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_49_0_0_0 = new JavaKeyword("?", JavaCardinality.ONE); + public final static JavaSequence JAVA_49_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_49_0_0_0); + public final static JavaChoice JAVA_49_0 = new JavaChoice(JavaCardinality.ONE, JAVA_49_0_0); + public final static JavaRule JAVA_49 = new JavaRule(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getUnknownTypeArgument(), JAVA_49_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_50_0_0_0 = new JavaKeyword("?", JavaCardinality.ONE); + public final static JavaKeyword JAVA_50_0_0_1 = new JavaKeyword("extends", JavaCardinality.ONE); + public final static JavaContainment JAVA_50_0_0_2 = new JavaContainment(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getExtendsTypeArgument().getEStructuralFeature(org.emftext.language.java.generics.GenericsPackage.EXTENDS_TYPE_ARGUMENT__EXTEND_TYPES), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaKeyword JAVA_50_0_0_3_0_0_0 = new JavaKeyword("&", JavaCardinality.ONE); + public final static JavaContainment JAVA_50_0_0_3_0_0_1 = new JavaContainment(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getExtendsTypeArgument().getEStructuralFeature(org.emftext.language.java.generics.GenericsPackage.EXTENDS_TYPE_ARGUMENT__EXTEND_TYPES), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaSequence JAVA_50_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_50_0_0_3_0_0_0, JAVA_50_0_0_3_0_0_1); + public final static JavaChoice JAVA_50_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_50_0_0_3_0_0); + public final static JavaCompound JAVA_50_0_0_3 = new JavaCompound(JAVA_50_0_0_3_0, JavaCardinality.STAR); + public final static JavaContainment JAVA_50_0_0_4 = new JavaContainment(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getExtendsTypeArgument().getEStructuralFeature(org.emftext.language.java.generics.GenericsPackage.EXTENDS_TYPE_ARGUMENT__ARRAY_DIMENSIONS_BEFORE), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaSequence JAVA_50_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_50_0_0_0, JAVA_50_0_0_1, JAVA_50_0_0_2, JAVA_50_0_0_3, JAVA_50_0_0_4); + public final static JavaChoice JAVA_50_0 = new JavaChoice(JavaCardinality.ONE, JAVA_50_0_0); + public final static JavaRule JAVA_50 = new JavaRule(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getExtendsTypeArgument(), JAVA_50_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_51_0_0_0 = new JavaKeyword("?", JavaCardinality.ONE); + public final static JavaKeyword JAVA_51_0_0_1 = new JavaKeyword("super", JavaCardinality.ONE); + public final static JavaContainment JAVA_51_0_0_2 = new JavaContainment(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getSuperTypeArgument().getEStructuralFeature(org.emftext.language.java.generics.GenericsPackage.SUPER_TYPE_ARGUMENT__SUPER_TYPE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaContainment JAVA_51_0_0_3 = new JavaContainment(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getSuperTypeArgument().getEStructuralFeature(org.emftext.language.java.generics.GenericsPackage.SUPER_TYPE_ARGUMENT__ARRAY_DIMENSIONS_BEFORE), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaSequence JAVA_51_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_51_0_0_0, JAVA_51_0_0_1, JAVA_51_0_0_2, JAVA_51_0_0_3); + public final static JavaChoice JAVA_51_0 = new JavaChoice(JavaCardinality.ONE, JAVA_51_0_0); + public final static JavaRule JAVA_51 = new JavaRule(org.emftext.language.java.generics.GenericsPackage.eINSTANCE.getSuperTypeArgument(), JAVA_51_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_52_0_0_0 = new JavaKeyword("assert", JavaCardinality.ONE); + public final static JavaContainment JAVA_52_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getAssert().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.ASSERT__CONDITION), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_52_0_0_2_0_0_0 = new JavaKeyword(":", JavaCardinality.ONE); + public final static JavaContainment JAVA_52_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getAssert().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.ASSERT__ERROR_MESSAGE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaSequence JAVA_52_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_52_0_0_2_0_0_0, JAVA_52_0_0_2_0_0_1); + public final static JavaChoice JAVA_52_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_52_0_0_2_0_0); + public final static JavaCompound JAVA_52_0_0_2 = new JavaCompound(JAVA_52_0_0_2_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_52_0_0_3 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_52_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_52_0_0_0, JAVA_52_0_0_1, JAVA_52_0_0_2, JAVA_52_0_0_3); + public final static JavaChoice JAVA_52_0 = new JavaChoice(JavaCardinality.ONE, JAVA_52_0_0); + public final static JavaRule JAVA_52 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getAssert(), JAVA_52_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_53_0_0_0 = new JavaKeyword("if", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_53_0_0_1 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_53_0_0_2 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_53_0_0_3 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getCondition().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.CONDITION__CONDITION), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_53_0_0_4 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaContainment JAVA_53_0_0_5 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getCondition().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.CONDITION__STATEMENT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaKeyword JAVA_53_0_0_6_0_0_0 = new JavaKeyword("else", JavaCardinality.ONE); + public final static JavaContainment JAVA_53_0_0_6_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getCondition().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.CONDITION__ELSE_STATEMENT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaSequence JAVA_53_0_0_6_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_53_0_0_6_0_0_0, JAVA_53_0_0_6_0_0_1); + public final static JavaChoice JAVA_53_0_0_6_0 = new JavaChoice(JavaCardinality.ONE, JAVA_53_0_0_6_0_0); + public final static JavaCompound JAVA_53_0_0_6 = new JavaCompound(JAVA_53_0_0_6_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_53_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_53_0_0_0, JAVA_53_0_0_1, JAVA_53_0_0_2, JAVA_53_0_0_3, JAVA_53_0_0_4, JAVA_53_0_0_5, JAVA_53_0_0_6); + public final static JavaChoice JAVA_53_0 = new JavaChoice(JavaCardinality.ONE, JAVA_53_0_0); + public final static JavaRule JAVA_53 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getCondition(), JAVA_53_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_54_0_0_0 = new JavaKeyword("for", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_54_0_0_1 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_54_0_0_2 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_54_0_0_3 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getForLoop().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.FOR_LOOP__INIT), JavaCardinality.QUESTIONMARK, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getForLoopInitializer(), }, 0); + public final static JavaKeyword JAVA_54_0_0_4 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaContainment JAVA_54_0_0_5 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getForLoop().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.FOR_LOOP__CONDITION), JavaCardinality.QUESTIONMARK, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_54_0_0_6 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaContainment JAVA_54_0_0_7_0_0_0 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getForLoop().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.FOR_LOOP__UPDATES), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_54_0_0_7_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_54_0_0_7_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getForLoop().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.FOR_LOOP__UPDATES), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaSequence JAVA_54_0_0_7_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_54_0_0_7_0_0_1_0_0_0, JAVA_54_0_0_7_0_0_1_0_0_1); + public final static JavaChoice JAVA_54_0_0_7_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_54_0_0_7_0_0_1_0_0); + public final static JavaCompound JAVA_54_0_0_7_0_0_1 = new JavaCompound(JAVA_54_0_0_7_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_54_0_0_7_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_54_0_0_7_0_0_0, JAVA_54_0_0_7_0_0_1); + public final static JavaChoice JAVA_54_0_0_7_0 = new JavaChoice(JavaCardinality.ONE, JAVA_54_0_0_7_0_0); + public final static JavaCompound JAVA_54_0_0_7 = new JavaCompound(JAVA_54_0_0_7_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_54_0_0_8 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaContainment JAVA_54_0_0_9 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getForLoop().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.FOR_LOOP__STATEMENT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaSequence JAVA_54_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_54_0_0_0, JAVA_54_0_0_1, JAVA_54_0_0_2, JAVA_54_0_0_3, JAVA_54_0_0_4, JAVA_54_0_0_5, JAVA_54_0_0_6, JAVA_54_0_0_7, JAVA_54_0_0_8, JAVA_54_0_0_9); + public final static JavaChoice JAVA_54_0 = new JavaChoice(JavaCardinality.ONE, JAVA_54_0_0); + public final static JavaRule JAVA_54 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getForLoop(), JAVA_54_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_55_0_0_0 = new JavaKeyword("for", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_55_0_0_1 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_55_0_0_2 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_55_0_0_3 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getForEachLoop().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.FOR_EACH_LOOP__NEXT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getOrdinaryParameter(), }, 0); + public final static JavaKeyword JAVA_55_0_0_4 = new JavaKeyword(":", JavaCardinality.ONE); + public final static JavaContainment JAVA_55_0_0_5 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getForEachLoop().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.FOR_EACH_LOOP__COLLECTION), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_55_0_0_6 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaContainment JAVA_55_0_0_7 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getForEachLoop().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.FOR_EACH_LOOP__STATEMENT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaSequence JAVA_55_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_55_0_0_0, JAVA_55_0_0_1, JAVA_55_0_0_2, JAVA_55_0_0_3, JAVA_55_0_0_4, JAVA_55_0_0_5, JAVA_55_0_0_6, JAVA_55_0_0_7); + public final static JavaChoice JAVA_55_0 = new JavaChoice(JavaCardinality.ONE, JAVA_55_0_0); + public final static JavaRule JAVA_55 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getForEachLoop(), JAVA_55_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_56_0_0_0 = new JavaKeyword("while", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_56_0_0_1 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_56_0_0_2 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_56_0_0_3 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getWhileLoop().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.WHILE_LOOP__CONDITION), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_56_0_0_4 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaContainment JAVA_56_0_0_5 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getWhileLoop().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.WHILE_LOOP__STATEMENT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaSequence JAVA_56_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_56_0_0_0, JAVA_56_0_0_1, JAVA_56_0_0_2, JAVA_56_0_0_3, JAVA_56_0_0_4, JAVA_56_0_0_5); + public final static JavaChoice JAVA_56_0 = new JavaChoice(JavaCardinality.ONE, JAVA_56_0_0); + public final static JavaRule JAVA_56 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getWhileLoop(), JAVA_56_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_57_0_0_0 = new JavaKeyword("do", JavaCardinality.ONE); + public final static JavaContainment JAVA_57_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getDoWhileLoop().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.DO_WHILE_LOOP__STATEMENT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaKeyword JAVA_57_0_0_2 = new JavaKeyword("while", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_57_0_0_3 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_57_0_0_4 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_57_0_0_5 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getDoWhileLoop().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.DO_WHILE_LOOP__CONDITION), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_57_0_0_6 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaKeyword JAVA_57_0_0_7 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_57_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_57_0_0_0, JAVA_57_0_0_1, JAVA_57_0_0_2, JAVA_57_0_0_3, JAVA_57_0_0_4, JAVA_57_0_0_5, JAVA_57_0_0_6, JAVA_57_0_0_7); + public final static JavaChoice JAVA_57_0 = new JavaChoice(JavaCardinality.ONE, JAVA_57_0_0); + public final static JavaRule JAVA_57 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getDoWhileLoop(), JAVA_57_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_58_0_0_0 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_58_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_58_0_0_0); + public final static JavaChoice JAVA_58_0 = new JavaChoice(JavaCardinality.ONE, JAVA_58_0_0); + public final static JavaRule JAVA_58 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getEmptyStatement(), JAVA_58_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_59_0_0_0 = new JavaKeyword("synchronized", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_59_0_0_1 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_59_0_0_2 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_59_0_0_3 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getSynchronizedBlock().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.SYNCHRONIZED_BLOCK__LOCK_PROVIDER), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_59_0_0_4 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_59_0_0_5 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_59_0_0_6 = new JavaKeyword("{", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_59_0_0_7_0_0_0 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaContainment JAVA_59_0_0_7_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getSynchronizedBlock().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.SYNCHRONIZED_BLOCK__STATEMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaSequence JAVA_59_0_0_7_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_59_0_0_7_0_0_0, JAVA_59_0_0_7_0_0_1); + public final static JavaChoice JAVA_59_0_0_7_0 = new JavaChoice(JavaCardinality.ONE, JAVA_59_0_0_7_0_0); + public final static JavaCompound JAVA_59_0_0_7 = new JavaCompound(JAVA_59_0_0_7_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_59_0_0_8 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_59_0_0_9 = new JavaKeyword("}", JavaCardinality.ONE); + public final static JavaSequence JAVA_59_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_59_0_0_0, JAVA_59_0_0_1, JAVA_59_0_0_2, JAVA_59_0_0_3, JAVA_59_0_0_4, JAVA_59_0_0_5, JAVA_59_0_0_6, JAVA_59_0_0_7, JAVA_59_0_0_8, JAVA_59_0_0_9); + public final static JavaChoice JAVA_59_0 = new JavaChoice(JavaCardinality.ONE, JAVA_59_0_0); + public final static JavaRule JAVA_59 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getSynchronizedBlock(), JAVA_59_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_60_0_0_0 = new JavaKeyword("try", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_60_0_0_1 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_60_0_0_2 = new JavaKeyword("{", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_60_0_0_3_0_0_0 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaContainment JAVA_60_0_0_3_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getTryBlock().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.TRY_BLOCK__STATEMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaSequence JAVA_60_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_60_0_0_3_0_0_0, JAVA_60_0_0_3_0_0_1); + public final static JavaChoice JAVA_60_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_60_0_0_3_0_0); + public final static JavaCompound JAVA_60_0_0_3 = new JavaCompound(JAVA_60_0_0_3_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_60_0_0_4 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_60_0_0_5 = new JavaKeyword("}", JavaCardinality.ONE); + public final static JavaContainment JAVA_60_0_0_6 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getTryBlock().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.TRY_BLOCK__CATCHE_BLOCKS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getCatchBlock(), }, 0); + public final static JavaKeyword JAVA_60_0_0_7_0_0_0 = new JavaKeyword("finally", JavaCardinality.ONE); + public final static JavaContainment JAVA_60_0_0_7_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getTryBlock().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.TRY_BLOCK__FINALLY_BLOCK), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getBlock(), }, 0); + public final static JavaSequence JAVA_60_0_0_7_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_60_0_0_7_0_0_0, JAVA_60_0_0_7_0_0_1); + public final static JavaChoice JAVA_60_0_0_7_0 = new JavaChoice(JavaCardinality.ONE, JAVA_60_0_0_7_0_0); + public final static JavaCompound JAVA_60_0_0_7 = new JavaCompound(JAVA_60_0_0_7_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_60_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_60_0_0_0, JAVA_60_0_0_1, JAVA_60_0_0_2, JAVA_60_0_0_3, JAVA_60_0_0_4, JAVA_60_0_0_5, JAVA_60_0_0_6, JAVA_60_0_0_7); + public final static JavaChoice JAVA_60_0 = new JavaChoice(JavaCardinality.ONE, JAVA_60_0_0); + public final static JavaRule JAVA_60 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getTryBlock(), JAVA_60_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_61_0_0_0 = new JavaKeyword("catch", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_61_0_0_1 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_61_0_0_2 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_61_0_0_3 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getCatchBlock().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.CATCH_BLOCK__PARAMETER), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.parameters.ParametersPackage.eINSTANCE.getOrdinaryParameter(), }, 0); + public final static JavaKeyword JAVA_61_0_0_4 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_61_0_0_5 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_61_0_0_6 = new JavaKeyword("{", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_61_0_0_7_0_0_0 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaContainment JAVA_61_0_0_7_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getCatchBlock().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.CATCH_BLOCK__STATEMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaSequence JAVA_61_0_0_7_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_61_0_0_7_0_0_0, JAVA_61_0_0_7_0_0_1); + public final static JavaChoice JAVA_61_0_0_7_0 = new JavaChoice(JavaCardinality.ONE, JAVA_61_0_0_7_0_0); + public final static JavaCompound JAVA_61_0_0_7 = new JavaCompound(JAVA_61_0_0_7_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_61_0_0_8 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_61_0_0_9 = new JavaKeyword("}", JavaCardinality.ONE); + public final static JavaSequence JAVA_61_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_61_0_0_0, JAVA_61_0_0_1, JAVA_61_0_0_2, JAVA_61_0_0_3, JAVA_61_0_0_4, JAVA_61_0_0_5, JAVA_61_0_0_6, JAVA_61_0_0_7, JAVA_61_0_0_8, JAVA_61_0_0_9); + public final static JavaChoice JAVA_61_0 = new JavaChoice(JavaCardinality.ONE, JAVA_61_0_0); + public final static JavaRule JAVA_61 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getCatchBlock(), JAVA_61_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_62_0_0_0 = new JavaKeyword("switch", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_62_0_0_1 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_62_0_0_2 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_62_0_0_3 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getSwitch().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.SWITCH__VARIABLE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_62_0_0_4 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_62_0_0_5 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaKeyword JAVA_62_0_0_6 = new JavaKeyword("{", JavaCardinality.ONE); + public final static JavaContainment JAVA_62_0_0_7_0_0_0 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getSwitch().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.SWITCH__CASES), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getSwitchCase(), }, 0); + public final static JavaSequence JAVA_62_0_0_7_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_62_0_0_7_0_0_0); + public final static JavaChoice JAVA_62_0_0_7_0 = new JavaChoice(JavaCardinality.ONE, JAVA_62_0_0_7_0_0); + public final static JavaCompound JAVA_62_0_0_7 = new JavaCompound(JAVA_62_0_0_7_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_62_0_0_8 = new JavaKeyword("}", JavaCardinality.ONE); + public final static JavaSequence JAVA_62_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_62_0_0_0, JAVA_62_0_0_1, JAVA_62_0_0_2, JAVA_62_0_0_3, JAVA_62_0_0_4, JAVA_62_0_0_5, JAVA_62_0_0_6, JAVA_62_0_0_7, JAVA_62_0_0_8); + public final static JavaChoice JAVA_62_0 = new JavaChoice(JavaCardinality.ONE, JAVA_62_0_0); + public final static JavaRule JAVA_62 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getSwitch(), JAVA_62_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_63_0_0_0 = new JavaKeyword("case", JavaCardinality.ONE); + public final static JavaContainment JAVA_63_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getNormalSwitchCase().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.NORMAL_SWITCH_CASE__CONDITION), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_63_0_0_2 = new JavaKeyword(":", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_63_0_0_3_0_0_0 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaContainment JAVA_63_0_0_3_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getNormalSwitchCase().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.NORMAL_SWITCH_CASE__STATEMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaSequence JAVA_63_0_0_3_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_63_0_0_3_0_0_0, JAVA_63_0_0_3_0_0_1); + public final static JavaChoice JAVA_63_0_0_3_0 = new JavaChoice(JavaCardinality.ONE, JAVA_63_0_0_3_0_0); + public final static JavaCompound JAVA_63_0_0_3 = new JavaCompound(JAVA_63_0_0_3_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_63_0_0_4 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_63_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_63_0_0_0, JAVA_63_0_0_1, JAVA_63_0_0_2, JAVA_63_0_0_3, JAVA_63_0_0_4); + public final static JavaChoice JAVA_63_0 = new JavaChoice(JavaCardinality.ONE, JAVA_63_0_0); + public final static JavaRule JAVA_63 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getNormalSwitchCase(), JAVA_63_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_64_0_0_0 = new JavaKeyword("default", JavaCardinality.ONE); + public final static JavaKeyword JAVA_64_0_0_1 = new JavaKeyword(":", JavaCardinality.ONE); + public final static JavaLineBreak JAVA_64_0_0_2_0_0_0 = new JavaLineBreak(JavaCardinality.ONE, 1); + public final static JavaContainment JAVA_64_0_0_2_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getDefaultSwitchCase().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.DEFAULT_SWITCH_CASE__STATEMENTS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaSequence JAVA_64_0_0_2_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_64_0_0_2_0_0_0, JAVA_64_0_0_2_0_0_1); + public final static JavaChoice JAVA_64_0_0_2_0 = new JavaChoice(JavaCardinality.ONE, JAVA_64_0_0_2_0_0); + public final static JavaCompound JAVA_64_0_0_2 = new JavaCompound(JAVA_64_0_0_2_0, JavaCardinality.STAR); + public final static JavaLineBreak JAVA_64_0_0_3 = new JavaLineBreak(JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_64_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_64_0_0_0, JAVA_64_0_0_1, JAVA_64_0_0_2, JAVA_64_0_0_3); + public final static JavaChoice JAVA_64_0 = new JavaChoice(JavaCardinality.ONE, JAVA_64_0_0); + public final static JavaRule JAVA_64 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getDefaultSwitchCase(), JAVA_64_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_65_0_0_0 = new JavaKeyword("return", JavaCardinality.ONE); + public final static JavaContainment JAVA_65_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getReturn().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.RETURN__RETURN_VALUE), JavaCardinality.QUESTIONMARK, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_65_0_0_2 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_65_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_65_0_0_0, JAVA_65_0_0_1, JAVA_65_0_0_2); + public final static JavaChoice JAVA_65_0 = new JavaChoice(JavaCardinality.ONE, JAVA_65_0_0); + public final static JavaRule JAVA_65 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getReturn(), JAVA_65_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_66_0_0_0 = new JavaKeyword("throw", JavaCardinality.ONE); + public final static JavaContainment JAVA_66_0_0_1 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getThrow().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.THROW__THROWABLE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_66_0_0_2 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_66_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_66_0_0_0, JAVA_66_0_0_1, JAVA_66_0_0_2); + public final static JavaChoice JAVA_66_0 = new JavaChoice(JavaCardinality.ONE, JAVA_66_0_0); + public final static JavaRule JAVA_66 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getThrow(), JAVA_66_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_67_0_0_0 = new JavaKeyword("break", JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_67_0_0_1_0_0_0 = new JavaPlaceholder(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getBreak().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.BREAK__TARGET), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_67_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_67_0_0_1_0_0_0); + public final static JavaChoice JAVA_67_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_67_0_0_1_0_0); + public final static JavaCompound JAVA_67_0_0_1 = new JavaCompound(JAVA_67_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_67_0_0_2 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_67_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_67_0_0_0, JAVA_67_0_0_1, JAVA_67_0_0_2); + public final static JavaChoice JAVA_67_0 = new JavaChoice(JavaCardinality.ONE, JAVA_67_0_0); + public final static JavaRule JAVA_67 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getBreak(), JAVA_67_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_68_0_0_0 = new JavaKeyword("continue", JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_68_0_0_1_0_0_0 = new JavaPlaceholder(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getContinue().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.CONTINUE__TARGET), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_68_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_68_0_0_1_0_0_0); + public final static JavaChoice JAVA_68_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_68_0_0_1_0_0); + public final static JavaCompound JAVA_68_0_0_1 = new JavaCompound(JAVA_68_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaKeyword JAVA_68_0_0_2 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_68_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_68_0_0_0, JAVA_68_0_0_1, JAVA_68_0_0_2); + public final static JavaChoice JAVA_68_0 = new JavaChoice(JavaCardinality.ONE, JAVA_68_0_0); + public final static JavaRule JAVA_68 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getContinue(), JAVA_68_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_69_0_0_0 = new JavaPlaceholder(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getJumpLabel().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.JUMP_LABEL__NAME), "IDENTIFIER", JavaCardinality.ONE, 0); + public final static JavaKeyword JAVA_69_0_0_1 = new JavaKeyword(":", JavaCardinality.ONE); + public final static JavaContainment JAVA_69_0_0_2 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getJumpLabel().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.JUMP_LABEL__STATEMENT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getStatement(), }, 0); + public final static JavaSequence JAVA_69_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_69_0_0_0, JAVA_69_0_0_1, JAVA_69_0_0_2); + public final static JavaChoice JAVA_69_0 = new JavaChoice(JavaCardinality.ONE, JAVA_69_0_0); + public final static JavaRule JAVA_69 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getJumpLabel(), JAVA_69_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_70_0_0_0 = new JavaContainment(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getExpressionStatement().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.EXPRESSION_STATEMENT__EXPRESSION), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_70_0_0_1 = new JavaKeyword(";", JavaCardinality.ONE); + public final static JavaSequence JAVA_70_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_70_0_0_0, JAVA_70_0_0_1); + public final static JavaChoice JAVA_70_0 = new JavaChoice(JavaCardinality.ONE, JAVA_70_0_0); + public final static JavaRule JAVA_70 = new JavaRule(org.emftext.language.java.statements.StatementsPackage.eINSTANCE.getExpressionStatement(), JAVA_70_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_71_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getExpressionList().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.EXPRESSION_LIST__EXPRESSIONS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_71_0_0_1_0_0_0 = new JavaKeyword(",", JavaCardinality.ONE); + public final static JavaContainment JAVA_71_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getExpressionList().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.EXPRESSION_LIST__EXPRESSIONS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaSequence JAVA_71_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_71_0_0_1_0_0_0, JAVA_71_0_0_1_0_0_1); + public final static JavaChoice JAVA_71_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_71_0_0_1_0_0); + public final static JavaCompound JAVA_71_0_0_1 = new JavaCompound(JAVA_71_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_71_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_71_0_0_0, JAVA_71_0_0_1); + public final static JavaChoice JAVA_71_0 = new JavaChoice(JavaCardinality.ONE, JAVA_71_0_0); + public final static JavaRule JAVA_71 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getExpressionList(), JAVA_71_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_72_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.ASSIGNMENT_EXPRESSION__CHILD), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalExpression(), }, 0); + public final static JavaWhiteSpace JAVA_72_0_0_1_0_0_0 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_72_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.ASSIGNMENT_EXPRESSION__ASSIGNMENT_OPERATOR), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAssignmentOperator(), }, 0); + public final static JavaWhiteSpace JAVA_72_0_0_1_0_0_2 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_72_0_0_1_0_0_3 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.ASSIGNMENT_EXPRESSION__VALUE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaSequence JAVA_72_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_72_0_0_1_0_0_0, JAVA_72_0_0_1_0_0_1, JAVA_72_0_0_1_0_0_2, JAVA_72_0_0_1_0_0_3); + public final static JavaChoice JAVA_72_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_72_0_0_1_0_0); + public final static JavaCompound JAVA_72_0_0_1 = new JavaCompound(JAVA_72_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_72_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_72_0_0_0, JAVA_72_0_0_1); + public final static JavaChoice JAVA_72_0 = new JavaChoice(JavaCardinality.ONE, JAVA_72_0_0); + public final static JavaRule JAVA_72 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), JAVA_72_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_73_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CONDITIONAL_EXPRESSION__CHILD), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalOrExpression(), }, 0); + public final static JavaKeyword JAVA_73_0_0_1_0_0_0 = new JavaKeyword("?", JavaCardinality.ONE); + public final static JavaContainment JAVA_73_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CONDITIONAL_EXPRESSION__EXPRESSION_IF), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_73_0_0_1_0_0_2 = new JavaKeyword(":", JavaCardinality.ONE); + public final static JavaContainment JAVA_73_0_0_1_0_0_3 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CONDITIONAL_EXPRESSION__EXPRESSION_ELSE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalExpression(), }, 0); + public final static JavaSequence JAVA_73_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_73_0_0_1_0_0_0, JAVA_73_0_0_1_0_0_1, JAVA_73_0_0_1_0_0_2, JAVA_73_0_0_1_0_0_3); + public final static JavaChoice JAVA_73_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_73_0_0_1_0_0); + public final static JavaCompound JAVA_73_0_0_1 = new JavaCompound(JAVA_73_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_73_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_73_0_0_0, JAVA_73_0_0_1); + public final static JavaChoice JAVA_73_0 = new JavaChoice(JavaCardinality.ONE, JAVA_73_0_0); + public final static JavaRule JAVA_73 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalExpression(), JAVA_73_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_74_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalOrExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CONDITIONAL_OR_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalAndExpression(), }, 0); + public final static JavaKeyword JAVA_74_0_0_1_0_0_0 = new JavaKeyword("||", JavaCardinality.ONE); + public final static JavaContainment JAVA_74_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalOrExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CONDITIONAL_OR_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalAndExpression(), }, 0); + public final static JavaSequence JAVA_74_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_74_0_0_1_0_0_0, JAVA_74_0_0_1_0_0_1); + public final static JavaChoice JAVA_74_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_74_0_0_1_0_0); + public final static JavaCompound JAVA_74_0_0_1 = new JavaCompound(JAVA_74_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_74_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_74_0_0_0, JAVA_74_0_0_1); + public final static JavaChoice JAVA_74_0 = new JavaChoice(JavaCardinality.ONE, JAVA_74_0_0); + public final static JavaRule JAVA_74 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalOrExpression(), JAVA_74_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_75_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalAndExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CONDITIONAL_AND_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getInclusiveOrExpression(), }, 0); + public final static JavaKeyword JAVA_75_0_0_1_0_0_0 = new JavaKeyword("&&", JavaCardinality.ONE); + public final static JavaContainment JAVA_75_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalAndExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CONDITIONAL_AND_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getInclusiveOrExpression(), }, 0); + public final static JavaSequence JAVA_75_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_75_0_0_1_0_0_0, JAVA_75_0_0_1_0_0_1); + public final static JavaChoice JAVA_75_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_75_0_0_1_0_0); + public final static JavaCompound JAVA_75_0_0_1 = new JavaCompound(JAVA_75_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_75_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_75_0_0_0, JAVA_75_0_0_1); + public final static JavaChoice JAVA_75_0 = new JavaChoice(JavaCardinality.ONE, JAVA_75_0_0); + public final static JavaRule JAVA_75 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getConditionalAndExpression(), JAVA_75_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_76_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getInclusiveOrExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.INCLUSIVE_OR_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getExclusiveOrExpression(), }, 0); + public final static JavaKeyword JAVA_76_0_0_1_0_0_0 = new JavaKeyword("|", JavaCardinality.ONE); + public final static JavaContainment JAVA_76_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getInclusiveOrExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.INCLUSIVE_OR_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getExclusiveOrExpression(), }, 0); + public final static JavaSequence JAVA_76_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_76_0_0_1_0_0_0, JAVA_76_0_0_1_0_0_1); + public final static JavaChoice JAVA_76_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_76_0_0_1_0_0); + public final static JavaCompound JAVA_76_0_0_1 = new JavaCompound(JAVA_76_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_76_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_76_0_0_0, JAVA_76_0_0_1); + public final static JavaChoice JAVA_76_0 = new JavaChoice(JavaCardinality.ONE, JAVA_76_0_0); + public final static JavaRule JAVA_76 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getInclusiveOrExpression(), JAVA_76_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_77_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getExclusiveOrExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.EXCLUSIVE_OR_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAndExpression(), }, 0); + public final static JavaKeyword JAVA_77_0_0_1_0_0_0 = new JavaKeyword("^", JavaCardinality.ONE); + public final static JavaContainment JAVA_77_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getExclusiveOrExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.EXCLUSIVE_OR_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAndExpression(), }, 0); + public final static JavaSequence JAVA_77_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_77_0_0_1_0_0_0, JAVA_77_0_0_1_0_0_1); + public final static JavaChoice JAVA_77_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_77_0_0_1_0_0); + public final static JavaCompound JAVA_77_0_0_1 = new JavaCompound(JAVA_77_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_77_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_77_0_0_0, JAVA_77_0_0_1); + public final static JavaChoice JAVA_77_0 = new JavaChoice(JavaCardinality.ONE, JAVA_77_0_0); + public final static JavaRule JAVA_77 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getExclusiveOrExpression(), JAVA_77_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_78_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAndExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.AND_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getEqualityExpression(), }, 0); + public final static JavaKeyword JAVA_78_0_0_1_0_0_0 = new JavaKeyword("&", JavaCardinality.ONE); + public final static JavaContainment JAVA_78_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAndExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.AND_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getEqualityExpression(), }, 0); + public final static JavaSequence JAVA_78_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_78_0_0_1_0_0_0, JAVA_78_0_0_1_0_0_1); + public final static JavaChoice JAVA_78_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_78_0_0_1_0_0); + public final static JavaCompound JAVA_78_0_0_1 = new JavaCompound(JAVA_78_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_78_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_78_0_0_0, JAVA_78_0_0_1); + public final static JavaChoice JAVA_78_0 = new JavaChoice(JavaCardinality.ONE, JAVA_78_0_0); + public final static JavaRule JAVA_78 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAndExpression(), JAVA_78_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_79_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getEqualityExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.EQUALITY_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getInstanceOfExpression(), }, 0); + public final static JavaWhiteSpace JAVA_79_0_0_1_0_0_0 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_79_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getEqualityExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.EQUALITY_EXPRESSION__EQUALITY_OPERATORS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getEqualityOperator(), }, 0); + public final static JavaWhiteSpace JAVA_79_0_0_1_0_0_2 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_79_0_0_1_0_0_3 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getEqualityExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.EQUALITY_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getInstanceOfExpression(), }, 0); + public final static JavaSequence JAVA_79_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_79_0_0_1_0_0_0, JAVA_79_0_0_1_0_0_1, JAVA_79_0_0_1_0_0_2, JAVA_79_0_0_1_0_0_3); + public final static JavaChoice JAVA_79_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_79_0_0_1_0_0); + public final static JavaCompound JAVA_79_0_0_1 = new JavaCompound(JAVA_79_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_79_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_79_0_0_0, JAVA_79_0_0_1); + public final static JavaChoice JAVA_79_0 = new JavaChoice(JavaCardinality.ONE, JAVA_79_0_0); + public final static JavaRule JAVA_79 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getEqualityExpression(), JAVA_79_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_80_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getInstanceOfExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.INSTANCE_OF_EXPRESSION__CHILD), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getRelationExpression(), }, 0); + public final static JavaKeyword JAVA_80_0_0_1_0_0_0 = new JavaKeyword("instanceof", JavaCardinality.ONE); + public final static JavaContainment JAVA_80_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getInstanceOfExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.INSTANCE_OF_EXPRESSION__TYPE_REFERENCE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaContainment JAVA_80_0_0_1_0_0_2 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getInstanceOfExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.INSTANCE_OF_EXPRESSION__ARRAY_DIMENSIONS_BEFORE), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaSequence JAVA_80_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_80_0_0_1_0_0_0, JAVA_80_0_0_1_0_0_1, JAVA_80_0_0_1_0_0_2); + public final static JavaChoice JAVA_80_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_80_0_0_1_0_0); + public final static JavaCompound JAVA_80_0_0_1 = new JavaCompound(JAVA_80_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_80_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_80_0_0_0, JAVA_80_0_0_1); + public final static JavaChoice JAVA_80_0 = new JavaChoice(JavaCardinality.ONE, JAVA_80_0_0); + public final static JavaRule JAVA_80 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getInstanceOfExpression(), JAVA_80_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_81_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getRelationExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.RELATION_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getShiftExpression(), }, 0); + public final static JavaWhiteSpace JAVA_81_0_0_1_0_0_0 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_81_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getRelationExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.RELATION_EXPRESSION__RELATION_OPERATORS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getRelationOperator(), }, 0); + public final static JavaWhiteSpace JAVA_81_0_0_1_0_0_2 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_81_0_0_1_0_0_3 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getRelationExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.RELATION_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getShiftExpression(), }, 0); + public final static JavaSequence JAVA_81_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_81_0_0_1_0_0_0, JAVA_81_0_0_1_0_0_1, JAVA_81_0_0_1_0_0_2, JAVA_81_0_0_1_0_0_3); + public final static JavaChoice JAVA_81_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_81_0_0_1_0_0); + public final static JavaCompound JAVA_81_0_0_1 = new JavaCompound(JAVA_81_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_81_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_81_0_0_0, JAVA_81_0_0_1); + public final static JavaChoice JAVA_81_0 = new JavaChoice(JavaCardinality.ONE, JAVA_81_0_0); + public final static JavaRule JAVA_81 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getRelationExpression(), JAVA_81_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_82_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getShiftExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.SHIFT_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAdditiveExpression(), }, 0); + public final static JavaWhiteSpace JAVA_82_0_0_1_0_0_0 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_82_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getShiftExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.SHIFT_EXPRESSION__SHIFT_OPERATORS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getShiftOperator(), }, 0); + public final static JavaWhiteSpace JAVA_82_0_0_1_0_0_2 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_82_0_0_1_0_0_3 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getShiftExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.SHIFT_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAdditiveExpression(), }, 0); + public final static JavaSequence JAVA_82_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_82_0_0_1_0_0_0, JAVA_82_0_0_1_0_0_1, JAVA_82_0_0_1_0_0_2, JAVA_82_0_0_1_0_0_3); + public final static JavaChoice JAVA_82_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_82_0_0_1_0_0); + public final static JavaCompound JAVA_82_0_0_1 = new JavaCompound(JAVA_82_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_82_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_82_0_0_0, JAVA_82_0_0_1); + public final static JavaChoice JAVA_82_0 = new JavaChoice(JavaCardinality.ONE, JAVA_82_0_0); + public final static JavaRule JAVA_82 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getShiftExpression(), JAVA_82_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_83_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAdditiveExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.ADDITIVE_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getMultiplicativeExpression(), }, 0); + public final static JavaWhiteSpace JAVA_83_0_0_1_0_0_0 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_83_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAdditiveExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.ADDITIVE_EXPRESSION__ADDITIVE_OPERATORS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAdditiveOperator(), }, 0); + public final static JavaWhiteSpace JAVA_83_0_0_1_0_0_2 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_83_0_0_1_0_0_3 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAdditiveExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.ADDITIVE_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getMultiplicativeExpression(), }, 0); + public final static JavaSequence JAVA_83_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_83_0_0_1_0_0_0, JAVA_83_0_0_1_0_0_1, JAVA_83_0_0_1_0_0_2, JAVA_83_0_0_1_0_0_3); + public final static JavaChoice JAVA_83_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_83_0_0_1_0_0); + public final static JavaCompound JAVA_83_0_0_1 = new JavaCompound(JAVA_83_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_83_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_83_0_0_0, JAVA_83_0_0_1); + public final static JavaChoice JAVA_83_0 = new JavaChoice(JavaCardinality.ONE, JAVA_83_0_0); + public final static JavaRule JAVA_83 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAdditiveExpression(), JAVA_83_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_84_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getMultiplicativeExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.MULTIPLICATIVE_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getUnaryExpression(), }, 0); + public final static JavaWhiteSpace JAVA_84_0_0_1_0_0_0 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_84_0_0_1_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getMultiplicativeExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.MULTIPLICATIVE_EXPRESSION__MULTIPLICATIVE_OPERATORS), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getMultiplicativeOperator(), }, 0); + public final static JavaWhiteSpace JAVA_84_0_0_1_0_0_2 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_84_0_0_1_0_0_3 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getMultiplicativeExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.MULTIPLICATIVE_EXPRESSION__CHILDREN), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getUnaryExpression(), }, 0); + public final static JavaSequence JAVA_84_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_84_0_0_1_0_0_0, JAVA_84_0_0_1_0_0_1, JAVA_84_0_0_1_0_0_2, JAVA_84_0_0_1_0_0_3); + public final static JavaChoice JAVA_84_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_84_0_0_1_0_0); + public final static JavaCompound JAVA_84_0_0_1 = new JavaCompound(JAVA_84_0_0_1_0, JavaCardinality.STAR); + public final static JavaSequence JAVA_84_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_84_0_0_0, JAVA_84_0_0_1); + public final static JavaChoice JAVA_84_0 = new JavaChoice(JavaCardinality.ONE, JAVA_84_0_0); + public final static JavaRule JAVA_84 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getMultiplicativeExpression(), JAVA_84_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_85_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getUnaryExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.UNARY_EXPRESSION__OPERATORS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getUnaryOperator(), }, 0); + public final static JavaContainment JAVA_85_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getUnaryExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.UNARY_EXPRESSION__CHILD), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getUnaryModificationExpression(), }, 0); + public final static JavaSequence JAVA_85_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_85_0_0_0, JAVA_85_0_0_1); + public final static JavaChoice JAVA_85_0 = new JavaChoice(JavaCardinality.ONE, JAVA_85_0_0); + public final static JavaRule JAVA_85 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getUnaryExpression(), JAVA_85_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_86_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getSuffixUnaryModificationExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.SUFFIX_UNARY_MODIFICATION_EXPRESSION__CHILD), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getUnaryModificationExpressionChild(), }, 0); + public final static JavaContainment JAVA_86_0_0_1_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getSuffixUnaryModificationExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.SUFFIX_UNARY_MODIFICATION_EXPRESSION__OPERATOR), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getUnaryModificationOperator(), }, 0); + public final static JavaSequence JAVA_86_0_0_1_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_86_0_0_1_0_0_0); + public final static JavaChoice JAVA_86_0_0_1_0 = new JavaChoice(JavaCardinality.ONE, JAVA_86_0_0_1_0_0); + public final static JavaCompound JAVA_86_0_0_1 = new JavaCompound(JAVA_86_0_0_1_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_86_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_86_0_0_0, JAVA_86_0_0_1); + public final static JavaChoice JAVA_86_0 = new JavaChoice(JavaCardinality.ONE, JAVA_86_0_0); + public final static JavaRule JAVA_86 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getSuffixUnaryModificationExpression(), JAVA_86_0, JavaCardinality.ONE); + public final static JavaContainment JAVA_87_0_0_0_0_0_0 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getPrefixUnaryModificationExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.PREFIX_UNARY_MODIFICATION_EXPRESSION__OPERATOR), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getUnaryModificationOperator(), }, 0); + public final static JavaSequence JAVA_87_0_0_0_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_87_0_0_0_0_0_0); + public final static JavaChoice JAVA_87_0_0_0_0 = new JavaChoice(JavaCardinality.ONE, JAVA_87_0_0_0_0_0); + public final static JavaCompound JAVA_87_0_0_0 = new JavaCompound(JAVA_87_0_0_0_0, JavaCardinality.QUESTIONMARK); + public final static JavaContainment JAVA_87_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getPrefixUnaryModificationExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.PREFIX_UNARY_MODIFICATION_EXPRESSION__CHILD), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getUnaryModificationExpressionChild(), }, 0); + public final static JavaSequence JAVA_87_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_87_0_0_0, JAVA_87_0_0_1); + public final static JavaChoice JAVA_87_0 = new JavaChoice(JavaCardinality.ONE, JAVA_87_0_0); + public final static JavaRule JAVA_87 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getPrefixUnaryModificationExpression(), JAVA_87_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_88_0_0_0 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_88_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getCastExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CAST_EXPRESSION__TYPE_REFERENCE), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.types.TypesPackage.eINSTANCE.getTypeReference(), }, 0); + public final static JavaContainment JAVA_88_0_0_2 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getCastExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CAST_EXPRESSION__ARRAY_DIMENSIONS_BEFORE), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), }, 0); + public final static JavaKeyword JAVA_88_0_0_3 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaWhiteSpace JAVA_88_0_0_4 = new JavaWhiteSpace(1, JavaCardinality.ONE); + public final static JavaContainment JAVA_88_0_0_5 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getCastExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CAST_EXPRESSION__CHILD), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getUnaryExpression(), }, 0); + public final static JavaSequence JAVA_88_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_88_0_0_0, JAVA_88_0_0_1, JAVA_88_0_0_2, JAVA_88_0_0_3, JAVA_88_0_0_4, JAVA_88_0_0_5); + public final static JavaChoice JAVA_88_0 = new JavaChoice(JavaCardinality.ONE, JAVA_88_0_0); + public final static JavaRule JAVA_88 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getCastExpression(), JAVA_88_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_89_0_0_0 = new JavaKeyword("(", JavaCardinality.ONE); + public final static JavaContainment JAVA_89_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getNestedExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.NESTED_EXPRESSION__EXPRESSION), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getAssignmentExpression(), }, 0); + public final static JavaKeyword JAVA_89_0_0_2 = new JavaKeyword(")", JavaCardinality.ONE); + public final static JavaContainment JAVA_89_0_0_3 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getNestedExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.NESTED_EXPRESSION__ARRAY_SELECTORS), JavaCardinality.STAR, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArraySelector(), }, 0); + public final static JavaKeyword JAVA_89_0_0_4_0_0_0 = new JavaKeyword(".", JavaCardinality.ONE); + public final static JavaContainment JAVA_89_0_0_4_0_0_1 = new JavaContainment(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getNestedExpression().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.NESTED_EXPRESSION__NEXT), JavaCardinality.ONE, new org.eclipse.emf.ecore.EClass[] {org.emftext.language.java.references.ReferencesPackage.eINSTANCE.getReference(), }, 0); + public final static JavaSequence JAVA_89_0_0_4_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_89_0_0_4_0_0_0, JAVA_89_0_0_4_0_0_1); + public final static JavaChoice JAVA_89_0_0_4_0 = new JavaChoice(JavaCardinality.ONE, JAVA_89_0_0_4_0_0); + public final static JavaCompound JAVA_89_0_0_4 = new JavaCompound(JAVA_89_0_0_4_0, JavaCardinality.QUESTIONMARK); + public final static JavaSequence JAVA_89_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_89_0_0_0, JAVA_89_0_0_1, JAVA_89_0_0_2, JAVA_89_0_0_3, JAVA_89_0_0_4); + public final static JavaChoice JAVA_89_0 = new JavaChoice(JavaCardinality.ONE, JAVA_89_0_0); + public final static JavaRule JAVA_89 = new JavaRule(org.emftext.language.java.expressions.ExpressionsPackage.eINSTANCE.getNestedExpression(), JAVA_89_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_90_0_0_0 = new JavaKeyword("=", JavaCardinality.ONE); + public final static JavaSequence JAVA_90_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_90_0_0_0); + public final static JavaChoice JAVA_90_0 = new JavaChoice(JavaCardinality.ONE, JAVA_90_0_0); + public final static JavaRule JAVA_90 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAssignment(), JAVA_90_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_91_0_0_0 = new JavaKeyword("+=", JavaCardinality.ONE); + public final static JavaSequence JAVA_91_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_91_0_0_0); + public final static JavaChoice JAVA_91_0 = new JavaChoice(JavaCardinality.ONE, JAVA_91_0_0); + public final static JavaRule JAVA_91 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAssignmentPlus(), JAVA_91_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_92_0_0_0 = new JavaKeyword("-=", JavaCardinality.ONE); + public final static JavaSequence JAVA_92_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_92_0_0_0); + public final static JavaChoice JAVA_92_0 = new JavaChoice(JavaCardinality.ONE, JAVA_92_0_0); + public final static JavaRule JAVA_92 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAssignmentMinus(), JAVA_92_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_93_0_0_0 = new JavaKeyword("*=", JavaCardinality.ONE); + public final static JavaSequence JAVA_93_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_93_0_0_0); + public final static JavaChoice JAVA_93_0 = new JavaChoice(JavaCardinality.ONE, JAVA_93_0_0); + public final static JavaRule JAVA_93 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAssignmentMultiplication(), JAVA_93_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_94_0_0_0 = new JavaKeyword("/=", JavaCardinality.ONE); + public final static JavaSequence JAVA_94_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_94_0_0_0); + public final static JavaChoice JAVA_94_0 = new JavaChoice(JavaCardinality.ONE, JAVA_94_0_0); + public final static JavaRule JAVA_94 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAssignmentDivision(), JAVA_94_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_95_0_0_0 = new JavaKeyword("&=", JavaCardinality.ONE); + public final static JavaSequence JAVA_95_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_95_0_0_0); + public final static JavaChoice JAVA_95_0 = new JavaChoice(JavaCardinality.ONE, JAVA_95_0_0); + public final static JavaRule JAVA_95 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAssignmentAnd(), JAVA_95_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_96_0_0_0 = new JavaKeyword("|=", JavaCardinality.ONE); + public final static JavaSequence JAVA_96_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_96_0_0_0); + public final static JavaChoice JAVA_96_0 = new JavaChoice(JavaCardinality.ONE, JAVA_96_0_0); + public final static JavaRule JAVA_96 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAssignmentOr(), JAVA_96_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_97_0_0_0 = new JavaKeyword("^=", JavaCardinality.ONE); + public final static JavaSequence JAVA_97_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_97_0_0_0); + public final static JavaChoice JAVA_97_0 = new JavaChoice(JavaCardinality.ONE, JAVA_97_0_0); + public final static JavaRule JAVA_97 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAssignmentExclusiveOr(), JAVA_97_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_98_0_0_0 = new JavaKeyword("%=", JavaCardinality.ONE); + public final static JavaSequence JAVA_98_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_98_0_0_0); + public final static JavaChoice JAVA_98_0 = new JavaChoice(JavaCardinality.ONE, JAVA_98_0_0); + public final static JavaRule JAVA_98 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAssignmentModulo(), JAVA_98_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_99_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaKeyword JAVA_99_0_0_1 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaKeyword JAVA_99_0_0_2 = new JavaKeyword("=", JavaCardinality.ONE); + public final static JavaSequence JAVA_99_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_99_0_0_0, JAVA_99_0_0_1, JAVA_99_0_0_2); + public final static JavaChoice JAVA_99_0 = new JavaChoice(JavaCardinality.ONE, JAVA_99_0_0); + public final static JavaRule JAVA_99 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAssignmentLeftShift(), JAVA_99_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_100_0_0_0 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaKeyword JAVA_100_0_0_1 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaKeyword JAVA_100_0_0_2 = new JavaKeyword("=", JavaCardinality.ONE); + public final static JavaSequence JAVA_100_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_100_0_0_0, JAVA_100_0_0_1, JAVA_100_0_0_2); + public final static JavaChoice JAVA_100_0 = new JavaChoice(JavaCardinality.ONE, JAVA_100_0_0); + public final static JavaRule JAVA_100 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAssignmentRightShift(), JAVA_100_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_101_0_0_0 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaKeyword JAVA_101_0_0_1 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaKeyword JAVA_101_0_0_2 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaKeyword JAVA_101_0_0_3 = new JavaKeyword("=", JavaCardinality.ONE); + public final static JavaSequence JAVA_101_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_101_0_0_0, JAVA_101_0_0_1, JAVA_101_0_0_2, JAVA_101_0_0_3); + public final static JavaChoice JAVA_101_0 = new JavaChoice(JavaCardinality.ONE, JAVA_101_0_0); + public final static JavaRule JAVA_101 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAssignmentUnsignedRightShift(), JAVA_101_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_102_0_0_0 = new JavaKeyword("+", JavaCardinality.ONE); + public final static JavaSequence JAVA_102_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_102_0_0_0); + public final static JavaChoice JAVA_102_0 = new JavaChoice(JavaCardinality.ONE, JAVA_102_0_0); + public final static JavaRule JAVA_102 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getAddition(), JAVA_102_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_103_0_0_0 = new JavaKeyword("-", JavaCardinality.ONE); + public final static JavaSequence JAVA_103_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_103_0_0_0); + public final static JavaChoice JAVA_103_0 = new JavaChoice(JavaCardinality.ONE, JAVA_103_0_0); + public final static JavaRule JAVA_103 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getSubtraction(), JAVA_103_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_104_0_0_0 = new JavaKeyword("*", JavaCardinality.ONE); + public final static JavaSequence JAVA_104_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_104_0_0_0); + public final static JavaChoice JAVA_104_0 = new JavaChoice(JavaCardinality.ONE, JAVA_104_0_0); + public final static JavaRule JAVA_104 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getMultiplication(), JAVA_104_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_105_0_0_0 = new JavaKeyword("/", JavaCardinality.ONE); + public final static JavaSequence JAVA_105_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_105_0_0_0); + public final static JavaChoice JAVA_105_0 = new JavaChoice(JavaCardinality.ONE, JAVA_105_0_0); + public final static JavaRule JAVA_105 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getDivision(), JAVA_105_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_106_0_0_0 = new JavaKeyword("%", JavaCardinality.ONE); + public final static JavaSequence JAVA_106_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_106_0_0_0); + public final static JavaChoice JAVA_106_0 = new JavaChoice(JavaCardinality.ONE, JAVA_106_0_0); + public final static JavaRule JAVA_106 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getRemainder(), JAVA_106_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_107_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaSequence JAVA_107_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_107_0_0_0); + public final static JavaChoice JAVA_107_0 = new JavaChoice(JavaCardinality.ONE, JAVA_107_0_0); + public final static JavaRule JAVA_107 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getLessThan(), JAVA_107_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_108_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaKeyword JAVA_108_0_0_1 = new JavaKeyword("=", JavaCardinality.ONE); + public final static JavaSequence JAVA_108_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_108_0_0_0, JAVA_108_0_0_1); + public final static JavaChoice JAVA_108_0 = new JavaChoice(JavaCardinality.ONE, JAVA_108_0_0); + public final static JavaRule JAVA_108 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getLessThanOrEqual(), JAVA_108_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_109_0_0_0 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_109_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_109_0_0_0); + public final static JavaChoice JAVA_109_0 = new JavaChoice(JavaCardinality.ONE, JAVA_109_0_0); + public final static JavaRule JAVA_109 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getGreaterThan(), JAVA_109_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_110_0_0_0 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaKeyword JAVA_110_0_0_1 = new JavaKeyword("=", JavaCardinality.ONE); + public final static JavaSequence JAVA_110_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_110_0_0_0, JAVA_110_0_0_1); + public final static JavaChoice JAVA_110_0 = new JavaChoice(JavaCardinality.ONE, JAVA_110_0_0); + public final static JavaRule JAVA_110 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getGreaterThanOrEqual(), JAVA_110_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_111_0_0_0 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaKeyword JAVA_111_0_0_1 = new JavaKeyword("<", JavaCardinality.ONE); + public final static JavaSequence JAVA_111_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_111_0_0_0, JAVA_111_0_0_1); + public final static JavaChoice JAVA_111_0 = new JavaChoice(JavaCardinality.ONE, JAVA_111_0_0); + public final static JavaRule JAVA_111 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getLeftShift(), JAVA_111_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_112_0_0_0 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaKeyword JAVA_112_0_0_1 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_112_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_112_0_0_0, JAVA_112_0_0_1); + public final static JavaChoice JAVA_112_0 = new JavaChoice(JavaCardinality.ONE, JAVA_112_0_0); + public final static JavaRule JAVA_112 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getRightShift(), JAVA_112_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_113_0_0_0 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaKeyword JAVA_113_0_0_1 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaKeyword JAVA_113_0_0_2 = new JavaKeyword(">", JavaCardinality.ONE); + public final static JavaSequence JAVA_113_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_113_0_0_0, JAVA_113_0_0_1, JAVA_113_0_0_2); + public final static JavaChoice JAVA_113_0 = new JavaChoice(JavaCardinality.ONE, JAVA_113_0_0); + public final static JavaRule JAVA_113 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getUnsignedRightShift(), JAVA_113_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_114_0_0_0 = new JavaKeyword("==", JavaCardinality.ONE); + public final static JavaSequence JAVA_114_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_114_0_0_0); + public final static JavaChoice JAVA_114_0 = new JavaChoice(JavaCardinality.ONE, JAVA_114_0_0); + public final static JavaRule JAVA_114 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getEqual(), JAVA_114_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_115_0_0_0 = new JavaKeyword("!=", JavaCardinality.ONE); + public final static JavaSequence JAVA_115_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_115_0_0_0); + public final static JavaChoice JAVA_115_0 = new JavaChoice(JavaCardinality.ONE, JAVA_115_0_0); + public final static JavaRule JAVA_115 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getNotEqual(), JAVA_115_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_116_0_0_0 = new JavaKeyword("++", JavaCardinality.ONE); + public final static JavaSequence JAVA_116_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_116_0_0_0); + public final static JavaChoice JAVA_116_0 = new JavaChoice(JavaCardinality.ONE, JAVA_116_0_0); + public final static JavaRule JAVA_116 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getPlusPlus(), JAVA_116_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_117_0_0_0 = new JavaKeyword("--", JavaCardinality.ONE); + public final static JavaSequence JAVA_117_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_117_0_0_0); + public final static JavaChoice JAVA_117_0 = new JavaChoice(JavaCardinality.ONE, JAVA_117_0_0); + public final static JavaRule JAVA_117 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getMinusMinus(), JAVA_117_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_118_0_0_0 = new JavaKeyword("~", JavaCardinality.ONE); + public final static JavaSequence JAVA_118_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_118_0_0_0); + public final static JavaChoice JAVA_118_0 = new JavaChoice(JavaCardinality.ONE, JAVA_118_0_0); + public final static JavaRule JAVA_118 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getComplement(), JAVA_118_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_119_0_0_0 = new JavaKeyword("!", JavaCardinality.ONE); + public final static JavaSequence JAVA_119_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_119_0_0_0); + public final static JavaChoice JAVA_119_0 = new JavaChoice(JavaCardinality.ONE, JAVA_119_0_0); + public final static JavaRule JAVA_119 = new JavaRule(org.emftext.language.java.operators.OperatorsPackage.eINSTANCE.getNegate(), JAVA_119_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_120_0_0_0_0_0_0 = new JavaKeyword("[", JavaCardinality.ONE); + public final static JavaKeyword JAVA_120_0_0_0_0_0_1 = new JavaKeyword("]", JavaCardinality.ONE); + public final static JavaSequence JAVA_120_0_0_0_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_120_0_0_0_0_0_0, JAVA_120_0_0_0_0_0_1); + public final static JavaChoice JAVA_120_0_0_0_0 = new JavaChoice(JavaCardinality.ONE, JAVA_120_0_0_0_0_0); + public final static JavaCompound JAVA_120_0_0_0 = new JavaCompound(JAVA_120_0_0_0_0, JavaCardinality.ONE); + public final static JavaSequence JAVA_120_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_120_0_0_0); + public final static JavaChoice JAVA_120_0 = new JavaChoice(JavaCardinality.ONE, JAVA_120_0_0); + public final static JavaRule JAVA_120 = new JavaRule(org.emftext.language.java.arrays.ArraysPackage.eINSTANCE.getArrayDimension(), JAVA_120_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_121_0_0_0 = new JavaKeyword("null", JavaCardinality.ONE); + public final static JavaSequence JAVA_121_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_121_0_0_0); + public final static JavaChoice JAVA_121_0 = new JavaChoice(JavaCardinality.ONE, JAVA_121_0_0); + public final static JavaRule JAVA_121 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getNullLiteral(), JAVA_121_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_122_0_0_0 = new JavaKeyword("public", JavaCardinality.ONE); + public final static JavaSequence JAVA_122_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_122_0_0_0); + public final static JavaChoice JAVA_122_0 = new JavaChoice(JavaCardinality.ONE, JAVA_122_0_0); + public final static JavaRule JAVA_122 = new JavaRule(org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getPublic(), JAVA_122_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_123_0_0_0 = new JavaKeyword("abstract", JavaCardinality.ONE); + public final static JavaSequence JAVA_123_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_123_0_0_0); + public final static JavaChoice JAVA_123_0 = new JavaChoice(JavaCardinality.ONE, JAVA_123_0_0); + public final static JavaRule JAVA_123 = new JavaRule(org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getAbstract(), JAVA_123_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_124_0_0_0 = new JavaKeyword("protected", JavaCardinality.ONE); + public final static JavaSequence JAVA_124_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_124_0_0_0); + public final static JavaChoice JAVA_124_0 = new JavaChoice(JavaCardinality.ONE, JAVA_124_0_0); + public final static JavaRule JAVA_124 = new JavaRule(org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getProtected(), JAVA_124_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_125_0_0_0 = new JavaKeyword("private", JavaCardinality.ONE); + public final static JavaSequence JAVA_125_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_125_0_0_0); + public final static JavaChoice JAVA_125_0 = new JavaChoice(JavaCardinality.ONE, JAVA_125_0_0); + public final static JavaRule JAVA_125 = new JavaRule(org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getPrivate(), JAVA_125_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_126_0_0_0 = new JavaKeyword("final", JavaCardinality.ONE); + public final static JavaSequence JAVA_126_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_126_0_0_0); + public final static JavaChoice JAVA_126_0 = new JavaChoice(JavaCardinality.ONE, JAVA_126_0_0); + public final static JavaRule JAVA_126 = new JavaRule(org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getFinal(), JAVA_126_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_127_0_0_0 = new JavaKeyword("static", JavaCardinality.ONE); + public final static JavaSequence JAVA_127_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_127_0_0_0); + public final static JavaChoice JAVA_127_0 = new JavaChoice(JavaCardinality.ONE, JAVA_127_0_0); + public final static JavaRule JAVA_127 = new JavaRule(org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getStatic(), JAVA_127_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_128_0_0_0 = new JavaKeyword("native", JavaCardinality.ONE); + public final static JavaSequence JAVA_128_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_128_0_0_0); + public final static JavaChoice JAVA_128_0 = new JavaChoice(JavaCardinality.ONE, JAVA_128_0_0); + public final static JavaRule JAVA_128 = new JavaRule(org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getNative(), JAVA_128_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_129_0_0_0 = new JavaKeyword("synchronized", JavaCardinality.ONE); + public final static JavaSequence JAVA_129_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_129_0_0_0); + public final static JavaChoice JAVA_129_0 = new JavaChoice(JavaCardinality.ONE, JAVA_129_0_0); + public final static JavaRule JAVA_129 = new JavaRule(org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getSynchronized(), JAVA_129_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_130_0_0_0 = new JavaKeyword("transient", JavaCardinality.ONE); + public final static JavaSequence JAVA_130_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_130_0_0_0); + public final static JavaChoice JAVA_130_0 = new JavaChoice(JavaCardinality.ONE, JAVA_130_0_0); + public final static JavaRule JAVA_130 = new JavaRule(org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getTransient(), JAVA_130_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_131_0_0_0 = new JavaKeyword("volatile", JavaCardinality.ONE); + public final static JavaSequence JAVA_131_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_131_0_0_0); + public final static JavaChoice JAVA_131_0 = new JavaChoice(JavaCardinality.ONE, JAVA_131_0_0); + public final static JavaRule JAVA_131 = new JavaRule(org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getVolatile(), JAVA_131_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_132_0_0_0 = new JavaKeyword("strictfp", JavaCardinality.ONE); + public final static JavaSequence JAVA_132_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_132_0_0_0); + public final static JavaChoice JAVA_132_0 = new JavaChoice(JavaCardinality.ONE, JAVA_132_0_0); + public final static JavaRule JAVA_132 = new JavaRule(org.emftext.language.java.modifiers.ModifiersPackage.eINSTANCE.getStrictfp(), JAVA_132_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_133_0_0_0 = new JavaKeyword("void", JavaCardinality.ONE); + public final static JavaSequence JAVA_133_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_133_0_0_0); + public final static JavaChoice JAVA_133_0 = new JavaChoice(JavaCardinality.ONE, JAVA_133_0_0); + public final static JavaRule JAVA_133 = new JavaRule(org.emftext.language.java.types.TypesPackage.eINSTANCE.getVoid(), JAVA_133_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_134_0_0_0 = new JavaKeyword("boolean", JavaCardinality.ONE); + public final static JavaSequence JAVA_134_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_134_0_0_0); + public final static JavaChoice JAVA_134_0 = new JavaChoice(JavaCardinality.ONE, JAVA_134_0_0); + public final static JavaRule JAVA_134 = new JavaRule(org.emftext.language.java.types.TypesPackage.eINSTANCE.getBoolean(), JAVA_134_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_135_0_0_0 = new JavaKeyword("char", JavaCardinality.ONE); + public final static JavaSequence JAVA_135_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_135_0_0_0); + public final static JavaChoice JAVA_135_0 = new JavaChoice(JavaCardinality.ONE, JAVA_135_0_0); + public final static JavaRule JAVA_135 = new JavaRule(org.emftext.language.java.types.TypesPackage.eINSTANCE.getChar(), JAVA_135_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_136_0_0_0 = new JavaKeyword("byte", JavaCardinality.ONE); + public final static JavaSequence JAVA_136_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_136_0_0_0); + public final static JavaChoice JAVA_136_0 = new JavaChoice(JavaCardinality.ONE, JAVA_136_0_0); + public final static JavaRule JAVA_136 = new JavaRule(org.emftext.language.java.types.TypesPackage.eINSTANCE.getByte(), JAVA_136_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_137_0_0_0 = new JavaKeyword("short", JavaCardinality.ONE); + public final static JavaSequence JAVA_137_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_137_0_0_0); + public final static JavaChoice JAVA_137_0 = new JavaChoice(JavaCardinality.ONE, JAVA_137_0_0); + public final static JavaRule JAVA_137 = new JavaRule(org.emftext.language.java.types.TypesPackage.eINSTANCE.getShort(), JAVA_137_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_138_0_0_0 = new JavaKeyword("int", JavaCardinality.ONE); + public final static JavaSequence JAVA_138_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_138_0_0_0); + public final static JavaChoice JAVA_138_0 = new JavaChoice(JavaCardinality.ONE, JAVA_138_0_0); + public final static JavaRule JAVA_138 = new JavaRule(org.emftext.language.java.types.TypesPackage.eINSTANCE.getInt(), JAVA_138_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_139_0_0_0 = new JavaKeyword("long", JavaCardinality.ONE); + public final static JavaSequence JAVA_139_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_139_0_0_0); + public final static JavaChoice JAVA_139_0 = new JavaChoice(JavaCardinality.ONE, JAVA_139_0_0); + public final static JavaRule JAVA_139 = new JavaRule(org.emftext.language.java.types.TypesPackage.eINSTANCE.getLong(), JAVA_139_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_140_0_0_0 = new JavaKeyword("float", JavaCardinality.ONE); + public final static JavaSequence JAVA_140_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_140_0_0_0); + public final static JavaChoice JAVA_140_0 = new JavaChoice(JavaCardinality.ONE, JAVA_140_0_0); + public final static JavaRule JAVA_140 = new JavaRule(org.emftext.language.java.types.TypesPackage.eINSTANCE.getFloat(), JAVA_140_0, JavaCardinality.ONE); + public final static JavaKeyword JAVA_141_0_0_0 = new JavaKeyword("double", JavaCardinality.ONE); + public final static JavaSequence JAVA_141_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_141_0_0_0); + public final static JavaChoice JAVA_141_0 = new JavaChoice(JavaCardinality.ONE, JAVA_141_0_0); + public final static JavaRule JAVA_141 = new JavaRule(org.emftext.language.java.types.TypesPackage.eINSTANCE.getDouble(), JAVA_141_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_142_0_0_0 = new JavaPlaceholder(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getDecimalLongLiteral().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.DECIMAL_LONG_LITERAL__DECIMAL_VALUE), "DECIMAL_LONG_LITERAL", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_142_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_142_0_0_0); + public final static JavaChoice JAVA_142_0 = new JavaChoice(JavaCardinality.ONE, JAVA_142_0_0); + public final static JavaRule JAVA_142 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getDecimalLongLiteral(), JAVA_142_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_143_0_0_0 = new JavaPlaceholder(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getDecimalFloatLiteral().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.DECIMAL_FLOAT_LITERAL__DECIMAL_VALUE), "DECIMAL_FLOAT_LITERAL", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_143_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_143_0_0_0); + public final static JavaChoice JAVA_143_0 = new JavaChoice(JavaCardinality.ONE, JAVA_143_0_0); + public final static JavaRule JAVA_143 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getDecimalFloatLiteral(), JAVA_143_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_144_0_0_0 = new JavaPlaceholder(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getDecimalIntegerLiteral().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.DECIMAL_INTEGER_LITERAL__DECIMAL_VALUE), "DECIMAL_INTEGER_LITERAL", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_144_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_144_0_0_0); + public final static JavaChoice JAVA_144_0 = new JavaChoice(JavaCardinality.ONE, JAVA_144_0_0); + public final static JavaRule JAVA_144 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getDecimalIntegerLiteral(), JAVA_144_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_145_0_0_0 = new JavaPlaceholder(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getDecimalDoubleLiteral().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.DECIMAL_DOUBLE_LITERAL__DECIMAL_VALUE), "DECIMAL_DOUBLE_LITERAL", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_145_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_145_0_0_0); + public final static JavaChoice JAVA_145_0 = new JavaChoice(JavaCardinality.ONE, JAVA_145_0_0); + public final static JavaRule JAVA_145 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getDecimalDoubleLiteral(), JAVA_145_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_146_0_0_0 = new JavaPlaceholder(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getHexLongLiteral().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.HEX_LONG_LITERAL__HEX_VALUE), "HEX_LONG_LITERAL", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_146_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_146_0_0_0); + public final static JavaChoice JAVA_146_0 = new JavaChoice(JavaCardinality.ONE, JAVA_146_0_0); + public final static JavaRule JAVA_146 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getHexLongLiteral(), JAVA_146_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_147_0_0_0 = new JavaPlaceholder(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getHexFloatLiteral().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.HEX_FLOAT_LITERAL__HEX_VALUE), "HEX_FLOAT_LITERAL", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_147_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_147_0_0_0); + public final static JavaChoice JAVA_147_0 = new JavaChoice(JavaCardinality.ONE, JAVA_147_0_0); + public final static JavaRule JAVA_147 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getHexFloatLiteral(), JAVA_147_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_148_0_0_0 = new JavaPlaceholder(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getHexDoubleLiteral().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.HEX_DOUBLE_LITERAL__HEX_VALUE), "HEX_DOUBLE_LITERAL", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_148_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_148_0_0_0); + public final static JavaChoice JAVA_148_0 = new JavaChoice(JavaCardinality.ONE, JAVA_148_0_0); + public final static JavaRule JAVA_148 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getHexDoubleLiteral(), JAVA_148_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_149_0_0_0 = new JavaPlaceholder(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getHexIntegerLiteral().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.HEX_INTEGER_LITERAL__HEX_VALUE), "HEX_INTEGER_LITERAL", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_149_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_149_0_0_0); + public final static JavaChoice JAVA_149_0 = new JavaChoice(JavaCardinality.ONE, JAVA_149_0_0); + public final static JavaRule JAVA_149 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getHexIntegerLiteral(), JAVA_149_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_150_0_0_0 = new JavaPlaceholder(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getOctalLongLiteral().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.OCTAL_LONG_LITERAL__OCTAL_VALUE), "OCTAL_LONG_LITERAL", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_150_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_150_0_0_0); + public final static JavaChoice JAVA_150_0 = new JavaChoice(JavaCardinality.ONE, JAVA_150_0_0); + public final static JavaRule JAVA_150 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getOctalLongLiteral(), JAVA_150_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_151_0_0_0 = new JavaPlaceholder(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getOctalIntegerLiteral().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.OCTAL_INTEGER_LITERAL__OCTAL_VALUE), "OCTAL_INTEGER_LITERAL", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_151_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_151_0_0_0); + public final static JavaChoice JAVA_151_0 = new JavaChoice(JavaCardinality.ONE, JAVA_151_0_0); + public final static JavaRule JAVA_151 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getOctalIntegerLiteral(), JAVA_151_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_152_0_0_0 = new JavaPlaceholder(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getCharacterLiteral().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.CHARACTER_LITERAL__VALUE), "CHARACTER_LITERAL", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_152_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_152_0_0_0); + public final static JavaChoice JAVA_152_0 = new JavaChoice(JavaCardinality.ONE, JAVA_152_0_0); + public final static JavaRule JAVA_152 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getCharacterLiteral(), JAVA_152_0, JavaCardinality.ONE); + public final static JavaPlaceholder JAVA_153_0_0_0 = new JavaPlaceholder(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getBooleanLiteral().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.BOOLEAN_LITERAL__VALUE), "BOOLEAN_LITERAL", JavaCardinality.ONE, 0); + public final static JavaSequence JAVA_153_0_0 = new JavaSequence(JavaCardinality.ONE, JAVA_153_0_0_0); + public final static JavaChoice JAVA_153_0 = new JavaChoice(JavaCardinality.ONE, JAVA_153_0_0); + public final static JavaRule JAVA_153 = new JavaRule(org.emftext.language.java.literals.LiteralsPackage.eINSTANCE.getBooleanLiteral(), JAVA_153_0, JavaCardinality.ONE); + + + /** A statically pre-loaded cache to speed up the syntax element id look up. */ + private static LinkedHashMap syntaxElementIDCache = new LinkedHashMap(); + + /** A statically pre-loaded cache to speed up the syntax element look up. */ + private static LinkedHashMap syntaxElementCache = new LinkedHashMap(); + + /** Preload the caches */ + static { + syntaxElementIDCache.put(null, ""); + for (Field field : JavaGrammarInformationProvider.class.getFields()) { + try { + Object fieldValue = field.get(null); + syntaxElementIDCache.put((JavaSyntaxElement) fieldValue, field.getName()); + syntaxElementCache.put(field.getName(), (JavaSyntaxElement) fieldValue); + } catch (Exception e) { } + } + } + + public static String getSyntaxElementID(JavaSyntaxElement syntaxElement) { + return syntaxElementIDCache.get(syntaxElement); + } + + public static JavaSyntaxElement getSyntaxElementByID(String syntaxElementID) { + return syntaxElementCache.get(syntaxElementID); + } + + public final static JavaRule[] RULES = new JavaRule[] { + JAVA_0, + JAVA_1, + JAVA_2, + JAVA_3, + JAVA_4, + JAVA_5, + JAVA_6, + JAVA_7, + JAVA_8, + JAVA_9, + JAVA_10, + JAVA_11, + JAVA_12, + JAVA_13, + JAVA_14, + JAVA_15, + JAVA_16, + JAVA_17, + JAVA_18, + JAVA_19, + JAVA_20, + JAVA_21, + JAVA_22, + JAVA_23, + JAVA_24, + JAVA_25, + JAVA_26, + JAVA_27, + JAVA_28, + JAVA_29, + JAVA_30, + JAVA_31, + JAVA_32, + JAVA_33, + JAVA_34, + JAVA_35, + JAVA_36, + JAVA_37, + JAVA_38, + JAVA_39, + JAVA_40, + JAVA_41, + JAVA_42, + JAVA_43, + JAVA_44, + JAVA_45, + JAVA_46, + JAVA_47, + JAVA_48, + JAVA_49, + JAVA_50, + JAVA_51, + JAVA_52, + JAVA_53, + JAVA_54, + JAVA_55, + JAVA_56, + JAVA_57, + JAVA_58, + JAVA_59, + JAVA_60, + JAVA_61, + JAVA_62, + JAVA_63, + JAVA_64, + JAVA_65, + JAVA_66, + JAVA_67, + JAVA_68, + JAVA_69, + JAVA_70, + JAVA_71, + JAVA_72, + JAVA_73, + JAVA_74, + JAVA_75, + JAVA_76, + JAVA_77, + JAVA_78, + JAVA_79, + JAVA_80, + JAVA_81, + JAVA_82, + JAVA_83, + JAVA_84, + JAVA_85, + JAVA_86, + JAVA_87, + JAVA_88, + JAVA_89, + JAVA_90, + JAVA_91, + JAVA_92, + JAVA_93, + JAVA_94, + JAVA_95, + JAVA_96, + JAVA_97, + JAVA_98, + JAVA_99, + JAVA_100, + JAVA_101, + JAVA_102, + JAVA_103, + JAVA_104, + JAVA_105, + JAVA_106, + JAVA_107, + JAVA_108, + JAVA_109, + JAVA_110, + JAVA_111, + JAVA_112, + JAVA_113, + JAVA_114, + JAVA_115, + JAVA_116, + JAVA_117, + JAVA_118, + JAVA_119, + JAVA_120, + JAVA_121, + JAVA_122, + JAVA_123, + JAVA_124, + JAVA_125, + JAVA_126, + JAVA_127, + JAVA_128, + JAVA_129, + JAVA_130, + JAVA_131, + JAVA_132, + JAVA_133, + JAVA_134, + JAVA_135, + JAVA_136, + JAVA_137, + JAVA_138, + JAVA_139, + JAVA_140, + JAVA_141, + JAVA_142, + JAVA_143, + JAVA_144, + JAVA_145, + JAVA_146, + JAVA_147, + JAVA_148, + JAVA_149, + JAVA_150, + JAVA_151, + JAVA_152, + JAVA_153, + }; + + /** + * Returns all keywords of the grammar. This includes all literals for boolean and + * enumeration terminals. + */ + public java.util.Set getKeywords() { + if (this.keywords == null) { + this.keywords = new LinkedHashSet(); + for (JavaRule rule : RULES) { + findKeywords(rule, this.keywords); + } + } + return keywords; + } + + /** + * Finds all keywords in the given element and its children and adds them to the + * set. This includes all literals for boolean and enumeration terminals. + */ + private void findKeywords(JavaSyntaxElement element, Set keywords) { + if (element instanceof JavaKeyword) { + keywords.add(((JavaKeyword) element).getValue()); + } else if (element instanceof JavaBooleanTerminal) { + keywords.add(((JavaBooleanTerminal) element).getTrueLiteral()); + keywords.add(((JavaBooleanTerminal) element).getFalseLiteral()); + } else if (element instanceof JavaEnumerationTerminal) { + JavaEnumerationTerminal terminal = (JavaEnumerationTerminal) element; + for (String key : terminal.getLiteralMapping().keySet()) { + keywords.add(key); + } + } + for (JavaSyntaxElement child : element.getChildren()) { + findKeywords(child, this.keywords); + } + } + +} diff --git a/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/mopp/JavaMetaInformation.java b/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/mopp/JavaMetaInformation.java new file mode 100644 index 00000000..0f85c280 --- /dev/null +++ b/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/mopp/JavaMetaInformation.java @@ -0,0 +1,132 @@ +/** + * + * + * + * + */ +package org.emftext.language.java.resource.java.mopp; + +import org.emftext.language.java.resource.java.IJavaNameProvider; +import org.emftext.language.java.resource.java.JavaReferenceResolverSwitchFactory; + +public class JavaMetaInformation implements org.emftext.language.java.resource.java.IJavaMetaInformation { + + /** The name provider to be always returned by this {@link JavaMetaInformation} instance. */ + private IJavaNameProvider nameProvider = new org.emftext.language.java.resource.java.analysis.JavaDefaultNameProvider(); + + public String getSyntaxName() { + return "java"; + } + + public String getURI() { + return "http://www.emftext.org/java"; + } + + public org.emftext.language.java.resource.java.IJavaTextScanner createLexer() { + return new org.emftext.language.java.resource.java.mopp.JavaAntlrScanner(new org.emftext.language.java.resource.java.mopp.JavaLexer()); + } + + public org.emftext.language.java.resource.java.IJavaTextParser createParser(java.io.InputStream inputStream, String encoding) { + return new org.emftext.language.java.resource.java.mopp.JavaParser().createInstance(inputStream, encoding); + } + + public org.emftext.language.java.resource.java.IJavaTextPrinter createPrinter(java.io.OutputStream outputStream, org.emftext.language.java.resource.java.IJavaTextResource resource) { + return new org.emftext.language.java.resource.java.mopp.JavaPrinter2(outputStream, resource); + } + + public org.eclipse.emf.ecore.EClass[] getClassesWithSyntax() { + return new org.emftext.language.java.resource.java.mopp.JavaSyntaxCoverageInformationProvider().getClassesWithSyntax(); + } + + public org.eclipse.emf.ecore.EClass[] getStartSymbols() { + return new org.emftext.language.java.resource.java.mopp.JavaSyntaxCoverageInformationProvider().getStartSymbols(); + } + + public org.emftext.language.java.resource.java.IJavaReferenceResolverSwitch getReferenceResolverSwitch() { + return JavaReferenceResolverSwitchFactory.getSwitch(); + } + + public org.emftext.language.java.resource.java.IJavaTokenResolverFactory getTokenResolverFactory() { + return new org.emftext.language.java.resource.java.mopp.JavaTokenResolverFactory(); + } + + public String getPathToCSDefinition() { + return "org.emftext.language.java/metamodel/java.cs"; + } + + public String[] getTokenNames() { + return org.emftext.language.java.resource.java.mopp.JavaParser.tokenNames; + } + + public org.emftext.language.java.resource.java.IJavaTokenStyle getDefaultTokenStyle(String tokenName) { + return new org.emftext.language.java.resource.java.mopp.JavaTokenStyleInformationProvider().getDefaultTokenStyle(tokenName); + } + + public java.util.Collection getBracketPairs() { + return new org.emftext.language.java.resource.java.mopp.JavaBracketInformationProvider().getBracketPairs(); + } + + public org.eclipse.emf.ecore.EClass[] getFoldableClasses() { + return new org.emftext.language.java.resource.java.mopp.JavaFoldingInformationProvider().getFoldableClasses(); + } + + public org.eclipse.emf.ecore.resource.Resource.Factory createResourceFactory() { + return new org.emftext.language.java.resource.java.mopp.JavaResourceFactory(); + } + + public org.emftext.language.java.resource.java.mopp.JavaNewFileContentProvider getNewFileContentProvider() { + return new org.emftext.language.java.resource.java.mopp.JavaNewFileContentProvider(); + } + + public void registerResourceFactory() { + org.eclipse.emf.ecore.resource.Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(getSyntaxName(), new org.emftext.language.java.resource.java.mopp.JavaResourceFactory()); + } + + /** + * Returns the key of the option that can be used to register a preprocessor that + * is used as a pipe when loading resources. This key is language-specific. To + * register one preprocessor for multiple resource types, it must be registered + * individually using all keys. + */ + public String getInputStreamPreprocessorProviderOptionKey() { + return getSyntaxName() + "_" + "INPUT_STREAM_PREPROCESSOR_PROVIDER"; + } + + /** + * Returns the key of the option that can be used to register a post-processors + * that are invoked after loading resources. This key is language-specific. To + * register one post-processor for multiple resource types, it must be registered + * individually using all keys. + */ + public String getResourcePostProcessorProviderOptionKey() { + return getSyntaxName() + "_" + "RESOURCE_POSTPROCESSOR_PROVIDER"; + } + + public String getLaunchConfigurationType() { + return "org.emftext.language.java.resource.java.ui.launchConfigurationType"; + } + + public org.emftext.language.java.resource.java.IJavaNameProvider createNameProvider() { + return nameProvider; + } + + public String[] getSyntaxHighlightableTokenNames() { + org.emftext.language.java.resource.java.mopp.JavaAntlrTokenHelper tokenHelper = new org.emftext.language.java.resource.java.mopp.JavaAntlrTokenHelper(); + java.util.List highlightableTokens = new java.util.ArrayList(); + String[] parserTokenNames = getTokenNames(); + for (int i = 0; i < parserTokenNames.length; i++) { + // If ANTLR is used we need to normalize the token names + if (!tokenHelper.canBeUsedForSyntaxHighlighting(i)) { + continue; + } + String tokenName = tokenHelper.getTokenName(parserTokenNames, i); + if (tokenName == null) { + continue; + } + highlightableTokens.add(tokenName); + } + highlightableTokens.add(org.emftext.language.java.resource.java.mopp.JavaTokenStyleInformationProvider.TASK_ITEM_TOKEN_NAME); + return highlightableTokens.toArray(new String[highlightableTokens.size()]); + } + +} diff --git a/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/mopp/JavaParser.java b/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/mopp/JavaParser.java new file mode 100644 index 00000000..97012469 --- /dev/null +++ b/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/mopp/JavaParser.java @@ -0,0 +1,63582 @@ +// $ANTLR 3.4 + + package org.emftext.language.java.resource.java.mopp; + + +import org.antlr.runtime3_4_0.*; +import org.eclipse.emf.ecore.EClass; +import org.emftext.language.java.annotations.AnnotationAttributeSetting; +import org.emftext.language.java.annotations.AnnotationInstance; +import org.emftext.language.java.classifiers.Classifier; +import org.emftext.language.java.classifiers.ConcreteClassifier; +import org.emftext.language.java.imports.ClassifierImport; +import org.emftext.language.java.imports.StaticMemberImport; +import org.emftext.language.java.members.InterfaceMethod; +import org.emftext.language.java.references.ElementReference; +import org.emftext.language.java.references.ReferenceableElement; +import org.emftext.language.java.resource.java.grammar.JavaContainmentTrace; +import org.emftext.language.java.resource.java.grammar.JavaFollowSetProvider; +import org.emftext.language.java.statements.Jump; +import org.emftext.language.java.statements.JumpLabel; +import org.emftext.language.java.types.ClassifierReference; + +import java.util.LinkedHashMap; +import java.util.Stack; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; +import java.util.HashMap; + +@SuppressWarnings({"all", "warnings", "unchecked"}) +public class JavaParser extends JavaANTLRParserBase { + public static final String[] tokenNames = new String[] { + "", "", "", "", "BOOLEAN_LITERAL", "CHARACTER_LITERAL", "DECIMAL_DOUBLE_LITERAL", "DECIMAL_FLOAT_LITERAL", "DECIMAL_INTEGER_LITERAL", "DECIMAL_LONG_LITERAL", "HEX_DOUBLE_LITERAL", "HEX_FLOAT_LITERAL", "HEX_INTEGER_LITERAL", "HEX_LONG_LITERAL", "IDENTIFIER", "ML_COMMENT", "OCTAL_INTEGER_LITERAL", "OCTAL_LONG_LITERAL", "SL_COMMENT", "STRING_LITERAL", "WHITESPACE", "'!'", "'!='", "'&&'", "'&'", "'&='", "'('", "')'", "'*'", "'*='", "'+'", "'++'", "'+='", "','", "'-'", "'--'", "'-='", "'.'", "'...'", "'/'", "'/='", "':'", "';'", "'<'", "'='", "'=='", "'>'", "'?'", "'@'", "'['", "'\\u001a'", "'\\u0025'", "'\\u0025='", "']'", "'^'", "'^='", "'abstract'", "'assert'", "'boolean'", "'break'", "'byte'", "'case'", "'catch'", "'char'", "'class'", "'continue'", "'default'", "'do'", "'double'", "'else'", "'enum'", "'extends'", "'final'", "'finally'", "'float'", "'for'", "'if'", "'implements'", "'import'", "'instanceof'", "'int'", "'interface'", "'long'", "'native'", "'new'", "'null'", "'package'", "'private'", "'protected'", "'public'", "'return'", "'short'", "'static'", "'strictfp'", "'super'", "'switch'", "'synchronized'", "'this'", "'throw'", "'throws'", "'transient'", "'try'", "'void'", "'volatile'", "'while'", "'{'", "'|'", "'|='", "'||'", "'}'", "'~'" + }; + + public static final int EOF=-1; + public static final int T__21=21; + public static final int T__22=22; + public static final int T__23=23; + public static final int T__24=24; + public static final int T__25=25; + public static final int T__26=26; + public static final int T__27=27; + public static final int T__28=28; + public static final int T__29=29; + public static final int T__30=30; + public static final int T__31=31; + public static final int T__32=32; + public static final int T__33=33; + public static final int T__34=34; + public static final int T__35=35; + public static final int T__36=36; + public static final int T__37=37; + public static final int T__38=38; + public static final int T__39=39; + public static final int T__40=40; + public static final int T__41=41; + public static final int T__42=42; + public static final int T__43=43; + public static final int T__44=44; + public static final int T__45=45; + public static final int T__46=46; + public static final int T__47=47; + public static final int T__48=48; + public static final int T__49=49; + public static final int T__50=50; + public static final int T__51=51; + public static final int T__52=52; + public static final int T__53=53; + public static final int T__54=54; + public static final int T__55=55; + public static final int T__56=56; + public static final int T__57=57; + public static final int T__58=58; + public static final int T__59=59; + public static final int T__60=60; + public static final int T__61=61; + public static final int T__62=62; + public static final int T__63=63; + public static final int T__64=64; + public static final int T__65=65; + public static final int T__66=66; + public static final int T__67=67; + public static final int T__68=68; + public static final int T__69=69; + public static final int T__70=70; + public static final int T__71=71; + public static final int T__72=72; + public static final int T__73=73; + public static final int T__74=74; + public static final int T__75=75; + public static final int T__76=76; + public static final int T__77=77; + public static final int T__78=78; + public static final int T__79=79; + public static final int T__80=80; + public static final int T__81=81; + public static final int T__82=82; + public static final int T__83=83; + public static final int T__84=84; + public static final int T__85=85; + public static final int T__86=86; + public static final int T__87=87; + public static final int T__88=88; + public static final int T__89=89; + public static final int T__90=90; + public static final int T__91=91; + public static final int T__92=92; + public static final int T__93=93; + public static final int T__94=94; + public static final int T__95=95; + public static final int T__96=96; + public static final int T__97=97; + public static final int T__98=98; + public static final int T__99=99; + public static final int T__100=100; + public static final int T__101=101; + public static final int T__102=102; + public static final int T__103=103; + public static final int T__104=104; + public static final int T__105=105; + public static final int T__106=106; + public static final int T__107=107; + public static final int T__108=108; + public static final int T__109=109; + public static final int T__110=110; + public static final int BOOLEAN_LITERAL=4; + public static final int CHARACTER_LITERAL=5; + public static final int DECIMAL_DOUBLE_LITERAL=6; + public static final int DECIMAL_FLOAT_LITERAL=7; + public static final int DECIMAL_INTEGER_LITERAL=8; + public static final int DECIMAL_LONG_LITERAL=9; + public static final int HEX_DOUBLE_LITERAL=10; + public static final int HEX_FLOAT_LITERAL=11; + public static final int HEX_INTEGER_LITERAL=12; + public static final int HEX_LONG_LITERAL=13; + public static final int IDENTIFIER=14; + public static final int ML_COMMENT=15; + public static final int OCTAL_INTEGER_LITERAL=16; + public static final int OCTAL_LONG_LITERAL=17; + public static final int SL_COMMENT=18; + public static final int STRING_LITERAL=19; + public static final int WHITESPACE=20; + + // delegates + public JavaANTLRParserBase[] getDelegates() { + return new JavaANTLRParserBase[] {}; + } + + // delegators + + + public JavaParser(TokenStream input) { + this(input, new RecognizerSharedState()); + } + public JavaParser(TokenStream input, RecognizerSharedState state) { + super(input, state); + this.state.initializeRuleMemo(541 + 1); + + + } + + public String[] getTokenNames() { return JavaParser.tokenNames; } + public String getGrammarFileName() { return "Java.g"; } + + + private org.emftext.language.java.resource.java.IJavaTokenResolverFactory tokenResolverFactory = new org.emftext.language.java.resource.java.mopp.JavaTokenResolverFactory(); + + /** + * the index of the last token that was handled by collectHiddenTokens() + */ + private int lastPosition; + + /** + * A flag that indicates whether the parser should remember all expected elements. + * This flag is set to true when using the parse for code completion. Otherwise it + * is set to false. + */ + private boolean rememberExpectedElements = false; + + private Object parseToIndexTypeObject; + private int lastTokenIndex = 0; + + /** + * A list of expected elements the were collected while parsing the input stream. + * This list is only filled if rememberExpectedElements is set to + * true. + */ + private java.util.List expectedElements = new java.util.ArrayList(); + + private int mismatchedTokenRecoveryTries = 0; + /** + * A helper list to allow a lexer to pass errors to its parser + */ + protected java.util.List lexerExceptions = java.util.Collections.synchronizedList(new java.util.ArrayList()); + + /** + * Another helper list to allow a lexer to pass positions of errors to its parser + */ + protected java.util.List lexerExceptionsPosition = java.util.Collections.synchronizedList(new java.util.ArrayList()); + + /** + * A stack for incomplete objects. This stack is used filled when the parser is + * used for code completion. Whenever the parser starts to read an object it is + * pushed on the stack. Once the element was parser completely it is popped from + * the stack. + */ + java.util.List incompleteObjects = new java.util.ArrayList(); + + private int stopIncludingHiddenTokens; + private int stopExcludingHiddenTokens; + private int tokenIndexOfLastCompleteElement; + + private int expectedElementsIndexOfLastCompleteElement; + + /** + * The offset indicating the cursor position when the parser is used for code + * completion by calling parseToExpectedElements(). + */ + private int cursorOffset; + + /** + * The offset of the first hidden token of the last expected element. This offset + * is used to discard expected elements, which are not needed for code completion. + */ + private int lastStartIncludingHidden; + + protected void addErrorToResource(final String errorMessage, final int column, final int line, final int startIndex, final int stopIndex) { + postParseCommands.add(new org.emftext.language.java.resource.java.IJavaCommand() { + public boolean execute(org.emftext.language.java.resource.java.IJavaTextResource resource) { + if (resource == null) { + // the resource can be null if the parser is used for code completion + return true; + } + resource.addProblem(new org.emftext.language.java.resource.java.IJavaProblem() { + public org.emftext.language.java.resource.java.JavaEProblemSeverity getSeverity() { + return org.emftext.language.java.resource.java.JavaEProblemSeverity.ERROR; + } + public org.emftext.language.java.resource.java.JavaEProblemType getType() { + return org.emftext.language.java.resource.java.JavaEProblemType.SYNTAX_ERROR; + } + public String getMessage() { + return errorMessage; + } + public java.util.Collection getQuickFixes() { + return null; + } + }, column, line, startIndex, stopIndex); + return true; + } + }); + } + + /** + * The statically initialized cache for containment traces.
          + * The initialization makes use of the 1:1 relationship between expectation IDs and defining EClasses.
          + * The cache allows to significantly reduces the number of instantiated JavaContainmentTrace objects. + * + */ + private static LinkedHashMap containmentTraceCache = new LinkedHashMap(); + static { + for(int index = 0; index < JavaExpectationConstants.EXPECTATIONS.length; index++) { + int[] ids = JavaExpectationConstants.EXPECTATIONS[index]; + JavaContainedFeature[] containmentFeatures = new JavaContainedFeature[ids.length - 2]; + for (int i = 2; i < ids.length; i++) { + containmentFeatures[i - 2] = JavaFollowSetProvider.LINKS[ids[i]]; + } + + EClass eClass = null; + if (containmentFeatures.length > 0) { + org.eclipse.emf.ecore.EStructuralFeature feature = containmentFeatures[containmentFeatures.length - 1].getFeature(); + eClass = feature.getEContainingClass(); + } + + JavaContainmentTrace containmentTrace = new JavaContainmentTrace(eClass, containmentFeatures); + containmentTraceCache.put(index, containmentTrace); + } + } + + public void addExpectedElement(int expectationId) { + if (!this.rememberExpectedElements) { + return; + } + int[] ids = JavaExpectationConstants.EXPECTATIONS[expectationId]; + int terminalID = ids[0]; + int followSetID = ids[1]; + org.emftext.language.java.resource.java.IJavaExpectedElement terminal = org.emftext.language.java.resource.java.grammar.JavaFollowSetProvider.TERMINALS[terminalID]; + JavaContainmentTrace containmentTrace = containmentTraceCache.get(expectationId); + org.eclipse.emf.ecore.EObject container = getLastIncompleteElement(); + org.emftext.language.java.resource.java.mopp.JavaExpectedTerminal expectedElement = new org.emftext.language.java.resource.java.mopp.JavaExpectedTerminal(container, terminal, followSetID, containmentTrace); + setPosition(expectedElement, input.index()); + int startIncludingHiddenTokens = expectedElement.getStartIncludingHiddenTokens(); + if (lastStartIncludingHidden >= 0 && lastStartIncludingHidden < startIncludingHiddenTokens && cursorOffset > startIncludingHiddenTokens) { + // clear list of expected elements + this.expectedElements.clear(); + this.expectedElementsIndexOfLastCompleteElement = 0; + } + lastStartIncludingHidden = startIncludingHiddenTokens; + this.expectedElements.add(expectedElement); + } + + protected void collectHiddenTokens(org.eclipse.emf.ecore.EObject element) { + } + + protected void copyLocalizationInfos(final org.eclipse.emf.ecore.EObject source, final org.eclipse.emf.ecore.EObject target) { + if (disableLocationMap) { + return; + } + postParseCommands.add(new org.emftext.language.java.resource.java.IJavaCommand() { + public boolean execute(org.emftext.language.java.resource.java.IJavaTextResource resource) { + org.emftext.language.java.resource.java.IJavaLocationMap locationMap = resource.getLocationMap(); + if (locationMap == null) { + // the locationMap can be null if the parser is used for code completion + return true; + } + locationMap.setCharStart(target, locationMap.getCharStart(source)); + locationMap.setCharEnd(target, locationMap.getCharEnd(source)); + locationMap.setColumn(target, locationMap.getColumn(source)); + locationMap.setLine(target, locationMap.getLine(source)); + return true; + } + }); + } + + protected void copyLocalizationInfos(final org.antlr.runtime3_4_0.CommonToken source, final org.eclipse.emf.ecore.EObject target) { + if (disableLocationMap) { + return; + } + postParseCommands.add(new org.emftext.language.java.resource.java.IJavaCommand() { + public boolean execute(org.emftext.language.java.resource.java.IJavaTextResource resource) { + org.emftext.language.java.resource.java.IJavaLocationMap locationMap = resource.getLocationMap(); + if (locationMap == null) { + // the locationMap can be null if the parser is used for code completion + return true; + } + if (source == null) { + return true; + } + locationMap.setCharStart(target, source.getStartIndex()); + locationMap.setCharEnd(target, source.getStopIndex()); + locationMap.setColumn(target, source.getCharPositionInLine()); + locationMap.setLine(target, source.getLine()); + return true; + } + }); + } + + /** + * Sets the end character index and the last line for the given object in the + * location map. + */ + protected void setLocalizationEnd(java.util.Collection> postParseCommands , final org.eclipse.emf.ecore.EObject object, final int endChar, final int endLine) { + if (disableLocationMap) { + return; + } + postParseCommands.add(new org.emftext.language.java.resource.java.IJavaCommand() { + public boolean execute(org.emftext.language.java.resource.java.IJavaTextResource resource) { + org.emftext.language.java.resource.java.IJavaLocationMap locationMap = resource.getLocationMap(); + if (locationMap == null) { + // the locationMap can be null if the parser is used for code completion + return true; + } + locationMap.setCharEnd(object, endChar); + locationMap.setLine(object, endLine); + return true; + } + }); + } + + public org.emftext.language.java.resource.java.IJavaTextParser createInstance(java.io.InputStream actualInputStream, String encoding) { + try { + if (encoding == null) { + return new JavaParser(new org.antlr.runtime3_4_0.CommonTokenStream(new JavaLexer(new org.antlr.runtime3_4_0.ANTLRInputStream(actualInputStream)))); + } else { + return new JavaParser(new org.antlr.runtime3_4_0.CommonTokenStream(new JavaLexer(new org.antlr.runtime3_4_0.ANTLRInputStream(actualInputStream, encoding)))); + } + } catch (java.io.IOException e) { + new org.emftext.language.java.resource.java.util.JavaRuntimeUtil().logError("Error while creating parser.", e); + return null; + } + } + + /** + * This default constructor is only used to call createInstance() on it. + */ + public JavaParser() { + super(null); + } + + protected org.eclipse.emf.ecore.EObject doParse() throws org.antlr.runtime3_4_0.RecognitionException { + this.lastPosition = 0; + // required because the lexer class can not be subclassed + ((JavaLexer) getTokenStream().getTokenSource()).lexerExceptions = lexerExceptions; + ((JavaLexer) getTokenStream().getTokenSource()).lexerExceptionsPosition = lexerExceptionsPosition; + Object typeObject = getTypeObject(); + if (typeObject == null) { + return start(); + } else if (typeObject instanceof org.eclipse.emf.ecore.EClass) { + org.eclipse.emf.ecore.EClass type = (org.eclipse.emf.ecore.EClass) typeObject; + if (type.getInstanceClass() == org.emftext.language.java.containers.EmptyModel.class) { + return parse_org_emftext_language_java_containers_EmptyModel(); + } + if (type.getInstanceClass() == org.emftext.language.java.containers.Package.class) { + return parse_org_emftext_language_java_containers_Package(); + } + if (type.getInstanceClass() == org.emftext.language.java.containers.CompilationUnit.class) { + return parse_org_emftext_language_java_containers_CompilationUnit(); + } + if (type.getInstanceClass() == org.emftext.language.java.imports.ClassifierImport.class) { + return parse_org_emftext_language_java_imports_ClassifierImport(); + } + if (type.getInstanceClass() == org.emftext.language.java.imports.PackageImport.class) { + return parse_org_emftext_language_java_imports_PackageImport(); + } + if (type.getInstanceClass() == org.emftext.language.java.imports.StaticMemberImport.class) { + return parse_org_emftext_language_java_imports_StaticMemberImport(); + } + if (type.getInstanceClass() == org.emftext.language.java.imports.StaticClassifierImport.class) { + return parse_org_emftext_language_java_imports_StaticClassifierImport(); + } + if (type.getInstanceClass() == org.emftext.language.java.classifiers.Class.class) { + return parse_org_emftext_language_java_classifiers_Class(); + } + if (type.getInstanceClass() == org.emftext.language.java.classifiers.AnonymousClass.class) { + return parse_org_emftext_language_java_classifiers_AnonymousClass(); + } + if (type.getInstanceClass() == org.emftext.language.java.classifiers.Interface.class) { + return parse_org_emftext_language_java_classifiers_Interface(); + } + if (type.getInstanceClass() == org.emftext.language.java.classifiers.Enumeration.class) { + return parse_org_emftext_language_java_classifiers_Enumeration(); + } + if (type.getInstanceClass() == org.emftext.language.java.classifiers.Annotation.class) { + return parse_org_emftext_language_java_classifiers_Annotation(); + } + if (type.getInstanceClass() == org.emftext.language.java.annotations.AnnotationInstance.class) { + return parse_org_emftext_language_java_annotations_AnnotationInstance(); + } + if (type.getInstanceClass() == org.emftext.language.java.annotations.SingleAnnotationParameter.class) { + return parse_org_emftext_language_java_annotations_SingleAnnotationParameter(); + } + if (type.getInstanceClass() == org.emftext.language.java.annotations.AnnotationParameterList.class) { + return parse_org_emftext_language_java_annotations_AnnotationParameterList(); + } + if (type.getInstanceClass() == org.emftext.language.java.annotations.AnnotationAttributeSetting.class) { + return parse_org_emftext_language_java_annotations_AnnotationAttributeSetting(); + } + if (type.getInstanceClass() == org.emftext.language.java.generics.TypeParameter.class) { + return parse_org_emftext_language_java_generics_TypeParameter(); + } + if (type.getInstanceClass() == org.emftext.language.java.members.EnumConstant.class) { + return parse_org_emftext_language_java_members_EnumConstant(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.Block.class) { + return parse_org_emftext_language_java_statements_Block(); + } + if (type.getInstanceClass() == org.emftext.language.java.members.Constructor.class) { + return parse_org_emftext_language_java_members_Constructor(); + } + if (type.getInstanceClass() == org.emftext.language.java.members.InterfaceMethod.class) { + return parse_org_emftext_language_java_members_InterfaceMethod(); + } + if (type.getInstanceClass() == org.emftext.language.java.members.ClassMethod.class) { + return parse_org_emftext_language_java_members_ClassMethod(); + } + if (type.getInstanceClass() == org.emftext.language.java.annotations.AnnotationAttribute.class) { + return parse_org_emftext_language_java_annotations_AnnotationAttribute(); + } + if (type.getInstanceClass() == org.emftext.language.java.parameters.OrdinaryParameter.class) { + return parse_org_emftext_language_java_parameters_OrdinaryParameter(); + } + if (type.getInstanceClass() == org.emftext.language.java.parameters.VariableLengthParameter.class) { + return parse_org_emftext_language_java_parameters_VariableLengthParameter(); + } + if (type.getInstanceClass() == org.emftext.language.java.variables.LocalVariable.class) { + return parse_org_emftext_language_java_variables_LocalVariable(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.LocalVariableStatement.class) { + return parse_org_emftext_language_java_statements_LocalVariableStatement(); + } + if (type.getInstanceClass() == org.emftext.language.java.variables.AdditionalLocalVariable.class) { + return parse_org_emftext_language_java_variables_AdditionalLocalVariable(); + } + if (type.getInstanceClass() == org.emftext.language.java.members.Field.class) { + return parse_org_emftext_language_java_members_Field(); + } + if (type.getInstanceClass() == org.emftext.language.java.members.AdditionalField.class) { + return parse_org_emftext_language_java_members_AdditionalField(); + } + if (type.getInstanceClass() == org.emftext.language.java.members.EmptyMember.class) { + return parse_org_emftext_language_java_members_EmptyMember(); + } + if (type.getInstanceClass() == org.emftext.language.java.instantiations.NewConstructorCall.class) { + return parse_org_emftext_language_java_instantiations_NewConstructorCall(); + } + if (type.getInstanceClass() == org.emftext.language.java.instantiations.ExplicitConstructorCall.class) { + return parse_org_emftext_language_java_instantiations_ExplicitConstructorCall(); + } + if (type.getInstanceClass() == org.emftext.language.java.arrays.ArrayInstantiationByValuesTyped.class) { + return parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped(); + } + if (type.getInstanceClass() == org.emftext.language.java.arrays.ArrayInstantiationByValuesUntyped.class) { + return parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped(); + } + if (type.getInstanceClass() == org.emftext.language.java.arrays.ArrayInstantiationBySize.class) { + return parse_org_emftext_language_java_arrays_ArrayInstantiationBySize(); + } + if (type.getInstanceClass() == org.emftext.language.java.arrays.ArrayInitializer.class) { + return parse_org_emftext_language_java_arrays_ArrayInitializer(); + } + if (type.getInstanceClass() == org.emftext.language.java.arrays.ArraySelector.class) { + return parse_org_emftext_language_java_arrays_ArraySelector(); + } + if (type.getInstanceClass() == org.emftext.language.java.types.NamespaceClassifierReference.class) { + return parse_org_emftext_language_java_types_NamespaceClassifierReference(); + } + if (type.getInstanceClass() == org.emftext.language.java.types.ClassifierReference.class) { + return parse_org_emftext_language_java_types_ClassifierReference(); + } + if (type.getInstanceClass() == org.emftext.language.java.references.MethodCall.class) { + return parse_org_emftext_language_java_references_MethodCall(); + } + if (type.getInstanceClass() == org.emftext.language.java.references.IdentifierReference.class) { + return parse_org_emftext_language_java_references_IdentifierReference(); + } + if (type.getInstanceClass() == org.emftext.language.java.references.ReflectiveClassReference.class) { + return parse_org_emftext_language_java_references_ReflectiveClassReference(); + } + if (type.getInstanceClass() == org.emftext.language.java.references.SelfReference.class) { + return parse_org_emftext_language_java_references_SelfReference(); + } + if (type.getInstanceClass() == org.emftext.language.java.references.PrimitiveTypeReference.class) { + return parse_org_emftext_language_java_references_PrimitiveTypeReference(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.This.class) { + return parse_org_emftext_language_java_literals_This(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.Super.class) { + return parse_org_emftext_language_java_literals_Super(); + } + if (type.getInstanceClass() == org.emftext.language.java.references.StringReference.class) { + return parse_org_emftext_language_java_references_StringReference(); + } + if (type.getInstanceClass() == org.emftext.language.java.generics.QualifiedTypeArgument.class) { + return parse_org_emftext_language_java_generics_QualifiedTypeArgument(); + } + if (type.getInstanceClass() == org.emftext.language.java.generics.UnknownTypeArgument.class) { + return parse_org_emftext_language_java_generics_UnknownTypeArgument(); + } + if (type.getInstanceClass() == org.emftext.language.java.generics.ExtendsTypeArgument.class) { + return parse_org_emftext_language_java_generics_ExtendsTypeArgument(); + } + if (type.getInstanceClass() == org.emftext.language.java.generics.SuperTypeArgument.class) { + return parse_org_emftext_language_java_generics_SuperTypeArgument(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.Assert.class) { + return parse_org_emftext_language_java_statements_Assert(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.Condition.class) { + return parse_org_emftext_language_java_statements_Condition(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.ForLoop.class) { + return parse_org_emftext_language_java_statements_ForLoop(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.ForEachLoop.class) { + return parse_org_emftext_language_java_statements_ForEachLoop(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.WhileLoop.class) { + return parse_org_emftext_language_java_statements_WhileLoop(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.DoWhileLoop.class) { + return parse_org_emftext_language_java_statements_DoWhileLoop(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.EmptyStatement.class) { + return parse_org_emftext_language_java_statements_EmptyStatement(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.SynchronizedBlock.class) { + return parse_org_emftext_language_java_statements_SynchronizedBlock(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.TryBlock.class) { + return parse_org_emftext_language_java_statements_TryBlock(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.CatchBlock.class) { + return parse_org_emftext_language_java_statements_CatchBlock(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.Switch.class) { + return parse_org_emftext_language_java_statements_Switch(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.NormalSwitchCase.class) { + return parse_org_emftext_language_java_statements_NormalSwitchCase(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.DefaultSwitchCase.class) { + return parse_org_emftext_language_java_statements_DefaultSwitchCase(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.Return.class) { + return parse_org_emftext_language_java_statements_Return(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.Throw.class) { + return parse_org_emftext_language_java_statements_Throw(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.Break.class) { + return parse_org_emftext_language_java_statements_Break(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.Continue.class) { + return parse_org_emftext_language_java_statements_Continue(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.JumpLabel.class) { + return parse_org_emftext_language_java_statements_JumpLabel(); + } + if (type.getInstanceClass() == org.emftext.language.java.statements.ExpressionStatement.class) { + return parse_org_emftext_language_java_statements_ExpressionStatement(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.ExpressionList.class) { + return parse_org_emftext_language_java_expressions_ExpressionList(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.AssignmentExpression.class) { + return parse_org_emftext_language_java_expressions_AssignmentExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.ConditionalExpression.class) { + return parse_org_emftext_language_java_expressions_ConditionalExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.ConditionalOrExpression.class) { + return parse_org_emftext_language_java_expressions_ConditionalOrExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.ConditionalAndExpression.class) { + return parse_org_emftext_language_java_expressions_ConditionalAndExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.InclusiveOrExpression.class) { + return parse_org_emftext_language_java_expressions_InclusiveOrExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.ExclusiveOrExpression.class) { + return parse_org_emftext_language_java_expressions_ExclusiveOrExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.AndExpression.class) { + return parse_org_emftext_language_java_expressions_AndExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.EqualityExpression.class) { + return parse_org_emftext_language_java_expressions_EqualityExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.InstanceOfExpression.class) { + return parse_org_emftext_language_java_expressions_InstanceOfExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.RelationExpression.class) { + return parse_org_emftext_language_java_expressions_RelationExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.ShiftExpression.class) { + return parse_org_emftext_language_java_expressions_ShiftExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.AdditiveExpression.class) { + return parse_org_emftext_language_java_expressions_AdditiveExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.MultiplicativeExpression.class) { + return parse_org_emftext_language_java_expressions_MultiplicativeExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.UnaryExpression.class) { + return parse_org_emftext_language_java_expressions_UnaryExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.SuffixUnaryModificationExpression.class) { + return parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.PrefixUnaryModificationExpression.class) { + return parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.CastExpression.class) { + return parse_org_emftext_language_java_expressions_CastExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.expressions.NestedExpression.class) { + return parse_org_emftext_language_java_expressions_NestedExpression(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.Assignment.class) { + return parse_org_emftext_language_java_operators_Assignment(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.AssignmentPlus.class) { + return parse_org_emftext_language_java_operators_AssignmentPlus(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.AssignmentMinus.class) { + return parse_org_emftext_language_java_operators_AssignmentMinus(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.AssignmentMultiplication.class) { + return parse_org_emftext_language_java_operators_AssignmentMultiplication(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.AssignmentDivision.class) { + return parse_org_emftext_language_java_operators_AssignmentDivision(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.AssignmentAnd.class) { + return parse_org_emftext_language_java_operators_AssignmentAnd(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.AssignmentOr.class) { + return parse_org_emftext_language_java_operators_AssignmentOr(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.AssignmentExclusiveOr.class) { + return parse_org_emftext_language_java_operators_AssignmentExclusiveOr(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.AssignmentModulo.class) { + return parse_org_emftext_language_java_operators_AssignmentModulo(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.AssignmentLeftShift.class) { + return parse_org_emftext_language_java_operators_AssignmentLeftShift(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.AssignmentRightShift.class) { + return parse_org_emftext_language_java_operators_AssignmentRightShift(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.AssignmentUnsignedRightShift.class) { + return parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.Addition.class) { + return parse_org_emftext_language_java_operators_Addition(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.Subtraction.class) { + return parse_org_emftext_language_java_operators_Subtraction(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.Multiplication.class) { + return parse_org_emftext_language_java_operators_Multiplication(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.Division.class) { + return parse_org_emftext_language_java_operators_Division(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.Remainder.class) { + return parse_org_emftext_language_java_operators_Remainder(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.LessThan.class) { + return parse_org_emftext_language_java_operators_LessThan(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.LessThanOrEqual.class) { + return parse_org_emftext_language_java_operators_LessThanOrEqual(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.GreaterThan.class) { + return parse_org_emftext_language_java_operators_GreaterThan(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.GreaterThanOrEqual.class) { + return parse_org_emftext_language_java_operators_GreaterThanOrEqual(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.LeftShift.class) { + return parse_org_emftext_language_java_operators_LeftShift(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.RightShift.class) { + return parse_org_emftext_language_java_operators_RightShift(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.UnsignedRightShift.class) { + return parse_org_emftext_language_java_operators_UnsignedRightShift(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.Equal.class) { + return parse_org_emftext_language_java_operators_Equal(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.NotEqual.class) { + return parse_org_emftext_language_java_operators_NotEqual(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.PlusPlus.class) { + return parse_org_emftext_language_java_operators_PlusPlus(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.MinusMinus.class) { + return parse_org_emftext_language_java_operators_MinusMinus(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.Complement.class) { + return parse_org_emftext_language_java_operators_Complement(); + } + if (type.getInstanceClass() == org.emftext.language.java.operators.Negate.class) { + return parse_org_emftext_language_java_operators_Negate(); + } + if (type.getInstanceClass() == org.emftext.language.java.arrays.ArrayDimension.class) { + return parse_org_emftext_language_java_arrays_ArrayDimension(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.NullLiteral.class) { + return parse_org_emftext_language_java_literals_NullLiteral(); + } + if (type.getInstanceClass() == org.emftext.language.java.modifiers.Public.class) { + return parse_org_emftext_language_java_modifiers_Public(); + } + if (type.getInstanceClass() == org.emftext.language.java.modifiers.Abstract.class) { + return parse_org_emftext_language_java_modifiers_Abstract(); + } + if (type.getInstanceClass() == org.emftext.language.java.modifiers.Protected.class) { + return parse_org_emftext_language_java_modifiers_Protected(); + } + if (type.getInstanceClass() == org.emftext.language.java.modifiers.Private.class) { + return parse_org_emftext_language_java_modifiers_Private(); + } + if (type.getInstanceClass() == org.emftext.language.java.modifiers.Final.class) { + return parse_org_emftext_language_java_modifiers_Final(); + } + if (type.getInstanceClass() == org.emftext.language.java.modifiers.Static.class) { + return parse_org_emftext_language_java_modifiers_Static(); + } + if (type.getInstanceClass() == org.emftext.language.java.modifiers.Native.class) { + return parse_org_emftext_language_java_modifiers_Native(); + } + if (type.getInstanceClass() == org.emftext.language.java.modifiers.Synchronized.class) { + return parse_org_emftext_language_java_modifiers_Synchronized(); + } + if (type.getInstanceClass() == org.emftext.language.java.modifiers.Transient.class) { + return parse_org_emftext_language_java_modifiers_Transient(); + } + if (type.getInstanceClass() == org.emftext.language.java.modifiers.Volatile.class) { + return parse_org_emftext_language_java_modifiers_Volatile(); + } + if (type.getInstanceClass() == org.emftext.language.java.modifiers.Strictfp.class) { + return parse_org_emftext_language_java_modifiers_Strictfp(); + } + if (type.getInstanceClass() == org.emftext.language.java.types.Void.class) { + return parse_org_emftext_language_java_types_Void(); + } + if (type.getInstanceClass() == org.emftext.language.java.types.Boolean.class) { + return parse_org_emftext_language_java_types_Boolean(); + } + if (type.getInstanceClass() == org.emftext.language.java.types.Char.class) { + return parse_org_emftext_language_java_types_Char(); + } + if (type.getInstanceClass() == org.emftext.language.java.types.Byte.class) { + return parse_org_emftext_language_java_types_Byte(); + } + if (type.getInstanceClass() == org.emftext.language.java.types.Short.class) { + return parse_org_emftext_language_java_types_Short(); + } + if (type.getInstanceClass() == org.emftext.language.java.types.Int.class) { + return parse_org_emftext_language_java_types_Int(); + } + if (type.getInstanceClass() == org.emftext.language.java.types.Long.class) { + return parse_org_emftext_language_java_types_Long(); + } + if (type.getInstanceClass() == org.emftext.language.java.types.Float.class) { + return parse_org_emftext_language_java_types_Float(); + } + if (type.getInstanceClass() == org.emftext.language.java.types.Double.class) { + return parse_org_emftext_language_java_types_Double(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.DecimalLongLiteral.class) { + return parse_org_emftext_language_java_literals_DecimalLongLiteral(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.DecimalFloatLiteral.class) { + return parse_org_emftext_language_java_literals_DecimalFloatLiteral(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.DecimalIntegerLiteral.class) { + return parse_org_emftext_language_java_literals_DecimalIntegerLiteral(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.DecimalDoubleLiteral.class) { + return parse_org_emftext_language_java_literals_DecimalDoubleLiteral(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.HexLongLiteral.class) { + return parse_org_emftext_language_java_literals_HexLongLiteral(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.HexFloatLiteral.class) { + return parse_org_emftext_language_java_literals_HexFloatLiteral(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.HexDoubleLiteral.class) { + return parse_org_emftext_language_java_literals_HexDoubleLiteral(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.HexIntegerLiteral.class) { + return parse_org_emftext_language_java_literals_HexIntegerLiteral(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.OctalLongLiteral.class) { + return parse_org_emftext_language_java_literals_OctalLongLiteral(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.OctalIntegerLiteral.class) { + return parse_org_emftext_language_java_literals_OctalIntegerLiteral(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.CharacterLiteral.class) { + return parse_org_emftext_language_java_literals_CharacterLiteral(); + } + if (type.getInstanceClass() == org.emftext.language.java.literals.BooleanLiteral.class) { + return parse_org_emftext_language_java_literals_BooleanLiteral(); + } + } + throw new org.emftext.language.java.resource.java.mopp.JavaUnexpectedContentTypeException(typeObject); + } + + public int getMismatchedTokenRecoveryTries() { + return mismatchedTokenRecoveryTries; + } + + public Object getMissingSymbol(org.antlr.runtime3_4_0.IntStream arg0, org.antlr.runtime3_4_0.RecognitionException arg1, int arg2, org.antlr.runtime3_4_0.BitSet arg3) { + mismatchedTokenRecoveryTries++; + return super.getMissingSymbol(arg0, arg1, arg2, arg3); + } + + public Object getParseToIndexTypeObject() { + return parseToIndexTypeObject; + } + + protected Object getTypeObject() { + Object typeObject = getParseToIndexTypeObject(); + if (typeObject != null) { + return typeObject; + } + java.util.Map options = getOptions(); + if (options != null) { + typeObject = options.get(org.emftext.language.java.resource.java.IJavaOptions.RESOURCE_CONTENT_TYPE); + } + return typeObject; + } + + /** + * Implementation that calls {@link #doParse()} and handles the thrown + * RecognitionExceptions. + */ + public org.emftext.language.java.resource.java.IJavaParseResult parse() { + terminateParsing = false; + postParseCommands = new java.util.ArrayList>(); + org.emftext.language.java.resource.java.mopp.JavaParseResult parseResult = new org.emftext.language.java.resource.java.mopp.JavaParseResult(); + try { + org.eclipse.emf.ecore.EObject result = doParse(); + if (lexerExceptions.isEmpty()) { + parseResult.setRoot(result); + } + } catch (org.antlr.runtime3_4_0.RecognitionException re) { + reportError(re); + } catch (java.lang.IllegalArgumentException iae) { + if ("The 'no null' constraint is violated".equals(iae.getMessage())) { + // can be caused if a null is set on EMF models where not allowed. this will just + // happen if other errors occurred before + } else { + iae.printStackTrace(); + } + } + for (org.antlr.runtime3_4_0.RecognitionException re : lexerExceptions) { + reportLexicalError(re); + } + parseResult.getPostParseCommands().addAll(postParseCommands); + return parseResult; + } + + public java.util.List parseToExpectedElements(org.eclipse.emf.ecore.EClass type, org.emftext.language.java.resource.java.IJavaTextResource dummyResource, int cursorOffset) { + this.rememberExpectedElements = true; + this.parseToIndexTypeObject = type; + this.cursorOffset = cursorOffset; + this.lastStartIncludingHidden = -1; + final org.antlr.runtime3_4_0.CommonTokenStream tokenStream = (org.antlr.runtime3_4_0.CommonTokenStream) getTokenStream(); + org.emftext.language.java.resource.java.IJavaParseResult result = parse(); + for (org.eclipse.emf.ecore.EObject incompleteObject : incompleteObjects) { + org.antlr.runtime3_4_0.Lexer lexer = (org.antlr.runtime3_4_0.Lexer) tokenStream.getTokenSource(); + int endChar = lexer.getCharIndex(); + int endLine = lexer.getLine(); + setLocalizationEnd(result.getPostParseCommands(), incompleteObject, endChar, endLine); + } + if (result != null) { + org.eclipse.emf.ecore.EObject root = result.getRoot(); + if (root != null) { + dummyResource.getContentsInternal().add(root); + } + for (org.emftext.language.java.resource.java.IJavaCommand command : result.getPostParseCommands()) { + command.execute(dummyResource); + } + } + // remove all expected elements that were added after the last complete element + expectedElements = expectedElements.subList(0, expectedElementsIndexOfLastCompleteElement + 1); + int lastFollowSetID = expectedElements.get(expectedElementsIndexOfLastCompleteElement).getFollowSetID(); + java.util.Set currentFollowSet = new java.util.LinkedHashSet(); + java.util.List newFollowSet = new java.util.ArrayList(); + for (int i = expectedElementsIndexOfLastCompleteElement; i >= 0; i--) { + org.emftext.language.java.resource.java.mopp.JavaExpectedTerminal expectedElementI = expectedElements.get(i); + if (expectedElementI.getFollowSetID() == lastFollowSetID) { + currentFollowSet.add(expectedElementI); + } else { + break; + } + } + int followSetID = 804; + int i; + for (i = tokenIndexOfLastCompleteElement; i < tokenStream.size(); i++) { + org.antlr.runtime3_4_0.CommonToken nextToken = (org.antlr.runtime3_4_0.CommonToken) tokenStream.get(i); + if (nextToken.getType() < 0) { + break; + } + if (nextToken.getChannel() == 99) { + // hidden tokens do not reduce the follow set + } else { + // now that we have found the next visible token the position for that expected + // terminals can be set + for (org.emftext.language.java.resource.java.mopp.JavaExpectedTerminal nextFollow : newFollowSet) { + lastTokenIndex = 0; + setPosition(nextFollow, i); + } + newFollowSet.clear(); + // normal tokens do reduce the follow set - only elements that match the token are + // kept + for (org.emftext.language.java.resource.java.mopp.JavaExpectedTerminal nextFollow : currentFollowSet) { + if (nextFollow.getTerminal().getTokenNames().contains(getTokenNames()[nextToken.getType()])) { + // keep this one - it matches + java.util.Collection> newFollowers = nextFollow.getTerminal().getFollowers(); + for (org.emftext.language.java.resource.java.util.JavaPair newFollowerPair : newFollowers) { + org.emftext.language.java.resource.java.IJavaExpectedElement newFollower = newFollowerPair.getLeft(); + org.eclipse.emf.ecore.EObject container = getLastIncompleteElement(); + org.emftext.language.java.resource.java.grammar.JavaContainmentTrace containmentTrace = new org.emftext.language.java.resource.java.grammar.JavaContainmentTrace(null, newFollowerPair.getRight()); + org.emftext.language.java.resource.java.mopp.JavaExpectedTerminal newFollowTerminal = new org.emftext.language.java.resource.java.mopp.JavaExpectedTerminal(container, newFollower, followSetID, containmentTrace); + newFollowSet.add(newFollowTerminal); + expectedElements.add(newFollowTerminal); + } + } + } + currentFollowSet.clear(); + currentFollowSet.addAll(newFollowSet); + } + followSetID++; + } + // after the last token in the stream we must set the position for the elements + // that were added during the last iteration of the loop + for (org.emftext.language.java.resource.java.mopp.JavaExpectedTerminal nextFollow : newFollowSet) { + lastTokenIndex = 0; + setPosition(nextFollow, i); + } + return this.expectedElements; + } + + public void setPosition(org.emftext.language.java.resource.java.mopp.JavaExpectedTerminal expectedElement, int tokenIndex) { + int currentIndex = Math.max(0, tokenIndex); + for (int index = lastTokenIndex; index < currentIndex; index++) { + if (index >= input.size()) { + break; + } + org.antlr.runtime3_4_0.CommonToken tokenAtIndex = (org.antlr.runtime3_4_0.CommonToken) input.get(index); + stopIncludingHiddenTokens = tokenAtIndex.getStopIndex() + 1; + if (tokenAtIndex.getChannel() != 99 && !anonymousTokens.contains(tokenAtIndex)) { + stopExcludingHiddenTokens = tokenAtIndex.getStopIndex() + 1; + } + } + lastTokenIndex = Math.max(0, currentIndex); + expectedElement.setPosition(stopExcludingHiddenTokens, stopIncludingHiddenTokens); + } + + public Object recoverFromMismatchedToken(org.antlr.runtime3_4_0.IntStream input, int ttype, org.antlr.runtime3_4_0.BitSet follow) throws org.antlr.runtime3_4_0.RecognitionException { + if (!rememberExpectedElements) { + return super.recoverFromMismatchedToken(input, ttype, follow); + } else { + return null; + } + } + + /** + * Translates errors thrown by the parser into human readable messages. + */ + public void reportError(final org.antlr.runtime3_4_0.RecognitionException e) { + String message = e.getMessage(); + if (e instanceof org.antlr.runtime3_4_0.MismatchedTokenException) { + org.antlr.runtime3_4_0.MismatchedTokenException mte = (org.antlr.runtime3_4_0.MismatchedTokenException) e; + String expectedTokenName = formatTokenName(mte.expecting); + String actualTokenName = formatTokenName(e.token.getType()); + message = "Syntax error on token \"" + e.token.getText() + " (" + actualTokenName + ")\", \"" + expectedTokenName + "\" expected"; + } else if (e instanceof org.antlr.runtime3_4_0.MismatchedTreeNodeException) { + org.antlr.runtime3_4_0.MismatchedTreeNodeException mtne = (org.antlr.runtime3_4_0.MismatchedTreeNodeException) e; + String expectedTokenName = formatTokenName(mtne.expecting); + message = "mismatched tree node: " + "xxx" + "; tokenName " + expectedTokenName; + } else if (e instanceof org.antlr.runtime3_4_0.NoViableAltException) { + message = "Syntax error on token \"" + e.token.getText() + "\", check following tokens"; + } else if (e instanceof org.antlr.runtime3_4_0.EarlyExitException) { + message = "Syntax error on token \"" + e.token.getText() + "\", delete this token"; + } else if (e instanceof org.antlr.runtime3_4_0.MismatchedSetException) { + org.antlr.runtime3_4_0.MismatchedSetException mse = (org.antlr.runtime3_4_0.MismatchedSetException) e; + message = "mismatched token: " + e.token + "; expecting set " + mse.expecting; + } else if (e instanceof org.antlr.runtime3_4_0.MismatchedNotSetException) { + org.antlr.runtime3_4_0.MismatchedNotSetException mse = (org.antlr.runtime3_4_0.MismatchedNotSetException) e; + message = "mismatched token: " + e.token + "; expecting set " + mse.expecting; + } else if (e instanceof org.antlr.runtime3_4_0.FailedPredicateException) { + org.antlr.runtime3_4_0.FailedPredicateException fpe = (org.antlr.runtime3_4_0.FailedPredicateException) e; + message = "rule " + fpe.ruleName + " failed predicate: {" + fpe.predicateText + "}?"; + } + // the resource may be null if the parser is used for code completion + final String finalMessage = message; + if (e.token instanceof org.antlr.runtime3_4_0.CommonToken) { + final org.antlr.runtime3_4_0.CommonToken ct = (org.antlr.runtime3_4_0.CommonToken) e.token; + addErrorToResource(finalMessage, ct.getCharPositionInLine(), ct.getLine(), ct.getStartIndex(), ct.getStopIndex()); + } else { + addErrorToResource(finalMessage, e.token.getCharPositionInLine(), e.token.getLine(), 1, 5); + } + } + + /** + * Translates errors thrown by the lexer into human readable messages. + */ + public void reportLexicalError(final org.antlr.runtime3_4_0.RecognitionException e) { + String message = ""; + if (e instanceof org.antlr.runtime3_4_0.MismatchedTokenException) { + org.antlr.runtime3_4_0.MismatchedTokenException mte = (org.antlr.runtime3_4_0.MismatchedTokenException) e; + message = "Syntax error on token \"" + ((char) e.c) + "\", \"" + (char) mte.expecting + "\" expected"; + } else if (e instanceof org.antlr.runtime3_4_0.NoViableAltException) { + message = "Syntax error on token \"" + ((char) e.c) + "\", delete this token"; + } else if (e instanceof org.antlr.runtime3_4_0.EarlyExitException) { + org.antlr.runtime3_4_0.EarlyExitException eee = (org.antlr.runtime3_4_0.EarlyExitException) e; + message = "required (...)+ loop (decision=" + eee.decisionNumber + ") did not match anything; on line " + e.line + ":" + e.charPositionInLine + " char=" + ((char) e.c) + "'"; + } else if (e instanceof org.antlr.runtime3_4_0.MismatchedSetException) { + org.antlr.runtime3_4_0.MismatchedSetException mse = (org.antlr.runtime3_4_0.MismatchedSetException) e; + message = "mismatched char: '" + ((char) e.c) + "' on line " + e.line + ":" + e.charPositionInLine + "; expecting set " + mse.expecting; + } else if (e instanceof org.antlr.runtime3_4_0.MismatchedNotSetException) { + org.antlr.runtime3_4_0.MismatchedNotSetException mse = (org.antlr.runtime3_4_0.MismatchedNotSetException) e; + message = "mismatched char: '" + ((char) e.c) + "' on line " + e.line + ":" + e.charPositionInLine + "; expecting set " + mse.expecting; + } else if (e instanceof org.antlr.runtime3_4_0.MismatchedRangeException) { + org.antlr.runtime3_4_0.MismatchedRangeException mre = (org.antlr.runtime3_4_0.MismatchedRangeException) e; + message = "mismatched char: '" + ((char) e.c) + "' on line " + e.line + ":" + e.charPositionInLine + "; expecting set '" + (char) mre.a + "'..'" + (char) mre.b + "'"; + } else if (e instanceof org.antlr.runtime3_4_0.FailedPredicateException) { + org.antlr.runtime3_4_0.FailedPredicateException fpe = (org.antlr.runtime3_4_0.FailedPredicateException) e; + message = "rule " + fpe.ruleName + " failed predicate: {" + fpe.predicateText + "}?"; + } + addErrorToResource(message, e.charPositionInLine, e.line, lexerExceptionsPosition.get(lexerExceptions.indexOf(e)), lexerExceptionsPosition.get(lexerExceptions.indexOf(e))); + } + + private void startIncompleteElement(Object object) { + if (object instanceof org.eclipse.emf.ecore.EObject) { + this.incompleteObjects.add((org.eclipse.emf.ecore.EObject) object); + } + } + + private void completedElement(Object object, boolean isContainment) { + if (isContainment && !this.incompleteObjects.isEmpty()) { + boolean exists = this.incompleteObjects.remove(object); + if (!exists) { + } + } + if (object instanceof org.eclipse.emf.ecore.EObject) { + this.tokenIndexOfLastCompleteElement = getTokenStream().index(); + this.expectedElementsIndexOfLastCompleteElement = expectedElements.size() - 1; + } + } + + private org.eclipse.emf.ecore.EObject getLastIncompleteElement() { + if (incompleteObjects.isEmpty()) { + return null; + } + return incompleteObjects.get(incompleteObjects.size() - 1); + } + + + + + // $ANTLR start "start" + // Java.g:958:1: start returns [ org.eclipse.emf.ecore.EObject element = null] : (c0= parse_org_emftext_language_java_containers_CompilationUnit |c1= parse_org_emftext_language_java_containers_Package |c2= parse_org_emftext_language_java_containers_EmptyModel ) EOF ; + public final org.eclipse.emf.ecore.EObject start() throws RecognitionException { + org.eclipse.emf.ecore.EObject element = null; + + int start_StartIndex = input.index(); + + org.emftext.language.java.containers.CompilationUnit c0 =null; + + org.emftext.language.java.containers.Package c1 =null; + + org.emftext.language.java.containers.EmptyModel c2 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 1) ) { return element; } + + // Java.g:959:2: ( (c0= parse_org_emftext_language_java_containers_CompilationUnit |c1= parse_org_emftext_language_java_containers_Package |c2= parse_org_emftext_language_java_containers_EmptyModel ) EOF ) + // Java.g:960:2: (c0= parse_org_emftext_language_java_containers_CompilationUnit |c1= parse_org_emftext_language_java_containers_Package |c2= parse_org_emftext_language_java_containers_EmptyModel ) EOF + { + if ( state.backtracking==0 ) { + // follow set for start rule(s) + addExpectedElement(0); + addExpectedElement(1); + addExpectedElement(2); + addExpectedElement(3); + addExpectedElement(4); + addExpectedElement(5); + addExpectedElement(6); + addExpectedElement(7); + addExpectedElement(8); + addExpectedElement(9); + addExpectedElement(10); + addExpectedElement(11); + addExpectedElement(12); + addExpectedElement(13); + addExpectedElement(14); + addExpectedElement(15); + addExpectedElement(16); + addExpectedElement(17); + addExpectedElement(18); + addExpectedElement(19); + addExpectedElement(20); + addExpectedElement(21); + addExpectedElement(22); + addExpectedElement(23); + addExpectedElement(24); + addExpectedElement(25); + addExpectedElement(26); + addExpectedElement(27); + addExpectedElement(28); + expectedElementsIndexOfLastCompleteElement = 0; + } + + // Java.g:993:2: (c0= parse_org_emftext_language_java_containers_CompilationUnit |c1= parse_org_emftext_language_java_containers_Package |c2= parse_org_emftext_language_java_containers_EmptyModel ) + int alt1=3; + switch ( input.LA(1) ) { + case 86: + { + int LA1_1 = input.LA(2); + + if ( (synpred1_Java()) ) { + alt1=1; + } + else if ( (synpred2_Java()) ) { + alt1=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 1, 1, input); + + throw nvae; + + } + } + break; + case 78: + { + int LA1_2 = input.LA(2); + + if ( (synpred1_Java()) ) { + alt1=1; + } + else if ( (true) ) { + alt1=3; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 1, 2, input); + + throw nvae; + + } + } + break; + case 42: + { + int LA1_3 = input.LA(2); + + if ( (synpred1_Java()) ) { + alt1=1; + } + else if ( (true) ) { + alt1=3; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 1, 3, input); + + throw nvae; + + } + } + break; + case 48: + { + int LA1_4 = input.LA(2); + + if ( (synpred1_Java()) ) { + alt1=1; + } + else if ( (synpred2_Java()) ) { + alt1=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 1, 4, input); + + throw nvae; + + } + } + break; + case 56: + case 64: + case 70: + case 72: + case 81: + case 83: + case 87: + case 88: + case 89: + case 92: + case 93: + case 96: + case 100: + case 103: + { + alt1=1; + } + break; + case EOF: + { + alt1=3; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 1, 0, input); + + throw nvae; + + } + + switch (alt1) { + case 1 : + // Java.g:994:3: c0= parse_org_emftext_language_java_containers_CompilationUnit + { + pushFollow(FOLLOW_parse_org_emftext_language_java_containers_CompilationUnit_in_start82); + c0=parse_org_emftext_language_java_containers_CompilationUnit(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; } + + } + break; + case 2 : + // Java.g:995:8: c1= parse_org_emftext_language_java_containers_Package + { + pushFollow(FOLLOW_parse_org_emftext_language_java_containers_Package_in_start96); + c1=parse_org_emftext_language_java_containers_Package(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; } + + } + break; + case 3 : + // Java.g:996:8: c2= parse_org_emftext_language_java_containers_EmptyModel + { + pushFollow(FOLLOW_parse_org_emftext_language_java_containers_EmptyModel_in_start110); + c2=parse_org_emftext_language_java_containers_EmptyModel(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; } + + } + break; + + } + + + match(input,EOF,FOLLOW_EOF_in_start117); if (state.failed) return element; + + if ( state.backtracking==0 ) { + retrieveLayoutInformation(element, null, null, false); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 1, start_StartIndex); } + + } + return element; + } + // $ANTLR end "start" + + + + // $ANTLR start "parse_org_emftext_language_java_containers_EmptyModel" + // Java.g:1004:1: parse_org_emftext_language_java_containers_EmptyModel returns [org.emftext.language.java.containers.EmptyModel element = null] : ( ( (a0_0= parse_org_emftext_language_java_imports_Import ) a1= ';' ) )* ( (a2= ';' ) )* ; + public final org.emftext.language.java.containers.EmptyModel parse_org_emftext_language_java_containers_EmptyModel() throws RecognitionException { + org.emftext.language.java.containers.EmptyModel element = null; + + int parse_org_emftext_language_java_containers_EmptyModel_StartIndex = input.index(); + + Token a1=null; + Token a2=null; + org.emftext.language.java.imports.Import a0_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 2) ) { return element; } + + // Java.g:1007:2: ( ( ( (a0_0= parse_org_emftext_language_java_imports_Import ) a1= ';' ) )* ( (a2= ';' ) )* ) + // Java.g:1008:2: ( ( (a0_0= parse_org_emftext_language_java_imports_Import ) a1= ';' ) )* ( (a2= ';' ) )* + { + // Java.g:1008:2: ( ( (a0_0= parse_org_emftext_language_java_imports_Import ) a1= ';' ) )* + loop2: + do { + int alt2=2; + int LA2_0 = input.LA(1); + + if ( (LA2_0==78) ) { + alt2=1; + } + + + switch (alt2) { + case 1 : + // Java.g:1009:3: ( (a0_0= parse_org_emftext_language_java_imports_Import ) a1= ';' ) + { + // Java.g:1009:3: ( (a0_0= parse_org_emftext_language_java_imports_Import ) a1= ';' ) + // Java.g:1010:4: (a0_0= parse_org_emftext_language_java_imports_Import ) a1= ';' + { + // Java.g:1010:4: (a0_0= parse_org_emftext_language_java_imports_Import ) + // Java.g:1011:5: a0_0= parse_org_emftext_language_java_imports_Import + { + pushFollow(FOLLOW_parse_org_emftext_language_java_imports_Import_in_parse_org_emftext_language_java_containers_EmptyModel158); + a0_0=parse_org_emftext_language_java_imports_Import(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createEmptyModel(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.containers.ContainersPackage.EMPTY_MODEL__IMPORTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_0_0_0_0_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(29); + } + + a1=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_containers_EmptyModel186); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createEmptyModel(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_0_0_0_0_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(30); + addExpectedElement(31); + addExpectedElement(32); + addExpectedElement(33); + addExpectedElement(34); + } + + } + + + } + break; + + default : + break loop2; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(35); + addExpectedElement(36); + addExpectedElement(37); + addExpectedElement(38); + addExpectedElement(39); + } + + // Java.g:1065:2: ( (a2= ';' ) )* + loop3: + do { + int alt3=2; + int LA3_0 = input.LA(1); + + if ( (LA3_0==42) ) { + alt3=1; + } + + + switch (alt3) { + case 1 : + // Java.g:1066:3: (a2= ';' ) + { + // Java.g:1066:3: (a2= ';' ) + // Java.g:1067:4: a2= ';' + { + a2=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_containers_EmptyModel228); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createEmptyModel(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_0_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(40); + } + + } + + + } + break; + + default : + break loop3; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(41); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 2, parse_org_emftext_language_java_containers_EmptyModel_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_containers_EmptyModel" + + + + // $ANTLR start "parse_org_emftext_language_java_containers_Package" + // Java.g:1090:1: parse_org_emftext_language_java_containers_Package returns [org.emftext.language.java.containers.Package element = null] : ( (a0_0= parse_org_emftext_language_java_annotations_AnnotationInstance ) )* a1= 'package' ( ( (a2= IDENTIFIER ) a3= '.' ) )* (a4= IDENTIFIER ) a5= ';' ( (a6= ';' ) )? ( ( (a7_0= parse_org_emftext_language_java_imports_Import ) ) )* ( (a8= ';' ) )* ; + public final org.emftext.language.java.containers.Package parse_org_emftext_language_java_containers_Package() throws RecognitionException { + org.emftext.language.java.containers.Package element = null; + + int parse_org_emftext_language_java_containers_Package_StartIndex = input.index(); + + Token a1=null; + Token a2=null; + Token a3=null; + Token a4=null; + Token a5=null; + Token a6=null; + Token a8=null; + org.emftext.language.java.annotations.AnnotationInstance a0_0 =null; + + org.emftext.language.java.imports.Import a7_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 3) ) { return element; } + + // Java.g:1093:2: ( ( (a0_0= parse_org_emftext_language_java_annotations_AnnotationInstance ) )* a1= 'package' ( ( (a2= IDENTIFIER ) a3= '.' ) )* (a4= IDENTIFIER ) a5= ';' ( (a6= ';' ) )? ( ( (a7_0= parse_org_emftext_language_java_imports_Import ) ) )* ( (a8= ';' ) )* ) + // Java.g:1094:2: ( (a0_0= parse_org_emftext_language_java_annotations_AnnotationInstance ) )* a1= 'package' ( ( (a2= IDENTIFIER ) a3= '.' ) )* (a4= IDENTIFIER ) a5= ';' ( (a6= ';' ) )? ( ( (a7_0= parse_org_emftext_language_java_imports_Import ) ) )* ( (a8= ';' ) )* + { + // Java.g:1094:2: ( (a0_0= parse_org_emftext_language_java_annotations_AnnotationInstance ) )* + loop4: + do { + int alt4=2; + int LA4_0 = input.LA(1); + + if ( (LA4_0==48) ) { + alt4=1; + } + + + switch (alt4) { + case 1 : + // Java.g:1095:3: (a0_0= parse_org_emftext_language_java_annotations_AnnotationInstance ) + { + // Java.g:1095:3: (a0_0= parse_org_emftext_language_java_annotations_AnnotationInstance ) + // Java.g:1096:4: a0_0= parse_org_emftext_language_java_annotations_AnnotationInstance + { + pushFollow(FOLLOW_parse_org_emftext_language_java_annotations_AnnotationInstance_in_parse_org_emftext_language_java_containers_Package285); + a0_0=parse_org_emftext_language_java_annotations_AnnotationInstance(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createPackage(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.containers.ContainersPackage.PACKAGE__ANNOTATIONS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_1_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop4; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(42); + addExpectedElement(43); + } + + a1=(Token)match(input,86,FOLLOW_86_in_parse_org_emftext_language_java_containers_Package311); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createPackage(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_1_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(44); + addExpectedElement(45); + } + + // Java.g:1138:2: ( ( (a2= IDENTIFIER ) a3= '.' ) )* + loop5: + do { + int alt5=2; + int LA5_0 = input.LA(1); + + if ( (LA5_0==IDENTIFIER) ) { + int LA5_1 = input.LA(2); + + if ( (LA5_1==37) ) { + alt5=1; + } + + + } + + + switch (alt5) { + case 1 : + // Java.g:1139:3: ( (a2= IDENTIFIER ) a3= '.' ) + { + // Java.g:1139:3: ( (a2= IDENTIFIER ) a3= '.' ) + // Java.g:1140:4: (a2= IDENTIFIER ) a3= '.' + { + // Java.g:1140:4: (a2= IDENTIFIER ) + // Java.g:1141:5: a2= IDENTIFIER + { + a2=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_containers_Package340); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createPackage(); + startIncompleteElement(element); + } + if (a2 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a2.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.containers.ContainersPackage.PACKAGE__NAMESPACES), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a2).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a2).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a2).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a2).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + addObjectToList(element, org.emftext.language.java.containers.ContainersPackage.PACKAGE__NAMESPACES, value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_1_0_0_2_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a2, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(46); + } + + a3=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_containers_Package373); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createPackage(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_1_0_0_2_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(47); + addExpectedElement(48); + } + + } + + + } + break; + + default : + break loop5; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(49); + addExpectedElement(50); + } + + // Java.g:1199:2: (a4= IDENTIFIER ) + // Java.g:1200:3: a4= IDENTIFIER + { + a4=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_containers_Package410); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createPackage(); + startIncompleteElement(element); + } + if (a4 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a4.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.containers.ContainersPackage.PACKAGE__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a4).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a4).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a4).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a4).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.containers.ContainersPackage.PACKAGE__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_1_0_0_3, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a4, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(51); + } + + a5=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_containers_Package431); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createPackage(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_1_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(52); + addExpectedElement(53); + addExpectedElement(54); + addExpectedElement(55); + addExpectedElement(56); + addExpectedElement(57); + } + + // Java.g:1254:2: ( (a6= ';' ) )? + int alt6=2; + int LA6_0 = input.LA(1); + + if ( (LA6_0==42) ) { + int LA6_1 = input.LA(2); + + if ( (synpred7_Java()) ) { + alt6=1; + } + } + switch (alt6) { + case 1 : + // Java.g:1255:3: (a6= ';' ) + { + // Java.g:1255:3: (a6= ';' ) + // Java.g:1256:4: a6= ';' + { + a6=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_containers_Package454); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createPackage(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_1_0_0_5_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a6, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(58); + addExpectedElement(59); + addExpectedElement(60); + addExpectedElement(61); + addExpectedElement(62); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(63); + addExpectedElement(64); + addExpectedElement(65); + addExpectedElement(66); + addExpectedElement(67); + } + + // Java.g:1285:2: ( ( (a7_0= parse_org_emftext_language_java_imports_Import ) ) )* + loop7: + do { + int alt7=2; + int LA7_0 = input.LA(1); + + if ( (LA7_0==78) ) { + alt7=1; + } + + + switch (alt7) { + case 1 : + // Java.g:1286:3: ( (a7_0= parse_org_emftext_language_java_imports_Import ) ) + { + // Java.g:1286:3: ( (a7_0= parse_org_emftext_language_java_imports_Import ) ) + // Java.g:1287:4: (a7_0= parse_org_emftext_language_java_imports_Import ) + { + // Java.g:1287:4: (a7_0= parse_org_emftext_language_java_imports_Import ) + // Java.g:1288:5: a7_0= parse_org_emftext_language_java_imports_Import + { + pushFollow(FOLLOW_parse_org_emftext_language_java_imports_Import_in_parse_org_emftext_language_java_containers_Package502); + a7_0=parse_org_emftext_language_java_imports_Import(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createPackage(); + startIncompleteElement(element); + } + if (a7_0 != null) { + if (a7_0 != null) { + Object value = a7_0; + addObjectToList(element, org.emftext.language.java.containers.ContainersPackage.PACKAGE__IMPORTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_1_0_0_8_0_0_0, a7_0, true); + copyLocalizationInfos(a7_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(68); + addExpectedElement(69); + addExpectedElement(70); + addExpectedElement(71); + addExpectedElement(72); + } + + } + + + } + break; + + default : + break loop7; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(73); + addExpectedElement(74); + addExpectedElement(75); + addExpectedElement(76); + addExpectedElement(77); + } + + // Java.g:1328:2: ( (a8= ';' ) )* + loop8: + do { + int alt8=2; + int LA8_0 = input.LA(1); + + if ( (LA8_0==42) ) { + alt8=1; + } + + + switch (alt8) { + case 1 : + // Java.g:1329:3: (a8= ';' ) + { + // Java.g:1329:3: (a8= ';' ) + // Java.g:1330:4: a8= ';' + { + a8=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_containers_Package552); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createPackage(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_1_0_0_9_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a8, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(78); + } + + } + + + } + break; + + default : + break loop8; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(79); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 3, parse_org_emftext_language_java_containers_Package_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_containers_Package" + + + + // $ANTLR start "parse_org_emftext_language_java_containers_CompilationUnit" + // Java.g:1353:1: parse_org_emftext_language_java_containers_CompilationUnit returns [org.emftext.language.java.containers.CompilationUnit element = null] : ( (a0= 'package' (a1= IDENTIFIER ) ( (a2= '.' (a3= IDENTIFIER ) ) )* a4= ';' ) )? ( ( (a5_0= parse_org_emftext_language_java_imports_Import ) ) )* ( (a6= ';' ) )* ( ( (a7_0= parse_org_emftext_language_java_classifiers_ConcreteClassifier ) ( (a8= ';' ) )* ) )+ ( (a9= '\\u001a' ) )? ; + public final org.emftext.language.java.containers.CompilationUnit parse_org_emftext_language_java_containers_CompilationUnit() throws RecognitionException { + org.emftext.language.java.containers.CompilationUnit element = null; + + int parse_org_emftext_language_java_containers_CompilationUnit_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a2=null; + Token a3=null; + Token a4=null; + Token a6=null; + Token a8=null; + Token a9=null; + org.emftext.language.java.imports.Import a5_0 =null; + + org.emftext.language.java.classifiers.ConcreteClassifier a7_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 4) ) { return element; } + + // Java.g:1356:2: ( ( (a0= 'package' (a1= IDENTIFIER ) ( (a2= '.' (a3= IDENTIFIER ) ) )* a4= ';' ) )? ( ( (a5_0= parse_org_emftext_language_java_imports_Import ) ) )* ( (a6= ';' ) )* ( ( (a7_0= parse_org_emftext_language_java_classifiers_ConcreteClassifier ) ( (a8= ';' ) )* ) )+ ( (a9= '\\u001a' ) )? ) + // Java.g:1357:2: ( (a0= 'package' (a1= IDENTIFIER ) ( (a2= '.' (a3= IDENTIFIER ) ) )* a4= ';' ) )? ( ( (a5_0= parse_org_emftext_language_java_imports_Import ) ) )* ( (a6= ';' ) )* ( ( (a7_0= parse_org_emftext_language_java_classifiers_ConcreteClassifier ) ( (a8= ';' ) )* ) )+ ( (a9= '\\u001a' ) )? + { + // Java.g:1357:2: ( (a0= 'package' (a1= IDENTIFIER ) ( (a2= '.' (a3= IDENTIFIER ) ) )* a4= ';' ) )? + int alt10=2; + int LA10_0 = input.LA(1); + + if ( (LA10_0==86) ) { + alt10=1; + } + switch (alt10) { + case 1 : + // Java.g:1358:3: (a0= 'package' (a1= IDENTIFIER ) ( (a2= '.' (a3= IDENTIFIER ) ) )* a4= ';' ) + { + // Java.g:1358:3: (a0= 'package' (a1= IDENTIFIER ) ( (a2= '.' (a3= IDENTIFIER ) ) )* a4= ';' ) + // Java.g:1359:4: a0= 'package' (a1= IDENTIFIER ) ( (a2= '.' (a3= IDENTIFIER ) ) )* a4= ';' + { + a0=(Token)match(input,86,FOLLOW_86_in_parse_org_emftext_language_java_containers_CompilationUnit609); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createCompilationUnit(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_2_0_0_0_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(80); + } + + // Java.g:1373:4: (a1= IDENTIFIER ) + // Java.g:1374:5: a1= IDENTIFIER + { + a1=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_containers_CompilationUnit635); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createCompilationUnit(); + startIncompleteElement(element); + } + if (a1 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a1.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.containers.ContainersPackage.COMPILATION_UNIT__NAMESPACES), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a1).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a1).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a1).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a1).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + addObjectToList(element, org.emftext.language.java.containers.ContainersPackage.COMPILATION_UNIT__NAMESPACES, value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_2_0_0_0_0_0_1, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a1, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(81); + addExpectedElement(82); + } + + // Java.g:1410:4: ( (a2= '.' (a3= IDENTIFIER ) ) )* + loop9: + do { + int alt9=2; + int LA9_0 = input.LA(1); + + if ( (LA9_0==37) ) { + alt9=1; + } + + + switch (alt9) { + case 1 : + // Java.g:1411:5: (a2= '.' (a3= IDENTIFIER ) ) + { + // Java.g:1411:5: (a2= '.' (a3= IDENTIFIER ) ) + // Java.g:1412:6: a2= '.' (a3= IDENTIFIER ) + { + a2=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_containers_CompilationUnit681); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createCompilationUnit(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_2_0_0_0_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(83); + } + + // Java.g:1426:6: (a3= IDENTIFIER ) + // Java.g:1427:7: a3= IDENTIFIER + { + a3=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_containers_CompilationUnit715); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createCompilationUnit(); + startIncompleteElement(element); + } + if (a3 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a3.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.containers.ContainersPackage.COMPILATION_UNIT__NAMESPACES), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a3).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a3).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a3).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a3).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + addObjectToList(element, org.emftext.language.java.containers.ContainersPackage.COMPILATION_UNIT__NAMESPACES, value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_2_0_0_0_0_0_2_0_0_1, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a3, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(84); + addExpectedElement(85); + } + + } + + + } + break; + + default : + break loop9; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(86); + addExpectedElement(87); + } + + a4=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_containers_CompilationUnit783); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createCompilationUnit(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_2_0_0_0_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(88); + addExpectedElement(89); + addExpectedElement(90); + addExpectedElement(91); + addExpectedElement(92); + addExpectedElement(93); + addExpectedElement(94); + addExpectedElement(95); + addExpectedElement(96); + addExpectedElement(97); + addExpectedElement(98); + addExpectedElement(99); + addExpectedElement(100); + addExpectedElement(101); + addExpectedElement(102); + addExpectedElement(103); + addExpectedElement(104); + addExpectedElement(105); + addExpectedElement(106); + addExpectedElement(107); + addExpectedElement(108); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(109); + addExpectedElement(110); + addExpectedElement(111); + addExpectedElement(112); + addExpectedElement(113); + addExpectedElement(114); + addExpectedElement(115); + addExpectedElement(116); + addExpectedElement(117); + addExpectedElement(118); + addExpectedElement(119); + addExpectedElement(120); + addExpectedElement(121); + addExpectedElement(122); + addExpectedElement(123); + addExpectedElement(124); + addExpectedElement(125); + addExpectedElement(126); + addExpectedElement(127); + addExpectedElement(128); + addExpectedElement(129); + } + + // Java.g:1532:2: ( ( (a5_0= parse_org_emftext_language_java_imports_Import ) ) )* + loop11: + do { + int alt11=2; + int LA11_0 = input.LA(1); + + if ( (LA11_0==78) ) { + alt11=1; + } + + + switch (alt11) { + case 1 : + // Java.g:1533:3: ( (a5_0= parse_org_emftext_language_java_imports_Import ) ) + { + // Java.g:1533:3: ( (a5_0= parse_org_emftext_language_java_imports_Import ) ) + // Java.g:1534:4: (a5_0= parse_org_emftext_language_java_imports_Import ) + { + // Java.g:1534:4: (a5_0= parse_org_emftext_language_java_imports_Import ) + // Java.g:1535:5: a5_0= parse_org_emftext_language_java_imports_Import + { + pushFollow(FOLLOW_parse_org_emftext_language_java_imports_Import_in_parse_org_emftext_language_java_containers_CompilationUnit831); + a5_0=parse_org_emftext_language_java_imports_Import(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createCompilationUnit(); + startIncompleteElement(element); + } + if (a5_0 != null) { + if (a5_0 != null) { + Object value = a5_0; + addObjectToList(element, org.emftext.language.java.containers.ContainersPackage.COMPILATION_UNIT__IMPORTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_2_0_0_3_0_0_0, a5_0, true); + copyLocalizationInfos(a5_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(130); + addExpectedElement(131); + addExpectedElement(132); + addExpectedElement(133); + addExpectedElement(134); + addExpectedElement(135); + addExpectedElement(136); + addExpectedElement(137); + addExpectedElement(138); + addExpectedElement(139); + addExpectedElement(140); + addExpectedElement(141); + addExpectedElement(142); + addExpectedElement(143); + addExpectedElement(144); + addExpectedElement(145); + addExpectedElement(146); + addExpectedElement(147); + addExpectedElement(148); + addExpectedElement(149); + addExpectedElement(150); + } + + } + + + } + break; + + default : + break loop11; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(151); + addExpectedElement(152); + addExpectedElement(153); + addExpectedElement(154); + addExpectedElement(155); + addExpectedElement(156); + addExpectedElement(157); + addExpectedElement(158); + addExpectedElement(159); + addExpectedElement(160); + addExpectedElement(161); + addExpectedElement(162); + addExpectedElement(163); + addExpectedElement(164); + addExpectedElement(165); + addExpectedElement(166); + addExpectedElement(167); + addExpectedElement(168); + addExpectedElement(169); + addExpectedElement(170); + addExpectedElement(171); + } + + // Java.g:1607:2: ( (a6= ';' ) )* + loop12: + do { + int alt12=2; + int LA12_0 = input.LA(1); + + if ( (LA12_0==42) ) { + alt12=1; + } + + + switch (alt12) { + case 1 : + // Java.g:1608:3: (a6= ';' ) + { + // Java.g:1608:3: (a6= ';' ) + // Java.g:1609:4: a6= ';' + { + a6=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_containers_CompilationUnit881); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createCompilationUnit(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_2_0_0_4_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a6, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(172); + addExpectedElement(173); + addExpectedElement(174); + addExpectedElement(175); + addExpectedElement(176); + addExpectedElement(177); + addExpectedElement(178); + addExpectedElement(179); + addExpectedElement(180); + addExpectedElement(181); + addExpectedElement(182); + addExpectedElement(183); + addExpectedElement(184); + addExpectedElement(185); + addExpectedElement(186); + addExpectedElement(187); + addExpectedElement(188); + } + + } + + + } + break; + + default : + break loop12; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(189); + addExpectedElement(190); + addExpectedElement(191); + addExpectedElement(192); + addExpectedElement(193); + addExpectedElement(194); + addExpectedElement(195); + addExpectedElement(196); + addExpectedElement(197); + addExpectedElement(198); + addExpectedElement(199); + addExpectedElement(200); + addExpectedElement(201); + addExpectedElement(202); + addExpectedElement(203); + addExpectedElement(204); + addExpectedElement(205); + } + + // Java.g:1662:2: ( ( (a7_0= parse_org_emftext_language_java_classifiers_ConcreteClassifier ) ( (a8= ';' ) )* ) )+ + int cnt14=0; + loop14: + do { + int alt14=2; + int LA14_0 = input.LA(1); + + if ( (LA14_0==48||LA14_0==56||LA14_0==64||LA14_0==70||LA14_0==72||LA14_0==81||LA14_0==83||(LA14_0 >= 87 && LA14_0 <= 89)||(LA14_0 >= 92 && LA14_0 <= 93)||LA14_0==96||LA14_0==100||LA14_0==103) ) { + alt14=1; + } + + + switch (alt14) { + case 1 : + // Java.g:1663:3: ( (a7_0= parse_org_emftext_language_java_classifiers_ConcreteClassifier ) ( (a8= ';' ) )* ) + { + // Java.g:1663:3: ( (a7_0= parse_org_emftext_language_java_classifiers_ConcreteClassifier ) ( (a8= ';' ) )* ) + // Java.g:1664:4: (a7_0= parse_org_emftext_language_java_classifiers_ConcreteClassifier ) ( (a8= ';' ) )* + { + // Java.g:1664:4: (a7_0= parse_org_emftext_language_java_classifiers_ConcreteClassifier ) + // Java.g:1665:5: a7_0= parse_org_emftext_language_java_classifiers_ConcreteClassifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_ConcreteClassifier_in_parse_org_emftext_language_java_containers_CompilationUnit929); + a7_0=parse_org_emftext_language_java_classifiers_ConcreteClassifier(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createCompilationUnit(); + startIncompleteElement(element); + } + if (a7_0 != null) { + if (a7_0 != null) { + Object value = a7_0; + addObjectToList(element, org.emftext.language.java.containers.ContainersPackage.COMPILATION_UNIT__CLASSIFIERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_2_0_0_6_0_0_0, a7_0, true); + copyLocalizationInfos(a7_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(206); + addExpectedElement(207); + addExpectedElement(208); + addExpectedElement(209); + addExpectedElement(210); + addExpectedElement(211); + addExpectedElement(212); + addExpectedElement(213); + addExpectedElement(214); + addExpectedElement(215); + addExpectedElement(216); + addExpectedElement(217); + addExpectedElement(218); + addExpectedElement(219); + addExpectedElement(220); + addExpectedElement(221); + addExpectedElement(222); + addExpectedElement(223); + } + + // Java.g:1707:4: ( (a8= ';' ) )* + loop13: + do { + int alt13=2; + int LA13_0 = input.LA(1); + + if ( (LA13_0==42) ) { + alt13=1; + } + + + switch (alt13) { + case 1 : + // Java.g:1708:5: (a8= ';' ) + { + // Java.g:1708:5: (a8= ';' ) + // Java.g:1709:6: a8= ';' + { + a8=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_containers_CompilationUnit970); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createCompilationUnit(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_2_0_0_6_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a8, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(224); + addExpectedElement(225); + addExpectedElement(226); + addExpectedElement(227); + addExpectedElement(228); + addExpectedElement(229); + addExpectedElement(230); + addExpectedElement(231); + addExpectedElement(232); + addExpectedElement(233); + addExpectedElement(234); + addExpectedElement(235); + addExpectedElement(236); + addExpectedElement(237); + addExpectedElement(238); + addExpectedElement(239); + addExpectedElement(240); + addExpectedElement(241); + } + + } + + + } + break; + + default : + break loop13; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(242); + addExpectedElement(243); + addExpectedElement(244); + addExpectedElement(245); + addExpectedElement(246); + addExpectedElement(247); + addExpectedElement(248); + addExpectedElement(249); + addExpectedElement(250); + addExpectedElement(251); + addExpectedElement(252); + addExpectedElement(253); + addExpectedElement(254); + addExpectedElement(255); + addExpectedElement(256); + addExpectedElement(257); + addExpectedElement(258); + addExpectedElement(259); + } + + } + + + } + break; + + default : + if ( cnt14 >= 1 ) break loop14; + if (state.backtracking>0) {state.failed=true; return element;} + EarlyExitException eee = + new EarlyExitException(14, input); + throw eee; + } + cnt14++; + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(260); + addExpectedElement(261); + addExpectedElement(262); + addExpectedElement(263); + addExpectedElement(264); + addExpectedElement(265); + addExpectedElement(266); + addExpectedElement(267); + addExpectedElement(268); + addExpectedElement(269); + addExpectedElement(270); + addExpectedElement(271); + addExpectedElement(272); + addExpectedElement(273); + addExpectedElement(274); + addExpectedElement(275); + addExpectedElement(276); + } + + // Java.g:1787:2: ( (a9= '\\u001a' ) )? + int alt15=2; + int LA15_0 = input.LA(1); + + if ( (LA15_0==50) ) { + alt15=1; + } + switch (alt15) { + case 1 : + // Java.g:1788:3: (a9= '\\u001a' ) + { + // Java.g:1788:3: (a9= '\\u001a' ) + // Java.g:1789:4: a9= '\\u001a' + { + a9=(Token)match(input,50,FOLLOW_50_in_parse_org_emftext_language_java_containers_CompilationUnit1041); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.containers.ContainersFactory.eINSTANCE.createCompilationUnit(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_2_0_0_7_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a9, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 4, parse_org_emftext_language_java_containers_CompilationUnit_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_containers_CompilationUnit" + + + + // $ANTLR start "parse_org_emftext_language_java_imports_ClassifierImport" + // Java.g:1810:1: parse_org_emftext_language_java_imports_ClassifierImport returns [org.emftext.language.java.imports.ClassifierImport element = null] : a0= 'import' ( ( (a1= IDENTIFIER ) a2= '.' ) )* (a3= IDENTIFIER ) a4= ';' ; + private JavaContextDependentURIFragmentFactory classifierImportURIFragmentFactory = new JavaContextDependentURIFragmentFactory(getReferenceResolverSwitch().getClassifierImportClassifierReferenceResolver()); + public final org.emftext.language.java.imports.ClassifierImport parse_org_emftext_language_java_imports_ClassifierImport() throws RecognitionException { + org.emftext.language.java.imports.ClassifierImport element = null; + + int parse_org_emftext_language_java_imports_ClassifierImport_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a2=null; + Token a3=null; + Token a4=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 5) ) { return element; } + + // Java.g:1813:2: (a0= 'import' ( ( (a1= IDENTIFIER ) a2= '.' ) )* (a3= IDENTIFIER ) a4= ';' ) + // Java.g:1814:2: a0= 'import' ( ( (a1= IDENTIFIER ) a2= '.' ) )* (a3= IDENTIFIER ) a4= ';' + { + a0=(Token)match(input,78,FOLLOW_78_in_parse_org_emftext_language_java_imports_ClassifierImport1089); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createClassifierImport(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_3_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(277); + addExpectedElement(278); + } + + // Java.g:1829:2: ( ( (a1= IDENTIFIER ) a2= '.' ) )* + loop16: + do { + int alt16=2; + int LA16_0 = input.LA(1); + + if ( (LA16_0==IDENTIFIER) ) { + int LA16_1 = input.LA(2); + + if ( (LA16_1==37) ) { + alt16=1; + } + + + } + + + switch (alt16) { + case 1 : + // Java.g:1830:3: ( (a1= IDENTIFIER ) a2= '.' ) + { + // Java.g:1830:3: ( (a1= IDENTIFIER ) a2= '.' ) + // Java.g:1831:4: (a1= IDENTIFIER ) a2= '.' + { + // Java.g:1831:4: (a1= IDENTIFIER ) + // Java.g:1832:5: a1= IDENTIFIER + { + a1=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_imports_ClassifierImport1118); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createClassifierImport(); + startIncompleteElement(element); + } + if (a1 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a1.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.CLASSIFIER_IMPORT__NAMESPACES), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a1).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a1).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a1).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a1).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + addObjectToList(element, org.emftext.language.java.imports.ImportsPackage.CLASSIFIER_IMPORT__NAMESPACES, value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_3_0_0_1_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a1, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(279); + } + + a2=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_imports_ClassifierImport1151); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createClassifierImport(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_3_0_0_1_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(280); + addExpectedElement(281); + } + + } + + + } + break; + + default : + break loop16; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(282); + addExpectedElement(283); + } + + // Java.g:1890:2: (a3= IDENTIFIER ) + // Java.g:1891:3: a3= IDENTIFIER + { + a3=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_imports_ClassifierImport1188); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createClassifierImport(); + startIncompleteElement(element); + } + if (a3 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a3.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.CLASSIFIER_IMPORT__CLASSIFIER), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a3).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a3).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a3).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a3).getStopIndex()); + } + String resolved = (String) resolvedObject; + org.emftext.language.java.classifiers.ConcreteClassifier proxy = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + collectHiddenTokens(element); + + registerContextDependentProxy(classifierImportURIFragmentFactory, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.CLASSIFIER_IMPORT__CLASSIFIER), resolved, proxy); + if (proxy != null) { + Object value = proxy; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.CLASSIFIER_IMPORT__CLASSIFIER), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_3_0_0_2, proxy, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a3, element); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a3, proxy); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(284); + } + + a4=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_imports_ClassifierImport1209); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createClassifierImport(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_3_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(285); + addExpectedElement(286); + addExpectedElement(287); + addExpectedElement(288); + addExpectedElement(289); + addExpectedElement(290); + addExpectedElement(291); + addExpectedElement(292); + addExpectedElement(293); + addExpectedElement(294); + addExpectedElement(295); + addExpectedElement(296); + addExpectedElement(297); + addExpectedElement(298); + addExpectedElement(299); + addExpectedElement(300); + addExpectedElement(301); + addExpectedElement(302); + addExpectedElement(303); + addExpectedElement(304); + addExpectedElement(305); + addExpectedElement(306); + addExpectedElement(307); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 5, parse_org_emftext_language_java_imports_ClassifierImport_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_imports_ClassifierImport" + + + + // $ANTLR start "parse_org_emftext_language_java_imports_PackageImport" + // Java.g:1968:1: parse_org_emftext_language_java_imports_PackageImport returns [org.emftext.language.java.imports.PackageImport element = null] : a0= 'import' ( ( (a1= IDENTIFIER ) a2= '.' ) )+ a3= '*' a4= ';' ; + public final org.emftext.language.java.imports.PackageImport parse_org_emftext_language_java_imports_PackageImport() throws RecognitionException { + org.emftext.language.java.imports.PackageImport element = null; + + int parse_org_emftext_language_java_imports_PackageImport_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a2=null; + Token a3=null; + Token a4=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 6) ) { return element; } + + // Java.g:1971:2: (a0= 'import' ( ( (a1= IDENTIFIER ) a2= '.' ) )+ a3= '*' a4= ';' ) + // Java.g:1972:2: a0= 'import' ( ( (a1= IDENTIFIER ) a2= '.' ) )+ a3= '*' a4= ';' + { + a0=(Token)match(input,78,FOLLOW_78_in_parse_org_emftext_language_java_imports_PackageImport1238); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createPackageImport(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_4_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(308); + } + + // Java.g:1986:2: ( ( (a1= IDENTIFIER ) a2= '.' ) )+ + int cnt17=0; + loop17: + do { + int alt17=2; + int LA17_0 = input.LA(1); + + if ( (LA17_0==IDENTIFIER) ) { + alt17=1; + } + + + switch (alt17) { + case 1 : + // Java.g:1987:3: ( (a1= IDENTIFIER ) a2= '.' ) + { + // Java.g:1987:3: ( (a1= IDENTIFIER ) a2= '.' ) + // Java.g:1988:4: (a1= IDENTIFIER ) a2= '.' + { + // Java.g:1988:4: (a1= IDENTIFIER ) + // Java.g:1989:5: a1= IDENTIFIER + { + a1=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_imports_PackageImport1267); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createPackageImport(); + startIncompleteElement(element); + } + if (a1 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a1.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.PACKAGE_IMPORT__NAMESPACES), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a1).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a1).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a1).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a1).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + addObjectToList(element, org.emftext.language.java.imports.ImportsPackage.PACKAGE_IMPORT__NAMESPACES, value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_4_0_0_1_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a1, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(309); + } + + a2=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_imports_PackageImport1300); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createPackageImport(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_4_0_0_1_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(310); + addExpectedElement(311); + } + + } + + + } + break; + + default : + if ( cnt17 >= 1 ) break loop17; + if (state.backtracking>0) {state.failed=true; return element;} + EarlyExitException eee = + new EarlyExitException(17, input); + throw eee; + } + cnt17++; + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(312); + addExpectedElement(313); + } + + a3=(Token)match(input,28,FOLLOW_28_in_parse_org_emftext_language_java_imports_PackageImport1333); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createPackageImport(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_4_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(314); + } + + a4=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_imports_PackageImport1347); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createPackageImport(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_4_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(315); + addExpectedElement(316); + addExpectedElement(317); + addExpectedElement(318); + addExpectedElement(319); + addExpectedElement(320); + addExpectedElement(321); + addExpectedElement(322); + addExpectedElement(323); + addExpectedElement(324); + addExpectedElement(325); + addExpectedElement(326); + addExpectedElement(327); + addExpectedElement(328); + addExpectedElement(329); + addExpectedElement(330); + addExpectedElement(331); + addExpectedElement(332); + addExpectedElement(333); + addExpectedElement(334); + addExpectedElement(335); + addExpectedElement(336); + addExpectedElement(337); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 6, parse_org_emftext_language_java_imports_PackageImport_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_imports_PackageImport" + + + + // $ANTLR start "parse_org_emftext_language_java_imports_StaticMemberImport" + // Java.g:2099:1: parse_org_emftext_language_java_imports_StaticMemberImport returns [org.emftext.language.java.imports.StaticMemberImport element = null] : a0= 'import' (a1_0= parse_org_emftext_language_java_modifiers_Static ) ( ( (a2= IDENTIFIER ) a3= '.' ) )* (a4= IDENTIFIER ) a5= ';' ; + private JavaContextDependentURIFragmentFactory staticMemberImportURIFragmentFactory = new JavaContextDependentURIFragmentFactory(getReferenceResolverSwitch().getStaticMemberImportStaticMembersReferenceResolver()); + public final org.emftext.language.java.imports.StaticMemberImport parse_org_emftext_language_java_imports_StaticMemberImport() throws RecognitionException { + org.emftext.language.java.imports.StaticMemberImport element = null; + + int parse_org_emftext_language_java_imports_StaticMemberImport_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + Token a3=null; + Token a4=null; + Token a5=null; + org.emftext.language.java.modifiers.Static a1_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 7) ) { return element; } + + // Java.g:2102:2: (a0= 'import' (a1_0= parse_org_emftext_language_java_modifiers_Static ) ( ( (a2= IDENTIFIER ) a3= '.' ) )* (a4= IDENTIFIER ) a5= ';' ) + // Java.g:2103:2: a0= 'import' (a1_0= parse_org_emftext_language_java_modifiers_Static ) ( ( (a2= IDENTIFIER ) a3= '.' ) )* (a4= IDENTIFIER ) a5= ';' + { + a0=(Token)match(input,78,FOLLOW_78_in_parse_org_emftext_language_java_imports_StaticMemberImport1376); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createStaticMemberImport(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_5_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(338); + } + + // Java.g:2117:2: (a1_0= parse_org_emftext_language_java_modifiers_Static ) + // Java.g:2118:3: a1_0= parse_org_emftext_language_java_modifiers_Static + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Static_in_parse_org_emftext_language_java_imports_StaticMemberImport1394); + a1_0=parse_org_emftext_language_java_modifiers_Static(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createStaticMemberImport(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.STATIC_MEMBER_IMPORT__STATIC), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_5_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(339); + addExpectedElement(340); + } + + // Java.g:2144:2: ( ( (a2= IDENTIFIER ) a3= '.' ) )* + loop18: + do { + int alt18=2; + int LA18_0 = input.LA(1); + + if ( (LA18_0==IDENTIFIER) ) { + int LA18_1 = input.LA(2); + + if ( (LA18_1==37) ) { + alt18=1; + } + + + } + + + switch (alt18) { + case 1 : + // Java.g:2145:3: ( (a2= IDENTIFIER ) a3= '.' ) + { + // Java.g:2145:3: ( (a2= IDENTIFIER ) a3= '.' ) + // Java.g:2146:4: (a2= IDENTIFIER ) a3= '.' + { + // Java.g:2146:4: (a2= IDENTIFIER ) + // Java.g:2147:5: a2= IDENTIFIER + { + a2=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_imports_StaticMemberImport1427); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createStaticMemberImport(); + startIncompleteElement(element); + } + if (a2 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a2.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.STATIC_MEMBER_IMPORT__NAMESPACES), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a2).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a2).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a2).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a2).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + addObjectToList(element, org.emftext.language.java.imports.ImportsPackage.STATIC_MEMBER_IMPORT__NAMESPACES, value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_5_0_0_2_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a2, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(341); + } + + a3=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_imports_StaticMemberImport1460); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createStaticMemberImport(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_5_0_0_2_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(342); + addExpectedElement(343); + } + + } + + + } + break; + + default : + break loop18; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(344); + addExpectedElement(345); + } + + // Java.g:2205:2: (a4= IDENTIFIER ) + // Java.g:2206:3: a4= IDENTIFIER + { + a4=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_imports_StaticMemberImport1497); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createStaticMemberImport(); + startIncompleteElement(element); + } + if (a4 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a4.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.STATIC_MEMBER_IMPORT__STATIC_MEMBERS), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a4).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a4).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a4).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a4).getStopIndex()); + } + String resolved = (String) resolvedObject; + org.emftext.language.java.references.ReferenceableElement proxy = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + collectHiddenTokens(element); + + registerContextDependentProxy(staticMemberImportURIFragmentFactory, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.STATIC_MEMBER_IMPORT__STATIC_MEMBERS), resolved, proxy); + if (proxy != null) { + Object value = proxy; + addObjectToList(element, org.emftext.language.java.imports.ImportsPackage.STATIC_MEMBER_IMPORT__STATIC_MEMBERS, value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_5_0_0_3, proxy, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a4, element); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a4, proxy); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(346); + } + + a5=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_imports_StaticMemberImport1518); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createStaticMemberImport(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_5_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(347); + addExpectedElement(348); + addExpectedElement(349); + addExpectedElement(350); + addExpectedElement(351); + addExpectedElement(352); + addExpectedElement(353); + addExpectedElement(354); + addExpectedElement(355); + addExpectedElement(356); + addExpectedElement(357); + addExpectedElement(358); + addExpectedElement(359); + addExpectedElement(360); + addExpectedElement(361); + addExpectedElement(362); + addExpectedElement(363); + addExpectedElement(364); + addExpectedElement(365); + addExpectedElement(366); + addExpectedElement(367); + addExpectedElement(368); + addExpectedElement(369); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 7, parse_org_emftext_language_java_imports_StaticMemberImport_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_imports_StaticMemberImport" + + + + // $ANTLR start "parse_org_emftext_language_java_imports_StaticClassifierImport" + // Java.g:2283:1: parse_org_emftext_language_java_imports_StaticClassifierImport returns [org.emftext.language.java.imports.StaticClassifierImport element = null] : a0= 'import' (a1_0= parse_org_emftext_language_java_modifiers_Static ) ( ( (a2= IDENTIFIER ) a3= '.' ) )+ a4= '*' a5= ';' ; + public final org.emftext.language.java.imports.StaticClassifierImport parse_org_emftext_language_java_imports_StaticClassifierImport() throws RecognitionException { + org.emftext.language.java.imports.StaticClassifierImport element = null; + + int parse_org_emftext_language_java_imports_StaticClassifierImport_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + Token a3=null; + Token a4=null; + Token a5=null; + org.emftext.language.java.modifiers.Static a1_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 8) ) { return element; } + + // Java.g:2286:2: (a0= 'import' (a1_0= parse_org_emftext_language_java_modifiers_Static ) ( ( (a2= IDENTIFIER ) a3= '.' ) )+ a4= '*' a5= ';' ) + // Java.g:2287:2: a0= 'import' (a1_0= parse_org_emftext_language_java_modifiers_Static ) ( ( (a2= IDENTIFIER ) a3= '.' ) )+ a4= '*' a5= ';' + { + a0=(Token)match(input,78,FOLLOW_78_in_parse_org_emftext_language_java_imports_StaticClassifierImport1547); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createStaticClassifierImport(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_6_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(370); + } + + // Java.g:2301:2: (a1_0= parse_org_emftext_language_java_modifiers_Static ) + // Java.g:2302:3: a1_0= parse_org_emftext_language_java_modifiers_Static + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Static_in_parse_org_emftext_language_java_imports_StaticClassifierImport1565); + a1_0=parse_org_emftext_language_java_modifiers_Static(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createStaticClassifierImport(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.STATIC_CLASSIFIER_IMPORT__STATIC), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_6_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(371); + } + + // Java.g:2327:2: ( ( (a2= IDENTIFIER ) a3= '.' ) )+ + int cnt19=0; + loop19: + do { + int alt19=2; + int LA19_0 = input.LA(1); + + if ( (LA19_0==IDENTIFIER) ) { + alt19=1; + } + + + switch (alt19) { + case 1 : + // Java.g:2328:3: ( (a2= IDENTIFIER ) a3= '.' ) + { + // Java.g:2328:3: ( (a2= IDENTIFIER ) a3= '.' ) + // Java.g:2329:4: (a2= IDENTIFIER ) a3= '.' + { + // Java.g:2329:4: (a2= IDENTIFIER ) + // Java.g:2330:5: a2= IDENTIFIER + { + a2=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_imports_StaticClassifierImport1598); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createStaticClassifierImport(); + startIncompleteElement(element); + } + if (a2 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a2.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.imports.ImportsPackage.STATIC_CLASSIFIER_IMPORT__NAMESPACES), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a2).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a2).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a2).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a2).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + addObjectToList(element, org.emftext.language.java.imports.ImportsPackage.STATIC_CLASSIFIER_IMPORT__NAMESPACES, value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_6_0_0_2_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a2, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(372); + } + + a3=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_imports_StaticClassifierImport1631); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createStaticClassifierImport(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_6_0_0_2_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(373); + addExpectedElement(374); + } + + } + + + } + break; + + default : + if ( cnt19 >= 1 ) break loop19; + if (state.backtracking>0) {state.failed=true; return element;} + EarlyExitException eee = + new EarlyExitException(19, input); + throw eee; + } + cnt19++; + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(375); + addExpectedElement(376); + } + + a4=(Token)match(input,28,FOLLOW_28_in_parse_org_emftext_language_java_imports_StaticClassifierImport1664); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createStaticClassifierImport(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_6_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(377); + } + + a5=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_imports_StaticClassifierImport1678); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.imports.ImportsFactory.eINSTANCE.createStaticClassifierImport(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_6_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(378); + addExpectedElement(379); + addExpectedElement(380); + addExpectedElement(381); + addExpectedElement(382); + addExpectedElement(383); + addExpectedElement(384); + addExpectedElement(385); + addExpectedElement(386); + addExpectedElement(387); + addExpectedElement(388); + addExpectedElement(389); + addExpectedElement(390); + addExpectedElement(391); + addExpectedElement(392); + addExpectedElement(393); + addExpectedElement(394); + addExpectedElement(395); + addExpectedElement(396); + addExpectedElement(397); + addExpectedElement(398); + addExpectedElement(399); + addExpectedElement(400); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 8, parse_org_emftext_language_java_imports_StaticClassifierImport_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_imports_StaticClassifierImport" + + + + // $ANTLR start "parse_org_emftext_language_java_classifiers_Class" + // Java.g:2440:1: parse_org_emftext_language_java_classifiers_Class returns [org.emftext.language.java.classifiers.Class element = null] : ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* a1= 'class' (a2= IDENTIFIER ) ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a7= '>' ) )? ( (a8= 'extends' (a9_0= parse_org_emftext_language_java_types_TypeReference ) ) )? ( (a10= 'implements' ( (a11_0= parse_org_emftext_language_java_types_TypeReference ) ( (a12= ',' (a13_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) )? a14= '{' ( ( (a15_0= parse_org_emftext_language_java_members_Member ) ) )* a16= '}' ; + public final org.emftext.language.java.classifiers.Class parse_org_emftext_language_java_classifiers_Class() throws RecognitionException { + org.emftext.language.java.classifiers.Class element = null; + + int parse_org_emftext_language_java_classifiers_Class_StartIndex = input.index(); + + Token a1=null; + Token a2=null; + Token a3=null; + Token a5=null; + Token a7=null; + Token a8=null; + Token a10=null; + Token a12=null; + Token a14=null; + Token a16=null; + org.emftext.language.java.modifiers.AnnotationInstanceOrModifier a0_0 =null; + + org.emftext.language.java.generics.TypeParameter a4_0 =null; + + org.emftext.language.java.generics.TypeParameter a6_0 =null; + + org.emftext.language.java.types.TypeReference a9_0 =null; + + org.emftext.language.java.types.TypeReference a11_0 =null; + + org.emftext.language.java.types.TypeReference a13_0 =null; + + org.emftext.language.java.members.Member a15_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 9) ) { return element; } + + // Java.g:2443:2: ( ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* a1= 'class' (a2= IDENTIFIER ) ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a7= '>' ) )? ( (a8= 'extends' (a9_0= parse_org_emftext_language_java_types_TypeReference ) ) )? ( (a10= 'implements' ( (a11_0= parse_org_emftext_language_java_types_TypeReference ) ( (a12= ',' (a13_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) )? a14= '{' ( ( (a15_0= parse_org_emftext_language_java_members_Member ) ) )* a16= '}' ) + // Java.g:2444:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* a1= 'class' (a2= IDENTIFIER ) ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a7= '>' ) )? ( (a8= 'extends' (a9_0= parse_org_emftext_language_java_types_TypeReference ) ) )? ( (a10= 'implements' ( (a11_0= parse_org_emftext_language_java_types_TypeReference ) ( (a12= ',' (a13_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) )? a14= '{' ( ( (a15_0= parse_org_emftext_language_java_members_Member ) ) )* a16= '}' + { + // Java.g:2444:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* + loop20: + do { + int alt20=2; + int LA20_0 = input.LA(1); + + if ( (LA20_0==48||LA20_0==56||LA20_0==72||LA20_0==83||(LA20_0 >= 87 && LA20_0 <= 89)||(LA20_0 >= 92 && LA20_0 <= 93)||LA20_0==96||LA20_0==100||LA20_0==103) ) { + alt20=1; + } + + + switch (alt20) { + case 1 : + // Java.g:2445:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + { + // Java.g:2445:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + // Java.g:2446:4: a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_classifiers_Class1716); + a0_0=parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__ANNOTATIONS_AND_MODIFIERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop20; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(401); + addExpectedElement(402); + addExpectedElement(403); + addExpectedElement(404); + addExpectedElement(405); + addExpectedElement(406); + addExpectedElement(407); + addExpectedElement(408); + addExpectedElement(409); + addExpectedElement(410); + addExpectedElement(411); + addExpectedElement(412); + addExpectedElement(413); + } + + a1=(Token)match(input,64,FOLLOW_64_in_parse_org_emftext_language_java_classifiers_Class1742); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(414); + } + + // Java.g:2498:2: (a2= IDENTIFIER ) + // Java.g:2499:3: a2= IDENTIFIER + { + a2=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_classifiers_Class1760); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + if (a2 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a2.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a2).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a2).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a2).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a2).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_2, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a2, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(415); + addExpectedElement(416); + addExpectedElement(417); + addExpectedElement(418); + } + + // Java.g:2537:2: ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a7= '>' ) )? + int alt22=2; + int LA22_0 = input.LA(1); + + if ( (LA22_0==43) ) { + alt22=1; + } + switch (alt22) { + case 1 : + // Java.g:2538:3: (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a7= '>' ) + { + // Java.g:2538:3: (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a7= '>' ) + // Java.g:2539:4: a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a7= '>' + { + a3=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_classifiers_Class1790); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_3_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(419); + } + + // Java.g:2553:4: (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) + // Java.g:2554:5: a4_0= parse_org_emftext_language_java_generics_TypeParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_classifiers_Class1816); + a4_0=parse_org_emftext_language_java_generics_TypeParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__TYPE_PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_3_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(420); + addExpectedElement(421); + } + + // Java.g:2580:4: ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* + loop21: + do { + int alt21=2; + int LA21_0 = input.LA(1); + + if ( (LA21_0==33) ) { + alt21=1; + } + + + switch (alt21) { + case 1 : + // Java.g:2581:5: (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) + { + // Java.g:2581:5: (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) + // Java.g:2582:6: a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) + { + a5=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_classifiers_Class1857); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_3_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(422); + } + + // Java.g:2596:6: (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) + // Java.g:2597:7: a6_0= parse_org_emftext_language_java_generics_TypeParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_classifiers_Class1891); + a6_0=parse_org_emftext_language_java_generics_TypeParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__TYPE_PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_3_0_0_2_0_0_1, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(423); + addExpectedElement(424); + } + + } + + + } + break; + + default : + break loop21; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(425); + addExpectedElement(426); + } + + a7=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_classifiers_Class1952); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_3_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a7, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(427); + addExpectedElement(428); + addExpectedElement(429); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(430); + addExpectedElement(431); + addExpectedElement(432); + } + + // Java.g:2656:2: ( (a8= 'extends' (a9_0= parse_org_emftext_language_java_types_TypeReference ) ) )? + int alt23=2; + int LA23_0 = input.LA(1); + + if ( (LA23_0==71) ) { + alt23=1; + } + switch (alt23) { + case 1 : + // Java.g:2657:3: (a8= 'extends' (a9_0= parse_org_emftext_language_java_types_TypeReference ) ) + { + // Java.g:2657:3: (a8= 'extends' (a9_0= parse_org_emftext_language_java_types_TypeReference ) ) + // Java.g:2658:4: a8= 'extends' (a9_0= parse_org_emftext_language_java_types_TypeReference ) + { + a8=(Token)match(input,71,FOLLOW_71_in_parse_org_emftext_language_java_classifiers_Class1994); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_4_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a8, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(433); + addExpectedElement(434); + addExpectedElement(435); + addExpectedElement(436); + addExpectedElement(437); + addExpectedElement(438); + addExpectedElement(439); + addExpectedElement(440); + addExpectedElement(441); + addExpectedElement(442); + addExpectedElement(443); + } + + // Java.g:2682:4: (a9_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:2683:5: a9_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_classifiers_Class2020); + a9_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + if (a9_0 != null) { + if (a9_0 != null) { + Object value = a9_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__EXTENDS), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_4_0_0_1, a9_0, true); + copyLocalizationInfos(a9_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(444); + addExpectedElement(445); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(446); + addExpectedElement(447); + } + + // Java.g:2717:2: ( (a10= 'implements' ( (a11_0= parse_org_emftext_language_java_types_TypeReference ) ( (a12= ',' (a13_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) )? + int alt25=2; + int LA25_0 = input.LA(1); + + if ( (LA25_0==77) ) { + alt25=1; + } + switch (alt25) { + case 1 : + // Java.g:2718:3: (a10= 'implements' ( (a11_0= parse_org_emftext_language_java_types_TypeReference ) ( (a12= ',' (a13_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) + { + // Java.g:2718:3: (a10= 'implements' ( (a11_0= parse_org_emftext_language_java_types_TypeReference ) ( (a12= ',' (a13_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) + // Java.g:2719:4: a10= 'implements' ( (a11_0= parse_org_emftext_language_java_types_TypeReference ) ( (a12= ',' (a13_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) + { + a10=(Token)match(input,77,FOLLOW_77_in_parse_org_emftext_language_java_classifiers_Class2070); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_5_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a10, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(448); + addExpectedElement(449); + addExpectedElement(450); + addExpectedElement(451); + addExpectedElement(452); + addExpectedElement(453); + addExpectedElement(454); + addExpectedElement(455); + addExpectedElement(456); + addExpectedElement(457); + addExpectedElement(458); + } + + // Java.g:2743:4: ( (a11_0= parse_org_emftext_language_java_types_TypeReference ) ( (a12= ',' (a13_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) + // Java.g:2744:5: (a11_0= parse_org_emftext_language_java_types_TypeReference ) ( (a12= ',' (a13_0= parse_org_emftext_language_java_types_TypeReference ) ) )* + { + // Java.g:2744:5: (a11_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:2745:6: a11_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_classifiers_Class2103); + a11_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + if (a11_0 != null) { + if (a11_0 != null) { + Object value = a11_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__IMPLEMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_5_0_0_1_0_0_0, a11_0, true); + copyLocalizationInfos(a11_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(459); + addExpectedElement(460); + } + + // Java.g:2771:5: ( (a12= ',' (a13_0= parse_org_emftext_language_java_types_TypeReference ) ) )* + loop24: + do { + int alt24=2; + int LA24_0 = input.LA(1); + + if ( (LA24_0==33) ) { + alt24=1; + } + + + switch (alt24) { + case 1 : + // Java.g:2772:6: (a12= ',' (a13_0= parse_org_emftext_language_java_types_TypeReference ) ) + { + // Java.g:2772:6: (a12= ',' (a13_0= parse_org_emftext_language_java_types_TypeReference ) ) + // Java.g:2773:7: a12= ',' (a13_0= parse_org_emftext_language_java_types_TypeReference ) + { + a12=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_classifiers_Class2151); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_5_0_0_1_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a12, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(461); + addExpectedElement(462); + addExpectedElement(463); + addExpectedElement(464); + addExpectedElement(465); + addExpectedElement(466); + addExpectedElement(467); + addExpectedElement(468); + addExpectedElement(469); + addExpectedElement(470); + addExpectedElement(471); + } + + // Java.g:2797:7: (a13_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:2798:8: a13_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_classifiers_Class2189); + a13_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + if (a13_0 != null) { + if (a13_0 != null) { + Object value = a13_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__IMPLEMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_5_0_0_1_0_0_1_0_0_1, a13_0, true); + copyLocalizationInfos(a13_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(472); + addExpectedElement(473); + } + + } + + + } + break; + + default : + break loop24; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(474); + addExpectedElement(475); + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(476); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(477); + } + + a14=(Token)match(input,105,FOLLOW_105_in_parse_org_emftext_language_java_classifiers_Class2286); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_7, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a14, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(478); + addExpectedElement(479); + addExpectedElement(480); + addExpectedElement(481); + addExpectedElement(482); + addExpectedElement(483); + addExpectedElement(484); + addExpectedElement(485); + addExpectedElement(486); + addExpectedElement(487); + addExpectedElement(488); + addExpectedElement(489); + addExpectedElement(490); + addExpectedElement(491); + addExpectedElement(492); + addExpectedElement(493); + addExpectedElement(494); + addExpectedElement(495); + addExpectedElement(496); + addExpectedElement(497); + addExpectedElement(498); + addExpectedElement(499); + addExpectedElement(500); + addExpectedElement(501); + addExpectedElement(502); + addExpectedElement(503); + addExpectedElement(504); + addExpectedElement(505); + addExpectedElement(506); + addExpectedElement(507); + addExpectedElement(508); + addExpectedElement(509); + addExpectedElement(510); + addExpectedElement(511); + addExpectedElement(512); + } + + // Java.g:2893:2: ( ( (a15_0= parse_org_emftext_language_java_members_Member ) ) )* + loop26: + do { + int alt26=2; + int LA26_0 = input.LA(1); + + if ( (LA26_0==IDENTIFIER||(LA26_0 >= 42 && LA26_0 <= 43)||LA26_0==48||LA26_0==56||LA26_0==58||LA26_0==60||(LA26_0 >= 63 && LA26_0 <= 64)||LA26_0==68||LA26_0==70||LA26_0==72||LA26_0==74||(LA26_0 >= 80 && LA26_0 <= 83)||(LA26_0 >= 87 && LA26_0 <= 89)||(LA26_0 >= 91 && LA26_0 <= 93)||LA26_0==96||LA26_0==100||(LA26_0 >= 102 && LA26_0 <= 103)||LA26_0==105) ) { + alt26=1; + } + + + switch (alt26) { + case 1 : + // Java.g:2894:3: ( (a15_0= parse_org_emftext_language_java_members_Member ) ) + { + // Java.g:2894:3: ( (a15_0= parse_org_emftext_language_java_members_Member ) ) + // Java.g:2895:4: (a15_0= parse_org_emftext_language_java_members_Member ) + { + // Java.g:2895:4: (a15_0= parse_org_emftext_language_java_members_Member ) + // Java.g:2896:5: a15_0= parse_org_emftext_language_java_members_Member + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_Member_in_parse_org_emftext_language_java_classifiers_Class2315); + a15_0=parse_org_emftext_language_java_members_Member(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + if (a15_0 != null) { + if (a15_0 != null) { + Object value = a15_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.CLASS__MEMBERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_8_0_0_1, a15_0, true); + copyLocalizationInfos(a15_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(513); + addExpectedElement(514); + addExpectedElement(515); + addExpectedElement(516); + addExpectedElement(517); + addExpectedElement(518); + addExpectedElement(519); + addExpectedElement(520); + addExpectedElement(521); + addExpectedElement(522); + addExpectedElement(523); + addExpectedElement(524); + addExpectedElement(525); + addExpectedElement(526); + addExpectedElement(527); + addExpectedElement(528); + addExpectedElement(529); + addExpectedElement(530); + addExpectedElement(531); + addExpectedElement(532); + addExpectedElement(533); + addExpectedElement(534); + addExpectedElement(535); + addExpectedElement(536); + addExpectedElement(537); + addExpectedElement(538); + addExpectedElement(539); + addExpectedElement(540); + addExpectedElement(541); + addExpectedElement(542); + addExpectedElement(543); + addExpectedElement(544); + addExpectedElement(545); + addExpectedElement(546); + addExpectedElement(547); + } + + } + + + } + break; + + default : + break loop26; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(548); + addExpectedElement(549); + addExpectedElement(550); + addExpectedElement(551); + addExpectedElement(552); + addExpectedElement(553); + addExpectedElement(554); + addExpectedElement(555); + addExpectedElement(556); + addExpectedElement(557); + addExpectedElement(558); + addExpectedElement(559); + addExpectedElement(560); + addExpectedElement(561); + addExpectedElement(562); + addExpectedElement(563); + addExpectedElement(564); + addExpectedElement(565); + addExpectedElement(566); + addExpectedElement(567); + addExpectedElement(568); + addExpectedElement(569); + addExpectedElement(570); + addExpectedElement(571); + addExpectedElement(572); + addExpectedElement(573); + addExpectedElement(574); + addExpectedElement(575); + addExpectedElement(576); + addExpectedElement(577); + addExpectedElement(578); + addExpectedElement(579); + addExpectedElement(580); + addExpectedElement(581); + addExpectedElement(582); + } + + a16=(Token)match(input,109,FOLLOW_109_in_parse_org_emftext_language_java_classifiers_Class2356); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_7_0_0_10, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a16, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(583); + addExpectedElement(584); + addExpectedElement(585); + addExpectedElement(586); + addExpectedElement(587); + addExpectedElement(588); + addExpectedElement(589); + addExpectedElement(590); + addExpectedElement(591); + addExpectedElement(592); + addExpectedElement(593); + addExpectedElement(594); + addExpectedElement(595); + addExpectedElement(596); + addExpectedElement(597); + addExpectedElement(598); + addExpectedElement(599); + addExpectedElement(600); + addExpectedElement(601); + addExpectedElement(602); + addExpectedElement(603); + addExpectedElement(604); + addExpectedElement(605); + addExpectedElement(606); + addExpectedElement(607); + addExpectedElement(608); + addExpectedElement(609); + addExpectedElement(610); + addExpectedElement(611); + addExpectedElement(612); + addExpectedElement(613); + addExpectedElement(614); + addExpectedElement(615); + addExpectedElement(616); + addExpectedElement(617); + addExpectedElement(618); + addExpectedElement(619); + addExpectedElement(620); + addExpectedElement(621); + addExpectedElement(622); + addExpectedElement(623); + addExpectedElement(624); + addExpectedElement(625); + addExpectedElement(626); + addExpectedElement(627); + addExpectedElement(628); + addExpectedElement(629); + addExpectedElement(630); + addExpectedElement(631); + addExpectedElement(632); + addExpectedElement(633); + addExpectedElement(634); + addExpectedElement(635); + addExpectedElement(636); + addExpectedElement(637); + addExpectedElement(638); + addExpectedElement(639); + addExpectedElement(640); + addExpectedElement(641); + addExpectedElement(642); + addExpectedElement(643); + addExpectedElement(644); + addExpectedElement(645); + addExpectedElement(646); + addExpectedElement(647); + addExpectedElement(648); + addExpectedElement(649); + addExpectedElement(650); + addExpectedElement(651); + addExpectedElement(652); + addExpectedElement(653); + addExpectedElement(654); + addExpectedElement(655); + addExpectedElement(656); + addExpectedElement(657); + addExpectedElement(658); + addExpectedElement(659); + addExpectedElement(660); + addExpectedElement(661); + addExpectedElement(662); + addExpectedElement(663); + addExpectedElement(664); + addExpectedElement(665); + addExpectedElement(666); + addExpectedElement(667); + addExpectedElement(668); + addExpectedElement(669); + addExpectedElement(670); + addExpectedElement(671); + addExpectedElement(672); + addExpectedElement(673); + addExpectedElement(674); + addExpectedElement(675); + addExpectedElement(676); + addExpectedElement(677); + addExpectedElement(678); + addExpectedElement(679); + addExpectedElement(680); + addExpectedElement(681); + addExpectedElement(682); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 9, parse_org_emftext_language_java_classifiers_Class_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_classifiers_Class" + + + + // $ANTLR start "parse_org_emftext_language_java_classifiers_AnonymousClass" + // Java.g:3111:1: parse_org_emftext_language_java_classifiers_AnonymousClass returns [org.emftext.language.java.classifiers.AnonymousClass element = null] : a0= '{' ( ( (a1_0= parse_org_emftext_language_java_members_Member ) ) )* a2= '}' ; + public final org.emftext.language.java.classifiers.AnonymousClass parse_org_emftext_language_java_classifiers_AnonymousClass() throws RecognitionException { + org.emftext.language.java.classifiers.AnonymousClass element = null; + + int parse_org_emftext_language_java_classifiers_AnonymousClass_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + org.emftext.language.java.members.Member a1_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 10) ) { return element; } + + // Java.g:3114:2: (a0= '{' ( ( (a1_0= parse_org_emftext_language_java_members_Member ) ) )* a2= '}' ) + // Java.g:3115:2: a0= '{' ( ( (a1_0= parse_org_emftext_language_java_members_Member ) ) )* a2= '}' + { + a0=(Token)match(input,105,FOLLOW_105_in_parse_org_emftext_language_java_classifiers_AnonymousClass2385); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createAnonymousClass(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_8_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(683); + addExpectedElement(684); + addExpectedElement(685); + addExpectedElement(686); + addExpectedElement(687); + addExpectedElement(688); + addExpectedElement(689); + addExpectedElement(690); + addExpectedElement(691); + addExpectedElement(692); + addExpectedElement(693); + addExpectedElement(694); + addExpectedElement(695); + addExpectedElement(696); + addExpectedElement(697); + addExpectedElement(698); + addExpectedElement(699); + addExpectedElement(700); + addExpectedElement(701); + addExpectedElement(702); + addExpectedElement(703); + addExpectedElement(704); + addExpectedElement(705); + addExpectedElement(706); + addExpectedElement(707); + addExpectedElement(708); + addExpectedElement(709); + addExpectedElement(710); + addExpectedElement(711); + addExpectedElement(712); + addExpectedElement(713); + addExpectedElement(714); + addExpectedElement(715); + addExpectedElement(716); + addExpectedElement(717); + } + + // Java.g:3163:2: ( ( (a1_0= parse_org_emftext_language_java_members_Member ) ) )* + loop27: + do { + int alt27=2; + int LA27_0 = input.LA(1); + + if ( (LA27_0==IDENTIFIER||(LA27_0 >= 42 && LA27_0 <= 43)||LA27_0==48||LA27_0==56||LA27_0==58||LA27_0==60||(LA27_0 >= 63 && LA27_0 <= 64)||LA27_0==68||LA27_0==70||LA27_0==72||LA27_0==74||(LA27_0 >= 80 && LA27_0 <= 83)||(LA27_0 >= 87 && LA27_0 <= 89)||(LA27_0 >= 91 && LA27_0 <= 93)||LA27_0==96||LA27_0==100||(LA27_0 >= 102 && LA27_0 <= 103)||LA27_0==105) ) { + alt27=1; + } + + + switch (alt27) { + case 1 : + // Java.g:3164:3: ( (a1_0= parse_org_emftext_language_java_members_Member ) ) + { + // Java.g:3164:3: ( (a1_0= parse_org_emftext_language_java_members_Member ) ) + // Java.g:3165:4: (a1_0= parse_org_emftext_language_java_members_Member ) + { + // Java.g:3165:4: (a1_0= parse_org_emftext_language_java_members_Member ) + // Java.g:3166:5: a1_0= parse_org_emftext_language_java_members_Member + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_Member_in_parse_org_emftext_language_java_classifiers_AnonymousClass2414); + a1_0=parse_org_emftext_language_java_members_Member(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createAnonymousClass(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.ANONYMOUS_CLASS__MEMBERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_8_0_0_2_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(718); + addExpectedElement(719); + addExpectedElement(720); + addExpectedElement(721); + addExpectedElement(722); + addExpectedElement(723); + addExpectedElement(724); + addExpectedElement(725); + addExpectedElement(726); + addExpectedElement(727); + addExpectedElement(728); + addExpectedElement(729); + addExpectedElement(730); + addExpectedElement(731); + addExpectedElement(732); + addExpectedElement(733); + addExpectedElement(734); + addExpectedElement(735); + addExpectedElement(736); + addExpectedElement(737); + addExpectedElement(738); + addExpectedElement(739); + addExpectedElement(740); + addExpectedElement(741); + addExpectedElement(742); + addExpectedElement(743); + addExpectedElement(744); + addExpectedElement(745); + addExpectedElement(746); + addExpectedElement(747); + addExpectedElement(748); + addExpectedElement(749); + addExpectedElement(750); + addExpectedElement(751); + addExpectedElement(752); + } + + } + + + } + break; + + default : + break loop27; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(753); + addExpectedElement(754); + addExpectedElement(755); + addExpectedElement(756); + addExpectedElement(757); + addExpectedElement(758); + addExpectedElement(759); + addExpectedElement(760); + addExpectedElement(761); + addExpectedElement(762); + addExpectedElement(763); + addExpectedElement(764); + addExpectedElement(765); + addExpectedElement(766); + addExpectedElement(767); + addExpectedElement(768); + addExpectedElement(769); + addExpectedElement(770); + addExpectedElement(771); + addExpectedElement(772); + addExpectedElement(773); + addExpectedElement(774); + addExpectedElement(775); + addExpectedElement(776); + addExpectedElement(777); + addExpectedElement(778); + addExpectedElement(779); + addExpectedElement(780); + addExpectedElement(781); + addExpectedElement(782); + addExpectedElement(783); + addExpectedElement(784); + addExpectedElement(785); + addExpectedElement(786); + addExpectedElement(787); + } + + a2=(Token)match(input,109,FOLLOW_109_in_parse_org_emftext_language_java_classifiers_AnonymousClass2455); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createAnonymousClass(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_8_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(788); + addExpectedElement(789); + addExpectedElement(790); + addExpectedElement(791); + addExpectedElement(792); + addExpectedElement(793); + addExpectedElement(794); + addExpectedElement(795); + addExpectedElement(796); + addExpectedElement(797); + addExpectedElement(798); + addExpectedElement(799); + addExpectedElement(800); + addExpectedElement(801); + addExpectedElement(802); + addExpectedElement(803); + addExpectedElement(804); + addExpectedElement(805); + addExpectedElement(806); + addExpectedElement(807); + addExpectedElement(808); + addExpectedElement(809); + addExpectedElement(810); + addExpectedElement(811); + addExpectedElement(812); + addExpectedElement(813); + addExpectedElement(814); + addExpectedElement(815); + addExpectedElement(816); + addExpectedElement(817); + addExpectedElement(818); + addExpectedElement(819); + addExpectedElement(820); + addExpectedElement(821); + addExpectedElement(822); + addExpectedElement(823); + addExpectedElement(824); + addExpectedElement(825); + addExpectedElement(826); + addExpectedElement(827); + addExpectedElement(828); + addExpectedElement(829); + addExpectedElement(830); + addExpectedElement(831); + addExpectedElement(832); + addExpectedElement(833); + addExpectedElement(834); + addExpectedElement(835); + addExpectedElement(836); + addExpectedElement(837); + addExpectedElement(838); + addExpectedElement(839); + addExpectedElement(840); + addExpectedElement(841); + addExpectedElement(842); + addExpectedElement(843); + addExpectedElement(844); + addExpectedElement(845); + addExpectedElement(846); + addExpectedElement(847); + addExpectedElement(848); + addExpectedElement(849); + addExpectedElement(850); + addExpectedElement(851); + addExpectedElement(852); + addExpectedElement(853); + addExpectedElement(854); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 10, parse_org_emftext_language_java_classifiers_AnonymousClass_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_classifiers_AnonymousClass" + + + + // $ANTLR start "parse_org_emftext_language_java_classifiers_Interface" + // Java.g:3348:1: parse_org_emftext_language_java_classifiers_Interface returns [org.emftext.language.java.classifiers.Interface element = null] : ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* a1= 'interface' (a2= IDENTIFIER ) ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a7= '>' ) )? ( (a8= 'extends' ( (a9_0= parse_org_emftext_language_java_types_TypeReference ) ( (a10= ',' (a11_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) )? a12= '{' ( ( (a13_0= parse_org_emftext_language_java_members_Member ) ) )* a14= '}' ; + public final org.emftext.language.java.classifiers.Interface parse_org_emftext_language_java_classifiers_Interface() throws RecognitionException { + org.emftext.language.java.classifiers.Interface element = null; + + int parse_org_emftext_language_java_classifiers_Interface_StartIndex = input.index(); + + Token a1=null; + Token a2=null; + Token a3=null; + Token a5=null; + Token a7=null; + Token a8=null; + Token a10=null; + Token a12=null; + Token a14=null; + org.emftext.language.java.modifiers.AnnotationInstanceOrModifier a0_0 =null; + + org.emftext.language.java.generics.TypeParameter a4_0 =null; + + org.emftext.language.java.generics.TypeParameter a6_0 =null; + + org.emftext.language.java.types.TypeReference a9_0 =null; + + org.emftext.language.java.types.TypeReference a11_0 =null; + + org.emftext.language.java.members.Member a13_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 11) ) { return element; } + + // Java.g:3351:2: ( ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* a1= 'interface' (a2= IDENTIFIER ) ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a7= '>' ) )? ( (a8= 'extends' ( (a9_0= parse_org_emftext_language_java_types_TypeReference ) ( (a10= ',' (a11_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) )? a12= '{' ( ( (a13_0= parse_org_emftext_language_java_members_Member ) ) )* a14= '}' ) + // Java.g:3352:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* a1= 'interface' (a2= IDENTIFIER ) ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a7= '>' ) )? ( (a8= 'extends' ( (a9_0= parse_org_emftext_language_java_types_TypeReference ) ( (a10= ',' (a11_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) )? a12= '{' ( ( (a13_0= parse_org_emftext_language_java_members_Member ) ) )* a14= '}' + { + // Java.g:3352:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* + loop28: + do { + int alt28=2; + int LA28_0 = input.LA(1); + + if ( (LA28_0==48||LA28_0==56||LA28_0==72||LA28_0==83||(LA28_0 >= 87 && LA28_0 <= 89)||(LA28_0 >= 92 && LA28_0 <= 93)||LA28_0==96||LA28_0==100||LA28_0==103) ) { + alt28=1; + } + + + switch (alt28) { + case 1 : + // Java.g:3353:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + { + // Java.g:3353:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + // Java.g:3354:4: a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_classifiers_Interface2493); + a0_0=parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__ANNOTATIONS_AND_MODIFIERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop28; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(855); + addExpectedElement(856); + addExpectedElement(857); + addExpectedElement(858); + addExpectedElement(859); + addExpectedElement(860); + addExpectedElement(861); + addExpectedElement(862); + addExpectedElement(863); + addExpectedElement(864); + addExpectedElement(865); + addExpectedElement(866); + addExpectedElement(867); + } + + a1=(Token)match(input,81,FOLLOW_81_in_parse_org_emftext_language_java_classifiers_Interface2519); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(868); + } + + // Java.g:3406:2: (a2= IDENTIFIER ) + // Java.g:3407:3: a2= IDENTIFIER + { + a2=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_classifiers_Interface2537); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + if (a2 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a2.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a2).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a2).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a2).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a2).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_2, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a2, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(869); + addExpectedElement(870); + addExpectedElement(871); + } + + // Java.g:3444:2: ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a7= '>' ) )? + int alt30=2; + int LA30_0 = input.LA(1); + + if ( (LA30_0==43) ) { + alt30=1; + } + switch (alt30) { + case 1 : + // Java.g:3445:3: (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a7= '>' ) + { + // Java.g:3445:3: (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a7= '>' ) + // Java.g:3446:4: a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a7= '>' + { + a3=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_classifiers_Interface2567); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_3_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(872); + } + + // Java.g:3460:4: (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) + // Java.g:3461:5: a4_0= parse_org_emftext_language_java_generics_TypeParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_classifiers_Interface2593); + a4_0=parse_org_emftext_language_java_generics_TypeParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__TYPE_PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_3_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(873); + addExpectedElement(874); + } + + // Java.g:3487:4: ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* + loop29: + do { + int alt29=2; + int LA29_0 = input.LA(1); + + if ( (LA29_0==33) ) { + alt29=1; + } + + + switch (alt29) { + case 1 : + // Java.g:3488:5: (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) + { + // Java.g:3488:5: (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) ) + // Java.g:3489:6: a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) + { + a5=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_classifiers_Interface2634); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_3_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(875); + } + + // Java.g:3503:6: (a6_0= parse_org_emftext_language_java_generics_TypeParameter ) + // Java.g:3504:7: a6_0= parse_org_emftext_language_java_generics_TypeParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_classifiers_Interface2668); + a6_0=parse_org_emftext_language_java_generics_TypeParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__TYPE_PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_3_0_0_2_0_0_1, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(876); + addExpectedElement(877); + } + + } + + + } + break; + + default : + break loop29; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(878); + addExpectedElement(879); + } + + a7=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_classifiers_Interface2729); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_3_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a7, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(880); + addExpectedElement(881); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(882); + addExpectedElement(883); + } + + // Java.g:3561:2: ( (a8= 'extends' ( (a9_0= parse_org_emftext_language_java_types_TypeReference ) ( (a10= ',' (a11_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) )? + int alt32=2; + int LA32_0 = input.LA(1); + + if ( (LA32_0==71) ) { + alt32=1; + } + switch (alt32) { + case 1 : + // Java.g:3562:3: (a8= 'extends' ( (a9_0= parse_org_emftext_language_java_types_TypeReference ) ( (a10= ',' (a11_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) + { + // Java.g:3562:3: (a8= 'extends' ( (a9_0= parse_org_emftext_language_java_types_TypeReference ) ( (a10= ',' (a11_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) + // Java.g:3563:4: a8= 'extends' ( (a9_0= parse_org_emftext_language_java_types_TypeReference ) ( (a10= ',' (a11_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) + { + a8=(Token)match(input,71,FOLLOW_71_in_parse_org_emftext_language_java_classifiers_Interface2771); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_4_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a8, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(884); + addExpectedElement(885); + addExpectedElement(886); + addExpectedElement(887); + addExpectedElement(888); + addExpectedElement(889); + addExpectedElement(890); + addExpectedElement(891); + addExpectedElement(892); + addExpectedElement(893); + addExpectedElement(894); + } + + // Java.g:3587:4: ( (a9_0= parse_org_emftext_language_java_types_TypeReference ) ( (a10= ',' (a11_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) + // Java.g:3588:5: (a9_0= parse_org_emftext_language_java_types_TypeReference ) ( (a10= ',' (a11_0= parse_org_emftext_language_java_types_TypeReference ) ) )* + { + // Java.g:3588:5: (a9_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:3589:6: a9_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_classifiers_Interface2804); + a9_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + if (a9_0 != null) { + if (a9_0 != null) { + Object value = a9_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__EXTENDS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_4_0_0_1_0_0_0, a9_0, true); + copyLocalizationInfos(a9_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(895); + addExpectedElement(896); + } + + // Java.g:3615:5: ( (a10= ',' (a11_0= parse_org_emftext_language_java_types_TypeReference ) ) )* + loop31: + do { + int alt31=2; + int LA31_0 = input.LA(1); + + if ( (LA31_0==33) ) { + alt31=1; + } + + + switch (alt31) { + case 1 : + // Java.g:3616:6: (a10= ',' (a11_0= parse_org_emftext_language_java_types_TypeReference ) ) + { + // Java.g:3616:6: (a10= ',' (a11_0= parse_org_emftext_language_java_types_TypeReference ) ) + // Java.g:3617:7: a10= ',' (a11_0= parse_org_emftext_language_java_types_TypeReference ) + { + a10=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_classifiers_Interface2852); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_4_0_0_1_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a10, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(897); + addExpectedElement(898); + addExpectedElement(899); + addExpectedElement(900); + addExpectedElement(901); + addExpectedElement(902); + addExpectedElement(903); + addExpectedElement(904); + addExpectedElement(905); + addExpectedElement(906); + addExpectedElement(907); + } + + // Java.g:3641:7: (a11_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:3642:8: a11_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_classifiers_Interface2890); + a11_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + if (a11_0 != null) { + if (a11_0 != null) { + Object value = a11_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__EXTENDS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_4_0_0_1_0_0_1_0_0_1, a11_0, true); + copyLocalizationInfos(a11_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(908); + addExpectedElement(909); + } + + } + + + } + break; + + default : + break loop31; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(910); + addExpectedElement(911); + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(912); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(913); + } + + a12=(Token)match(input,105,FOLLOW_105_in_parse_org_emftext_language_java_classifiers_Interface2987); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_6, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a12, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(914); + addExpectedElement(915); + addExpectedElement(916); + addExpectedElement(917); + addExpectedElement(918); + addExpectedElement(919); + addExpectedElement(920); + addExpectedElement(921); + addExpectedElement(922); + addExpectedElement(923); + addExpectedElement(924); + addExpectedElement(925); + addExpectedElement(926); + addExpectedElement(927); + addExpectedElement(928); + addExpectedElement(929); + addExpectedElement(930); + addExpectedElement(931); + addExpectedElement(932); + addExpectedElement(933); + addExpectedElement(934); + addExpectedElement(935); + addExpectedElement(936); + addExpectedElement(937); + addExpectedElement(938); + addExpectedElement(939); + addExpectedElement(940); + addExpectedElement(941); + addExpectedElement(942); + addExpectedElement(943); + addExpectedElement(944); + addExpectedElement(945); + addExpectedElement(946); + addExpectedElement(947); + addExpectedElement(948); + } + + // Java.g:3737:2: ( ( (a13_0= parse_org_emftext_language_java_members_Member ) ) )* + loop33: + do { + int alt33=2; + int LA33_0 = input.LA(1); + + if ( (LA33_0==IDENTIFIER||(LA33_0 >= 42 && LA33_0 <= 43)||LA33_0==48||LA33_0==56||LA33_0==58||LA33_0==60||(LA33_0 >= 63 && LA33_0 <= 64)||LA33_0==68||LA33_0==70||LA33_0==72||LA33_0==74||(LA33_0 >= 80 && LA33_0 <= 83)||(LA33_0 >= 87 && LA33_0 <= 89)||(LA33_0 >= 91 && LA33_0 <= 93)||LA33_0==96||LA33_0==100||(LA33_0 >= 102 && LA33_0 <= 103)||LA33_0==105) ) { + alt33=1; + } + + + switch (alt33) { + case 1 : + // Java.g:3738:3: ( (a13_0= parse_org_emftext_language_java_members_Member ) ) + { + // Java.g:3738:3: ( (a13_0= parse_org_emftext_language_java_members_Member ) ) + // Java.g:3739:4: (a13_0= parse_org_emftext_language_java_members_Member ) + { + // Java.g:3739:4: (a13_0= parse_org_emftext_language_java_members_Member ) + // Java.g:3740:5: a13_0= parse_org_emftext_language_java_members_Member + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_Member_in_parse_org_emftext_language_java_classifiers_Interface3016); + a13_0=parse_org_emftext_language_java_members_Member(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + if (a13_0 != null) { + if (a13_0 != null) { + Object value = a13_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.INTERFACE__MEMBERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_7_0_0_1, a13_0, true); + copyLocalizationInfos(a13_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(949); + addExpectedElement(950); + addExpectedElement(951); + addExpectedElement(952); + addExpectedElement(953); + addExpectedElement(954); + addExpectedElement(955); + addExpectedElement(956); + addExpectedElement(957); + addExpectedElement(958); + addExpectedElement(959); + addExpectedElement(960); + addExpectedElement(961); + addExpectedElement(962); + addExpectedElement(963); + addExpectedElement(964); + addExpectedElement(965); + addExpectedElement(966); + addExpectedElement(967); + addExpectedElement(968); + addExpectedElement(969); + addExpectedElement(970); + addExpectedElement(971); + addExpectedElement(972); + addExpectedElement(973); + addExpectedElement(974); + addExpectedElement(975); + addExpectedElement(976); + addExpectedElement(977); + addExpectedElement(978); + addExpectedElement(979); + addExpectedElement(980); + addExpectedElement(981); + addExpectedElement(982); + addExpectedElement(983); + } + + } + + + } + break; + + default : + break loop33; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(984); + addExpectedElement(985); + addExpectedElement(986); + addExpectedElement(987); + addExpectedElement(988); + addExpectedElement(989); + addExpectedElement(990); + addExpectedElement(991); + addExpectedElement(992); + addExpectedElement(993); + addExpectedElement(994); + addExpectedElement(995); + addExpectedElement(996); + addExpectedElement(997); + addExpectedElement(998); + addExpectedElement(999); + addExpectedElement(1000); + addExpectedElement(1001); + addExpectedElement(1002); + addExpectedElement(1003); + addExpectedElement(1004); + addExpectedElement(1005); + addExpectedElement(1006); + addExpectedElement(1007); + addExpectedElement(1008); + addExpectedElement(1009); + addExpectedElement(1010); + addExpectedElement(1011); + addExpectedElement(1012); + addExpectedElement(1013); + addExpectedElement(1014); + addExpectedElement(1015); + addExpectedElement(1016); + addExpectedElement(1017); + addExpectedElement(1018); + } + + a14=(Token)match(input,109,FOLLOW_109_in_parse_org_emftext_language_java_classifiers_Interface3057); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createInterface(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_9_0_0_9, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a14, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1019); + addExpectedElement(1020); + addExpectedElement(1021); + addExpectedElement(1022); + addExpectedElement(1023); + addExpectedElement(1024); + addExpectedElement(1025); + addExpectedElement(1026); + addExpectedElement(1027); + addExpectedElement(1028); + addExpectedElement(1029); + addExpectedElement(1030); + addExpectedElement(1031); + addExpectedElement(1032); + addExpectedElement(1033); + addExpectedElement(1034); + addExpectedElement(1035); + addExpectedElement(1036); + addExpectedElement(1037); + addExpectedElement(1038); + addExpectedElement(1039); + addExpectedElement(1040); + addExpectedElement(1041); + addExpectedElement(1042); + addExpectedElement(1043); + addExpectedElement(1044); + addExpectedElement(1045); + addExpectedElement(1046); + addExpectedElement(1047); + addExpectedElement(1048); + addExpectedElement(1049); + addExpectedElement(1050); + addExpectedElement(1051); + addExpectedElement(1052); + addExpectedElement(1053); + addExpectedElement(1054); + addExpectedElement(1055); + addExpectedElement(1056); + addExpectedElement(1057); + addExpectedElement(1058); + addExpectedElement(1059); + addExpectedElement(1060); + addExpectedElement(1061); + addExpectedElement(1062); + addExpectedElement(1063); + addExpectedElement(1064); + addExpectedElement(1065); + addExpectedElement(1066); + addExpectedElement(1067); + addExpectedElement(1068); + addExpectedElement(1069); + addExpectedElement(1070); + addExpectedElement(1071); + addExpectedElement(1072); + addExpectedElement(1073); + addExpectedElement(1074); + addExpectedElement(1075); + addExpectedElement(1076); + addExpectedElement(1077); + addExpectedElement(1078); + addExpectedElement(1079); + addExpectedElement(1080); + addExpectedElement(1081); + addExpectedElement(1082); + addExpectedElement(1083); + addExpectedElement(1084); + addExpectedElement(1085); + addExpectedElement(1086); + addExpectedElement(1087); + addExpectedElement(1088); + addExpectedElement(1089); + addExpectedElement(1090); + addExpectedElement(1091); + addExpectedElement(1092); + addExpectedElement(1093); + addExpectedElement(1094); + addExpectedElement(1095); + addExpectedElement(1096); + addExpectedElement(1097); + addExpectedElement(1098); + addExpectedElement(1099); + addExpectedElement(1100); + addExpectedElement(1101); + addExpectedElement(1102); + addExpectedElement(1103); + addExpectedElement(1104); + addExpectedElement(1105); + addExpectedElement(1106); + addExpectedElement(1107); + addExpectedElement(1108); + addExpectedElement(1109); + addExpectedElement(1110); + addExpectedElement(1111); + addExpectedElement(1112); + addExpectedElement(1113); + addExpectedElement(1114); + addExpectedElement(1115); + addExpectedElement(1116); + addExpectedElement(1117); + addExpectedElement(1118); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 11, parse_org_emftext_language_java_classifiers_Interface_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_classifiers_Interface" + + + + // $ANTLR start "parse_org_emftext_language_java_classifiers_Enumeration" + // Java.g:3955:1: parse_org_emftext_language_java_classifiers_Enumeration returns [org.emftext.language.java.classifiers.Enumeration element = null] : ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* a1= 'enum' (a2= IDENTIFIER ) ( (a3= 'implements' ( (a4_0= parse_org_emftext_language_java_types_TypeReference ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) )? a7= '{' ( ( (a8_0= parse_org_emftext_language_java_members_EnumConstant ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_members_EnumConstant ) ) )* ) )? ( (a11= ',' ) )? ( (a12= ';' ( ( (a13_0= parse_org_emftext_language_java_members_Member ) ) )* ) )? a14= '}' ; + public final org.emftext.language.java.classifiers.Enumeration parse_org_emftext_language_java_classifiers_Enumeration() throws RecognitionException { + org.emftext.language.java.classifiers.Enumeration element = null; + + int parse_org_emftext_language_java_classifiers_Enumeration_StartIndex = input.index(); + + Token a1=null; + Token a2=null; + Token a3=null; + Token a5=null; + Token a7=null; + Token a9=null; + Token a11=null; + Token a12=null; + Token a14=null; + org.emftext.language.java.modifiers.AnnotationInstanceOrModifier a0_0 =null; + + org.emftext.language.java.types.TypeReference a4_0 =null; + + org.emftext.language.java.types.TypeReference a6_0 =null; + + org.emftext.language.java.members.EnumConstant a8_0 =null; + + org.emftext.language.java.members.EnumConstant a10_0 =null; + + org.emftext.language.java.members.Member a13_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 12) ) { return element; } + + // Java.g:3958:2: ( ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* a1= 'enum' (a2= IDENTIFIER ) ( (a3= 'implements' ( (a4_0= parse_org_emftext_language_java_types_TypeReference ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) )? a7= '{' ( ( (a8_0= parse_org_emftext_language_java_members_EnumConstant ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_members_EnumConstant ) ) )* ) )? ( (a11= ',' ) )? ( (a12= ';' ( ( (a13_0= parse_org_emftext_language_java_members_Member ) ) )* ) )? a14= '}' ) + // Java.g:3959:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* a1= 'enum' (a2= IDENTIFIER ) ( (a3= 'implements' ( (a4_0= parse_org_emftext_language_java_types_TypeReference ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) )? a7= '{' ( ( (a8_0= parse_org_emftext_language_java_members_EnumConstant ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_members_EnumConstant ) ) )* ) )? ( (a11= ',' ) )? ( (a12= ';' ( ( (a13_0= parse_org_emftext_language_java_members_Member ) ) )* ) )? a14= '}' + { + // Java.g:3959:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* + loop34: + do { + int alt34=2; + int LA34_0 = input.LA(1); + + if ( (LA34_0==48||LA34_0==56||LA34_0==72||LA34_0==83||(LA34_0 >= 87 && LA34_0 <= 89)||(LA34_0 >= 92 && LA34_0 <= 93)||LA34_0==96||LA34_0==100||LA34_0==103) ) { + alt34=1; + } + + + switch (alt34) { + case 1 : + // Java.g:3960:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + { + // Java.g:3960:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + // Java.g:3961:4: a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_classifiers_Enumeration3095); + a0_0=parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__ANNOTATIONS_AND_MODIFIERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop34; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1119); + addExpectedElement(1120); + addExpectedElement(1121); + addExpectedElement(1122); + addExpectedElement(1123); + addExpectedElement(1124); + addExpectedElement(1125); + addExpectedElement(1126); + addExpectedElement(1127); + addExpectedElement(1128); + addExpectedElement(1129); + addExpectedElement(1130); + addExpectedElement(1131); + } + + a1=(Token)match(input,70,FOLLOW_70_in_parse_org_emftext_language_java_classifiers_Enumeration3121); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1132); + } + + // Java.g:4013:2: (a2= IDENTIFIER ) + // Java.g:4014:3: a2= IDENTIFIER + { + a2=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_classifiers_Enumeration3139); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + if (a2 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a2.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a2).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a2).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a2).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a2).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_2, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a2, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1133); + addExpectedElement(1134); + } + + // Java.g:4050:2: ( (a3= 'implements' ( (a4_0= parse_org_emftext_language_java_types_TypeReference ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) )? + int alt36=2; + int LA36_0 = input.LA(1); + + if ( (LA36_0==77) ) { + alt36=1; + } + switch (alt36) { + case 1 : + // Java.g:4051:3: (a3= 'implements' ( (a4_0= parse_org_emftext_language_java_types_TypeReference ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) + { + // Java.g:4051:3: (a3= 'implements' ( (a4_0= parse_org_emftext_language_java_types_TypeReference ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) ) + // Java.g:4052:4: a3= 'implements' ( (a4_0= parse_org_emftext_language_java_types_TypeReference ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) + { + a3=(Token)match(input,77,FOLLOW_77_in_parse_org_emftext_language_java_classifiers_Enumeration3169); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_3_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1135); + addExpectedElement(1136); + addExpectedElement(1137); + addExpectedElement(1138); + addExpectedElement(1139); + addExpectedElement(1140); + addExpectedElement(1141); + addExpectedElement(1142); + addExpectedElement(1143); + addExpectedElement(1144); + addExpectedElement(1145); + } + + // Java.g:4076:4: ( (a4_0= parse_org_emftext_language_java_types_TypeReference ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) + // Java.g:4077:5: (a4_0= parse_org_emftext_language_java_types_TypeReference ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_types_TypeReference ) ) )* + { + // Java.g:4077:5: (a4_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:4078:6: a4_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_classifiers_Enumeration3202); + a4_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__IMPLEMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_3_0_0_1_0_0_0, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1146); + addExpectedElement(1147); + } + + // Java.g:4104:5: ( (a5= ',' (a6_0= parse_org_emftext_language_java_types_TypeReference ) ) )* + loop35: + do { + int alt35=2; + int LA35_0 = input.LA(1); + + if ( (LA35_0==33) ) { + alt35=1; + } + + + switch (alt35) { + case 1 : + // Java.g:4105:6: (a5= ',' (a6_0= parse_org_emftext_language_java_types_TypeReference ) ) + { + // Java.g:4105:6: (a5= ',' (a6_0= parse_org_emftext_language_java_types_TypeReference ) ) + // Java.g:4106:7: a5= ',' (a6_0= parse_org_emftext_language_java_types_TypeReference ) + { + a5=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_classifiers_Enumeration3250); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_3_0_0_1_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1148); + addExpectedElement(1149); + addExpectedElement(1150); + addExpectedElement(1151); + addExpectedElement(1152); + addExpectedElement(1153); + addExpectedElement(1154); + addExpectedElement(1155); + addExpectedElement(1156); + addExpectedElement(1157); + addExpectedElement(1158); + } + + // Java.g:4130:7: (a6_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:4131:8: a6_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_classifiers_Enumeration3288); + a6_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__IMPLEMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_3_0_0_1_0_0_1_0_0_1, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1159); + addExpectedElement(1160); + } + + } + + + } + break; + + default : + break loop35; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1161); + addExpectedElement(1162); + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1163); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1164); + } + + a7=(Token)match(input,105,FOLLOW_105_in_parse_org_emftext_language_java_classifiers_Enumeration3385); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_5, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a7, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1165); + addExpectedElement(1166); + addExpectedElement(1167); + addExpectedElement(1168); + addExpectedElement(1169); + } + + // Java.g:4196:2: ( ( (a8_0= parse_org_emftext_language_java_members_EnumConstant ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_members_EnumConstant ) ) )* ) )? + int alt38=2; + int LA38_0 = input.LA(1); + + if ( (LA38_0==IDENTIFIER||LA38_0==48) ) { + alt38=1; + } + switch (alt38) { + case 1 : + // Java.g:4197:3: ( (a8_0= parse_org_emftext_language_java_members_EnumConstant ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_members_EnumConstant ) ) )* ) + { + // Java.g:4197:3: ( (a8_0= parse_org_emftext_language_java_members_EnumConstant ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_members_EnumConstant ) ) )* ) + // Java.g:4198:4: (a8_0= parse_org_emftext_language_java_members_EnumConstant ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_members_EnumConstant ) ) )* + { + // Java.g:4198:4: (a8_0= parse_org_emftext_language_java_members_EnumConstant ) + // Java.g:4199:5: a8_0= parse_org_emftext_language_java_members_EnumConstant + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_EnumConstant_in_parse_org_emftext_language_java_classifiers_Enumeration3414); + a8_0=parse_org_emftext_language_java_members_EnumConstant(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + if (a8_0 != null) { + if (a8_0 != null) { + Object value = a8_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__CONSTANTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_6_0_0_1, a8_0, true); + copyLocalizationInfos(a8_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1170); + addExpectedElement(1171); + addExpectedElement(1172); + addExpectedElement(1173); + } + + // Java.g:4227:4: ( (a9= ',' (a10_0= parse_org_emftext_language_java_members_EnumConstant ) ) )* + loop37: + do { + int alt37=2; + int LA37_0 = input.LA(1); + + if ( (LA37_0==33) ) { + int LA37_1 = input.LA(2); + + if ( (LA37_1==IDENTIFIER||LA37_1==48) ) { + alt37=1; + } + + + } + + + switch (alt37) { + case 1 : + // Java.g:4228:5: (a9= ',' (a10_0= parse_org_emftext_language_java_members_EnumConstant ) ) + { + // Java.g:4228:5: (a9= ',' (a10_0= parse_org_emftext_language_java_members_EnumConstant ) ) + // Java.g:4229:6: a9= ',' (a10_0= parse_org_emftext_language_java_members_EnumConstant ) + { + a9=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_classifiers_Enumeration3455); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_6_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a9, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1174); + addExpectedElement(1175); + } + + // Java.g:4244:6: (a10_0= parse_org_emftext_language_java_members_EnumConstant ) + // Java.g:4245:7: a10_0= parse_org_emftext_language_java_members_EnumConstant + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_EnumConstant_in_parse_org_emftext_language_java_classifiers_Enumeration3489); + a10_0=parse_org_emftext_language_java_members_EnumConstant(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + if (a10_0 != null) { + if (a10_0 != null) { + Object value = a10_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__CONSTANTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_6_0_0_2_0_0_2, a10_0, true); + copyLocalizationInfos(a10_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1176); + addExpectedElement(1177); + addExpectedElement(1178); + addExpectedElement(1179); + } + + } + + + } + break; + + default : + break loop37; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1180); + addExpectedElement(1181); + addExpectedElement(1182); + addExpectedElement(1183); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1184); + addExpectedElement(1185); + addExpectedElement(1186); + } + + // Java.g:4292:2: ( (a11= ',' ) )? + int alt39=2; + int LA39_0 = input.LA(1); + + if ( (LA39_0==33) ) { + alt39=1; + } + switch (alt39) { + case 1 : + // Java.g:4293:3: (a11= ',' ) + { + // Java.g:4293:3: (a11= ',' ) + // Java.g:4294:4: a11= ',' + { + a11=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_classifiers_Enumeration3572); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_7_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a11, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1187); + addExpectedElement(1188); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1189); + addExpectedElement(1190); + } + + // Java.g:4317:2: ( (a12= ';' ( ( (a13_0= parse_org_emftext_language_java_members_Member ) ) )* ) )? + int alt41=2; + int LA41_0 = input.LA(1); + + if ( (LA41_0==42) ) { + alt41=1; + } + switch (alt41) { + case 1 : + // Java.g:4318:3: (a12= ';' ( ( (a13_0= parse_org_emftext_language_java_members_Member ) ) )* ) + { + // Java.g:4318:3: (a12= ';' ( ( (a13_0= parse_org_emftext_language_java_members_Member ) ) )* ) + // Java.g:4319:4: a12= ';' ( ( (a13_0= parse_org_emftext_language_java_members_Member ) ) )* + { + a12=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_classifiers_Enumeration3614); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_8_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a12, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1191); + addExpectedElement(1192); + addExpectedElement(1193); + addExpectedElement(1194); + addExpectedElement(1195); + addExpectedElement(1196); + addExpectedElement(1197); + addExpectedElement(1198); + addExpectedElement(1199); + addExpectedElement(1200); + addExpectedElement(1201); + addExpectedElement(1202); + addExpectedElement(1203); + addExpectedElement(1204); + addExpectedElement(1205); + addExpectedElement(1206); + addExpectedElement(1207); + addExpectedElement(1208); + addExpectedElement(1209); + addExpectedElement(1210); + addExpectedElement(1211); + addExpectedElement(1212); + addExpectedElement(1213); + addExpectedElement(1214); + addExpectedElement(1215); + addExpectedElement(1216); + addExpectedElement(1217); + addExpectedElement(1218); + addExpectedElement(1219); + addExpectedElement(1220); + addExpectedElement(1221); + addExpectedElement(1222); + addExpectedElement(1223); + addExpectedElement(1224); + addExpectedElement(1225); + } + + // Java.g:4367:4: ( ( (a13_0= parse_org_emftext_language_java_members_Member ) ) )* + loop40: + do { + int alt40=2; + int LA40_0 = input.LA(1); + + if ( (LA40_0==IDENTIFIER||(LA40_0 >= 42 && LA40_0 <= 43)||LA40_0==48||LA40_0==56||LA40_0==58||LA40_0==60||(LA40_0 >= 63 && LA40_0 <= 64)||LA40_0==68||LA40_0==70||LA40_0==72||LA40_0==74||(LA40_0 >= 80 && LA40_0 <= 83)||(LA40_0 >= 87 && LA40_0 <= 89)||(LA40_0 >= 91 && LA40_0 <= 93)||LA40_0==96||LA40_0==100||(LA40_0 >= 102 && LA40_0 <= 103)||LA40_0==105) ) { + alt40=1; + } + + + switch (alt40) { + case 1 : + // Java.g:4368:5: ( (a13_0= parse_org_emftext_language_java_members_Member ) ) + { + // Java.g:4368:5: ( (a13_0= parse_org_emftext_language_java_members_Member ) ) + // Java.g:4369:6: (a13_0= parse_org_emftext_language_java_members_Member ) + { + // Java.g:4369:6: (a13_0= parse_org_emftext_language_java_members_Member ) + // Java.g:4370:7: a13_0= parse_org_emftext_language_java_members_Member + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_Member_in_parse_org_emftext_language_java_classifiers_Enumeration3655); + a13_0=parse_org_emftext_language_java_members_Member(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + if (a13_0 != null) { + if (a13_0 != null) { + Object value = a13_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.ENUMERATION__MEMBERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_8_0_0_1_0_0_1, a13_0, true); + copyLocalizationInfos(a13_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1226); + addExpectedElement(1227); + addExpectedElement(1228); + addExpectedElement(1229); + addExpectedElement(1230); + addExpectedElement(1231); + addExpectedElement(1232); + addExpectedElement(1233); + addExpectedElement(1234); + addExpectedElement(1235); + addExpectedElement(1236); + addExpectedElement(1237); + addExpectedElement(1238); + addExpectedElement(1239); + addExpectedElement(1240); + addExpectedElement(1241); + addExpectedElement(1242); + addExpectedElement(1243); + addExpectedElement(1244); + addExpectedElement(1245); + addExpectedElement(1246); + addExpectedElement(1247); + addExpectedElement(1248); + addExpectedElement(1249); + addExpectedElement(1250); + addExpectedElement(1251); + addExpectedElement(1252); + addExpectedElement(1253); + addExpectedElement(1254); + addExpectedElement(1255); + addExpectedElement(1256); + addExpectedElement(1257); + addExpectedElement(1258); + addExpectedElement(1259); + addExpectedElement(1260); + } + + } + + + } + break; + + default : + break loop40; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1261); + addExpectedElement(1262); + addExpectedElement(1263); + addExpectedElement(1264); + addExpectedElement(1265); + addExpectedElement(1266); + addExpectedElement(1267); + addExpectedElement(1268); + addExpectedElement(1269); + addExpectedElement(1270); + addExpectedElement(1271); + addExpectedElement(1272); + addExpectedElement(1273); + addExpectedElement(1274); + addExpectedElement(1275); + addExpectedElement(1276); + addExpectedElement(1277); + addExpectedElement(1278); + addExpectedElement(1279); + addExpectedElement(1280); + addExpectedElement(1281); + addExpectedElement(1282); + addExpectedElement(1283); + addExpectedElement(1284); + addExpectedElement(1285); + addExpectedElement(1286); + addExpectedElement(1287); + addExpectedElement(1288); + addExpectedElement(1289); + addExpectedElement(1290); + addExpectedElement(1291); + addExpectedElement(1292); + addExpectedElement(1293); + addExpectedElement(1294); + addExpectedElement(1295); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1296); + } + + a14=(Token)match(input,109,FOLLOW_109_in_parse_org_emftext_language_java_classifiers_Enumeration3729); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createEnumeration(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_10_0_0_9, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a14, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1297); + addExpectedElement(1298); + addExpectedElement(1299); + addExpectedElement(1300); + addExpectedElement(1301); + addExpectedElement(1302); + addExpectedElement(1303); + addExpectedElement(1304); + addExpectedElement(1305); + addExpectedElement(1306); + addExpectedElement(1307); + addExpectedElement(1308); + addExpectedElement(1309); + addExpectedElement(1310); + addExpectedElement(1311); + addExpectedElement(1312); + addExpectedElement(1313); + addExpectedElement(1314); + addExpectedElement(1315); + addExpectedElement(1316); + addExpectedElement(1317); + addExpectedElement(1318); + addExpectedElement(1319); + addExpectedElement(1320); + addExpectedElement(1321); + addExpectedElement(1322); + addExpectedElement(1323); + addExpectedElement(1324); + addExpectedElement(1325); + addExpectedElement(1326); + addExpectedElement(1327); + addExpectedElement(1328); + addExpectedElement(1329); + addExpectedElement(1330); + addExpectedElement(1331); + addExpectedElement(1332); + addExpectedElement(1333); + addExpectedElement(1334); + addExpectedElement(1335); + addExpectedElement(1336); + addExpectedElement(1337); + addExpectedElement(1338); + addExpectedElement(1339); + addExpectedElement(1340); + addExpectedElement(1341); + addExpectedElement(1342); + addExpectedElement(1343); + addExpectedElement(1344); + addExpectedElement(1345); + addExpectedElement(1346); + addExpectedElement(1347); + addExpectedElement(1348); + addExpectedElement(1349); + addExpectedElement(1350); + addExpectedElement(1351); + addExpectedElement(1352); + addExpectedElement(1353); + addExpectedElement(1354); + addExpectedElement(1355); + addExpectedElement(1356); + addExpectedElement(1357); + addExpectedElement(1358); + addExpectedElement(1359); + addExpectedElement(1360); + addExpectedElement(1361); + addExpectedElement(1362); + addExpectedElement(1363); + addExpectedElement(1364); + addExpectedElement(1365); + addExpectedElement(1366); + addExpectedElement(1367); + addExpectedElement(1368); + addExpectedElement(1369); + addExpectedElement(1370); + addExpectedElement(1371); + addExpectedElement(1372); + addExpectedElement(1373); + addExpectedElement(1374); + addExpectedElement(1375); + addExpectedElement(1376); + addExpectedElement(1377); + addExpectedElement(1378); + addExpectedElement(1379); + addExpectedElement(1380); + addExpectedElement(1381); + addExpectedElement(1382); + addExpectedElement(1383); + addExpectedElement(1384); + addExpectedElement(1385); + addExpectedElement(1386); + addExpectedElement(1387); + addExpectedElement(1388); + addExpectedElement(1389); + addExpectedElement(1390); + addExpectedElement(1391); + addExpectedElement(1392); + addExpectedElement(1393); + addExpectedElement(1394); + addExpectedElement(1395); + addExpectedElement(1396); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 12, parse_org_emftext_language_java_classifiers_Enumeration_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_classifiers_Enumeration" + + + + // $ANTLR start "parse_org_emftext_language_java_classifiers_Annotation" + // Java.g:4592:1: parse_org_emftext_language_java_classifiers_Annotation returns [org.emftext.language.java.classifiers.Annotation element = null] : ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* a1= '@' a2= 'interface' (a3= IDENTIFIER ) a4= '{' ( ( (a5_0= parse_org_emftext_language_java_members_Member ) ) )* a6= '}' ; + public final org.emftext.language.java.classifiers.Annotation parse_org_emftext_language_java_classifiers_Annotation() throws RecognitionException { + org.emftext.language.java.classifiers.Annotation element = null; + + int parse_org_emftext_language_java_classifiers_Annotation_StartIndex = input.index(); + + Token a1=null; + Token a2=null; + Token a3=null; + Token a4=null; + Token a6=null; + org.emftext.language.java.modifiers.AnnotationInstanceOrModifier a0_0 =null; + + org.emftext.language.java.members.Member a5_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 13) ) { return element; } + + // Java.g:4595:2: ( ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* a1= '@' a2= 'interface' (a3= IDENTIFIER ) a4= '{' ( ( (a5_0= parse_org_emftext_language_java_members_Member ) ) )* a6= '}' ) + // Java.g:4596:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* a1= '@' a2= 'interface' (a3= IDENTIFIER ) a4= '{' ( ( (a5_0= parse_org_emftext_language_java_members_Member ) ) )* a6= '}' + { + // Java.g:4596:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* + loop42: + do { + int alt42=2; + int LA42_0 = input.LA(1); + + if ( (LA42_0==48) ) { + int LA42_1 = input.LA(2); + + if ( (LA42_1==IDENTIFIER) ) { + alt42=1; + } + + + } + else if ( (LA42_0==56||LA42_0==72||LA42_0==83||(LA42_0 >= 87 && LA42_0 <= 89)||(LA42_0 >= 92 && LA42_0 <= 93)||LA42_0==96||LA42_0==100||LA42_0==103) ) { + alt42=1; + } + + + switch (alt42) { + case 1 : + // Java.g:4597:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + { + // Java.g:4597:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + // Java.g:4598:4: a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_classifiers_Annotation3767); + a0_0=parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createAnnotation(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.ANNOTATION__ANNOTATIONS_AND_MODIFIERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_11_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop42; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1397); + addExpectedElement(1398); + addExpectedElement(1399); + addExpectedElement(1400); + addExpectedElement(1401); + addExpectedElement(1402); + addExpectedElement(1403); + addExpectedElement(1404); + addExpectedElement(1405); + addExpectedElement(1406); + addExpectedElement(1407); + addExpectedElement(1408); + addExpectedElement(1409); + } + + a1=(Token)match(input,48,FOLLOW_48_in_parse_org_emftext_language_java_classifiers_Annotation3793); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createAnnotation(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_11_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1410); + } + + a2=(Token)match(input,81,FOLLOW_81_in_parse_org_emftext_language_java_classifiers_Annotation3807); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createAnnotation(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_11_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1411); + } + + // Java.g:4664:2: (a3= IDENTIFIER ) + // Java.g:4665:3: a3= IDENTIFIER + { + a3=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_classifiers_Annotation3825); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createAnnotation(); + startIncompleteElement(element); + } + if (a3 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a3.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ANNOTATION__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a3).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a3).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a3).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a3).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.classifiers.ClassifiersPackage.ANNOTATION__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_11_0_0_3, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a3, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1412); + } + + a4=(Token)match(input,105,FOLLOW_105_in_parse_org_emftext_language_java_classifiers_Annotation3846); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createAnnotation(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_11_0_0_5, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1413); + addExpectedElement(1414); + addExpectedElement(1415); + addExpectedElement(1416); + addExpectedElement(1417); + addExpectedElement(1418); + addExpectedElement(1419); + addExpectedElement(1420); + addExpectedElement(1421); + addExpectedElement(1422); + addExpectedElement(1423); + addExpectedElement(1424); + addExpectedElement(1425); + addExpectedElement(1426); + addExpectedElement(1427); + addExpectedElement(1428); + addExpectedElement(1429); + addExpectedElement(1430); + addExpectedElement(1431); + addExpectedElement(1432); + addExpectedElement(1433); + addExpectedElement(1434); + addExpectedElement(1435); + addExpectedElement(1436); + addExpectedElement(1437); + addExpectedElement(1438); + addExpectedElement(1439); + addExpectedElement(1440); + addExpectedElement(1441); + addExpectedElement(1442); + addExpectedElement(1443); + addExpectedElement(1444); + addExpectedElement(1445); + addExpectedElement(1446); + addExpectedElement(1447); + } + + // Java.g:4748:2: ( ( (a5_0= parse_org_emftext_language_java_members_Member ) ) )* + loop43: + do { + int alt43=2; + int LA43_0 = input.LA(1); + + if ( (LA43_0==IDENTIFIER||(LA43_0 >= 42 && LA43_0 <= 43)||LA43_0==48||LA43_0==56||LA43_0==58||LA43_0==60||(LA43_0 >= 63 && LA43_0 <= 64)||LA43_0==68||LA43_0==70||LA43_0==72||LA43_0==74||(LA43_0 >= 80 && LA43_0 <= 83)||(LA43_0 >= 87 && LA43_0 <= 89)||(LA43_0 >= 91 && LA43_0 <= 93)||LA43_0==96||LA43_0==100||(LA43_0 >= 102 && LA43_0 <= 103)||LA43_0==105) ) { + alt43=1; + } + + + switch (alt43) { + case 1 : + // Java.g:4749:3: ( (a5_0= parse_org_emftext_language_java_members_Member ) ) + { + // Java.g:4749:3: ( (a5_0= parse_org_emftext_language_java_members_Member ) ) + // Java.g:4750:4: (a5_0= parse_org_emftext_language_java_members_Member ) + { + // Java.g:4750:4: (a5_0= parse_org_emftext_language_java_members_Member ) + // Java.g:4751:5: a5_0= parse_org_emftext_language_java_members_Member + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_Member_in_parse_org_emftext_language_java_classifiers_Annotation3875); + a5_0=parse_org_emftext_language_java_members_Member(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createAnnotation(); + startIncompleteElement(element); + } + if (a5_0 != null) { + if (a5_0 != null) { + Object value = a5_0; + addObjectToList(element, org.emftext.language.java.classifiers.ClassifiersPackage.ANNOTATION__MEMBERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_11_0_0_6_0_0_1, a5_0, true); + copyLocalizationInfos(a5_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1448); + addExpectedElement(1449); + addExpectedElement(1450); + addExpectedElement(1451); + addExpectedElement(1452); + addExpectedElement(1453); + addExpectedElement(1454); + addExpectedElement(1455); + addExpectedElement(1456); + addExpectedElement(1457); + addExpectedElement(1458); + addExpectedElement(1459); + addExpectedElement(1460); + addExpectedElement(1461); + addExpectedElement(1462); + addExpectedElement(1463); + addExpectedElement(1464); + addExpectedElement(1465); + addExpectedElement(1466); + addExpectedElement(1467); + addExpectedElement(1468); + addExpectedElement(1469); + addExpectedElement(1470); + addExpectedElement(1471); + addExpectedElement(1472); + addExpectedElement(1473); + addExpectedElement(1474); + addExpectedElement(1475); + addExpectedElement(1476); + addExpectedElement(1477); + addExpectedElement(1478); + addExpectedElement(1479); + addExpectedElement(1480); + addExpectedElement(1481); + addExpectedElement(1482); + } + + } + + + } + break; + + default : + break loop43; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1483); + addExpectedElement(1484); + addExpectedElement(1485); + addExpectedElement(1486); + addExpectedElement(1487); + addExpectedElement(1488); + addExpectedElement(1489); + addExpectedElement(1490); + addExpectedElement(1491); + addExpectedElement(1492); + addExpectedElement(1493); + addExpectedElement(1494); + addExpectedElement(1495); + addExpectedElement(1496); + addExpectedElement(1497); + addExpectedElement(1498); + addExpectedElement(1499); + addExpectedElement(1500); + addExpectedElement(1501); + addExpectedElement(1502); + addExpectedElement(1503); + addExpectedElement(1504); + addExpectedElement(1505); + addExpectedElement(1506); + addExpectedElement(1507); + addExpectedElement(1508); + addExpectedElement(1509); + addExpectedElement(1510); + addExpectedElement(1511); + addExpectedElement(1512); + addExpectedElement(1513); + addExpectedElement(1514); + addExpectedElement(1515); + addExpectedElement(1516); + addExpectedElement(1517); + } + + a6=(Token)match(input,109,FOLLOW_109_in_parse_org_emftext_language_java_classifiers_Annotation3916); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createAnnotation(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_11_0_0_8, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a6, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1518); + addExpectedElement(1519); + addExpectedElement(1520); + addExpectedElement(1521); + addExpectedElement(1522); + addExpectedElement(1523); + addExpectedElement(1524); + addExpectedElement(1525); + addExpectedElement(1526); + addExpectedElement(1527); + addExpectedElement(1528); + addExpectedElement(1529); + addExpectedElement(1530); + addExpectedElement(1531); + addExpectedElement(1532); + addExpectedElement(1533); + addExpectedElement(1534); + addExpectedElement(1535); + addExpectedElement(1536); + addExpectedElement(1537); + addExpectedElement(1538); + addExpectedElement(1539); + addExpectedElement(1540); + addExpectedElement(1541); + addExpectedElement(1542); + addExpectedElement(1543); + addExpectedElement(1544); + addExpectedElement(1545); + addExpectedElement(1546); + addExpectedElement(1547); + addExpectedElement(1548); + addExpectedElement(1549); + addExpectedElement(1550); + addExpectedElement(1551); + addExpectedElement(1552); + addExpectedElement(1553); + addExpectedElement(1554); + addExpectedElement(1555); + addExpectedElement(1556); + addExpectedElement(1557); + addExpectedElement(1558); + addExpectedElement(1559); + addExpectedElement(1560); + addExpectedElement(1561); + addExpectedElement(1562); + addExpectedElement(1563); + addExpectedElement(1564); + addExpectedElement(1565); + addExpectedElement(1566); + addExpectedElement(1567); + addExpectedElement(1568); + addExpectedElement(1569); + addExpectedElement(1570); + addExpectedElement(1571); + addExpectedElement(1572); + addExpectedElement(1573); + addExpectedElement(1574); + addExpectedElement(1575); + addExpectedElement(1576); + addExpectedElement(1577); + addExpectedElement(1578); + addExpectedElement(1579); + addExpectedElement(1580); + addExpectedElement(1581); + addExpectedElement(1582); + addExpectedElement(1583); + addExpectedElement(1584); + addExpectedElement(1585); + addExpectedElement(1586); + addExpectedElement(1587); + addExpectedElement(1588); + addExpectedElement(1589); + addExpectedElement(1590); + addExpectedElement(1591); + addExpectedElement(1592); + addExpectedElement(1593); + addExpectedElement(1594); + addExpectedElement(1595); + addExpectedElement(1596); + addExpectedElement(1597); + addExpectedElement(1598); + addExpectedElement(1599); + addExpectedElement(1600); + addExpectedElement(1601); + addExpectedElement(1602); + addExpectedElement(1603); + addExpectedElement(1604); + addExpectedElement(1605); + addExpectedElement(1606); + addExpectedElement(1607); + addExpectedElement(1608); + addExpectedElement(1609); + addExpectedElement(1610); + addExpectedElement(1611); + addExpectedElement(1612); + addExpectedElement(1613); + addExpectedElement(1614); + addExpectedElement(1615); + addExpectedElement(1616); + addExpectedElement(1617); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 13, parse_org_emftext_language_java_classifiers_Annotation_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_classifiers_Annotation" + + + + // $ANTLR start "parse_org_emftext_language_java_annotations_AnnotationInstance" + // Java.g:4966:1: parse_org_emftext_language_java_annotations_AnnotationInstance returns [org.emftext.language.java.annotations.AnnotationInstance element = null] : a0= '@' ( ( (a1= IDENTIFIER ) a2= '.' ) )* (a3= IDENTIFIER ) ( ( (a4_0= parse_org_emftext_language_java_annotations_AnnotationParameter ) ) )? ; + private JavaContextDependentURIFragmentFactory annotationInstanceURIFragmentFactory = new JavaContextDependentURIFragmentFactory(getReferenceResolverSwitch().getAnnotationInstanceAnnotationReferenceResolver()); + public final org.emftext.language.java.annotations.AnnotationInstance parse_org_emftext_language_java_annotations_AnnotationInstance() throws RecognitionException { + org.emftext.language.java.annotations.AnnotationInstance element = null; + + int parse_org_emftext_language_java_annotations_AnnotationInstance_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a2=null; + Token a3=null; + org.emftext.language.java.annotations.AnnotationParameter a4_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 14) ) { return element; } + + // Java.g:4969:2: (a0= '@' ( ( (a1= IDENTIFIER ) a2= '.' ) )* (a3= IDENTIFIER ) ( ( (a4_0= parse_org_emftext_language_java_annotations_AnnotationParameter ) ) )? ) + // Java.g:4970:2: a0= '@' ( ( (a1= IDENTIFIER ) a2= '.' ) )* (a3= IDENTIFIER ) ( ( (a4_0= parse_org_emftext_language_java_annotations_AnnotationParameter ) ) )? + { + a0=(Token)match(input,48,FOLLOW_48_in_parse_org_emftext_language_java_annotations_AnnotationInstance3945); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationInstance(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_12_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1618); + addExpectedElement(1619); + } + + // Java.g:4985:2: ( ( (a1= IDENTIFIER ) a2= '.' ) )* + loop44: + do { + int alt44=2; + int LA44_0 = input.LA(1); + + if ( (LA44_0==IDENTIFIER) ) { + int LA44_1 = input.LA(2); + + if ( (LA44_1==37) ) { + alt44=1; + } + + + } + + + switch (alt44) { + case 1 : + // Java.g:4986:3: ( (a1= IDENTIFIER ) a2= '.' ) + { + // Java.g:4986:3: ( (a1= IDENTIFIER ) a2= '.' ) + // Java.g:4987:4: (a1= IDENTIFIER ) a2= '.' + { + // Java.g:4987:4: (a1= IDENTIFIER ) + // Java.g:4988:5: a1= IDENTIFIER + { + a1=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_annotations_AnnotationInstance3974); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationInstance(); + startIncompleteElement(element); + } + if (a1 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a1.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_INSTANCE__NAMESPACES), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a1).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a1).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a1).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a1).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + addObjectToList(element, org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_INSTANCE__NAMESPACES, value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_12_0_0_1_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a1, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1620); + } + + a2=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_annotations_AnnotationInstance4007); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationInstance(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_12_0_0_1_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1621); + addExpectedElement(1622); + } + + } + + + } + break; + + default : + break loop44; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1623); + addExpectedElement(1624); + } + + // Java.g:5046:2: (a3= IDENTIFIER ) + // Java.g:5047:3: a3= IDENTIFIER + { + a3=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_annotations_AnnotationInstance4044); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationInstance(); + startIncompleteElement(element); + } + if (a3 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a3.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_INSTANCE__ANNOTATION), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a3).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a3).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a3).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a3).getStopIndex()); + } + String resolved = (String) resolvedObject; + org.emftext.language.java.classifiers.Classifier proxy = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + collectHiddenTokens(element); + + registerContextDependentProxy(annotationInstanceURIFragmentFactory, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_INSTANCE__ANNOTATION), resolved, proxy); + if (proxy != null) { + Object value = proxy; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_INSTANCE__ANNOTATION), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_12_0_0_2, proxy, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a3, element); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a3, proxy); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1625); + addExpectedElement(1626); + addExpectedElement(1627); + addExpectedElement(1628); + addExpectedElement(1629); + addExpectedElement(1630); + addExpectedElement(1631); + addExpectedElement(1632); + addExpectedElement(1633); + addExpectedElement(1634); + addExpectedElement(1635); + addExpectedElement(1636); + addExpectedElement(1637); + addExpectedElement(1638); + addExpectedElement(1639); + addExpectedElement(1640); + addExpectedElement(1641); + addExpectedElement(1642); + addExpectedElement(1643); + addExpectedElement(1644); + addExpectedElement(1645); + addExpectedElement(1646); + addExpectedElement(1647); + addExpectedElement(1648); + addExpectedElement(1649); + addExpectedElement(1650); + addExpectedElement(1651); + addExpectedElement(1652); + addExpectedElement(1653); + addExpectedElement(1654); + addExpectedElement(1655); + addExpectedElement(1656); + addExpectedElement(1657); + addExpectedElement(1658); + addExpectedElement(1659); + addExpectedElement(1660); + addExpectedElement(1661); + addExpectedElement(1662); + addExpectedElement(1663); + addExpectedElement(1664); + addExpectedElement(1665); + addExpectedElement(1666); + addExpectedElement(1667); + addExpectedElement(1668); + addExpectedElement(1669); + addExpectedElement(1670); + addExpectedElement(1671); + addExpectedElement(1672); + addExpectedElement(1673); + addExpectedElement(1674); + addExpectedElement(1675); + addExpectedElement(1676); + addExpectedElement(1677); + addExpectedElement(1678); + addExpectedElement(1679); + addExpectedElement(1680); + addExpectedElement(1681); + addExpectedElement(1682); + addExpectedElement(1683); + addExpectedElement(1684); + addExpectedElement(1685); + addExpectedElement(1686); + addExpectedElement(1687); + addExpectedElement(1688); + addExpectedElement(1689); + addExpectedElement(1690); + addExpectedElement(1691); + addExpectedElement(1692); + addExpectedElement(1693); + addExpectedElement(1694); + addExpectedElement(1695); + addExpectedElement(1696); + addExpectedElement(1697); + addExpectedElement(1698); + addExpectedElement(1699); + addExpectedElement(1700); + addExpectedElement(1701); + addExpectedElement(1702); + addExpectedElement(1703); + addExpectedElement(1704); + addExpectedElement(1705); + addExpectedElement(1706); + addExpectedElement(1707); + addExpectedElement(1708); + addExpectedElement(1709); + addExpectedElement(1710); + addExpectedElement(1711); + addExpectedElement(1712); + addExpectedElement(1713); + addExpectedElement(1714); + addExpectedElement(1715); + addExpectedElement(1716); + addExpectedElement(1717); + } + + // Java.g:5178:2: ( ( (a4_0= parse_org_emftext_language_java_annotations_AnnotationParameter ) ) )? + int alt45=2; + int LA45_0 = input.LA(1); + + if ( (LA45_0==26) ) { + alt45=1; + } + switch (alt45) { + case 1 : + // Java.g:5179:3: ( (a4_0= parse_org_emftext_language_java_annotations_AnnotationParameter ) ) + { + // Java.g:5179:3: ( (a4_0= parse_org_emftext_language_java_annotations_AnnotationParameter ) ) + // Java.g:5180:4: (a4_0= parse_org_emftext_language_java_annotations_AnnotationParameter ) + { + // Java.g:5180:4: (a4_0= parse_org_emftext_language_java_annotations_AnnotationParameter ) + // Java.g:5181:5: a4_0= parse_org_emftext_language_java_annotations_AnnotationParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_annotations_AnnotationParameter_in_parse_org_emftext_language_java_annotations_AnnotationInstance4080); + a4_0=parse_org_emftext_language_java_annotations_AnnotationParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationInstance(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_INSTANCE__PARAMETER), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_12_0_0_3_0_0_0, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1718); + addExpectedElement(1719); + addExpectedElement(1720); + addExpectedElement(1721); + addExpectedElement(1722); + addExpectedElement(1723); + addExpectedElement(1724); + addExpectedElement(1725); + addExpectedElement(1726); + addExpectedElement(1727); + addExpectedElement(1728); + addExpectedElement(1729); + addExpectedElement(1730); + addExpectedElement(1731); + addExpectedElement(1732); + addExpectedElement(1733); + addExpectedElement(1734); + addExpectedElement(1735); + addExpectedElement(1736); + addExpectedElement(1737); + addExpectedElement(1738); + addExpectedElement(1739); + addExpectedElement(1740); + addExpectedElement(1741); + addExpectedElement(1742); + addExpectedElement(1743); + addExpectedElement(1744); + addExpectedElement(1745); + addExpectedElement(1746); + addExpectedElement(1747); + addExpectedElement(1748); + addExpectedElement(1749); + addExpectedElement(1750); + addExpectedElement(1751); + addExpectedElement(1752); + addExpectedElement(1753); + addExpectedElement(1754); + addExpectedElement(1755); + addExpectedElement(1756); + addExpectedElement(1757); + addExpectedElement(1758); + addExpectedElement(1759); + addExpectedElement(1760); + addExpectedElement(1761); + addExpectedElement(1762); + addExpectedElement(1763); + addExpectedElement(1764); + addExpectedElement(1765); + addExpectedElement(1766); + addExpectedElement(1767); + addExpectedElement(1768); + addExpectedElement(1769); + addExpectedElement(1770); + addExpectedElement(1771); + addExpectedElement(1772); + addExpectedElement(1773); + addExpectedElement(1774); + addExpectedElement(1775); + addExpectedElement(1776); + addExpectedElement(1777); + addExpectedElement(1778); + addExpectedElement(1779); + addExpectedElement(1780); + addExpectedElement(1781); + addExpectedElement(1782); + addExpectedElement(1783); + addExpectedElement(1784); + addExpectedElement(1785); + addExpectedElement(1786); + addExpectedElement(1787); + addExpectedElement(1788); + addExpectedElement(1789); + addExpectedElement(1790); + addExpectedElement(1791); + addExpectedElement(1792); + addExpectedElement(1793); + addExpectedElement(1794); + addExpectedElement(1795); + addExpectedElement(1796); + addExpectedElement(1797); + addExpectedElement(1798); + addExpectedElement(1799); + addExpectedElement(1800); + addExpectedElement(1801); + addExpectedElement(1802); + addExpectedElement(1803); + addExpectedElement(1804); + addExpectedElement(1805); + addExpectedElement(1806); + addExpectedElement(1807); + addExpectedElement(1808); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1809); + addExpectedElement(1810); + addExpectedElement(1811); + addExpectedElement(1812); + addExpectedElement(1813); + addExpectedElement(1814); + addExpectedElement(1815); + addExpectedElement(1816); + addExpectedElement(1817); + addExpectedElement(1818); + addExpectedElement(1819); + addExpectedElement(1820); + addExpectedElement(1821); + addExpectedElement(1822); + addExpectedElement(1823); + addExpectedElement(1824); + addExpectedElement(1825); + addExpectedElement(1826); + addExpectedElement(1827); + addExpectedElement(1828); + addExpectedElement(1829); + addExpectedElement(1830); + addExpectedElement(1831); + addExpectedElement(1832); + addExpectedElement(1833); + addExpectedElement(1834); + addExpectedElement(1835); + addExpectedElement(1836); + addExpectedElement(1837); + addExpectedElement(1838); + addExpectedElement(1839); + addExpectedElement(1840); + addExpectedElement(1841); + addExpectedElement(1842); + addExpectedElement(1843); + addExpectedElement(1844); + addExpectedElement(1845); + addExpectedElement(1846); + addExpectedElement(1847); + addExpectedElement(1848); + addExpectedElement(1849); + addExpectedElement(1850); + addExpectedElement(1851); + addExpectedElement(1852); + addExpectedElement(1853); + addExpectedElement(1854); + addExpectedElement(1855); + addExpectedElement(1856); + addExpectedElement(1857); + addExpectedElement(1858); + addExpectedElement(1859); + addExpectedElement(1860); + addExpectedElement(1861); + addExpectedElement(1862); + addExpectedElement(1863); + addExpectedElement(1864); + addExpectedElement(1865); + addExpectedElement(1866); + addExpectedElement(1867); + addExpectedElement(1868); + addExpectedElement(1869); + addExpectedElement(1870); + addExpectedElement(1871); + addExpectedElement(1872); + addExpectedElement(1873); + addExpectedElement(1874); + addExpectedElement(1875); + addExpectedElement(1876); + addExpectedElement(1877); + addExpectedElement(1878); + addExpectedElement(1879); + addExpectedElement(1880); + addExpectedElement(1881); + addExpectedElement(1882); + addExpectedElement(1883); + addExpectedElement(1884); + addExpectedElement(1885); + addExpectedElement(1886); + addExpectedElement(1887); + addExpectedElement(1888); + addExpectedElement(1889); + addExpectedElement(1890); + addExpectedElement(1891); + addExpectedElement(1892); + addExpectedElement(1893); + addExpectedElement(1894); + addExpectedElement(1895); + addExpectedElement(1896); + addExpectedElement(1897); + addExpectedElement(1898); + addExpectedElement(1899); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 14, parse_org_emftext_language_java_annotations_AnnotationInstance_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_annotations_AnnotationInstance" + + + + // $ANTLR start "parse_org_emftext_language_java_annotations_SingleAnnotationParameter" + // Java.g:5395:1: parse_org_emftext_language_java_annotations_SingleAnnotationParameter returns [org.emftext.language.java.annotations.SingleAnnotationParameter element = null] : a0= '(' (a1_0= parse_org_emftext_language_java_arrays_ArrayInitializer |a1_1= parse_org_emftext_language_java_expressions_ConditionalExpression ) a2= ')' ; + public final org.emftext.language.java.annotations.SingleAnnotationParameter parse_org_emftext_language_java_annotations_SingleAnnotationParameter() throws RecognitionException { + org.emftext.language.java.annotations.SingleAnnotationParameter element = null; + + int parse_org_emftext_language_java_annotations_SingleAnnotationParameter_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + org.emftext.language.java.arrays.ArrayInitializer a1_0 =null; + + org.emftext.language.java.expressions.ConditionalExpression a1_1 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 15) ) { return element; } + + // Java.g:5398:2: (a0= '(' (a1_0= parse_org_emftext_language_java_arrays_ArrayInitializer |a1_1= parse_org_emftext_language_java_expressions_ConditionalExpression ) a2= ')' ) + // Java.g:5399:2: a0= '(' (a1_0= parse_org_emftext_language_java_arrays_ArrayInitializer |a1_1= parse_org_emftext_language_java_expressions_ConditionalExpression ) a2= ')' + { + a0=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_annotations_SingleAnnotationParameter4136); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createSingleAnnotationParameter(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_13_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1900); + addExpectedElement(1901); + addExpectedElement(1902); + addExpectedElement(1903); + addExpectedElement(1904); + addExpectedElement(1905); + addExpectedElement(1906); + addExpectedElement(1907); + addExpectedElement(1908); + addExpectedElement(1909); + addExpectedElement(1910); + addExpectedElement(1911); + addExpectedElement(1912); + addExpectedElement(1913); + addExpectedElement(1914); + addExpectedElement(1915); + addExpectedElement(1916); + addExpectedElement(1917); + addExpectedElement(1918); + addExpectedElement(1919); + addExpectedElement(1920); + addExpectedElement(1921); + addExpectedElement(1922); + addExpectedElement(1923); + addExpectedElement(1924); + addExpectedElement(1925); + addExpectedElement(1926); + addExpectedElement(1927); + addExpectedElement(1928); + addExpectedElement(1929); + addExpectedElement(1930); + addExpectedElement(1931); + addExpectedElement(1932); + addExpectedElement(1933); + addExpectedElement(1934); + addExpectedElement(1935); + addExpectedElement(1936); + addExpectedElement(1937); + addExpectedElement(1938); + addExpectedElement(1939); + addExpectedElement(1940); + addExpectedElement(1941); + addExpectedElement(1942); + } + + // Java.g:5455:2: (a1_0= parse_org_emftext_language_java_arrays_ArrayInitializer |a1_1= parse_org_emftext_language_java_expressions_ConditionalExpression ) + int alt46=2; + int LA46_0 = input.LA(1); + + if ( (LA46_0==105) ) { + int LA46_1 = input.LA(2); + + if ( (synpred47_Java()) ) { + alt46=1; + } + else if ( (true) ) { + alt46=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 46, 1, input); + + throw nvae; + + } + } + else if ( ((LA46_0 >= BOOLEAN_LITERAL && LA46_0 <= IDENTIFIER)||(LA46_0 >= OCTAL_INTEGER_LITERAL && LA46_0 <= OCTAL_LONG_LITERAL)||LA46_0==STRING_LITERAL||LA46_0==21||LA46_0==26||(LA46_0 >= 30 && LA46_0 <= 31)||(LA46_0 >= 34 && LA46_0 <= 35)||LA46_0==43||LA46_0==48||LA46_0==58||LA46_0==60||(LA46_0 >= 63 && LA46_0 <= 64)||LA46_0==68||LA46_0==74||LA46_0==80||LA46_0==82||(LA46_0 >= 84 && LA46_0 <= 85)||LA46_0==91||LA46_0==94||LA46_0==97||LA46_0==102||LA46_0==110) ) { + alt46=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 46, 0, input); + + throw nvae; + + } + switch (alt46) { + case 1 : + // Java.g:5456:3: a1_0= parse_org_emftext_language_java_arrays_ArrayInitializer + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_parse_org_emftext_language_java_annotations_SingleAnnotationParameter4154); + a1_0=parse_org_emftext_language_java_arrays_ArrayInitializer(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createSingleAnnotationParameter(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.SINGLE_ANNOTATION_PARAMETER__VALUE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_13_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + break; + case 2 : + // Java.g:5475:6: a1_1= parse_org_emftext_language_java_expressions_ConditionalExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_ConditionalExpression_in_parse_org_emftext_language_java_annotations_SingleAnnotationParameter4168); + a1_1=parse_org_emftext_language_java_expressions_ConditionalExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createSingleAnnotationParameter(); + startIncompleteElement(element); + } + if (a1_1 != null) { + if (a1_1 != null) { + Object value = a1_1; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.SINGLE_ANNOTATION_PARAMETER__VALUE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_13_0_0_1, a1_1, true); + copyLocalizationInfos(a1_1, element); + } + } + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1943); + } + + a2=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_annotations_SingleAnnotationParameter4186); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createSingleAnnotationParameter(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_13_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(1944); + addExpectedElement(1945); + addExpectedElement(1946); + addExpectedElement(1947); + addExpectedElement(1948); + addExpectedElement(1949); + addExpectedElement(1950); + addExpectedElement(1951); + addExpectedElement(1952); + addExpectedElement(1953); + addExpectedElement(1954); + addExpectedElement(1955); + addExpectedElement(1956); + addExpectedElement(1957); + addExpectedElement(1958); + addExpectedElement(1959); + addExpectedElement(1960); + addExpectedElement(1961); + addExpectedElement(1962); + addExpectedElement(1963); + addExpectedElement(1964); + addExpectedElement(1965); + addExpectedElement(1966); + addExpectedElement(1967); + addExpectedElement(1968); + addExpectedElement(1969); + addExpectedElement(1970); + addExpectedElement(1971); + addExpectedElement(1972); + addExpectedElement(1973); + addExpectedElement(1974); + addExpectedElement(1975); + addExpectedElement(1976); + addExpectedElement(1977); + addExpectedElement(1978); + addExpectedElement(1979); + addExpectedElement(1980); + addExpectedElement(1981); + addExpectedElement(1982); + addExpectedElement(1983); + addExpectedElement(1984); + addExpectedElement(1985); + addExpectedElement(1986); + addExpectedElement(1987); + addExpectedElement(1988); + addExpectedElement(1989); + addExpectedElement(1990); + addExpectedElement(1991); + addExpectedElement(1992); + addExpectedElement(1993); + addExpectedElement(1994); + addExpectedElement(1995); + addExpectedElement(1996); + addExpectedElement(1997); + addExpectedElement(1998); + addExpectedElement(1999); + addExpectedElement(2000); + addExpectedElement(2001); + addExpectedElement(2002); + addExpectedElement(2003); + addExpectedElement(2004); + addExpectedElement(2005); + addExpectedElement(2006); + addExpectedElement(2007); + addExpectedElement(2008); + addExpectedElement(2009); + addExpectedElement(2010); + addExpectedElement(2011); + addExpectedElement(2012); + addExpectedElement(2013); + addExpectedElement(2014); + addExpectedElement(2015); + addExpectedElement(2016); + addExpectedElement(2017); + addExpectedElement(2018); + addExpectedElement(2019); + addExpectedElement(2020); + addExpectedElement(2021); + addExpectedElement(2022); + addExpectedElement(2023); + addExpectedElement(2024); + addExpectedElement(2025); + addExpectedElement(2026); + addExpectedElement(2027); + addExpectedElement(2028); + addExpectedElement(2029); + addExpectedElement(2030); + addExpectedElement(2031); + addExpectedElement(2032); + addExpectedElement(2033); + addExpectedElement(2034); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 15, parse_org_emftext_language_java_annotations_SingleAnnotationParameter_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_annotations_SingleAnnotationParameter" + + + + // $ANTLR start "parse_org_emftext_language_java_annotations_AnnotationParameterList" + // Java.g:5606:1: parse_org_emftext_language_java_annotations_AnnotationParameterList returns [org.emftext.language.java.annotations.AnnotationParameterList element = null] : a0= '(' ( ( (a1_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ) )* ) )? a4= ')' ; + public final org.emftext.language.java.annotations.AnnotationParameterList parse_org_emftext_language_java_annotations_AnnotationParameterList() throws RecognitionException { + org.emftext.language.java.annotations.AnnotationParameterList element = null; + + int parse_org_emftext_language_java_annotations_AnnotationParameterList_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + Token a4=null; + org.emftext.language.java.annotations.AnnotationAttributeSetting a1_0 =null; + + org.emftext.language.java.annotations.AnnotationAttributeSetting a3_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 16) ) { return element; } + + // Java.g:5609:2: (a0= '(' ( ( (a1_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ) )* ) )? a4= ')' ) + // Java.g:5610:2: a0= '(' ( ( (a1_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ) )* ) )? a4= ')' + { + a0=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_annotations_AnnotationParameterList4215); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationParameterList(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_14_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2035); + addExpectedElement(2036); + } + + // Java.g:5625:2: ( ( (a1_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ) )* ) )? + int alt48=2; + int LA48_0 = input.LA(1); + + if ( (LA48_0==IDENTIFIER) ) { + alt48=1; + } + switch (alt48) { + case 1 : + // Java.g:5626:3: ( (a1_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ) )* ) + { + // Java.g:5626:3: ( (a1_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ) )* ) + // Java.g:5627:4: (a1_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ) )* + { + // Java.g:5627:4: (a1_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) + // Java.g:5628:5: a1_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting + { + pushFollow(FOLLOW_parse_org_emftext_language_java_annotations_AnnotationAttributeSetting_in_parse_org_emftext_language_java_annotations_AnnotationParameterList4244); + a1_0=parse_org_emftext_language_java_annotations_AnnotationAttributeSetting(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationParameterList(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_PARAMETER_LIST__SETTINGS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_14_0_0_1_0_0_0, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2037); + addExpectedElement(2038); + } + + // Java.g:5654:4: ( (a2= ',' (a3_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ) )* + loop47: + do { + int alt47=2; + int LA47_0 = input.LA(1); + + if ( (LA47_0==33) ) { + alt47=1; + } + + + switch (alt47) { + case 1 : + // Java.g:5655:5: (a2= ',' (a3_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ) + { + // Java.g:5655:5: (a2= ',' (a3_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) ) + // Java.g:5656:6: a2= ',' (a3_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) + { + a2=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_annotations_AnnotationParameterList4285); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationParameterList(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_14_0_0_1_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2039); + } + + // Java.g:5670:6: (a3_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting ) + // Java.g:5671:7: a3_0= parse_org_emftext_language_java_annotations_AnnotationAttributeSetting + { + pushFollow(FOLLOW_parse_org_emftext_language_java_annotations_AnnotationAttributeSetting_in_parse_org_emftext_language_java_annotations_AnnotationParameterList4319); + a3_0=parse_org_emftext_language_java_annotations_AnnotationAttributeSetting(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationParameterList(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + addObjectToList(element, org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_PARAMETER_LIST__SETTINGS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_14_0_0_1_0_0_1_0_0_1, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2040); + addExpectedElement(2041); + } + + } + + + } + break; + + default : + break loop47; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2042); + addExpectedElement(2043); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2044); + } + + a4=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_annotations_AnnotationParameterList4393); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationParameterList(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_14_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2045); + addExpectedElement(2046); + addExpectedElement(2047); + addExpectedElement(2048); + addExpectedElement(2049); + addExpectedElement(2050); + addExpectedElement(2051); + addExpectedElement(2052); + addExpectedElement(2053); + addExpectedElement(2054); + addExpectedElement(2055); + addExpectedElement(2056); + addExpectedElement(2057); + addExpectedElement(2058); + addExpectedElement(2059); + addExpectedElement(2060); + addExpectedElement(2061); + addExpectedElement(2062); + addExpectedElement(2063); + addExpectedElement(2064); + addExpectedElement(2065); + addExpectedElement(2066); + addExpectedElement(2067); + addExpectedElement(2068); + addExpectedElement(2069); + addExpectedElement(2070); + addExpectedElement(2071); + addExpectedElement(2072); + addExpectedElement(2073); + addExpectedElement(2074); + addExpectedElement(2075); + addExpectedElement(2076); + addExpectedElement(2077); + addExpectedElement(2078); + addExpectedElement(2079); + addExpectedElement(2080); + addExpectedElement(2081); + addExpectedElement(2082); + addExpectedElement(2083); + addExpectedElement(2084); + addExpectedElement(2085); + addExpectedElement(2086); + addExpectedElement(2087); + addExpectedElement(2088); + addExpectedElement(2089); + addExpectedElement(2090); + addExpectedElement(2091); + addExpectedElement(2092); + addExpectedElement(2093); + addExpectedElement(2094); + addExpectedElement(2095); + addExpectedElement(2096); + addExpectedElement(2097); + addExpectedElement(2098); + addExpectedElement(2099); + addExpectedElement(2100); + addExpectedElement(2101); + addExpectedElement(2102); + addExpectedElement(2103); + addExpectedElement(2104); + addExpectedElement(2105); + addExpectedElement(2106); + addExpectedElement(2107); + addExpectedElement(2108); + addExpectedElement(2109); + addExpectedElement(2110); + addExpectedElement(2111); + addExpectedElement(2112); + addExpectedElement(2113); + addExpectedElement(2114); + addExpectedElement(2115); + addExpectedElement(2116); + addExpectedElement(2117); + addExpectedElement(2118); + addExpectedElement(2119); + addExpectedElement(2120); + addExpectedElement(2121); + addExpectedElement(2122); + addExpectedElement(2123); + addExpectedElement(2124); + addExpectedElement(2125); + addExpectedElement(2126); + addExpectedElement(2127); + addExpectedElement(2128); + addExpectedElement(2129); + addExpectedElement(2130); + addExpectedElement(2131); + addExpectedElement(2132); + addExpectedElement(2133); + addExpectedElement(2134); + addExpectedElement(2135); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 16, parse_org_emftext_language_java_annotations_AnnotationParameterList_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_annotations_AnnotationParameterList" + + + + // $ANTLR start "parse_org_emftext_language_java_annotations_AnnotationAttributeSetting" + // Java.g:5818:1: parse_org_emftext_language_java_annotations_AnnotationAttributeSetting returns [org.emftext.language.java.annotations.AnnotationAttributeSetting element = null] : (a0= IDENTIFIER ) a1= '=' (a2_0= parse_org_emftext_language_java_arrays_ArrayInitializer |a2_1= parse_org_emftext_language_java_expressions_ConditionalExpression ) ; + private JavaContextDependentURIFragmentFactory annotationAttributeSettingURIFragmentFactory = new JavaContextDependentURIFragmentFactory(getReferenceResolverSwitch().getAnnotationAttributeSettingAttributeReferenceResolver()); + public final org.emftext.language.java.annotations.AnnotationAttributeSetting parse_org_emftext_language_java_annotations_AnnotationAttributeSetting() throws RecognitionException { + org.emftext.language.java.annotations.AnnotationAttributeSetting element = null; + + int parse_org_emftext_language_java_annotations_AnnotationAttributeSetting_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + org.emftext.language.java.arrays.ArrayInitializer a2_0 =null; + + org.emftext.language.java.expressions.ConditionalExpression a2_1 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 17) ) { return element; } + + // Java.g:5821:2: ( (a0= IDENTIFIER ) a1= '=' (a2_0= parse_org_emftext_language_java_arrays_ArrayInitializer |a2_1= parse_org_emftext_language_java_expressions_ConditionalExpression ) ) + // Java.g:5822:2: (a0= IDENTIFIER ) a1= '=' (a2_0= parse_org_emftext_language_java_arrays_ArrayInitializer |a2_1= parse_org_emftext_language_java_expressions_ConditionalExpression ) + { + // Java.g:5822:2: (a0= IDENTIFIER ) + // Java.g:5823:3: a0= IDENTIFIER + { + a0=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_annotations_AnnotationAttributeSetting4426); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttributeSetting(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE_SETTING__ATTRIBUTE), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + String resolved = (String) resolvedObject; + org.emftext.language.java.members.InterfaceMethod proxy = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + collectHiddenTokens(element); + registerContextDependentProxy(annotationAttributeSettingURIFragmentFactory, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE_SETTING__ATTRIBUTE), resolved, proxy); + if (proxy != null) { + Object value = proxy; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE_SETTING__ATTRIBUTE), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_15_0_0_0, proxy, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, proxy); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2136); + } + + a1=(Token)match(input,44,FOLLOW_44_in_parse_org_emftext_language_java_annotations_AnnotationAttributeSetting4447); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttributeSetting(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_15_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2137); + addExpectedElement(2138); + addExpectedElement(2139); + addExpectedElement(2140); + addExpectedElement(2141); + addExpectedElement(2142); + addExpectedElement(2143); + addExpectedElement(2144); + addExpectedElement(2145); + addExpectedElement(2146); + addExpectedElement(2147); + addExpectedElement(2148); + addExpectedElement(2149); + addExpectedElement(2150); + addExpectedElement(2151); + addExpectedElement(2152); + addExpectedElement(2153); + addExpectedElement(2154); + addExpectedElement(2155); + addExpectedElement(2156); + addExpectedElement(2157); + addExpectedElement(2158); + addExpectedElement(2159); + addExpectedElement(2160); + addExpectedElement(2161); + addExpectedElement(2162); + addExpectedElement(2163); + addExpectedElement(2164); + addExpectedElement(2165); + addExpectedElement(2166); + addExpectedElement(2167); + addExpectedElement(2168); + addExpectedElement(2169); + addExpectedElement(2170); + addExpectedElement(2171); + addExpectedElement(2172); + addExpectedElement(2173); + addExpectedElement(2174); + addExpectedElement(2175); + addExpectedElement(2176); + addExpectedElement(2177); + addExpectedElement(2178); + addExpectedElement(2179); + } + + // Java.g:5918:2: (a2_0= parse_org_emftext_language_java_arrays_ArrayInitializer |a2_1= parse_org_emftext_language_java_expressions_ConditionalExpression ) + int alt49=2; + int LA49_0 = input.LA(1); + + if ( (LA49_0==105) ) { + int LA49_1 = input.LA(2); + + if ( (synpred50_Java()) ) { + alt49=1; + } + else if ( (true) ) { + alt49=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 49, 1, input); + + throw nvae; + + } + } + else if ( ((LA49_0 >= BOOLEAN_LITERAL && LA49_0 <= IDENTIFIER)||(LA49_0 >= OCTAL_INTEGER_LITERAL && LA49_0 <= OCTAL_LONG_LITERAL)||LA49_0==STRING_LITERAL||LA49_0==21||LA49_0==26||(LA49_0 >= 30 && LA49_0 <= 31)||(LA49_0 >= 34 && LA49_0 <= 35)||LA49_0==43||LA49_0==48||LA49_0==58||LA49_0==60||(LA49_0 >= 63 && LA49_0 <= 64)||LA49_0==68||LA49_0==74||LA49_0==80||LA49_0==82||(LA49_0 >= 84 && LA49_0 <= 85)||LA49_0==91||LA49_0==94||LA49_0==97||LA49_0==102||LA49_0==110) ) { + alt49=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 49, 0, input); + + throw nvae; + + } + switch (alt49) { + case 1 : + // Java.g:5919:3: a2_0= parse_org_emftext_language_java_arrays_ArrayInitializer + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_parse_org_emftext_language_java_annotations_AnnotationAttributeSetting4465); + a2_0=parse_org_emftext_language_java_arrays_ArrayInitializer(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttributeSetting(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE_SETTING__VALUE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_15_0_0_4, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + break; + case 2 : + // Java.g:5938:6: a2_1= parse_org_emftext_language_java_expressions_ConditionalExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_ConditionalExpression_in_parse_org_emftext_language_java_annotations_AnnotationAttributeSetting4479); + a2_1=parse_org_emftext_language_java_expressions_ConditionalExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttributeSetting(); + startIncompleteElement(element); + } + if (a2_1 != null) { + if (a2_1 != null) { + Object value = a2_1; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE_SETTING__VALUE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_15_0_0_4, a2_1, true); + copyLocalizationInfos(a2_1, element); + } + } + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2180); + addExpectedElement(2181); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 17, parse_org_emftext_language_java_annotations_AnnotationAttributeSetting_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_annotations_AnnotationAttributeSetting" + + + + // $ANTLR start "parse_org_emftext_language_java_generics_TypeParameter" + // Java.g:5966:1: parse_org_emftext_language_java_generics_TypeParameter returns [org.emftext.language.java.generics.TypeParameter element = null] : (a0= IDENTIFIER ) ( (a1= 'extends' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) )? ; + public final org.emftext.language.java.generics.TypeParameter parse_org_emftext_language_java_generics_TypeParameter() throws RecognitionException { + org.emftext.language.java.generics.TypeParameter element = null; + + int parse_org_emftext_language_java_generics_TypeParameter_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a3=null; + org.emftext.language.java.types.TypeReference a2_0 =null; + + org.emftext.language.java.types.TypeReference a4_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 18) ) { return element; } + + // Java.g:5969:2: ( (a0= IDENTIFIER ) ( (a1= 'extends' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) )? ) + // Java.g:5970:2: (a0= IDENTIFIER ) ( (a1= 'extends' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) )? + { + // Java.g:5970:2: (a0= IDENTIFIER ) + // Java.g:5971:3: a0= IDENTIFIER + { + a0=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_generics_TypeParameter4516); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createTypeParameter(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.generics.GenericsPackage.TYPE_PARAMETER__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.generics.GenericsPackage.TYPE_PARAMETER__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_16_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2182); + addExpectedElement(2183); + addExpectedElement(2184); + addExpectedElement(2185); + addExpectedElement(2186); + addExpectedElement(2187); + addExpectedElement(2188); + addExpectedElement(2189); + addExpectedElement(2190); + addExpectedElement(2191); + addExpectedElement(2192); + addExpectedElement(2193); + addExpectedElement(2194); + } + + // Java.g:6018:2: ( (a1= 'extends' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) )? + int alt51=2; + int LA51_0 = input.LA(1); + + if ( (LA51_0==71) ) { + alt51=1; + } + switch (alt51) { + case 1 : + // Java.g:6019:3: (a1= 'extends' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) + { + // Java.g:6019:3: (a1= 'extends' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ) + // Java.g:6020:4: a1= 'extends' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) )* + { + a1=(Token)match(input,71,FOLLOW_71_in_parse_org_emftext_language_java_generics_TypeParameter4546); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createTypeParameter(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_16_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2195); + addExpectedElement(2196); + addExpectedElement(2197); + addExpectedElement(2198); + addExpectedElement(2199); + addExpectedElement(2200); + addExpectedElement(2201); + addExpectedElement(2202); + addExpectedElement(2203); + addExpectedElement(2204); + addExpectedElement(2205); + } + + // Java.g:6044:4: (a2_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:6045:5: a2_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_generics_TypeParameter4572); + a2_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createTypeParameter(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.generics.GenericsPackage.TYPE_PARAMETER__EXTEND_TYPES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_16_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2206); + addExpectedElement(2207); + addExpectedElement(2208); + addExpectedElement(2209); + addExpectedElement(2210); + addExpectedElement(2211); + addExpectedElement(2212); + addExpectedElement(2213); + addExpectedElement(2214); + addExpectedElement(2215); + addExpectedElement(2216); + addExpectedElement(2217); + addExpectedElement(2218); + } + + // Java.g:6082:4: ( (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) )* + loop50: + do { + int alt50=2; + int LA50_0 = input.LA(1); + + if ( (LA50_0==24) ) { + alt50=1; + } + + + switch (alt50) { + case 1 : + // Java.g:6083:5: (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) + { + // Java.g:6083:5: (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) + // Java.g:6084:6: a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) + { + a3=(Token)match(input,24,FOLLOW_24_in_parse_org_emftext_language_java_generics_TypeParameter4613); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createTypeParameter(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_16_0_0_1_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2219); + addExpectedElement(2220); + addExpectedElement(2221); + addExpectedElement(2222); + addExpectedElement(2223); + addExpectedElement(2224); + addExpectedElement(2225); + addExpectedElement(2226); + addExpectedElement(2227); + addExpectedElement(2228); + addExpectedElement(2229); + } + + // Java.g:6108:6: (a4_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:6109:7: a4_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_generics_TypeParameter4647); + a4_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createTypeParameter(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.generics.GenericsPackage.TYPE_PARAMETER__EXTEND_TYPES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_16_0_0_1_0_0_2_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2230); + addExpectedElement(2231); + addExpectedElement(2232); + addExpectedElement(2233); + addExpectedElement(2234); + addExpectedElement(2235); + addExpectedElement(2236); + addExpectedElement(2237); + addExpectedElement(2238); + addExpectedElement(2239); + addExpectedElement(2240); + addExpectedElement(2241); + addExpectedElement(2242); + } + + } + + + } + break; + + default : + break loop50; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2243); + addExpectedElement(2244); + addExpectedElement(2245); + addExpectedElement(2246); + addExpectedElement(2247); + addExpectedElement(2248); + addExpectedElement(2249); + addExpectedElement(2250); + addExpectedElement(2251); + addExpectedElement(2252); + addExpectedElement(2253); + addExpectedElement(2254); + addExpectedElement(2255); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2256); + addExpectedElement(2257); + addExpectedElement(2258); + addExpectedElement(2259); + addExpectedElement(2260); + addExpectedElement(2261); + addExpectedElement(2262); + addExpectedElement(2263); + addExpectedElement(2264); + addExpectedElement(2265); + addExpectedElement(2266); + addExpectedElement(2267); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 18, parse_org_emftext_language_java_generics_TypeParameter_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_generics_TypeParameter" + + + + // $ANTLR start "parse_org_emftext_language_java_members_EnumConstant" + // Java.g:6185:1: parse_org_emftext_language_java_members_EnumConstant returns [org.emftext.language.java.members.EnumConstant element = null] : ( (a0_0= parse_org_emftext_language_java_annotations_AnnotationInstance ) )* (a1= IDENTIFIER ) ( (a2= '(' ( ( (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a6= ')' ) )? ( ( (a7_0= parse_org_emftext_language_java_classifiers_AnonymousClass ) ) )? ; + public final org.emftext.language.java.members.EnumConstant parse_org_emftext_language_java_members_EnumConstant() throws RecognitionException { + org.emftext.language.java.members.EnumConstant element = null; + + int parse_org_emftext_language_java_members_EnumConstant_StartIndex = input.index(); + + Token a1=null; + Token a2=null; + Token a4=null; + Token a6=null; + org.emftext.language.java.annotations.AnnotationInstance a0_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a3_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a5_0 =null; + + org.emftext.language.java.classifiers.AnonymousClass a7_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 19) ) { return element; } + + // Java.g:6188:2: ( ( (a0_0= parse_org_emftext_language_java_annotations_AnnotationInstance ) )* (a1= IDENTIFIER ) ( (a2= '(' ( ( (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a6= ')' ) )? ( ( (a7_0= parse_org_emftext_language_java_classifiers_AnonymousClass ) ) )? ) + // Java.g:6189:2: ( (a0_0= parse_org_emftext_language_java_annotations_AnnotationInstance ) )* (a1= IDENTIFIER ) ( (a2= '(' ( ( (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a6= ')' ) )? ( ( (a7_0= parse_org_emftext_language_java_classifiers_AnonymousClass ) ) )? + { + // Java.g:6189:2: ( (a0_0= parse_org_emftext_language_java_annotations_AnnotationInstance ) )* + loop52: + do { + int alt52=2; + int LA52_0 = input.LA(1); + + if ( (LA52_0==48) ) { + alt52=1; + } + + + switch (alt52) { + case 1 : + // Java.g:6190:3: (a0_0= parse_org_emftext_language_java_annotations_AnnotationInstance ) + { + // Java.g:6190:3: (a0_0= parse_org_emftext_language_java_annotations_AnnotationInstance ) + // Java.g:6191:4: a0_0= parse_org_emftext_language_java_annotations_AnnotationInstance + { + pushFollow(FOLLOW_parse_org_emftext_language_java_annotations_AnnotationInstance_in_parse_org_emftext_language_java_members_EnumConstant4745); + a0_0=parse_org_emftext_language_java_annotations_AnnotationInstance(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createEnumConstant(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.ENUM_CONSTANT__ANNOTATIONS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_17_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop52; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2268); + addExpectedElement(2269); + } + + // Java.g:6218:2: (a1= IDENTIFIER ) + // Java.g:6219:3: a1= IDENTIFIER + { + a1=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_members_EnumConstant4775); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createEnumConstant(); + startIncompleteElement(element); + } + if (a1 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a1.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.ENUM_CONSTANT__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a1).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a1).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a1).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a1).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.ENUM_CONSTANT__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_17_0_0_1, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a1, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2270); + addExpectedElement(2271); + addExpectedElement(2272); + addExpectedElement(2273); + addExpectedElement(2274); + addExpectedElement(2275); + } + + // Java.g:6259:2: ( (a2= '(' ( ( (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a6= ')' ) )? + int alt55=2; + int LA55_0 = input.LA(1); + + if ( (LA55_0==26) ) { + alt55=1; + } + switch (alt55) { + case 1 : + // Java.g:6260:3: (a2= '(' ( ( (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a6= ')' ) + { + // Java.g:6260:3: (a2= '(' ( ( (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a6= ')' ) + // Java.g:6261:4: a2= '(' ( ( (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a6= ')' + { + a2=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_members_EnumConstant4805); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createEnumConstant(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_17_0_0_2_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2276); + addExpectedElement(2277); + addExpectedElement(2278); + addExpectedElement(2279); + addExpectedElement(2280); + addExpectedElement(2281); + addExpectedElement(2282); + addExpectedElement(2283); + addExpectedElement(2284); + addExpectedElement(2285); + addExpectedElement(2286); + addExpectedElement(2287); + addExpectedElement(2288); + addExpectedElement(2289); + addExpectedElement(2290); + addExpectedElement(2291); + addExpectedElement(2292); + addExpectedElement(2293); + addExpectedElement(2294); + addExpectedElement(2295); + addExpectedElement(2296); + addExpectedElement(2297); + addExpectedElement(2298); + addExpectedElement(2299); + addExpectedElement(2300); + addExpectedElement(2301); + addExpectedElement(2302); + addExpectedElement(2303); + addExpectedElement(2304); + addExpectedElement(2305); + addExpectedElement(2306); + addExpectedElement(2307); + addExpectedElement(2308); + addExpectedElement(2309); + addExpectedElement(2310); + addExpectedElement(2311); + addExpectedElement(2312); + addExpectedElement(2313); + addExpectedElement(2314); + addExpectedElement(2315); + addExpectedElement(2316); + addExpectedElement(2317); + addExpectedElement(2318); + addExpectedElement(2319); + } + + // Java.g:6318:4: ( ( (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? + int alt54=2; + int LA54_0 = input.LA(1); + + if ( ((LA54_0 >= BOOLEAN_LITERAL && LA54_0 <= IDENTIFIER)||(LA54_0 >= OCTAL_INTEGER_LITERAL && LA54_0 <= OCTAL_LONG_LITERAL)||LA54_0==STRING_LITERAL||LA54_0==21||LA54_0==26||(LA54_0 >= 30 && LA54_0 <= 31)||(LA54_0 >= 34 && LA54_0 <= 35)||LA54_0==43||LA54_0==48||LA54_0==58||LA54_0==60||(LA54_0 >= 63 && LA54_0 <= 64)||LA54_0==68||LA54_0==74||LA54_0==80||LA54_0==82||(LA54_0 >= 84 && LA54_0 <= 85)||LA54_0==91||LA54_0==94||LA54_0==97||LA54_0==102||LA54_0==105||LA54_0==110) ) { + alt54=1; + } + switch (alt54) { + case 1 : + // Java.g:6319:5: ( (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) + { + // Java.g:6319:5: ( (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) + // Java.g:6320:6: (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* + { + // Java.g:6320:6: (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:6321:7: a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_members_EnumConstant4846); + a3_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createEnumConstant(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.ENUM_CONSTANT__ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_17_0_0_2_0_0_2_0_0_0, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2320); + addExpectedElement(2321); + } + + // Java.g:6347:6: ( (a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* + loop53: + do { + int alt53=2; + int LA53_0 = input.LA(1); + + if ( (LA53_0==33) ) { + alt53=1; + } + + + switch (alt53) { + case 1 : + // Java.g:6348:7: (a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + { + // Java.g:6348:7: (a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + // Java.g:6349:8: a4= ',' (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + a4=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_members_EnumConstant4901); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createEnumConstant(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_17_0_0_2_0_0_2_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2322); + addExpectedElement(2323); + addExpectedElement(2324); + addExpectedElement(2325); + addExpectedElement(2326); + addExpectedElement(2327); + addExpectedElement(2328); + addExpectedElement(2329); + addExpectedElement(2330); + addExpectedElement(2331); + addExpectedElement(2332); + addExpectedElement(2333); + addExpectedElement(2334); + addExpectedElement(2335); + addExpectedElement(2336); + addExpectedElement(2337); + addExpectedElement(2338); + addExpectedElement(2339); + addExpectedElement(2340); + addExpectedElement(2341); + addExpectedElement(2342); + addExpectedElement(2343); + addExpectedElement(2344); + addExpectedElement(2345); + addExpectedElement(2346); + addExpectedElement(2347); + addExpectedElement(2348); + addExpectedElement(2349); + addExpectedElement(2350); + addExpectedElement(2351); + addExpectedElement(2352); + addExpectedElement(2353); + addExpectedElement(2354); + addExpectedElement(2355); + addExpectedElement(2356); + addExpectedElement(2357); + addExpectedElement(2358); + addExpectedElement(2359); + addExpectedElement(2360); + addExpectedElement(2361); + addExpectedElement(2362); + addExpectedElement(2363); + addExpectedElement(2364); + } + + // Java.g:6405:8: (a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:6406:9: a5_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_members_EnumConstant4943); + a5_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createEnumConstant(); + startIncompleteElement(element); + } + if (a5_0 != null) { + if (a5_0 != null) { + Object value = a5_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.ENUM_CONSTANT__ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_17_0_0_2_0_0_2_0_0_1_0_0_1, a5_0, true); + copyLocalizationInfos(a5_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2365); + addExpectedElement(2366); + } + + } + + + } + break; + + default : + break loop53; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2367); + addExpectedElement(2368); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2369); + } + + a6=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_members_EnumConstant5047); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createEnumConstant(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_17_0_0_2_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a6, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2370); + addExpectedElement(2371); + addExpectedElement(2372); + addExpectedElement(2373); + addExpectedElement(2374); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2375); + addExpectedElement(2376); + addExpectedElement(2377); + addExpectedElement(2378); + addExpectedElement(2379); + } + + // Java.g:6476:2: ( ( (a7_0= parse_org_emftext_language_java_classifiers_AnonymousClass ) ) )? + int alt56=2; + int LA56_0 = input.LA(1); + + if ( (LA56_0==105) ) { + alt56=1; + } + switch (alt56) { + case 1 : + // Java.g:6477:3: ( (a7_0= parse_org_emftext_language_java_classifiers_AnonymousClass ) ) + { + // Java.g:6477:3: ( (a7_0= parse_org_emftext_language_java_classifiers_AnonymousClass ) ) + // Java.g:6478:4: (a7_0= parse_org_emftext_language_java_classifiers_AnonymousClass ) + { + // Java.g:6478:4: (a7_0= parse_org_emftext_language_java_classifiers_AnonymousClass ) + // Java.g:6479:5: a7_0= parse_org_emftext_language_java_classifiers_AnonymousClass + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_AnonymousClass_in_parse_org_emftext_language_java_members_EnumConstant5095); + a7_0=parse_org_emftext_language_java_classifiers_AnonymousClass(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createEnumConstant(); + startIncompleteElement(element); + } + if (a7_0 != null) { + if (a7_0 != null) { + Object value = a7_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.ENUM_CONSTANT__ANONYMOUS_CLASS), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_17_0_0_3_0_0_0, a7_0, true); + copyLocalizationInfos(a7_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2380); + addExpectedElement(2381); + addExpectedElement(2382); + addExpectedElement(2383); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2384); + addExpectedElement(2385); + addExpectedElement(2386); + addExpectedElement(2387); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 19, parse_org_emftext_language_java_members_EnumConstant_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_members_EnumConstant" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_Block" + // Java.g:6519:1: parse_org_emftext_language_java_statements_Block returns [org.emftext.language.java.statements.Block element = null] : ( (a0_0= parse_org_emftext_language_java_modifiers_Modifier ) )* a1= '{' ( ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) )* a3= '}' ; + public final org.emftext.language.java.statements.Block parse_org_emftext_language_java_statements_Block() throws RecognitionException { + org.emftext.language.java.statements.Block element = null; + + int parse_org_emftext_language_java_statements_Block_StartIndex = input.index(); + + Token a1=null; + Token a3=null; + org.emftext.language.java.modifiers.Modifier a0_0 =null; + + org.emftext.language.java.statements.Statement a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 20) ) { return element; } + + // Java.g:6522:2: ( ( (a0_0= parse_org_emftext_language_java_modifiers_Modifier ) )* a1= '{' ( ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) )* a3= '}' ) + // Java.g:6523:2: ( (a0_0= parse_org_emftext_language_java_modifiers_Modifier ) )* a1= '{' ( ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) )* a3= '}' + { + // Java.g:6523:2: ( (a0_0= parse_org_emftext_language_java_modifiers_Modifier ) )* + loop57: + do { + int alt57=2; + int LA57_0 = input.LA(1); + + if ( (LA57_0==56||LA57_0==72||LA57_0==83||(LA57_0 >= 87 && LA57_0 <= 89)||(LA57_0 >= 92 && LA57_0 <= 93)||LA57_0==96||LA57_0==100||LA57_0==103) ) { + alt57=1; + } + + + switch (alt57) { + case 1 : + // Java.g:6524:3: (a0_0= parse_org_emftext_language_java_modifiers_Modifier ) + { + // Java.g:6524:3: (a0_0= parse_org_emftext_language_java_modifiers_Modifier ) + // Java.g:6525:4: a0_0= parse_org_emftext_language_java_modifiers_Modifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Modifier_in_parse_org_emftext_language_java_statements_Block5160); + a0_0=parse_org_emftext_language_java_modifiers_Modifier(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createBlock(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.statements.StatementsPackage.BLOCK__MODIFIERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_18_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop57; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2388); + addExpectedElement(2389); + addExpectedElement(2390); + addExpectedElement(2391); + addExpectedElement(2392); + addExpectedElement(2393); + addExpectedElement(2394); + addExpectedElement(2395); + addExpectedElement(2396); + addExpectedElement(2397); + addExpectedElement(2398); + addExpectedElement(2399); + } + + a1=(Token)match(input,105,FOLLOW_105_in_parse_org_emftext_language_java_statements_Block5186); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_18_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2400); + addExpectedElement(2401); + addExpectedElement(2402); + addExpectedElement(2403); + addExpectedElement(2404); + addExpectedElement(2405); + addExpectedElement(2406); + addExpectedElement(2407); + addExpectedElement(2408); + addExpectedElement(2409); + addExpectedElement(2410); + addExpectedElement(2411); + addExpectedElement(2412); + addExpectedElement(2413); + addExpectedElement(2414); + addExpectedElement(2415); + addExpectedElement(2416); + addExpectedElement(2417); + addExpectedElement(2418); + addExpectedElement(2419); + addExpectedElement(2420); + addExpectedElement(2421); + addExpectedElement(2422); + addExpectedElement(2423); + addExpectedElement(2424); + addExpectedElement(2425); + addExpectedElement(2426); + addExpectedElement(2427); + addExpectedElement(2428); + addExpectedElement(2429); + addExpectedElement(2430); + addExpectedElement(2431); + addExpectedElement(2432); + addExpectedElement(2433); + addExpectedElement(2434); + addExpectedElement(2435); + addExpectedElement(2436); + addExpectedElement(2437); + addExpectedElement(2438); + addExpectedElement(2439); + addExpectedElement(2440); + addExpectedElement(2441); + addExpectedElement(2442); + addExpectedElement(2443); + addExpectedElement(2444); + addExpectedElement(2445); + addExpectedElement(2446); + addExpectedElement(2447); + addExpectedElement(2448); + addExpectedElement(2449); + addExpectedElement(2450); + addExpectedElement(2451); + addExpectedElement(2452); + addExpectedElement(2453); + addExpectedElement(2454); + addExpectedElement(2455); + addExpectedElement(2456); + addExpectedElement(2457); + addExpectedElement(2458); + addExpectedElement(2459); + addExpectedElement(2460); + addExpectedElement(2461); + addExpectedElement(2462); + addExpectedElement(2463); + addExpectedElement(2464); + addExpectedElement(2465); + addExpectedElement(2466); + addExpectedElement(2467); + addExpectedElement(2468); + addExpectedElement(2469); + addExpectedElement(2470); + addExpectedElement(2471); + addExpectedElement(2472); + addExpectedElement(2473); + addExpectedElement(2474); + addExpectedElement(2475); + addExpectedElement(2476); + } + + // Java.g:6652:2: ( ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) )* + loop58: + do { + int alt58=2; + int LA58_0 = input.LA(1); + + if ( ((LA58_0 >= BOOLEAN_LITERAL && LA58_0 <= IDENTIFIER)||(LA58_0 >= OCTAL_INTEGER_LITERAL && LA58_0 <= OCTAL_LONG_LITERAL)||LA58_0==STRING_LITERAL||LA58_0==21||LA58_0==26||(LA58_0 >= 30 && LA58_0 <= 31)||(LA58_0 >= 34 && LA58_0 <= 35)||(LA58_0 >= 42 && LA58_0 <= 43)||LA58_0==48||(LA58_0 >= 56 && LA58_0 <= 60)||(LA58_0 >= 63 && LA58_0 <= 65)||(LA58_0 >= 67 && LA58_0 <= 68)||LA58_0==70||LA58_0==72||(LA58_0 >= 74 && LA58_0 <= 76)||(LA58_0 >= 80 && LA58_0 <= 85)||(LA58_0 >= 87 && LA58_0 <= 98)||(LA58_0 >= 100 && LA58_0 <= 105)||LA58_0==110) ) { + alt58=1; + } + + + switch (alt58) { + case 1 : + // Java.g:6653:3: ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) + { + // Java.g:6653:3: ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) + // Java.g:6654:4: (a2_0= parse_org_emftext_language_java_statements_Statement ) + { + // Java.g:6654:4: (a2_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:6655:5: a2_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_Block5215); + a2_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createBlock(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.statements.StatementsPackage.BLOCK__STATEMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_18_0_0_3_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2477); + addExpectedElement(2478); + addExpectedElement(2479); + addExpectedElement(2480); + addExpectedElement(2481); + addExpectedElement(2482); + addExpectedElement(2483); + addExpectedElement(2484); + addExpectedElement(2485); + addExpectedElement(2486); + addExpectedElement(2487); + addExpectedElement(2488); + addExpectedElement(2489); + addExpectedElement(2490); + addExpectedElement(2491); + addExpectedElement(2492); + addExpectedElement(2493); + addExpectedElement(2494); + addExpectedElement(2495); + addExpectedElement(2496); + addExpectedElement(2497); + addExpectedElement(2498); + addExpectedElement(2499); + addExpectedElement(2500); + addExpectedElement(2501); + addExpectedElement(2502); + addExpectedElement(2503); + addExpectedElement(2504); + addExpectedElement(2505); + addExpectedElement(2506); + addExpectedElement(2507); + addExpectedElement(2508); + addExpectedElement(2509); + addExpectedElement(2510); + addExpectedElement(2511); + addExpectedElement(2512); + addExpectedElement(2513); + addExpectedElement(2514); + addExpectedElement(2515); + addExpectedElement(2516); + addExpectedElement(2517); + addExpectedElement(2518); + addExpectedElement(2519); + addExpectedElement(2520); + addExpectedElement(2521); + addExpectedElement(2522); + addExpectedElement(2523); + addExpectedElement(2524); + addExpectedElement(2525); + addExpectedElement(2526); + addExpectedElement(2527); + addExpectedElement(2528); + addExpectedElement(2529); + addExpectedElement(2530); + addExpectedElement(2531); + addExpectedElement(2532); + addExpectedElement(2533); + addExpectedElement(2534); + addExpectedElement(2535); + addExpectedElement(2536); + addExpectedElement(2537); + addExpectedElement(2538); + addExpectedElement(2539); + addExpectedElement(2540); + addExpectedElement(2541); + addExpectedElement(2542); + addExpectedElement(2543); + addExpectedElement(2544); + addExpectedElement(2545); + addExpectedElement(2546); + addExpectedElement(2547); + addExpectedElement(2548); + addExpectedElement(2549); + addExpectedElement(2550); + addExpectedElement(2551); + addExpectedElement(2552); + addExpectedElement(2553); + } + + } + + + } + break; + + default : + break loop58; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2554); + addExpectedElement(2555); + addExpectedElement(2556); + addExpectedElement(2557); + addExpectedElement(2558); + addExpectedElement(2559); + addExpectedElement(2560); + addExpectedElement(2561); + addExpectedElement(2562); + addExpectedElement(2563); + addExpectedElement(2564); + addExpectedElement(2565); + addExpectedElement(2566); + addExpectedElement(2567); + addExpectedElement(2568); + addExpectedElement(2569); + addExpectedElement(2570); + addExpectedElement(2571); + addExpectedElement(2572); + addExpectedElement(2573); + addExpectedElement(2574); + addExpectedElement(2575); + addExpectedElement(2576); + addExpectedElement(2577); + addExpectedElement(2578); + addExpectedElement(2579); + addExpectedElement(2580); + addExpectedElement(2581); + addExpectedElement(2582); + addExpectedElement(2583); + addExpectedElement(2584); + addExpectedElement(2585); + addExpectedElement(2586); + addExpectedElement(2587); + addExpectedElement(2588); + addExpectedElement(2589); + addExpectedElement(2590); + addExpectedElement(2591); + addExpectedElement(2592); + addExpectedElement(2593); + addExpectedElement(2594); + addExpectedElement(2595); + addExpectedElement(2596); + addExpectedElement(2597); + addExpectedElement(2598); + addExpectedElement(2599); + addExpectedElement(2600); + addExpectedElement(2601); + addExpectedElement(2602); + addExpectedElement(2603); + addExpectedElement(2604); + addExpectedElement(2605); + addExpectedElement(2606); + addExpectedElement(2607); + addExpectedElement(2608); + addExpectedElement(2609); + addExpectedElement(2610); + addExpectedElement(2611); + addExpectedElement(2612); + addExpectedElement(2613); + addExpectedElement(2614); + addExpectedElement(2615); + addExpectedElement(2616); + addExpectedElement(2617); + addExpectedElement(2618); + addExpectedElement(2619); + addExpectedElement(2620); + addExpectedElement(2621); + addExpectedElement(2622); + addExpectedElement(2623); + addExpectedElement(2624); + addExpectedElement(2625); + addExpectedElement(2626); + addExpectedElement(2627); + addExpectedElement(2628); + addExpectedElement(2629); + addExpectedElement(2630); + } + + a3=(Token)match(input,109,FOLLOW_109_in_parse_org_emftext_language_java_statements_Block5256); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_18_0_0_5, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2631); + addExpectedElement(2632); + addExpectedElement(2633); + addExpectedElement(2634); + addExpectedElement(2635); + addExpectedElement(2636); + addExpectedElement(2637); + addExpectedElement(2638); + addExpectedElement(2639); + addExpectedElement(2640); + addExpectedElement(2641); + addExpectedElement(2642); + addExpectedElement(2643); + addExpectedElement(2644); + addExpectedElement(2645); + addExpectedElement(2646); + addExpectedElement(2647); + addExpectedElement(2648); + addExpectedElement(2649); + addExpectedElement(2650); + addExpectedElement(2651); + addExpectedElement(2652); + addExpectedElement(2653); + addExpectedElement(2654); + addExpectedElement(2655); + addExpectedElement(2656); + addExpectedElement(2657); + addExpectedElement(2658); + addExpectedElement(2659); + addExpectedElement(2660); + addExpectedElement(2661); + addExpectedElement(2662); + addExpectedElement(2663); + addExpectedElement(2664); + addExpectedElement(2665); + addExpectedElement(2666); + addExpectedElement(2667); + addExpectedElement(2668); + addExpectedElement(2669); + addExpectedElement(2670); + addExpectedElement(2671); + addExpectedElement(2672); + addExpectedElement(2673); + addExpectedElement(2674); + addExpectedElement(2675); + addExpectedElement(2676); + addExpectedElement(2677); + addExpectedElement(2678); + addExpectedElement(2679); + addExpectedElement(2680); + addExpectedElement(2681); + addExpectedElement(2682); + addExpectedElement(2683); + addExpectedElement(2684); + addExpectedElement(2685); + addExpectedElement(2686); + addExpectedElement(2687); + addExpectedElement(2688); + addExpectedElement(2689); + addExpectedElement(2690); + addExpectedElement(2691); + addExpectedElement(2692); + addExpectedElement(2693); + addExpectedElement(2694); + addExpectedElement(2695); + addExpectedElement(2696); + addExpectedElement(2697); + addExpectedElement(2698); + addExpectedElement(2699); + addExpectedElement(2700); + addExpectedElement(2701); + addExpectedElement(2702); + addExpectedElement(2703); + addExpectedElement(2704); + addExpectedElement(2705); + addExpectedElement(2706); + addExpectedElement(2707); + addExpectedElement(2708); + addExpectedElement(2709); + addExpectedElement(2710); + addExpectedElement(2711); + addExpectedElement(2712); + addExpectedElement(2713); + addExpectedElement(2714); + addExpectedElement(2715); + addExpectedElement(2716); + addExpectedElement(2717); + addExpectedElement(2718); + addExpectedElement(2719); + addExpectedElement(2720); + addExpectedElement(2721); + addExpectedElement(2722); + addExpectedElement(2723); + addExpectedElement(2724); + addExpectedElement(2725); + addExpectedElement(2726); + addExpectedElement(2727); + addExpectedElement(2728); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 20, parse_org_emftext_language_java_statements_Block_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_Block" + + + + // $ANTLR start "parse_org_emftext_language_java_members_Constructor" + // Java.g:6952:1: parse_org_emftext_language_java_members_Constructor returns [org.emftext.language.java.members.Constructor element = null] : ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? (a6= IDENTIFIER ) a7= '(' ( ( (a8_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? a11= ')' ( (a12= 'throws' (a13_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a14= ',' (a15_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? a16= '{' ( ( (a17_0= parse_org_emftext_language_java_statements_Statement ) ) )* a18= '}' ; + public final org.emftext.language.java.members.Constructor parse_org_emftext_language_java_members_Constructor() throws RecognitionException { + org.emftext.language.java.members.Constructor element = null; + + int parse_org_emftext_language_java_members_Constructor_StartIndex = input.index(); + + Token a1=null; + Token a3=null; + Token a5=null; + Token a6=null; + Token a7=null; + Token a9=null; + Token a11=null; + Token a12=null; + Token a14=null; + Token a16=null; + Token a18=null; + org.emftext.language.java.modifiers.AnnotationInstanceOrModifier a0_0 =null; + + org.emftext.language.java.generics.TypeParameter a2_0 =null; + + org.emftext.language.java.generics.TypeParameter a4_0 =null; + + org.emftext.language.java.parameters.Parameter a8_0 =null; + + org.emftext.language.java.parameters.Parameter a10_0 =null; + + org.emftext.language.java.types.NamespaceClassifierReference a13_0 =null; + + org.emftext.language.java.types.NamespaceClassifierReference a15_0 =null; + + org.emftext.language.java.statements.Statement a17_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 21) ) { return element; } + + // Java.g:6955:2: ( ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? (a6= IDENTIFIER ) a7= '(' ( ( (a8_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? a11= ')' ( (a12= 'throws' (a13_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a14= ',' (a15_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? a16= '{' ( ( (a17_0= parse_org_emftext_language_java_statements_Statement ) ) )* a18= '}' ) + // Java.g:6956:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? (a6= IDENTIFIER ) a7= '(' ( ( (a8_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? a11= ')' ( (a12= 'throws' (a13_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a14= ',' (a15_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? a16= '{' ( ( (a17_0= parse_org_emftext_language_java_statements_Statement ) ) )* a18= '}' + { + // Java.g:6956:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* + loop59: + do { + int alt59=2; + int LA59_0 = input.LA(1); + + if ( (LA59_0==48||LA59_0==56||LA59_0==72||LA59_0==83||(LA59_0 >= 87 && LA59_0 <= 89)||(LA59_0 >= 92 && LA59_0 <= 93)||LA59_0==96||LA59_0==100||LA59_0==103) ) { + alt59=1; + } + + + switch (alt59) { + case 1 : + // Java.g:6957:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + { + // Java.g:6957:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + // Java.g:6958:4: a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_members_Constructor5294); + a0_0=parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__ANNOTATIONS_AND_MODIFIERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop59; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2729); + addExpectedElement(2730); + addExpectedElement(2731); + addExpectedElement(2732); + addExpectedElement(2733); + addExpectedElement(2734); + addExpectedElement(2735); + addExpectedElement(2736); + addExpectedElement(2737); + addExpectedElement(2738); + addExpectedElement(2739); + addExpectedElement(2740); + addExpectedElement(2741); + addExpectedElement(2742); + } + + // Java.g:6997:2: ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? + int alt61=2; + int LA61_0 = input.LA(1); + + if ( (LA61_0==43) ) { + alt61=1; + } + switch (alt61) { + case 1 : + // Java.g:6998:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) + { + // Java.g:6998:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) + // Java.g:6999:4: a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' + { + a1=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_members_Constructor5329); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2743); + } + + // Java.g:7013:4: (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) + // Java.g:7014:5: a2_0= parse_org_emftext_language_java_generics_TypeParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_members_Constructor5355); + a2_0=parse_org_emftext_language_java_generics_TypeParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__TYPE_PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2744); + addExpectedElement(2745); + } + + // Java.g:7040:4: ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* + loop60: + do { + int alt60=2; + int LA60_0 = input.LA(1); + + if ( (LA60_0==33) ) { + alt60=1; + } + + + switch (alt60) { + case 1 : + // Java.g:7041:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) + { + // Java.g:7041:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) + // Java.g:7042:6: a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) + { + a3=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_members_Constructor5396); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_1_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2746); + } + + // Java.g:7056:6: (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) + // Java.g:7057:7: a4_0= parse_org_emftext_language_java_generics_TypeParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_members_Constructor5430); + a4_0=parse_org_emftext_language_java_generics_TypeParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__TYPE_PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_1_0_0_2_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2747); + addExpectedElement(2748); + } + + } + + + } + break; + + default : + break loop60; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2749); + addExpectedElement(2750); + } + + a5=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_members_Constructor5491); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_1_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2751); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2752); + } + + // Java.g:7112:2: (a6= IDENTIFIER ) + // Java.g:7113:3: a6= IDENTIFIER + { + a6=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_members_Constructor5528); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + if (a6 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a6.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a6).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a6).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a6).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a6).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_2, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a6, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2753); + } + + a7=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_members_Constructor5549); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a7, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2754); + addExpectedElement(2755); + addExpectedElement(2756); + addExpectedElement(2757); + addExpectedElement(2758); + addExpectedElement(2759); + addExpectedElement(2760); + addExpectedElement(2761); + addExpectedElement(2762); + addExpectedElement(2763); + addExpectedElement(2764); + addExpectedElement(2765); + addExpectedElement(2766); + addExpectedElement(2767); + addExpectedElement(2768); + addExpectedElement(2769); + addExpectedElement(2770); + addExpectedElement(2771); + addExpectedElement(2772); + addExpectedElement(2773); + addExpectedElement(2774); + addExpectedElement(2775); + addExpectedElement(2776); + addExpectedElement(2777); + } + + // Java.g:7185:2: ( ( (a8_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? + int alt63=2; + int LA63_0 = input.LA(1); + + if ( (LA63_0==IDENTIFIER||LA63_0==48||LA63_0==56||LA63_0==58||LA63_0==60||LA63_0==63||LA63_0==68||LA63_0==72||LA63_0==74||LA63_0==80||(LA63_0 >= 82 && LA63_0 <= 83)||(LA63_0 >= 87 && LA63_0 <= 89)||(LA63_0 >= 91 && LA63_0 <= 93)||LA63_0==96||LA63_0==100||(LA63_0 >= 102 && LA63_0 <= 103)) ) { + alt63=1; + } + switch (alt63) { + case 1 : + // Java.g:7186:3: ( (a8_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) + { + // Java.g:7186:3: ( (a8_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) + // Java.g:7187:4: (a8_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* + { + // Java.g:7187:4: (a8_0= parse_org_emftext_language_java_parameters_Parameter ) + // Java.g:7188:5: a8_0= parse_org_emftext_language_java_parameters_Parameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_members_Constructor5578); + a8_0=parse_org_emftext_language_java_parameters_Parameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + if (a8_0 != null) { + if (a8_0 != null) { + Object value = a8_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_4_0_0_0, a8_0, true); + copyLocalizationInfos(a8_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2778); + addExpectedElement(2779); + } + + // Java.g:7214:4: ( (a9= ',' (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* + loop62: + do { + int alt62=2; + int LA62_0 = input.LA(1); + + if ( (LA62_0==33) ) { + alt62=1; + } + + + switch (alt62) { + case 1 : + // Java.g:7215:5: (a9= ',' (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ) + { + // Java.g:7215:5: (a9= ',' (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ) + // Java.g:7216:6: a9= ',' (a10_0= parse_org_emftext_language_java_parameters_Parameter ) + { + a9=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_members_Constructor5619); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_4_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a9, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2780); + addExpectedElement(2781); + addExpectedElement(2782); + addExpectedElement(2783); + addExpectedElement(2784); + addExpectedElement(2785); + addExpectedElement(2786); + addExpectedElement(2787); + addExpectedElement(2788); + addExpectedElement(2789); + addExpectedElement(2790); + addExpectedElement(2791); + addExpectedElement(2792); + addExpectedElement(2793); + addExpectedElement(2794); + addExpectedElement(2795); + addExpectedElement(2796); + addExpectedElement(2797); + addExpectedElement(2798); + addExpectedElement(2799); + addExpectedElement(2800); + addExpectedElement(2801); + addExpectedElement(2802); + } + + // Java.g:7252:6: (a10_0= parse_org_emftext_language_java_parameters_Parameter ) + // Java.g:7253:7: a10_0= parse_org_emftext_language_java_parameters_Parameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_members_Constructor5653); + a10_0=parse_org_emftext_language_java_parameters_Parameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + if (a10_0 != null) { + if (a10_0 != null) { + Object value = a10_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_4_0_0_1_0_0_1, a10_0, true); + copyLocalizationInfos(a10_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2803); + addExpectedElement(2804); + } + + } + + + } + break; + + default : + break loop62; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2805); + addExpectedElement(2806); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2807); + } + + a11=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_members_Constructor5727); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_5, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a11, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2808); + addExpectedElement(2809); + } + + // Java.g:7309:2: ( (a12= 'throws' (a13_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a14= ',' (a15_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? + int alt65=2; + int LA65_0 = input.LA(1); + + if ( (LA65_0==99) ) { + alt65=1; + } + switch (alt65) { + case 1 : + // Java.g:7310:3: (a12= 'throws' (a13_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a14= ',' (a15_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) + { + // Java.g:7310:3: (a12= 'throws' (a13_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a14= ',' (a15_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) + // Java.g:7311:4: a12= 'throws' (a13_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a14= ',' (a15_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* + { + a12=(Token)match(input,99,FOLLOW_99_in_parse_org_emftext_language_java_members_Constructor5750); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_6_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a12, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2810); + addExpectedElement(2811); + } + + // Java.g:7326:4: (a13_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + // Java.g:7327:5: a13_0= parse_org_emftext_language_java_types_NamespaceClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_members_Constructor5776); + a13_0=parse_org_emftext_language_java_types_NamespaceClassifierReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + if (a13_0 != null) { + if (a13_0 != null) { + Object value = a13_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__EXCEPTIONS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_6_0_0_1, a13_0, true); + copyLocalizationInfos(a13_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2812); + addExpectedElement(2813); + } + + // Java.g:7353:4: ( (a14= ',' (a15_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* + loop64: + do { + int alt64=2; + int LA64_0 = input.LA(1); + + if ( (LA64_0==33) ) { + alt64=1; + } + + + switch (alt64) { + case 1 : + // Java.g:7354:5: (a14= ',' (a15_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) + { + // Java.g:7354:5: (a14= ',' (a15_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) + // Java.g:7355:6: a14= ',' (a15_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + { + a14=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_members_Constructor5817); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_6_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a14, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2814); + addExpectedElement(2815); + } + + // Java.g:7370:6: (a15_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + // Java.g:7371:7: a15_0= parse_org_emftext_language_java_types_NamespaceClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_members_Constructor5851); + a15_0=parse_org_emftext_language_java_types_NamespaceClassifierReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + if (a15_0 != null) { + if (a15_0 != null) { + Object value = a15_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__EXCEPTIONS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_6_0_0_2_0_0_1, a15_0, true); + copyLocalizationInfos(a15_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2816); + addExpectedElement(2817); + } + + } + + + } + break; + + default : + break loop64; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2818); + addExpectedElement(2819); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2820); + } + + a16=(Token)match(input,105,FOLLOW_105_in_parse_org_emftext_language_java_members_Constructor5925); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_8, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a16, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2821); + addExpectedElement(2822); + addExpectedElement(2823); + addExpectedElement(2824); + addExpectedElement(2825); + addExpectedElement(2826); + addExpectedElement(2827); + addExpectedElement(2828); + addExpectedElement(2829); + addExpectedElement(2830); + addExpectedElement(2831); + addExpectedElement(2832); + addExpectedElement(2833); + addExpectedElement(2834); + addExpectedElement(2835); + addExpectedElement(2836); + addExpectedElement(2837); + addExpectedElement(2838); + addExpectedElement(2839); + addExpectedElement(2840); + addExpectedElement(2841); + addExpectedElement(2842); + addExpectedElement(2843); + addExpectedElement(2844); + addExpectedElement(2845); + addExpectedElement(2846); + addExpectedElement(2847); + addExpectedElement(2848); + addExpectedElement(2849); + addExpectedElement(2850); + addExpectedElement(2851); + addExpectedElement(2852); + addExpectedElement(2853); + addExpectedElement(2854); + addExpectedElement(2855); + addExpectedElement(2856); + addExpectedElement(2857); + addExpectedElement(2858); + addExpectedElement(2859); + addExpectedElement(2860); + addExpectedElement(2861); + addExpectedElement(2862); + addExpectedElement(2863); + addExpectedElement(2864); + addExpectedElement(2865); + addExpectedElement(2866); + addExpectedElement(2867); + addExpectedElement(2868); + addExpectedElement(2869); + addExpectedElement(2870); + addExpectedElement(2871); + addExpectedElement(2872); + addExpectedElement(2873); + addExpectedElement(2874); + addExpectedElement(2875); + addExpectedElement(2876); + addExpectedElement(2877); + addExpectedElement(2878); + addExpectedElement(2879); + addExpectedElement(2880); + addExpectedElement(2881); + addExpectedElement(2882); + addExpectedElement(2883); + addExpectedElement(2884); + addExpectedElement(2885); + addExpectedElement(2886); + addExpectedElement(2887); + addExpectedElement(2888); + addExpectedElement(2889); + addExpectedElement(2890); + addExpectedElement(2891); + addExpectedElement(2892); + addExpectedElement(2893); + addExpectedElement(2894); + addExpectedElement(2895); + addExpectedElement(2896); + addExpectedElement(2897); + } + + // Java.g:7502:2: ( ( (a17_0= parse_org_emftext_language_java_statements_Statement ) ) )* + loop66: + do { + int alt66=2; + int LA66_0 = input.LA(1); + + if ( ((LA66_0 >= BOOLEAN_LITERAL && LA66_0 <= IDENTIFIER)||(LA66_0 >= OCTAL_INTEGER_LITERAL && LA66_0 <= OCTAL_LONG_LITERAL)||LA66_0==STRING_LITERAL||LA66_0==21||LA66_0==26||(LA66_0 >= 30 && LA66_0 <= 31)||(LA66_0 >= 34 && LA66_0 <= 35)||(LA66_0 >= 42 && LA66_0 <= 43)||LA66_0==48||(LA66_0 >= 56 && LA66_0 <= 60)||(LA66_0 >= 63 && LA66_0 <= 65)||(LA66_0 >= 67 && LA66_0 <= 68)||LA66_0==70||LA66_0==72||(LA66_0 >= 74 && LA66_0 <= 76)||(LA66_0 >= 80 && LA66_0 <= 85)||(LA66_0 >= 87 && LA66_0 <= 98)||(LA66_0 >= 100 && LA66_0 <= 105)||LA66_0==110) ) { + alt66=1; + } + + + switch (alt66) { + case 1 : + // Java.g:7503:3: ( (a17_0= parse_org_emftext_language_java_statements_Statement ) ) + { + // Java.g:7503:3: ( (a17_0= parse_org_emftext_language_java_statements_Statement ) ) + // Java.g:7504:4: (a17_0= parse_org_emftext_language_java_statements_Statement ) + { + // Java.g:7504:4: (a17_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:7505:5: a17_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_members_Constructor5954); + a17_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + if (a17_0 != null) { + if (a17_0 != null) { + Object value = a17_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CONSTRUCTOR__STATEMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_9_0_0_1, a17_0, true); + copyLocalizationInfos(a17_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2898); + addExpectedElement(2899); + addExpectedElement(2900); + addExpectedElement(2901); + addExpectedElement(2902); + addExpectedElement(2903); + addExpectedElement(2904); + addExpectedElement(2905); + addExpectedElement(2906); + addExpectedElement(2907); + addExpectedElement(2908); + addExpectedElement(2909); + addExpectedElement(2910); + addExpectedElement(2911); + addExpectedElement(2912); + addExpectedElement(2913); + addExpectedElement(2914); + addExpectedElement(2915); + addExpectedElement(2916); + addExpectedElement(2917); + addExpectedElement(2918); + addExpectedElement(2919); + addExpectedElement(2920); + addExpectedElement(2921); + addExpectedElement(2922); + addExpectedElement(2923); + addExpectedElement(2924); + addExpectedElement(2925); + addExpectedElement(2926); + addExpectedElement(2927); + addExpectedElement(2928); + addExpectedElement(2929); + addExpectedElement(2930); + addExpectedElement(2931); + addExpectedElement(2932); + addExpectedElement(2933); + addExpectedElement(2934); + addExpectedElement(2935); + addExpectedElement(2936); + addExpectedElement(2937); + addExpectedElement(2938); + addExpectedElement(2939); + addExpectedElement(2940); + addExpectedElement(2941); + addExpectedElement(2942); + addExpectedElement(2943); + addExpectedElement(2944); + addExpectedElement(2945); + addExpectedElement(2946); + addExpectedElement(2947); + addExpectedElement(2948); + addExpectedElement(2949); + addExpectedElement(2950); + addExpectedElement(2951); + addExpectedElement(2952); + addExpectedElement(2953); + addExpectedElement(2954); + addExpectedElement(2955); + addExpectedElement(2956); + addExpectedElement(2957); + addExpectedElement(2958); + addExpectedElement(2959); + addExpectedElement(2960); + addExpectedElement(2961); + addExpectedElement(2962); + addExpectedElement(2963); + addExpectedElement(2964); + addExpectedElement(2965); + addExpectedElement(2966); + addExpectedElement(2967); + addExpectedElement(2968); + addExpectedElement(2969); + addExpectedElement(2970); + addExpectedElement(2971); + addExpectedElement(2972); + addExpectedElement(2973); + addExpectedElement(2974); + } + + } + + + } + break; + + default : + break loop66; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(2975); + addExpectedElement(2976); + addExpectedElement(2977); + addExpectedElement(2978); + addExpectedElement(2979); + addExpectedElement(2980); + addExpectedElement(2981); + addExpectedElement(2982); + addExpectedElement(2983); + addExpectedElement(2984); + addExpectedElement(2985); + addExpectedElement(2986); + addExpectedElement(2987); + addExpectedElement(2988); + addExpectedElement(2989); + addExpectedElement(2990); + addExpectedElement(2991); + addExpectedElement(2992); + addExpectedElement(2993); + addExpectedElement(2994); + addExpectedElement(2995); + addExpectedElement(2996); + addExpectedElement(2997); + addExpectedElement(2998); + addExpectedElement(2999); + addExpectedElement(3000); + addExpectedElement(3001); + addExpectedElement(3002); + addExpectedElement(3003); + addExpectedElement(3004); + addExpectedElement(3005); + addExpectedElement(3006); + addExpectedElement(3007); + addExpectedElement(3008); + addExpectedElement(3009); + addExpectedElement(3010); + addExpectedElement(3011); + addExpectedElement(3012); + addExpectedElement(3013); + addExpectedElement(3014); + addExpectedElement(3015); + addExpectedElement(3016); + addExpectedElement(3017); + addExpectedElement(3018); + addExpectedElement(3019); + addExpectedElement(3020); + addExpectedElement(3021); + addExpectedElement(3022); + addExpectedElement(3023); + addExpectedElement(3024); + addExpectedElement(3025); + addExpectedElement(3026); + addExpectedElement(3027); + addExpectedElement(3028); + addExpectedElement(3029); + addExpectedElement(3030); + addExpectedElement(3031); + addExpectedElement(3032); + addExpectedElement(3033); + addExpectedElement(3034); + addExpectedElement(3035); + addExpectedElement(3036); + addExpectedElement(3037); + addExpectedElement(3038); + addExpectedElement(3039); + addExpectedElement(3040); + addExpectedElement(3041); + addExpectedElement(3042); + addExpectedElement(3043); + addExpectedElement(3044); + addExpectedElement(3045); + addExpectedElement(3046); + addExpectedElement(3047); + addExpectedElement(3048); + addExpectedElement(3049); + addExpectedElement(3050); + addExpectedElement(3051); + } + + a18=(Token)match(input,109,FOLLOW_109_in_parse_org_emftext_language_java_members_Constructor5995); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createConstructor(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_19_0_0_11, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a18, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3052); + addExpectedElement(3053); + addExpectedElement(3054); + addExpectedElement(3055); + addExpectedElement(3056); + addExpectedElement(3057); + addExpectedElement(3058); + addExpectedElement(3059); + addExpectedElement(3060); + addExpectedElement(3061); + addExpectedElement(3062); + addExpectedElement(3063); + addExpectedElement(3064); + addExpectedElement(3065); + addExpectedElement(3066); + addExpectedElement(3067); + addExpectedElement(3068); + addExpectedElement(3069); + addExpectedElement(3070); + addExpectedElement(3071); + addExpectedElement(3072); + addExpectedElement(3073); + addExpectedElement(3074); + addExpectedElement(3075); + addExpectedElement(3076); + addExpectedElement(3077); + addExpectedElement(3078); + addExpectedElement(3079); + addExpectedElement(3080); + addExpectedElement(3081); + addExpectedElement(3082); + addExpectedElement(3083); + addExpectedElement(3084); + addExpectedElement(3085); + addExpectedElement(3086); + addExpectedElement(3087); + addExpectedElement(3088); + addExpectedElement(3089); + addExpectedElement(3090); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 21, parse_org_emftext_language_java_members_Constructor_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_members_Constructor" + + + + // $ANTLR start "parse_org_emftext_language_java_members_InterfaceMethod" + // Java.g:7743:1: parse_org_emftext_language_java_members_InterfaceMethod returns [org.emftext.language.java.members.InterfaceMethod element = null] : ( ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) (a8= IDENTIFIER ) a9= '(' ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? a13= ')' ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? a19= ';' |c0= parse_org_emftext_language_java_annotations_AnnotationAttribute ); + public final org.emftext.language.java.members.InterfaceMethod parse_org_emftext_language_java_members_InterfaceMethod() throws RecognitionException { + org.emftext.language.java.members.InterfaceMethod element = null; + + int parse_org_emftext_language_java_members_InterfaceMethod_StartIndex = input.index(); + + Token a1=null; + Token a3=null; + Token a5=null; + Token a8=null; + Token a9=null; + Token a11=null; + Token a13=null; + Token a15=null; + Token a17=null; + Token a19=null; + org.emftext.language.java.modifiers.AnnotationInstanceOrModifier a0_0 =null; + + org.emftext.language.java.generics.TypeParameter a2_0 =null; + + org.emftext.language.java.generics.TypeParameter a4_0 =null; + + org.emftext.language.java.types.TypeReference a6_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a7_0 =null; + + org.emftext.language.java.parameters.Parameter a10_0 =null; + + org.emftext.language.java.parameters.Parameter a12_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a14_0 =null; + + org.emftext.language.java.types.NamespaceClassifierReference a16_0 =null; + + org.emftext.language.java.types.NamespaceClassifierReference a18_0 =null; + + org.emftext.language.java.annotations.AnnotationAttribute c0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 22) ) { return element; } + + // Java.g:7746:2: ( ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) (a8= IDENTIFIER ) a9= '(' ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? a13= ')' ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? a19= ';' |c0= parse_org_emftext_language_java_annotations_AnnotationAttribute ) + int alt76=2; + switch ( input.LA(1) ) { + case 48: + { + int LA76_1 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 1, input); + + throw nvae; + + } + } + break; + case 89: + { + int LA76_2 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 2, input); + + throw nvae; + + } + } + break; + case 56: + { + int LA76_3 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 3, input); + + throw nvae; + + } + } + break; + case 88: + { + int LA76_4 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 4, input); + + throw nvae; + + } + } + break; + case 87: + { + int LA76_5 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 5, input); + + throw nvae; + + } + } + break; + case 72: + { + int LA76_6 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 6, input); + + throw nvae; + + } + } + break; + case 92: + { + int LA76_7 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 7, input); + + throw nvae; + + } + } + break; + case 83: + { + int LA76_8 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 8, input); + + throw nvae; + + } + } + break; + case 96: + { + int LA76_9 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 9, input); + + throw nvae; + + } + } + break; + case 100: + { + int LA76_10 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 10, input); + + throw nvae; + + } + } + break; + case 103: + { + int LA76_11 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 11, input); + + throw nvae; + + } + } + break; + case 93: + { + int LA76_12 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 12, input); + + throw nvae; + + } + } + break; + case 43: + { + int LA76_13 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 13, input); + + throw nvae; + + } + } + break; + case IDENTIFIER: + { + int LA76_14 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 14, input); + + throw nvae; + + } + } + break; + case 102: + { + int LA76_15 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 15, input); + + throw nvae; + + } + } + break; + case 58: + { + int LA76_16 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 16, input); + + throw nvae; + + } + } + break; + case 63: + { + int LA76_17 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 17, input); + + throw nvae; + + } + } + break; + case 60: + { + int LA76_18 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 18, input); + + throw nvae; + + } + } + break; + case 91: + { + int LA76_19 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 19, input); + + throw nvae; + + } + } + break; + case 80: + { + int LA76_20 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 20, input); + + throw nvae; + + } + } + break; + case 82: + { + int LA76_21 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 21, input); + + throw nvae; + + } + } + break; + case 74: + { + int LA76_22 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 22, input); + + throw nvae; + + } + } + break; + case 68: + { + int LA76_23 = input.LA(2); + + if ( (synpred77_Java()) ) { + alt76=1; + } + else if ( (true) ) { + alt76=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 23, input); + + throw nvae; + + } + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 76, 0, input); + + throw nvae; + + } + + switch (alt76) { + case 1 : + // Java.g:7747:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) (a8= IDENTIFIER ) a9= '(' ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? a13= ')' ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? a19= ';' + { + // Java.g:7747:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* + loop67: + do { + int alt67=2; + int LA67_0 = input.LA(1); + + if ( (LA67_0==48||LA67_0==56||LA67_0==72||LA67_0==83||(LA67_0 >= 87 && LA67_0 <= 89)||(LA67_0 >= 92 && LA67_0 <= 93)||LA67_0==96||LA67_0==100||LA67_0==103) ) { + alt67=1; + } + + + switch (alt67) { + case 1 : + // Java.g:7748:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + { + // Java.g:7748:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + // Java.g:7749:4: a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_members_InterfaceMethod6033); + a0_0=parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__ANNOTATIONS_AND_MODIFIERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop67; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3091); + addExpectedElement(3092); + addExpectedElement(3093); + addExpectedElement(3094); + addExpectedElement(3095); + addExpectedElement(3096); + addExpectedElement(3097); + addExpectedElement(3098); + addExpectedElement(3099); + addExpectedElement(3100); + addExpectedElement(3101); + addExpectedElement(3102); + addExpectedElement(3103); + addExpectedElement(3104); + addExpectedElement(3105); + addExpectedElement(3106); + addExpectedElement(3107); + addExpectedElement(3108); + addExpectedElement(3109); + addExpectedElement(3110); + addExpectedElement(3111); + addExpectedElement(3112); + addExpectedElement(3113); + addExpectedElement(3114); + } + + // Java.g:7798:2: ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? + int alt69=2; + int LA69_0 = input.LA(1); + + if ( (LA69_0==43) ) { + alt69=1; + } + switch (alt69) { + case 1 : + // Java.g:7799:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) + { + // Java.g:7799:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) + // Java.g:7800:4: a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' + { + a1=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_members_InterfaceMethod6068); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3115); + } + + // Java.g:7814:4: (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) + // Java.g:7815:5: a2_0= parse_org_emftext_language_java_generics_TypeParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_members_InterfaceMethod6094); + a2_0=parse_org_emftext_language_java_generics_TypeParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__TYPE_PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3116); + addExpectedElement(3117); + } + + // Java.g:7841:4: ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* + loop68: + do { + int alt68=2; + int LA68_0 = input.LA(1); + + if ( (LA68_0==33) ) { + alt68=1; + } + + + switch (alt68) { + case 1 : + // Java.g:7842:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) + { + // Java.g:7842:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) + // Java.g:7843:6: a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) + { + a3=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_members_InterfaceMethod6135); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_1_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3118); + } + + // Java.g:7857:6: (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) + // Java.g:7858:7: a4_0= parse_org_emftext_language_java_generics_TypeParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_members_InterfaceMethod6169); + a4_0=parse_org_emftext_language_java_generics_TypeParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__TYPE_PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_1_0_0_2_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3119); + addExpectedElement(3120); + } + + } + + + } + break; + + default : + break loop68; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3121); + addExpectedElement(3122); + } + + a5=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_members_InterfaceMethod6230); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_1_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3123); + addExpectedElement(3124); + addExpectedElement(3125); + addExpectedElement(3126); + addExpectedElement(3127); + addExpectedElement(3128); + addExpectedElement(3129); + addExpectedElement(3130); + addExpectedElement(3131); + addExpectedElement(3132); + addExpectedElement(3133); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3134); + addExpectedElement(3135); + addExpectedElement(3136); + addExpectedElement(3137); + addExpectedElement(3138); + addExpectedElement(3139); + addExpectedElement(3140); + addExpectedElement(3141); + addExpectedElement(3142); + addExpectedElement(3143); + addExpectedElement(3144); + } + + // Java.g:7933:2: ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) + // Java.g:7934:3: (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + { + // Java.g:7934:3: (a6_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:7935:4: a6_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_members_InterfaceMethod6272); + a6_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__TYPE_REFERENCE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_2_0_0_0, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3145); + addExpectedElement(3146); + } + + // Java.g:7961:3: ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop70: + do { + int alt70=2; + int LA70_0 = input.LA(1); + + if ( (LA70_0==49) ) { + alt70=1; + } + + + switch (alt70) { + case 1 : + // Java.g:7962:4: (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:7962:4: (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:7963:5: a7_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_members_InterfaceMethod6306); + a7_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + if (a7_0 != null) { + if (a7_0 != null) { + Object value = a7_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__ARRAY_DIMENSIONS_BEFORE, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_2_0_0_1, a7_0, true); + copyLocalizationInfos(a7_0, element); + } + } + + } + + + } + break; + + default : + break loop70; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3147); + addExpectedElement(3148); + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3149); + } + + // Java.g:7996:2: (a8= IDENTIFIER ) + // Java.g:7997:3: a8= IDENTIFIER + { + a8=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_members_InterfaceMethod6350); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + if (a8 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a8.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a8).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a8).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a8).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a8).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_3, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a8, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3150); + } + + a9=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_members_InterfaceMethod6371); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a9, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3151); + addExpectedElement(3152); + addExpectedElement(3153); + addExpectedElement(3154); + addExpectedElement(3155); + addExpectedElement(3156); + addExpectedElement(3157); + addExpectedElement(3158); + addExpectedElement(3159); + addExpectedElement(3160); + addExpectedElement(3161); + addExpectedElement(3162); + addExpectedElement(3163); + addExpectedElement(3164); + addExpectedElement(3165); + addExpectedElement(3166); + addExpectedElement(3167); + addExpectedElement(3168); + addExpectedElement(3169); + addExpectedElement(3170); + addExpectedElement(3171); + addExpectedElement(3172); + addExpectedElement(3173); + addExpectedElement(3174); + } + + // Java.g:8069:2: ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? + int alt72=2; + int LA72_0 = input.LA(1); + + if ( (LA72_0==IDENTIFIER||LA72_0==48||LA72_0==56||LA72_0==58||LA72_0==60||LA72_0==63||LA72_0==68||LA72_0==72||LA72_0==74||LA72_0==80||(LA72_0 >= 82 && LA72_0 <= 83)||(LA72_0 >= 87 && LA72_0 <= 89)||(LA72_0 >= 91 && LA72_0 <= 93)||LA72_0==96||LA72_0==100||(LA72_0 >= 102 && LA72_0 <= 103)) ) { + alt72=1; + } + switch (alt72) { + case 1 : + // Java.g:8070:3: ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) + { + // Java.g:8070:3: ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) + // Java.g:8071:4: (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* + { + // Java.g:8071:4: (a10_0= parse_org_emftext_language_java_parameters_Parameter ) + // Java.g:8072:5: a10_0= parse_org_emftext_language_java_parameters_Parameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_members_InterfaceMethod6400); + a10_0=parse_org_emftext_language_java_parameters_Parameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + if (a10_0 != null) { + if (a10_0 != null) { + Object value = a10_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_5_0_0_0, a10_0, true); + copyLocalizationInfos(a10_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3175); + addExpectedElement(3176); + } + + // Java.g:8098:4: ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* + loop71: + do { + int alt71=2; + int LA71_0 = input.LA(1); + + if ( (LA71_0==33) ) { + alt71=1; + } + + + switch (alt71) { + case 1 : + // Java.g:8099:5: (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) + { + // Java.g:8099:5: (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) + // Java.g:8100:6: a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) + { + a11=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_members_InterfaceMethod6441); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_5_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a11, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3177); + addExpectedElement(3178); + addExpectedElement(3179); + addExpectedElement(3180); + addExpectedElement(3181); + addExpectedElement(3182); + addExpectedElement(3183); + addExpectedElement(3184); + addExpectedElement(3185); + addExpectedElement(3186); + addExpectedElement(3187); + addExpectedElement(3188); + addExpectedElement(3189); + addExpectedElement(3190); + addExpectedElement(3191); + addExpectedElement(3192); + addExpectedElement(3193); + addExpectedElement(3194); + addExpectedElement(3195); + addExpectedElement(3196); + addExpectedElement(3197); + addExpectedElement(3198); + addExpectedElement(3199); + } + + // Java.g:8136:6: (a12_0= parse_org_emftext_language_java_parameters_Parameter ) + // Java.g:8137:7: a12_0= parse_org_emftext_language_java_parameters_Parameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_members_InterfaceMethod6475); + a12_0=parse_org_emftext_language_java_parameters_Parameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + if (a12_0 != null) { + if (a12_0 != null) { + Object value = a12_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_5_0_0_1_0_0_1, a12_0, true); + copyLocalizationInfos(a12_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3200); + addExpectedElement(3201); + } + + } + + + } + break; + + default : + break loop71; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3202); + addExpectedElement(3203); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3204); + } + + a13=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_members_InterfaceMethod6549); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_6, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a13, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3205); + addExpectedElement(3206); + addExpectedElement(3207); + } + + // Java.g:8194:2: ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop73: + do { + int alt73=2; + int LA73_0 = input.LA(1); + + if ( (LA73_0==49) ) { + alt73=1; + } + + + switch (alt73) { + case 1 : + // Java.g:8195:3: (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:8195:3: (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:8196:4: a14_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_members_InterfaceMethod6572); + a14_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + if (a14_0 != null) { + if (a14_0 != null) { + Object value = a14_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__ARRAY_DIMENSIONS_AFTER, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_7, a14_0, true); + copyLocalizationInfos(a14_0, element); + } + } + + } + + + } + break; + + default : + break loop73; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3208); + addExpectedElement(3209); + addExpectedElement(3210); + } + + // Java.g:8224:2: ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? + int alt75=2; + int LA75_0 = input.LA(1); + + if ( (LA75_0==99) ) { + alt75=1; + } + switch (alt75) { + case 1 : + // Java.g:8225:3: (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) + { + // Java.g:8225:3: (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) + // Java.g:8226:4: a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* + { + a15=(Token)match(input,99,FOLLOW_99_in_parse_org_emftext_language_java_members_InterfaceMethod6607); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_8_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a15, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3211); + addExpectedElement(3212); + } + + // Java.g:8241:4: (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + // Java.g:8242:5: a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_members_InterfaceMethod6633); + a16_0=parse_org_emftext_language_java_types_NamespaceClassifierReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + if (a16_0 != null) { + if (a16_0 != null) { + Object value = a16_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__EXCEPTIONS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_8_0_0_1, a16_0, true); + copyLocalizationInfos(a16_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3213); + addExpectedElement(3214); + } + + // Java.g:8268:4: ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* + loop74: + do { + int alt74=2; + int LA74_0 = input.LA(1); + + if ( (LA74_0==33) ) { + alt74=1; + } + + + switch (alt74) { + case 1 : + // Java.g:8269:5: (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) + { + // Java.g:8269:5: (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) + // Java.g:8270:6: a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + { + a17=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_members_InterfaceMethod6674); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_8_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a17, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3215); + addExpectedElement(3216); + } + + // Java.g:8285:6: (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + // Java.g:8286:7: a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_members_InterfaceMethod6708); + a18_0=parse_org_emftext_language_java_types_NamespaceClassifierReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + if (a18_0 != null) { + if (a18_0 != null) { + Object value = a18_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.INTERFACE_METHOD__EXCEPTIONS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_8_0_0_2_0_0_1, a18_0, true); + copyLocalizationInfos(a18_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3217); + addExpectedElement(3218); + } + + } + + + } + break; + + default : + break loop74; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3219); + addExpectedElement(3220); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3221); + } + + a19=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_members_InterfaceMethod6782); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createInterfaceMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_20_0_0_9, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a19, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3222); + addExpectedElement(3223); + addExpectedElement(3224); + addExpectedElement(3225); + addExpectedElement(3226); + addExpectedElement(3227); + addExpectedElement(3228); + addExpectedElement(3229); + addExpectedElement(3230); + addExpectedElement(3231); + addExpectedElement(3232); + addExpectedElement(3233); + addExpectedElement(3234); + addExpectedElement(3235); + addExpectedElement(3236); + addExpectedElement(3237); + addExpectedElement(3238); + addExpectedElement(3239); + addExpectedElement(3240); + addExpectedElement(3241); + addExpectedElement(3242); + addExpectedElement(3243); + addExpectedElement(3244); + addExpectedElement(3245); + addExpectedElement(3246); + addExpectedElement(3247); + addExpectedElement(3248); + addExpectedElement(3249); + addExpectedElement(3250); + addExpectedElement(3251); + addExpectedElement(3252); + addExpectedElement(3253); + addExpectedElement(3254); + addExpectedElement(3255); + addExpectedElement(3256); + addExpectedElement(3257); + addExpectedElement(3258); + addExpectedElement(3259); + addExpectedElement(3260); + } + + } + break; + case 2 : + // Java.g:8381:2: c0= parse_org_emftext_language_java_annotations_AnnotationAttribute + { + pushFollow(FOLLOW_parse_org_emftext_language_java_annotations_AnnotationAttribute_in_parse_org_emftext_language_java_members_InterfaceMethod6801); + c0=parse_org_emftext_language_java_annotations_AnnotationAttribute(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 22, parse_org_emftext_language_java_members_InterfaceMethod_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_members_InterfaceMethod" + + + + // $ANTLR start "parse_org_emftext_language_java_members_ClassMethod" + // Java.g:8385:1: parse_org_emftext_language_java_members_ClassMethod returns [org.emftext.language.java.members.ClassMethod element = null] : ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) (a8= IDENTIFIER ) a9= '(' ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? a13= ')' ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? a19= '{' ( ( (a20_0= parse_org_emftext_language_java_statements_Statement ) ) )* a21= '}' ; + public final org.emftext.language.java.members.ClassMethod parse_org_emftext_language_java_members_ClassMethod() throws RecognitionException { + org.emftext.language.java.members.ClassMethod element = null; + + int parse_org_emftext_language_java_members_ClassMethod_StartIndex = input.index(); + + Token a1=null; + Token a3=null; + Token a5=null; + Token a8=null; + Token a9=null; + Token a11=null; + Token a13=null; + Token a15=null; + Token a17=null; + Token a19=null; + Token a21=null; + org.emftext.language.java.modifiers.AnnotationInstanceOrModifier a0_0 =null; + + org.emftext.language.java.generics.TypeParameter a2_0 =null; + + org.emftext.language.java.generics.TypeParameter a4_0 =null; + + org.emftext.language.java.types.TypeReference a6_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a7_0 =null; + + org.emftext.language.java.parameters.Parameter a10_0 =null; + + org.emftext.language.java.parameters.Parameter a12_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a14_0 =null; + + org.emftext.language.java.types.NamespaceClassifierReference a16_0 =null; + + org.emftext.language.java.types.NamespaceClassifierReference a18_0 =null; + + org.emftext.language.java.statements.Statement a20_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 23) ) { return element; } + + // Java.g:8388:2: ( ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) (a8= IDENTIFIER ) a9= '(' ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? a13= ')' ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? a19= '{' ( ( (a20_0= parse_org_emftext_language_java_statements_Statement ) ) )* a21= '}' ) + // Java.g:8389:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) (a8= IDENTIFIER ) a9= '(' ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? a13= ')' ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? a19= '{' ( ( (a20_0= parse_org_emftext_language_java_statements_Statement ) ) )* a21= '}' + { + // Java.g:8389:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* + loop77: + do { + int alt77=2; + int LA77_0 = input.LA(1); + + if ( (LA77_0==48||LA77_0==56||LA77_0==72||LA77_0==83||(LA77_0 >= 87 && LA77_0 <= 89)||(LA77_0 >= 92 && LA77_0 <= 93)||LA77_0==96||LA77_0==100||LA77_0==103) ) { + alt77=1; + } + + + switch (alt77) { + case 1 : + // Java.g:8390:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + { + // Java.g:8390:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + // Java.g:8391:4: a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_members_ClassMethod6835); + a0_0=parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CLASS_METHOD__ANNOTATIONS_AND_MODIFIERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop77; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3261); + addExpectedElement(3262); + addExpectedElement(3263); + addExpectedElement(3264); + addExpectedElement(3265); + addExpectedElement(3266); + addExpectedElement(3267); + addExpectedElement(3268); + addExpectedElement(3269); + addExpectedElement(3270); + addExpectedElement(3271); + addExpectedElement(3272); + addExpectedElement(3273); + addExpectedElement(3274); + addExpectedElement(3275); + addExpectedElement(3276); + addExpectedElement(3277); + addExpectedElement(3278); + addExpectedElement(3279); + addExpectedElement(3280); + addExpectedElement(3281); + addExpectedElement(3282); + addExpectedElement(3283); + addExpectedElement(3284); + } + + // Java.g:8440:2: ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? + int alt79=2; + int LA79_0 = input.LA(1); + + if ( (LA79_0==43) ) { + alt79=1; + } + switch (alt79) { + case 1 : + // Java.g:8441:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) + { + // Java.g:8441:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) + // Java.g:8442:4: a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' + { + a1=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_members_ClassMethod6870); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3285); + } + + // Java.g:8456:4: (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) + // Java.g:8457:5: a2_0= parse_org_emftext_language_java_generics_TypeParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_members_ClassMethod6896); + a2_0=parse_org_emftext_language_java_generics_TypeParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CLASS_METHOD__TYPE_PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3286); + addExpectedElement(3287); + } + + // Java.g:8483:4: ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* + loop78: + do { + int alt78=2; + int LA78_0 = input.LA(1); + + if ( (LA78_0==33) ) { + alt78=1; + } + + + switch (alt78) { + case 1 : + // Java.g:8484:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) + { + // Java.g:8484:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) + // Java.g:8485:6: a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) + { + a3=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_members_ClassMethod6937); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_1_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3288); + } + + // Java.g:8499:6: (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) + // Java.g:8500:7: a4_0= parse_org_emftext_language_java_generics_TypeParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_members_ClassMethod6971); + a4_0=parse_org_emftext_language_java_generics_TypeParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CLASS_METHOD__TYPE_PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_1_0_0_2_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3289); + addExpectedElement(3290); + } + + } + + + } + break; + + default : + break loop78; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3291); + addExpectedElement(3292); + } + + a5=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_members_ClassMethod7032); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_1_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3293); + addExpectedElement(3294); + addExpectedElement(3295); + addExpectedElement(3296); + addExpectedElement(3297); + addExpectedElement(3298); + addExpectedElement(3299); + addExpectedElement(3300); + addExpectedElement(3301); + addExpectedElement(3302); + addExpectedElement(3303); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3304); + addExpectedElement(3305); + addExpectedElement(3306); + addExpectedElement(3307); + addExpectedElement(3308); + addExpectedElement(3309); + addExpectedElement(3310); + addExpectedElement(3311); + addExpectedElement(3312); + addExpectedElement(3313); + addExpectedElement(3314); + } + + // Java.g:8575:2: ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) + // Java.g:8576:3: (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + { + // Java.g:8576:3: (a6_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:8577:4: a6_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_members_ClassMethod7074); + a6_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__TYPE_REFERENCE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_2_0_0_0, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3315); + addExpectedElement(3316); + } + + // Java.g:8603:3: ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop80: + do { + int alt80=2; + int LA80_0 = input.LA(1); + + if ( (LA80_0==49) ) { + alt80=1; + } + + + switch (alt80) { + case 1 : + // Java.g:8604:4: (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:8604:4: (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:8605:5: a7_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_members_ClassMethod7108); + a7_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + if (a7_0 != null) { + if (a7_0 != null) { + Object value = a7_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CLASS_METHOD__ARRAY_DIMENSIONS_BEFORE, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_2_0_0_1, a7_0, true); + copyLocalizationInfos(a7_0, element); + } + } + + } + + + } + break; + + default : + break loop80; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3317); + addExpectedElement(3318); + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3319); + } + + // Java.g:8638:2: (a8= IDENTIFIER ) + // Java.g:8639:3: a8= IDENTIFIER + { + a8=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_members_ClassMethod7152); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + if (a8 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a8.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a8).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a8).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a8).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a8).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.CLASS_METHOD__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_3, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a8, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3320); + } + + a9=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_members_ClassMethod7173); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a9, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3321); + addExpectedElement(3322); + addExpectedElement(3323); + addExpectedElement(3324); + addExpectedElement(3325); + addExpectedElement(3326); + addExpectedElement(3327); + addExpectedElement(3328); + addExpectedElement(3329); + addExpectedElement(3330); + addExpectedElement(3331); + addExpectedElement(3332); + addExpectedElement(3333); + addExpectedElement(3334); + addExpectedElement(3335); + addExpectedElement(3336); + addExpectedElement(3337); + addExpectedElement(3338); + addExpectedElement(3339); + addExpectedElement(3340); + addExpectedElement(3341); + addExpectedElement(3342); + addExpectedElement(3343); + addExpectedElement(3344); + } + + // Java.g:8711:2: ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? + int alt82=2; + int LA82_0 = input.LA(1); + + if ( (LA82_0==IDENTIFIER||LA82_0==48||LA82_0==56||LA82_0==58||LA82_0==60||LA82_0==63||LA82_0==68||LA82_0==72||LA82_0==74||LA82_0==80||(LA82_0 >= 82 && LA82_0 <= 83)||(LA82_0 >= 87 && LA82_0 <= 89)||(LA82_0 >= 91 && LA82_0 <= 93)||LA82_0==96||LA82_0==100||(LA82_0 >= 102 && LA82_0 <= 103)) ) { + alt82=1; + } + switch (alt82) { + case 1 : + // Java.g:8712:3: ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) + { + // Java.g:8712:3: ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) + // Java.g:8713:4: (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* + { + // Java.g:8713:4: (a10_0= parse_org_emftext_language_java_parameters_Parameter ) + // Java.g:8714:5: a10_0= parse_org_emftext_language_java_parameters_Parameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_members_ClassMethod7202); + a10_0=parse_org_emftext_language_java_parameters_Parameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + if (a10_0 != null) { + if (a10_0 != null) { + Object value = a10_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CLASS_METHOD__PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_5_0_0_0, a10_0, true); + copyLocalizationInfos(a10_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3345); + addExpectedElement(3346); + } + + // Java.g:8740:4: ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* + loop81: + do { + int alt81=2; + int LA81_0 = input.LA(1); + + if ( (LA81_0==33) ) { + alt81=1; + } + + + switch (alt81) { + case 1 : + // Java.g:8741:5: (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) + { + // Java.g:8741:5: (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) + // Java.g:8742:6: a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) + { + a11=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_members_ClassMethod7243); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_5_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a11, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3347); + addExpectedElement(3348); + addExpectedElement(3349); + addExpectedElement(3350); + addExpectedElement(3351); + addExpectedElement(3352); + addExpectedElement(3353); + addExpectedElement(3354); + addExpectedElement(3355); + addExpectedElement(3356); + addExpectedElement(3357); + addExpectedElement(3358); + addExpectedElement(3359); + addExpectedElement(3360); + addExpectedElement(3361); + addExpectedElement(3362); + addExpectedElement(3363); + addExpectedElement(3364); + addExpectedElement(3365); + addExpectedElement(3366); + addExpectedElement(3367); + addExpectedElement(3368); + addExpectedElement(3369); + } + + // Java.g:8778:6: (a12_0= parse_org_emftext_language_java_parameters_Parameter ) + // Java.g:8779:7: a12_0= parse_org_emftext_language_java_parameters_Parameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_members_ClassMethod7277); + a12_0=parse_org_emftext_language_java_parameters_Parameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + if (a12_0 != null) { + if (a12_0 != null) { + Object value = a12_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CLASS_METHOD__PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_5_0_0_1_0_0_1, a12_0, true); + copyLocalizationInfos(a12_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3370); + addExpectedElement(3371); + } + + } + + + } + break; + + default : + break loop81; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3372); + addExpectedElement(3373); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3374); + } + + a13=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_members_ClassMethod7351); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_6, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a13, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3375); + addExpectedElement(3376); + addExpectedElement(3377); + } + + // Java.g:8836:2: ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop83: + do { + int alt83=2; + int LA83_0 = input.LA(1); + + if ( (LA83_0==49) ) { + alt83=1; + } + + + switch (alt83) { + case 1 : + // Java.g:8837:3: (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:8837:3: (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:8838:4: a14_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_members_ClassMethod7374); + a14_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + if (a14_0 != null) { + if (a14_0 != null) { + Object value = a14_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CLASS_METHOD__ARRAY_DIMENSIONS_AFTER, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_7, a14_0, true); + copyLocalizationInfos(a14_0, element); + } + } + + } + + + } + break; + + default : + break loop83; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3378); + addExpectedElement(3379); + addExpectedElement(3380); + } + + // Java.g:8866:2: ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? + int alt85=2; + int LA85_0 = input.LA(1); + + if ( (LA85_0==99) ) { + alt85=1; + } + switch (alt85) { + case 1 : + // Java.g:8867:3: (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) + { + // Java.g:8867:3: (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) + // Java.g:8868:4: a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* + { + a15=(Token)match(input,99,FOLLOW_99_in_parse_org_emftext_language_java_members_ClassMethod7409); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_8_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a15, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3381); + addExpectedElement(3382); + } + + // Java.g:8883:4: (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + // Java.g:8884:5: a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_members_ClassMethod7435); + a16_0=parse_org_emftext_language_java_types_NamespaceClassifierReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + if (a16_0 != null) { + if (a16_0 != null) { + Object value = a16_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CLASS_METHOD__EXCEPTIONS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_8_0_0_1, a16_0, true); + copyLocalizationInfos(a16_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3383); + addExpectedElement(3384); + } + + // Java.g:8910:4: ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* + loop84: + do { + int alt84=2; + int LA84_0 = input.LA(1); + + if ( (LA84_0==33) ) { + alt84=1; + } + + + switch (alt84) { + case 1 : + // Java.g:8911:5: (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) + { + // Java.g:8911:5: (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) + // Java.g:8912:6: a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + { + a17=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_members_ClassMethod7476); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_8_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a17, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3385); + addExpectedElement(3386); + } + + // Java.g:8927:6: (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + // Java.g:8928:7: a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_members_ClassMethod7510); + a18_0=parse_org_emftext_language_java_types_NamespaceClassifierReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + if (a18_0 != null) { + if (a18_0 != null) { + Object value = a18_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CLASS_METHOD__EXCEPTIONS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_8_0_0_2_0_0_1, a18_0, true); + copyLocalizationInfos(a18_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3387); + addExpectedElement(3388); + } + + } + + + } + break; + + default : + break loop84; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3389); + addExpectedElement(3390); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3391); + } + + a19=(Token)match(input,105,FOLLOW_105_in_parse_org_emftext_language_java_members_ClassMethod7584); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_10, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a19, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3392); + addExpectedElement(3393); + addExpectedElement(3394); + addExpectedElement(3395); + addExpectedElement(3396); + addExpectedElement(3397); + addExpectedElement(3398); + addExpectedElement(3399); + addExpectedElement(3400); + addExpectedElement(3401); + addExpectedElement(3402); + addExpectedElement(3403); + addExpectedElement(3404); + addExpectedElement(3405); + addExpectedElement(3406); + addExpectedElement(3407); + addExpectedElement(3408); + addExpectedElement(3409); + addExpectedElement(3410); + addExpectedElement(3411); + addExpectedElement(3412); + addExpectedElement(3413); + addExpectedElement(3414); + addExpectedElement(3415); + addExpectedElement(3416); + addExpectedElement(3417); + addExpectedElement(3418); + addExpectedElement(3419); + addExpectedElement(3420); + addExpectedElement(3421); + addExpectedElement(3422); + addExpectedElement(3423); + addExpectedElement(3424); + addExpectedElement(3425); + addExpectedElement(3426); + addExpectedElement(3427); + addExpectedElement(3428); + addExpectedElement(3429); + addExpectedElement(3430); + addExpectedElement(3431); + addExpectedElement(3432); + addExpectedElement(3433); + addExpectedElement(3434); + addExpectedElement(3435); + addExpectedElement(3436); + addExpectedElement(3437); + addExpectedElement(3438); + addExpectedElement(3439); + addExpectedElement(3440); + addExpectedElement(3441); + addExpectedElement(3442); + addExpectedElement(3443); + addExpectedElement(3444); + addExpectedElement(3445); + addExpectedElement(3446); + addExpectedElement(3447); + addExpectedElement(3448); + addExpectedElement(3449); + addExpectedElement(3450); + addExpectedElement(3451); + addExpectedElement(3452); + addExpectedElement(3453); + addExpectedElement(3454); + addExpectedElement(3455); + addExpectedElement(3456); + addExpectedElement(3457); + addExpectedElement(3458); + addExpectedElement(3459); + addExpectedElement(3460); + addExpectedElement(3461); + addExpectedElement(3462); + addExpectedElement(3463); + addExpectedElement(3464); + addExpectedElement(3465); + addExpectedElement(3466); + addExpectedElement(3467); + addExpectedElement(3468); + } + + // Java.g:9059:2: ( ( (a20_0= parse_org_emftext_language_java_statements_Statement ) ) )* + loop86: + do { + int alt86=2; + int LA86_0 = input.LA(1); + + if ( ((LA86_0 >= BOOLEAN_LITERAL && LA86_0 <= IDENTIFIER)||(LA86_0 >= OCTAL_INTEGER_LITERAL && LA86_0 <= OCTAL_LONG_LITERAL)||LA86_0==STRING_LITERAL||LA86_0==21||LA86_0==26||(LA86_0 >= 30 && LA86_0 <= 31)||(LA86_0 >= 34 && LA86_0 <= 35)||(LA86_0 >= 42 && LA86_0 <= 43)||LA86_0==48||(LA86_0 >= 56 && LA86_0 <= 60)||(LA86_0 >= 63 && LA86_0 <= 65)||(LA86_0 >= 67 && LA86_0 <= 68)||LA86_0==70||LA86_0==72||(LA86_0 >= 74 && LA86_0 <= 76)||(LA86_0 >= 80 && LA86_0 <= 85)||(LA86_0 >= 87 && LA86_0 <= 98)||(LA86_0 >= 100 && LA86_0 <= 105)||LA86_0==110) ) { + alt86=1; + } + + + switch (alt86) { + case 1 : + // Java.g:9060:3: ( (a20_0= parse_org_emftext_language_java_statements_Statement ) ) + { + // Java.g:9060:3: ( (a20_0= parse_org_emftext_language_java_statements_Statement ) ) + // Java.g:9061:4: (a20_0= parse_org_emftext_language_java_statements_Statement ) + { + // Java.g:9061:4: (a20_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:9062:5: a20_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_members_ClassMethod7613); + a20_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + if (a20_0 != null) { + if (a20_0 != null) { + Object value = a20_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.CLASS_METHOD__STATEMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_11_0_0_1, a20_0, true); + copyLocalizationInfos(a20_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3469); + addExpectedElement(3470); + addExpectedElement(3471); + addExpectedElement(3472); + addExpectedElement(3473); + addExpectedElement(3474); + addExpectedElement(3475); + addExpectedElement(3476); + addExpectedElement(3477); + addExpectedElement(3478); + addExpectedElement(3479); + addExpectedElement(3480); + addExpectedElement(3481); + addExpectedElement(3482); + addExpectedElement(3483); + addExpectedElement(3484); + addExpectedElement(3485); + addExpectedElement(3486); + addExpectedElement(3487); + addExpectedElement(3488); + addExpectedElement(3489); + addExpectedElement(3490); + addExpectedElement(3491); + addExpectedElement(3492); + addExpectedElement(3493); + addExpectedElement(3494); + addExpectedElement(3495); + addExpectedElement(3496); + addExpectedElement(3497); + addExpectedElement(3498); + addExpectedElement(3499); + addExpectedElement(3500); + addExpectedElement(3501); + addExpectedElement(3502); + addExpectedElement(3503); + addExpectedElement(3504); + addExpectedElement(3505); + addExpectedElement(3506); + addExpectedElement(3507); + addExpectedElement(3508); + addExpectedElement(3509); + addExpectedElement(3510); + addExpectedElement(3511); + addExpectedElement(3512); + addExpectedElement(3513); + addExpectedElement(3514); + addExpectedElement(3515); + addExpectedElement(3516); + addExpectedElement(3517); + addExpectedElement(3518); + addExpectedElement(3519); + addExpectedElement(3520); + addExpectedElement(3521); + addExpectedElement(3522); + addExpectedElement(3523); + addExpectedElement(3524); + addExpectedElement(3525); + addExpectedElement(3526); + addExpectedElement(3527); + addExpectedElement(3528); + addExpectedElement(3529); + addExpectedElement(3530); + addExpectedElement(3531); + addExpectedElement(3532); + addExpectedElement(3533); + addExpectedElement(3534); + addExpectedElement(3535); + addExpectedElement(3536); + addExpectedElement(3537); + addExpectedElement(3538); + addExpectedElement(3539); + addExpectedElement(3540); + addExpectedElement(3541); + addExpectedElement(3542); + addExpectedElement(3543); + addExpectedElement(3544); + addExpectedElement(3545); + } + + } + + + } + break; + + default : + break loop86; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3546); + addExpectedElement(3547); + addExpectedElement(3548); + addExpectedElement(3549); + addExpectedElement(3550); + addExpectedElement(3551); + addExpectedElement(3552); + addExpectedElement(3553); + addExpectedElement(3554); + addExpectedElement(3555); + addExpectedElement(3556); + addExpectedElement(3557); + addExpectedElement(3558); + addExpectedElement(3559); + addExpectedElement(3560); + addExpectedElement(3561); + addExpectedElement(3562); + addExpectedElement(3563); + addExpectedElement(3564); + addExpectedElement(3565); + addExpectedElement(3566); + addExpectedElement(3567); + addExpectedElement(3568); + addExpectedElement(3569); + addExpectedElement(3570); + addExpectedElement(3571); + addExpectedElement(3572); + addExpectedElement(3573); + addExpectedElement(3574); + addExpectedElement(3575); + addExpectedElement(3576); + addExpectedElement(3577); + addExpectedElement(3578); + addExpectedElement(3579); + addExpectedElement(3580); + addExpectedElement(3581); + addExpectedElement(3582); + addExpectedElement(3583); + addExpectedElement(3584); + addExpectedElement(3585); + addExpectedElement(3586); + addExpectedElement(3587); + addExpectedElement(3588); + addExpectedElement(3589); + addExpectedElement(3590); + addExpectedElement(3591); + addExpectedElement(3592); + addExpectedElement(3593); + addExpectedElement(3594); + addExpectedElement(3595); + addExpectedElement(3596); + addExpectedElement(3597); + addExpectedElement(3598); + addExpectedElement(3599); + addExpectedElement(3600); + addExpectedElement(3601); + addExpectedElement(3602); + addExpectedElement(3603); + addExpectedElement(3604); + addExpectedElement(3605); + addExpectedElement(3606); + addExpectedElement(3607); + addExpectedElement(3608); + addExpectedElement(3609); + addExpectedElement(3610); + addExpectedElement(3611); + addExpectedElement(3612); + addExpectedElement(3613); + addExpectedElement(3614); + addExpectedElement(3615); + addExpectedElement(3616); + addExpectedElement(3617); + addExpectedElement(3618); + addExpectedElement(3619); + addExpectedElement(3620); + addExpectedElement(3621); + addExpectedElement(3622); + } + + a21=(Token)match(input,109,FOLLOW_109_in_parse_org_emftext_language_java_members_ClassMethod7654); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createClassMethod(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_21_0_0_13, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a21, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3623); + addExpectedElement(3624); + addExpectedElement(3625); + addExpectedElement(3626); + addExpectedElement(3627); + addExpectedElement(3628); + addExpectedElement(3629); + addExpectedElement(3630); + addExpectedElement(3631); + addExpectedElement(3632); + addExpectedElement(3633); + addExpectedElement(3634); + addExpectedElement(3635); + addExpectedElement(3636); + addExpectedElement(3637); + addExpectedElement(3638); + addExpectedElement(3639); + addExpectedElement(3640); + addExpectedElement(3641); + addExpectedElement(3642); + addExpectedElement(3643); + addExpectedElement(3644); + addExpectedElement(3645); + addExpectedElement(3646); + addExpectedElement(3647); + addExpectedElement(3648); + addExpectedElement(3649); + addExpectedElement(3650); + addExpectedElement(3651); + addExpectedElement(3652); + addExpectedElement(3653); + addExpectedElement(3654); + addExpectedElement(3655); + addExpectedElement(3656); + addExpectedElement(3657); + addExpectedElement(3658); + addExpectedElement(3659); + addExpectedElement(3660); + addExpectedElement(3661); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 23, parse_org_emftext_language_java_members_ClassMethod_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_members_ClassMethod" + + + + // $ANTLR start "parse_org_emftext_language_java_annotations_AnnotationAttribute" + // Java.g:9300:1: parse_org_emftext_language_java_annotations_AnnotationAttribute returns [org.emftext.language.java.annotations.AnnotationAttribute element = null] : ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) (a8= IDENTIFIER ) a9= '(' ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? a13= ')' ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? a19= 'default' (a20_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a21= ';' ; + public final org.emftext.language.java.annotations.AnnotationAttribute parse_org_emftext_language_java_annotations_AnnotationAttribute() throws RecognitionException { + org.emftext.language.java.annotations.AnnotationAttribute element = null; + + int parse_org_emftext_language_java_annotations_AnnotationAttribute_StartIndex = input.index(); + + Token a1=null; + Token a3=null; + Token a5=null; + Token a8=null; + Token a9=null; + Token a11=null; + Token a13=null; + Token a15=null; + Token a17=null; + Token a19=null; + Token a21=null; + org.emftext.language.java.modifiers.AnnotationInstanceOrModifier a0_0 =null; + + org.emftext.language.java.generics.TypeParameter a2_0 =null; + + org.emftext.language.java.generics.TypeParameter a4_0 =null; + + org.emftext.language.java.types.TypeReference a6_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a7_0 =null; + + org.emftext.language.java.parameters.Parameter a10_0 =null; + + org.emftext.language.java.parameters.Parameter a12_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a14_0 =null; + + org.emftext.language.java.types.NamespaceClassifierReference a16_0 =null; + + org.emftext.language.java.types.NamespaceClassifierReference a18_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a20_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 24) ) { return element; } + + // Java.g:9303:2: ( ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) (a8= IDENTIFIER ) a9= '(' ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? a13= ')' ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? a19= 'default' (a20_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a21= ';' ) + // Java.g:9304:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) (a8= IDENTIFIER ) a9= '(' ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? a13= ')' ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? a19= 'default' (a20_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a21= ';' + { + // Java.g:9304:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* + loop87: + do { + int alt87=2; + int LA87_0 = input.LA(1); + + if ( (LA87_0==48||LA87_0==56||LA87_0==72||LA87_0==83||(LA87_0 >= 87 && LA87_0 <= 89)||(LA87_0 >= 92 && LA87_0 <= 93)||LA87_0==96||LA87_0==100||LA87_0==103) ) { + alt87=1; + } + + + switch (alt87) { + case 1 : + // Java.g:9305:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + { + // Java.g:9305:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + // Java.g:9306:4: a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7692); + a0_0=parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__ANNOTATIONS_AND_MODIFIERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop87; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3662); + addExpectedElement(3663); + addExpectedElement(3664); + addExpectedElement(3665); + addExpectedElement(3666); + addExpectedElement(3667); + addExpectedElement(3668); + addExpectedElement(3669); + addExpectedElement(3670); + addExpectedElement(3671); + addExpectedElement(3672); + addExpectedElement(3673); + addExpectedElement(3674); + addExpectedElement(3675); + addExpectedElement(3676); + addExpectedElement(3677); + addExpectedElement(3678); + addExpectedElement(3679); + addExpectedElement(3680); + addExpectedElement(3681); + addExpectedElement(3682); + addExpectedElement(3683); + addExpectedElement(3684); + addExpectedElement(3685); + } + + // Java.g:9355:2: ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? + int alt89=2; + int LA89_0 = input.LA(1); + + if ( (LA89_0==43) ) { + alt89=1; + } + switch (alt89) { + case 1 : + // Java.g:9356:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) + { + // Java.g:9356:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) + // Java.g:9357:4: a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' + { + a1=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7727); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3686); + } + + // Java.g:9371:4: (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) + // Java.g:9372:5: a2_0= parse_org_emftext_language_java_generics_TypeParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7753); + a2_0=parse_org_emftext_language_java_generics_TypeParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__TYPE_PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3687); + addExpectedElement(3688); + } + + // Java.g:9398:4: ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* + loop88: + do { + int alt88=2; + int LA88_0 = input.LA(1); + + if ( (LA88_0==33) ) { + alt88=1; + } + + + switch (alt88) { + case 1 : + // Java.g:9399:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) + { + // Java.g:9399:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) + // Java.g:9400:6: a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) + { + a3=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7794); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_1_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3689); + } + + // Java.g:9414:6: (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) + // Java.g:9415:7: a4_0= parse_org_emftext_language_java_generics_TypeParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7828); + a4_0=parse_org_emftext_language_java_generics_TypeParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__TYPE_PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_1_0_0_2_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3690); + addExpectedElement(3691); + } + + } + + + } + break; + + default : + break loop88; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3692); + addExpectedElement(3693); + } + + a5=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7889); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_1_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3694); + addExpectedElement(3695); + addExpectedElement(3696); + addExpectedElement(3697); + addExpectedElement(3698); + addExpectedElement(3699); + addExpectedElement(3700); + addExpectedElement(3701); + addExpectedElement(3702); + addExpectedElement(3703); + addExpectedElement(3704); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3705); + addExpectedElement(3706); + addExpectedElement(3707); + addExpectedElement(3708); + addExpectedElement(3709); + addExpectedElement(3710); + addExpectedElement(3711); + addExpectedElement(3712); + addExpectedElement(3713); + addExpectedElement(3714); + addExpectedElement(3715); + } + + // Java.g:9490:2: ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) + // Java.g:9491:3: (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + { + // Java.g:9491:3: (a6_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:9492:4: a6_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7931); + a6_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__TYPE_REFERENCE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_2_0_0_0, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3716); + addExpectedElement(3717); + } + + // Java.g:9518:3: ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop90: + do { + int alt90=2; + int LA90_0 = input.LA(1); + + if ( (LA90_0==49) ) { + alt90=1; + } + + + switch (alt90) { + case 1 : + // Java.g:9519:4: (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:9519:4: (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:9520:5: a7_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7965); + a7_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + if (a7_0 != null) { + if (a7_0 != null) { + Object value = a7_0; + addObjectToList(element, org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__ARRAY_DIMENSIONS_BEFORE, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_2_0_0_1, a7_0, true); + copyLocalizationInfos(a7_0, element); + } + } + + } + + + } + break; + + default : + break loop90; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3718); + addExpectedElement(3719); + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3720); + } + + // Java.g:9553:2: (a8= IDENTIFIER ) + // Java.g:9554:3: a8= IDENTIFIER + { + a8=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8009); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + if (a8 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a8.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a8).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a8).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a8).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a8).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_3, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a8, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3721); + } + + a9=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8030); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a9, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3722); + addExpectedElement(3723); + addExpectedElement(3724); + addExpectedElement(3725); + addExpectedElement(3726); + addExpectedElement(3727); + addExpectedElement(3728); + addExpectedElement(3729); + addExpectedElement(3730); + addExpectedElement(3731); + addExpectedElement(3732); + addExpectedElement(3733); + addExpectedElement(3734); + addExpectedElement(3735); + addExpectedElement(3736); + addExpectedElement(3737); + addExpectedElement(3738); + addExpectedElement(3739); + addExpectedElement(3740); + addExpectedElement(3741); + addExpectedElement(3742); + addExpectedElement(3743); + addExpectedElement(3744); + addExpectedElement(3745); + } + + // Java.g:9626:2: ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? + int alt92=2; + int LA92_0 = input.LA(1); + + if ( (LA92_0==IDENTIFIER||LA92_0==48||LA92_0==56||LA92_0==58||LA92_0==60||LA92_0==63||LA92_0==68||LA92_0==72||LA92_0==74||LA92_0==80||(LA92_0 >= 82 && LA92_0 <= 83)||(LA92_0 >= 87 && LA92_0 <= 89)||(LA92_0 >= 91 && LA92_0 <= 93)||LA92_0==96||LA92_0==100||(LA92_0 >= 102 && LA92_0 <= 103)) ) { + alt92=1; + } + switch (alt92) { + case 1 : + // Java.g:9627:3: ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) + { + // Java.g:9627:3: ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) + // Java.g:9628:4: (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* + { + // Java.g:9628:4: (a10_0= parse_org_emftext_language_java_parameters_Parameter ) + // Java.g:9629:5: a10_0= parse_org_emftext_language_java_parameters_Parameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8059); + a10_0=parse_org_emftext_language_java_parameters_Parameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + if (a10_0 != null) { + if (a10_0 != null) { + Object value = a10_0; + addObjectToList(element, org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_5_0_0_0, a10_0, true); + copyLocalizationInfos(a10_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3746); + addExpectedElement(3747); + } + + // Java.g:9655:4: ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* + loop91: + do { + int alt91=2; + int LA91_0 = input.LA(1); + + if ( (LA91_0==33) ) { + alt91=1; + } + + + switch (alt91) { + case 1 : + // Java.g:9656:5: (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) + { + // Java.g:9656:5: (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) + // Java.g:9657:6: a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) + { + a11=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8100); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_5_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a11, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3748); + addExpectedElement(3749); + addExpectedElement(3750); + addExpectedElement(3751); + addExpectedElement(3752); + addExpectedElement(3753); + addExpectedElement(3754); + addExpectedElement(3755); + addExpectedElement(3756); + addExpectedElement(3757); + addExpectedElement(3758); + addExpectedElement(3759); + addExpectedElement(3760); + addExpectedElement(3761); + addExpectedElement(3762); + addExpectedElement(3763); + addExpectedElement(3764); + addExpectedElement(3765); + addExpectedElement(3766); + addExpectedElement(3767); + addExpectedElement(3768); + addExpectedElement(3769); + addExpectedElement(3770); + } + + // Java.g:9693:6: (a12_0= parse_org_emftext_language_java_parameters_Parameter ) + // Java.g:9694:7: a12_0= parse_org_emftext_language_java_parameters_Parameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8134); + a12_0=parse_org_emftext_language_java_parameters_Parameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + if (a12_0 != null) { + if (a12_0 != null) { + Object value = a12_0; + addObjectToList(element, org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__PARAMETERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_5_0_0_1_0_0_1, a12_0, true); + copyLocalizationInfos(a12_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3771); + addExpectedElement(3772); + } + + } + + + } + break; + + default : + break loop91; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3773); + addExpectedElement(3774); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3775); + } + + a13=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8208); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_6, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a13, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3776); + addExpectedElement(3777); + addExpectedElement(3778); + } + + // Java.g:9751:2: ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop93: + do { + int alt93=2; + int LA93_0 = input.LA(1); + + if ( (LA93_0==49) ) { + alt93=1; + } + + + switch (alt93) { + case 1 : + // Java.g:9752:3: (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:9752:3: (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:9753:4: a14_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8231); + a14_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + if (a14_0 != null) { + if (a14_0 != null) { + Object value = a14_0; + addObjectToList(element, org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__ARRAY_DIMENSIONS_AFTER, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_7, a14_0, true); + copyLocalizationInfos(a14_0, element); + } + } + + } + + + } + break; + + default : + break loop93; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3779); + addExpectedElement(3780); + addExpectedElement(3781); + } + + // Java.g:9781:2: ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? + int alt95=2; + int LA95_0 = input.LA(1); + + if ( (LA95_0==99) ) { + alt95=1; + } + switch (alt95) { + case 1 : + // Java.g:9782:3: (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) + { + // Java.g:9782:3: (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) + // Java.g:9783:4: a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* + { + a15=(Token)match(input,99,FOLLOW_99_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8266); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_8_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a15, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3782); + addExpectedElement(3783); + } + + // Java.g:9798:4: (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + // Java.g:9799:5: a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8292); + a16_0=parse_org_emftext_language_java_types_NamespaceClassifierReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + if (a16_0 != null) { + if (a16_0 != null) { + Object value = a16_0; + addObjectToList(element, org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__EXCEPTIONS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_8_0_0_1, a16_0, true); + copyLocalizationInfos(a16_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3784); + addExpectedElement(3785); + } + + // Java.g:9825:4: ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* + loop94: + do { + int alt94=2; + int LA94_0 = input.LA(1); + + if ( (LA94_0==33) ) { + alt94=1; + } + + + switch (alt94) { + case 1 : + // Java.g:9826:5: (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) + { + // Java.g:9826:5: (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) + // Java.g:9827:6: a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + { + a17=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8333); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_8_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a17, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3786); + addExpectedElement(3787); + } + + // Java.g:9842:6: (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + // Java.g:9843:7: a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8367); + a18_0=parse_org_emftext_language_java_types_NamespaceClassifierReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + if (a18_0 != null) { + if (a18_0 != null) { + Object value = a18_0; + addObjectToList(element, org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__EXCEPTIONS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_8_0_0_2_0_0_1, a18_0, true); + copyLocalizationInfos(a18_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3788); + addExpectedElement(3789); + } + + } + + + } + break; + + default : + break loop94; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3790); + addExpectedElement(3791); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3792); + } + + a19=(Token)match(input,66,FOLLOW_66_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8441); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_9, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a19, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3793); + addExpectedElement(3794); + addExpectedElement(3795); + addExpectedElement(3796); + addExpectedElement(3797); + addExpectedElement(3798); + addExpectedElement(3799); + addExpectedElement(3800); + addExpectedElement(3801); + addExpectedElement(3802); + addExpectedElement(3803); + addExpectedElement(3804); + addExpectedElement(3805); + addExpectedElement(3806); + addExpectedElement(3807); + addExpectedElement(3808); + addExpectedElement(3809); + addExpectedElement(3810); + addExpectedElement(3811); + addExpectedElement(3812); + addExpectedElement(3813); + addExpectedElement(3814); + addExpectedElement(3815); + addExpectedElement(3816); + addExpectedElement(3817); + addExpectedElement(3818); + addExpectedElement(3819); + addExpectedElement(3820); + addExpectedElement(3821); + addExpectedElement(3822); + addExpectedElement(3823); + addExpectedElement(3824); + addExpectedElement(3825); + addExpectedElement(3826); + addExpectedElement(3827); + addExpectedElement(3828); + addExpectedElement(3829); + addExpectedElement(3830); + addExpectedElement(3831); + addExpectedElement(3832); + addExpectedElement(3833); + addExpectedElement(3834); + addExpectedElement(3835); + } + + // Java.g:9940:2: (a20_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:9941:3: a20_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8459); + a20_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + if (a20_0 != null) { + if (a20_0 != null) { + Object value = a20_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.annotations.AnnotationsPackage.ANNOTATION_ATTRIBUTE__DEFAULT_VALUE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_10, a20_0, true); + copyLocalizationInfos(a20_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3836); + } + + a21=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8477); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_22_0_0_11, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a21, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3837); + addExpectedElement(3838); + addExpectedElement(3839); + addExpectedElement(3840); + addExpectedElement(3841); + addExpectedElement(3842); + addExpectedElement(3843); + addExpectedElement(3844); + addExpectedElement(3845); + addExpectedElement(3846); + addExpectedElement(3847); + addExpectedElement(3848); + addExpectedElement(3849); + addExpectedElement(3850); + addExpectedElement(3851); + addExpectedElement(3852); + addExpectedElement(3853); + addExpectedElement(3854); + addExpectedElement(3855); + addExpectedElement(3856); + addExpectedElement(3857); + addExpectedElement(3858); + addExpectedElement(3859); + addExpectedElement(3860); + addExpectedElement(3861); + addExpectedElement(3862); + addExpectedElement(3863); + addExpectedElement(3864); + addExpectedElement(3865); + addExpectedElement(3866); + addExpectedElement(3867); + addExpectedElement(3868); + addExpectedElement(3869); + addExpectedElement(3870); + addExpectedElement(3871); + addExpectedElement(3872); + addExpectedElement(3873); + addExpectedElement(3874); + addExpectedElement(3875); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 24, parse_org_emftext_language_java_annotations_AnnotationAttribute_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_annotations_AnnotationAttribute" + + + + // $ANTLR start "parse_org_emftext_language_java_parameters_OrdinaryParameter" + // Java.g:10020:1: parse_org_emftext_language_java_parameters_OrdinaryParameter returns [org.emftext.language.java.parameters.OrdinaryParameter element = null] : ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? (a8= IDENTIFIER ) ( (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ; + public final org.emftext.language.java.parameters.OrdinaryParameter parse_org_emftext_language_java_parameters_OrdinaryParameter() throws RecognitionException { + org.emftext.language.java.parameters.OrdinaryParameter element = null; + + int parse_org_emftext_language_java_parameters_OrdinaryParameter_StartIndex = input.index(); + + Token a3=null; + Token a5=null; + Token a7=null; + Token a8=null; + org.emftext.language.java.modifiers.AnnotationInstanceOrModifier a0_0 =null; + + org.emftext.language.java.types.TypeReference a1_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a2_0 =null; + + org.emftext.language.java.generics.TypeArgument a4_0 =null; + + org.emftext.language.java.generics.TypeArgument a6_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a9_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 25) ) { return element; } + + // Java.g:10023:2: ( ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? (a8= IDENTIFIER ) ( (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) + // Java.g:10024:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? (a8= IDENTIFIER ) ( (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + { + // Java.g:10024:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* + loop96: + do { + int alt96=2; + int LA96_0 = input.LA(1); + + if ( (LA96_0==48||LA96_0==56||LA96_0==72||LA96_0==83||(LA96_0 >= 87 && LA96_0 <= 89)||(LA96_0 >= 92 && LA96_0 <= 93)||LA96_0==96||LA96_0==100||LA96_0==103) ) { + alt96=1; + } + + + switch (alt96) { + case 1 : + // Java.g:10025:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + { + // Java.g:10025:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + // Java.g:10026:4: a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8515); + a0_0=parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createOrdinaryParameter(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__ANNOTATIONS_AND_MODIFIERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_23_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop96; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3876); + addExpectedElement(3877); + addExpectedElement(3878); + addExpectedElement(3879); + addExpectedElement(3880); + addExpectedElement(3881); + addExpectedElement(3882); + addExpectedElement(3883); + addExpectedElement(3884); + addExpectedElement(3885); + addExpectedElement(3886); + addExpectedElement(3887); + addExpectedElement(3888); + addExpectedElement(3889); + addExpectedElement(3890); + addExpectedElement(3891); + addExpectedElement(3892); + addExpectedElement(3893); + addExpectedElement(3894); + addExpectedElement(3895); + addExpectedElement(3896); + addExpectedElement(3897); + addExpectedElement(3898); + } + + // Java.g:10074:2: (a1_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:10075:3: a1_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8545); + a1_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createOrdinaryParameter(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__TYPE_REFERENCE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_23_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3899); + addExpectedElement(3900); + addExpectedElement(3901); + } + + // Java.g:10102:2: ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop97: + do { + int alt97=2; + int LA97_0 = input.LA(1); + + if ( (LA97_0==49) ) { + alt97=1; + } + + + switch (alt97) { + case 1 : + // Java.g:10103:3: (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:10103:3: (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:10104:4: a2_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8572); + a2_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createOrdinaryParameter(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__ARRAY_DIMENSIONS_BEFORE, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_23_0_0_2, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + } + break; + + default : + break loop97; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3902); + addExpectedElement(3903); + addExpectedElement(3904); + } + + // Java.g:10132:2: ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? + int alt99=2; + int LA99_0 = input.LA(1); + + if ( (LA99_0==43) ) { + alt99=1; + } + switch (alt99) { + case 1 : + // Java.g:10133:3: (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) + { + // Java.g:10133:3: (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) + // Java.g:10134:4: a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' + { + a3=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8607); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createOrdinaryParameter(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_23_0_0_3_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3905); + addExpectedElement(3906); + addExpectedElement(3907); + addExpectedElement(3908); + addExpectedElement(3909); + addExpectedElement(3910); + addExpectedElement(3911); + addExpectedElement(3912); + addExpectedElement(3913); + addExpectedElement(3914); + addExpectedElement(3915); + addExpectedElement(3916); + addExpectedElement(3917); + addExpectedElement(3918); + } + + // Java.g:10161:4: (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:10162:5: a4_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8633); + a4_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createOrdinaryParameter(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_23_0_0_3_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3919); + addExpectedElement(3920); + } + + // Java.g:10188:4: ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* + loop98: + do { + int alt98=2; + int LA98_0 = input.LA(1); + + if ( (LA98_0==33) ) { + alt98=1; + } + + + switch (alt98) { + case 1 : + // Java.g:10189:5: (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + { + // Java.g:10189:5: (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + // Java.g:10190:6: a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) + { + a5=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8674); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createOrdinaryParameter(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_23_0_0_3_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3921); + addExpectedElement(3922); + addExpectedElement(3923); + addExpectedElement(3924); + addExpectedElement(3925); + addExpectedElement(3926); + addExpectedElement(3927); + addExpectedElement(3928); + addExpectedElement(3929); + addExpectedElement(3930); + addExpectedElement(3931); + addExpectedElement(3932); + addExpectedElement(3933); + addExpectedElement(3934); + } + + // Java.g:10217:6: (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:10218:7: a6_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8708); + a6_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createOrdinaryParameter(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + addObjectToList(element, org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_23_0_0_3_0_0_2_0_0_1, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3935); + addExpectedElement(3936); + } + + } + + + } + break; + + default : + break loop98; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3937); + addExpectedElement(3938); + } + + a7=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8769); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createOrdinaryParameter(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_23_0_0_3_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a7, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3939); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3940); + } + + // Java.g:10273:2: (a8= IDENTIFIER ) + // Java.g:10274:3: a8= IDENTIFIER + { + a8=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8806); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createOrdinaryParameter(); + startIncompleteElement(element); + } + if (a8 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a8.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a8).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a8).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a8).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a8).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_23_0_0_4, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a8, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3941); + addExpectedElement(3942); + addExpectedElement(3943); + addExpectedElement(3944); + addExpectedElement(3945); + addExpectedElement(3946); + addExpectedElement(3947); + addExpectedElement(3948); + addExpectedElement(3949); + addExpectedElement(3950); + addExpectedElement(3951); + } + + // Java.g:10319:2: ( (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop100: + do { + int alt100=2; + int LA100_0 = input.LA(1); + + if ( (LA100_0==49) ) { + alt100=1; + } + + + switch (alt100) { + case 1 : + // Java.g:10320:3: (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:10320:3: (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:10321:4: a9_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8836); + a9_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createOrdinaryParameter(); + startIncompleteElement(element); + } + if (a9_0 != null) { + if (a9_0 != null) { + Object value = a9_0; + addObjectToList(element, org.emftext.language.java.parameters.ParametersPackage.ORDINARY_PARAMETER__ARRAY_DIMENSIONS_AFTER, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_23_0_0_5, a9_0, true); + copyLocalizationInfos(a9_0, element); + } + } + + } + + + } + break; + + default : + break loop100; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3952); + addExpectedElement(3953); + addExpectedElement(3954); + addExpectedElement(3955); + addExpectedElement(3956); + addExpectedElement(3957); + addExpectedElement(3958); + addExpectedElement(3959); + addExpectedElement(3960); + addExpectedElement(3961); + addExpectedElement(3962); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 25, parse_org_emftext_language_java_parameters_OrdinaryParameter_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_parameters_OrdinaryParameter" + + + + // $ANTLR start "parse_org_emftext_language_java_parameters_VariableLengthParameter" + // Java.g:10359:1: parse_org_emftext_language_java_parameters_VariableLengthParameter returns [org.emftext.language.java.parameters.VariableLengthParameter element = null] : ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? a8= '...' (a9= IDENTIFIER ) ; + public final org.emftext.language.java.parameters.VariableLengthParameter parse_org_emftext_language_java_parameters_VariableLengthParameter() throws RecognitionException { + org.emftext.language.java.parameters.VariableLengthParameter element = null; + + int parse_org_emftext_language_java_parameters_VariableLengthParameter_StartIndex = input.index(); + + Token a3=null; + Token a5=null; + Token a7=null; + Token a8=null; + Token a9=null; + org.emftext.language.java.modifiers.AnnotationInstanceOrModifier a0_0 =null; + + org.emftext.language.java.types.TypeReference a1_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a2_0 =null; + + org.emftext.language.java.generics.TypeArgument a4_0 =null; + + org.emftext.language.java.generics.TypeArgument a6_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 26) ) { return element; } + + // Java.g:10362:2: ( ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? a8= '...' (a9= IDENTIFIER ) ) + // Java.g:10363:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? a8= '...' (a9= IDENTIFIER ) + { + // Java.g:10363:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* + loop101: + do { + int alt101=2; + int LA101_0 = input.LA(1); + + if ( (LA101_0==48||LA101_0==56||LA101_0==72||LA101_0==83||(LA101_0 >= 87 && LA101_0 <= 89)||(LA101_0 >= 92 && LA101_0 <= 93)||LA101_0==96||LA101_0==100||LA101_0==103) ) { + alt101=1; + } + + + switch (alt101) { + case 1 : + // Java.g:10364:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + { + // Java.g:10364:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + // Java.g:10365:4: a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_parameters_VariableLengthParameter8886); + a0_0=parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createVariableLengthParameter(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.parameters.ParametersPackage.VARIABLE_LENGTH_PARAMETER__ANNOTATIONS_AND_MODIFIERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_24_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop101; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3963); + addExpectedElement(3964); + addExpectedElement(3965); + addExpectedElement(3966); + addExpectedElement(3967); + addExpectedElement(3968); + addExpectedElement(3969); + addExpectedElement(3970); + addExpectedElement(3971); + addExpectedElement(3972); + addExpectedElement(3973); + addExpectedElement(3974); + addExpectedElement(3975); + addExpectedElement(3976); + addExpectedElement(3977); + addExpectedElement(3978); + addExpectedElement(3979); + addExpectedElement(3980); + addExpectedElement(3981); + addExpectedElement(3982); + addExpectedElement(3983); + addExpectedElement(3984); + addExpectedElement(3985); + } + + // Java.g:10413:2: (a1_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:10414:3: a1_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_parameters_VariableLengthParameter8916); + a1_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createVariableLengthParameter(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.VARIABLE_LENGTH_PARAMETER__TYPE_REFERENCE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_24_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3986); + addExpectedElement(3987); + addExpectedElement(3988); + } + + // Java.g:10441:2: ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop102: + do { + int alt102=2; + int LA102_0 = input.LA(1); + + if ( (LA102_0==49) ) { + alt102=1; + } + + + switch (alt102) { + case 1 : + // Java.g:10442:3: (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:10442:3: (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:10443:4: a2_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_parameters_VariableLengthParameter8943); + a2_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createVariableLengthParameter(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.parameters.ParametersPackage.VARIABLE_LENGTH_PARAMETER__ARRAY_DIMENSIONS_BEFORE, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_24_0_0_2, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + } + break; + + default : + break loop102; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3989); + addExpectedElement(3990); + addExpectedElement(3991); + } + + // Java.g:10471:2: ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? + int alt104=2; + int LA104_0 = input.LA(1); + + if ( (LA104_0==43) ) { + alt104=1; + } + switch (alt104) { + case 1 : + // Java.g:10472:3: (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) + { + // Java.g:10472:3: (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) + // Java.g:10473:4: a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' + { + a3=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_parameters_VariableLengthParameter8978); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createVariableLengthParameter(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_24_0_0_3_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(3992); + addExpectedElement(3993); + addExpectedElement(3994); + addExpectedElement(3995); + addExpectedElement(3996); + addExpectedElement(3997); + addExpectedElement(3998); + addExpectedElement(3999); + addExpectedElement(4000); + addExpectedElement(4001); + addExpectedElement(4002); + addExpectedElement(4003); + addExpectedElement(4004); + addExpectedElement(4005); + } + + // Java.g:10500:4: (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:10501:5: a4_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_parameters_VariableLengthParameter9004); + a4_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createVariableLengthParameter(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.parameters.ParametersPackage.VARIABLE_LENGTH_PARAMETER__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_24_0_0_3_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4006); + addExpectedElement(4007); + } + + // Java.g:10527:4: ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* + loop103: + do { + int alt103=2; + int LA103_0 = input.LA(1); + + if ( (LA103_0==33) ) { + alt103=1; + } + + + switch (alt103) { + case 1 : + // Java.g:10528:5: (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + { + // Java.g:10528:5: (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + // Java.g:10529:6: a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) + { + a5=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_parameters_VariableLengthParameter9045); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createVariableLengthParameter(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_24_0_0_3_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4008); + addExpectedElement(4009); + addExpectedElement(4010); + addExpectedElement(4011); + addExpectedElement(4012); + addExpectedElement(4013); + addExpectedElement(4014); + addExpectedElement(4015); + addExpectedElement(4016); + addExpectedElement(4017); + addExpectedElement(4018); + addExpectedElement(4019); + addExpectedElement(4020); + addExpectedElement(4021); + } + + // Java.g:10556:6: (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:10557:7: a6_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_parameters_VariableLengthParameter9079); + a6_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createVariableLengthParameter(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + addObjectToList(element, org.emftext.language.java.parameters.ParametersPackage.VARIABLE_LENGTH_PARAMETER__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_24_0_0_3_0_0_2_0_0_1, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4022); + addExpectedElement(4023); + } + + } + + + } + break; + + default : + break loop103; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4024); + addExpectedElement(4025); + } + + a7=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_parameters_VariableLengthParameter9140); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createVariableLengthParameter(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_24_0_0_3_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a7, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4026); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4027); + } + + a8=(Token)match(input,38,FOLLOW_38_in_parse_org_emftext_language_java_parameters_VariableLengthParameter9173); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createVariableLengthParameter(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_24_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a8, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4028); + } + + // Java.g:10626:2: (a9= IDENTIFIER ) + // Java.g:10627:3: a9= IDENTIFIER + { + a9=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_parameters_VariableLengthParameter9191); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.parameters.ParametersFactory.eINSTANCE.createVariableLengthParameter(); + startIncompleteElement(element); + } + if (a9 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a9.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.VARIABLE_LENGTH_PARAMETER__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a9).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a9).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a9).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a9).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.parameters.ParametersPackage.VARIABLE_LENGTH_PARAMETER__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_24_0_0_5, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a9, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4029); + addExpectedElement(4030); + addExpectedElement(4031); + addExpectedElement(4032); + addExpectedElement(4033); + addExpectedElement(4034); + addExpectedElement(4035); + addExpectedElement(4036); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 26, parse_org_emftext_language_java_parameters_VariableLengthParameter_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_parameters_VariableLengthParameter" + + + + // $ANTLR start "parse_org_emftext_language_java_variables_LocalVariable" + // Java.g:10671:1: parse_org_emftext_language_java_variables_LocalVariable returns [org.emftext.language.java.variables.LocalVariable element = null] : ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? (a8= IDENTIFIER ) ( (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a10= '=' (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? ( (a12= ',' (a13_0= parse_org_emftext_language_java_variables_AdditionalLocalVariable ) ) )* ; + public final org.emftext.language.java.variables.LocalVariable parse_org_emftext_language_java_variables_LocalVariable() throws RecognitionException { + org.emftext.language.java.variables.LocalVariable element = null; + + int parse_org_emftext_language_java_variables_LocalVariable_StartIndex = input.index(); + + Token a3=null; + Token a5=null; + Token a7=null; + Token a8=null; + Token a10=null; + Token a12=null; + org.emftext.language.java.modifiers.AnnotationInstanceOrModifier a0_0 =null; + + org.emftext.language.java.types.TypeReference a1_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a2_0 =null; + + org.emftext.language.java.generics.TypeArgument a4_0 =null; + + org.emftext.language.java.generics.TypeArgument a6_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a9_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a11_0 =null; + + org.emftext.language.java.variables.AdditionalLocalVariable a13_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 27) ) { return element; } + + // Java.g:10674:2: ( ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? (a8= IDENTIFIER ) ( (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a10= '=' (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? ( (a12= ',' (a13_0= parse_org_emftext_language_java_variables_AdditionalLocalVariable ) ) )* ) + // Java.g:10675:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? (a8= IDENTIFIER ) ( (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a10= '=' (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? ( (a12= ',' (a13_0= parse_org_emftext_language_java_variables_AdditionalLocalVariable ) ) )* + { + // Java.g:10675:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* + loop105: + do { + int alt105=2; + int LA105_0 = input.LA(1); + + if ( (LA105_0==48||LA105_0==56||LA105_0==72||LA105_0==83||(LA105_0 >= 87 && LA105_0 <= 89)||(LA105_0 >= 92 && LA105_0 <= 93)||LA105_0==96||LA105_0==100||LA105_0==103) ) { + alt105=1; + } + + + switch (alt105) { + case 1 : + // Java.g:10676:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + { + // Java.g:10676:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + // Java.g:10677:4: a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_variables_LocalVariable9236); + a0_0=parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createLocalVariable(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__ANNOTATIONS_AND_MODIFIERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_25_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop105; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4037); + addExpectedElement(4038); + addExpectedElement(4039); + addExpectedElement(4040); + addExpectedElement(4041); + addExpectedElement(4042); + addExpectedElement(4043); + addExpectedElement(4044); + addExpectedElement(4045); + addExpectedElement(4046); + addExpectedElement(4047); + addExpectedElement(4048); + addExpectedElement(4049); + addExpectedElement(4050); + addExpectedElement(4051); + addExpectedElement(4052); + addExpectedElement(4053); + addExpectedElement(4054); + addExpectedElement(4055); + addExpectedElement(4056); + addExpectedElement(4057); + addExpectedElement(4058); + addExpectedElement(4059); + } + + // Java.g:10725:2: (a1_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:10726:3: a1_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_variables_LocalVariable9266); + a1_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createLocalVariable(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__TYPE_REFERENCE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_25_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4060); + addExpectedElement(4061); + addExpectedElement(4062); + } + + // Java.g:10753:2: ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop106: + do { + int alt106=2; + int LA106_0 = input.LA(1); + + if ( (LA106_0==49) ) { + alt106=1; + } + + + switch (alt106) { + case 1 : + // Java.g:10754:3: (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:10754:3: (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:10755:4: a2_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_variables_LocalVariable9293); + a2_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createLocalVariable(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__ARRAY_DIMENSIONS_BEFORE, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_25_0_0_2, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + } + break; + + default : + break loop106; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4063); + addExpectedElement(4064); + addExpectedElement(4065); + } + + // Java.g:10783:2: ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? + int alt108=2; + int LA108_0 = input.LA(1); + + if ( (LA108_0==43) ) { + alt108=1; + } + switch (alt108) { + case 1 : + // Java.g:10784:3: (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) + { + // Java.g:10784:3: (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) + // Java.g:10785:4: a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' + { + a3=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_variables_LocalVariable9328); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createLocalVariable(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_25_0_0_3_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4066); + addExpectedElement(4067); + addExpectedElement(4068); + addExpectedElement(4069); + addExpectedElement(4070); + addExpectedElement(4071); + addExpectedElement(4072); + addExpectedElement(4073); + addExpectedElement(4074); + addExpectedElement(4075); + addExpectedElement(4076); + addExpectedElement(4077); + addExpectedElement(4078); + addExpectedElement(4079); + } + + // Java.g:10812:4: (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:10813:5: a4_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_variables_LocalVariable9354); + a4_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createLocalVariable(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_25_0_0_3_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4080); + addExpectedElement(4081); + } + + // Java.g:10839:4: ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* + loop107: + do { + int alt107=2; + int LA107_0 = input.LA(1); + + if ( (LA107_0==33) ) { + alt107=1; + } + + + switch (alt107) { + case 1 : + // Java.g:10840:5: (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + { + // Java.g:10840:5: (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + // Java.g:10841:6: a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) + { + a5=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_variables_LocalVariable9395); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createLocalVariable(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_25_0_0_3_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4082); + addExpectedElement(4083); + addExpectedElement(4084); + addExpectedElement(4085); + addExpectedElement(4086); + addExpectedElement(4087); + addExpectedElement(4088); + addExpectedElement(4089); + addExpectedElement(4090); + addExpectedElement(4091); + addExpectedElement(4092); + addExpectedElement(4093); + addExpectedElement(4094); + addExpectedElement(4095); + } + + // Java.g:10868:6: (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:10869:7: a6_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_variables_LocalVariable9429); + a6_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createLocalVariable(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + addObjectToList(element, org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_25_0_0_3_0_0_2_0_0_1, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4096); + addExpectedElement(4097); + } + + } + + + } + break; + + default : + break loop107; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4098); + addExpectedElement(4099); + } + + a7=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_variables_LocalVariable9490); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createLocalVariable(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_25_0_0_3_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a7, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4100); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4101); + } + + // Java.g:10924:2: (a8= IDENTIFIER ) + // Java.g:10925:3: a8= IDENTIFIER + { + a8=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_variables_LocalVariable9527); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createLocalVariable(); + startIncompleteElement(element); + } + if (a8 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a8.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a8).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a8).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a8).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a8).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_25_0_0_4, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a8, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4102); + addExpectedElement(4103); + addExpectedElement(4104); + addExpectedElement(4105); + addExpectedElement(4106); + } + + // Java.g:10964:2: ( (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop109: + do { + int alt109=2; + int LA109_0 = input.LA(1); + + if ( (LA109_0==49) ) { + alt109=1; + } + + + switch (alt109) { + case 1 : + // Java.g:10965:3: (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:10965:3: (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:10966:4: a9_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_variables_LocalVariable9557); + a9_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createLocalVariable(); + startIncompleteElement(element); + } + if (a9_0 != null) { + if (a9_0 != null) { + Object value = a9_0; + addObjectToList(element, org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__ARRAY_DIMENSIONS_AFTER, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_25_0_0_5, a9_0, true); + copyLocalizationInfos(a9_0, element); + } + } + + } + + + } + break; + + default : + break loop109; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4107); + addExpectedElement(4108); + addExpectedElement(4109); + addExpectedElement(4110); + addExpectedElement(4111); + } + + // Java.g:10996:2: ( (a10= '=' (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? + int alt110=2; + int LA110_0 = input.LA(1); + + if ( (LA110_0==44) ) { + alt110=1; + } + switch (alt110) { + case 1 : + // Java.g:10997:3: (a10= '=' (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + { + // Java.g:10997:3: (a10= '=' (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + // Java.g:10998:4: a10= '=' (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + a10=(Token)match(input,44,FOLLOW_44_in_parse_org_emftext_language_java_variables_LocalVariable9592); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createLocalVariable(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_25_0_0_6_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a10, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4112); + addExpectedElement(4113); + addExpectedElement(4114); + addExpectedElement(4115); + addExpectedElement(4116); + addExpectedElement(4117); + addExpectedElement(4118); + addExpectedElement(4119); + addExpectedElement(4120); + addExpectedElement(4121); + addExpectedElement(4122); + addExpectedElement(4123); + addExpectedElement(4124); + addExpectedElement(4125); + addExpectedElement(4126); + addExpectedElement(4127); + addExpectedElement(4128); + addExpectedElement(4129); + addExpectedElement(4130); + addExpectedElement(4131); + addExpectedElement(4132); + addExpectedElement(4133); + addExpectedElement(4134); + addExpectedElement(4135); + addExpectedElement(4136); + addExpectedElement(4137); + addExpectedElement(4138); + addExpectedElement(4139); + addExpectedElement(4140); + addExpectedElement(4141); + addExpectedElement(4142); + addExpectedElement(4143); + addExpectedElement(4144); + addExpectedElement(4145); + addExpectedElement(4146); + addExpectedElement(4147); + addExpectedElement(4148); + addExpectedElement(4149); + addExpectedElement(4150); + addExpectedElement(4151); + addExpectedElement(4152); + addExpectedElement(4153); + addExpectedElement(4154); + } + + // Java.g:11054:4: (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:11055:5: a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_variables_LocalVariable9618); + a11_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createLocalVariable(); + startIncompleteElement(element); + } + if (a11_0 != null) { + if (a11_0 != null) { + Object value = a11_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__INITIAL_VALUE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_25_0_0_6_0_0_3, a11_0, true); + copyLocalizationInfos(a11_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4155); + addExpectedElement(4156); + addExpectedElement(4157); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4158); + addExpectedElement(4159); + addExpectedElement(4160); + } + + // Java.g:11091:2: ( (a12= ',' (a13_0= parse_org_emftext_language_java_variables_AdditionalLocalVariable ) ) )* + loop111: + do { + int alt111=2; + int LA111_0 = input.LA(1); + + if ( (LA111_0==33) ) { + alt111=1; + } + + + switch (alt111) { + case 1 : + // Java.g:11092:3: (a12= ',' (a13_0= parse_org_emftext_language_java_variables_AdditionalLocalVariable ) ) + { + // Java.g:11092:3: (a12= ',' (a13_0= parse_org_emftext_language_java_variables_AdditionalLocalVariable ) ) + // Java.g:11093:4: a12= ',' (a13_0= parse_org_emftext_language_java_variables_AdditionalLocalVariable ) + { + a12=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_variables_LocalVariable9668); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createLocalVariable(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_25_0_0_7_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a12, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4161); + } + + // Java.g:11107:4: (a13_0= parse_org_emftext_language_java_variables_AdditionalLocalVariable ) + // Java.g:11108:5: a13_0= parse_org_emftext_language_java_variables_AdditionalLocalVariable + { + pushFollow(FOLLOW_parse_org_emftext_language_java_variables_AdditionalLocalVariable_in_parse_org_emftext_language_java_variables_LocalVariable9694); + a13_0=parse_org_emftext_language_java_variables_AdditionalLocalVariable(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createLocalVariable(); + startIncompleteElement(element); + } + if (a13_0 != null) { + if (a13_0 != null) { + Object value = a13_0; + addObjectToList(element, org.emftext.language.java.variables.VariablesPackage.LOCAL_VARIABLE__ADDITIONAL_LOCAL_VARIABLES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_25_0_0_7_0_0_1, a13_0, true); + copyLocalizationInfos(a13_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4162); + addExpectedElement(4163); + addExpectedElement(4164); + } + + } + + + } + break; + + default : + break loop111; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4165); + addExpectedElement(4166); + addExpectedElement(4167); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 27, parse_org_emftext_language_java_variables_LocalVariable_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_variables_LocalVariable" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_LocalVariableStatement" + // Java.g:11146:1: parse_org_emftext_language_java_statements_LocalVariableStatement returns [org.emftext.language.java.statements.LocalVariableStatement element = null] : (a0_0= parse_org_emftext_language_java_variables_LocalVariable ) a1= ';' ; + public final org.emftext.language.java.statements.LocalVariableStatement parse_org_emftext_language_java_statements_LocalVariableStatement() throws RecognitionException { + org.emftext.language.java.statements.LocalVariableStatement element = null; + + int parse_org_emftext_language_java_statements_LocalVariableStatement_StartIndex = input.index(); + + Token a1=null; + org.emftext.language.java.variables.LocalVariable a0_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 28) ) { return element; } + + // Java.g:11149:2: ( (a0_0= parse_org_emftext_language_java_variables_LocalVariable ) a1= ';' ) + // Java.g:11150:2: (a0_0= parse_org_emftext_language_java_variables_LocalVariable ) a1= ';' + { + // Java.g:11150:2: (a0_0= parse_org_emftext_language_java_variables_LocalVariable ) + // Java.g:11151:3: a0_0= parse_org_emftext_language_java_variables_LocalVariable + { + pushFollow(FOLLOW_parse_org_emftext_language_java_variables_LocalVariable_in_parse_org_emftext_language_java_statements_LocalVariableStatement9754); + a0_0=parse_org_emftext_language_java_variables_LocalVariable(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createLocalVariableStatement(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.LOCAL_VARIABLE_STATEMENT__VARIABLE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_26_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4168); + } + + a1=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_statements_LocalVariableStatement9772); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createLocalVariableStatement(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_26_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4169); + addExpectedElement(4170); + addExpectedElement(4171); + addExpectedElement(4172); + addExpectedElement(4173); + addExpectedElement(4174); + addExpectedElement(4175); + addExpectedElement(4176); + addExpectedElement(4177); + addExpectedElement(4178); + addExpectedElement(4179); + addExpectedElement(4180); + addExpectedElement(4181); + addExpectedElement(4182); + addExpectedElement(4183); + addExpectedElement(4184); + addExpectedElement(4185); + addExpectedElement(4186); + addExpectedElement(4187); + addExpectedElement(4188); + addExpectedElement(4189); + addExpectedElement(4190); + addExpectedElement(4191); + addExpectedElement(4192); + addExpectedElement(4193); + addExpectedElement(4194); + addExpectedElement(4195); + addExpectedElement(4196); + addExpectedElement(4197); + addExpectedElement(4198); + addExpectedElement(4199); + addExpectedElement(4200); + addExpectedElement(4201); + addExpectedElement(4202); + addExpectedElement(4203); + addExpectedElement(4204); + addExpectedElement(4205); + addExpectedElement(4206); + addExpectedElement(4207); + addExpectedElement(4208); + addExpectedElement(4209); + addExpectedElement(4210); + addExpectedElement(4211); + addExpectedElement(4212); + addExpectedElement(4213); + addExpectedElement(4214); + addExpectedElement(4215); + addExpectedElement(4216); + addExpectedElement(4217); + addExpectedElement(4218); + addExpectedElement(4219); + addExpectedElement(4220); + addExpectedElement(4221); + addExpectedElement(4222); + addExpectedElement(4223); + addExpectedElement(4224); + addExpectedElement(4225); + addExpectedElement(4226); + addExpectedElement(4227); + addExpectedElement(4228); + addExpectedElement(4229); + addExpectedElement(4230); + addExpectedElement(4231); + addExpectedElement(4232); + addExpectedElement(4233); + addExpectedElement(4234); + addExpectedElement(4235); + addExpectedElement(4236); + addExpectedElement(4237); + addExpectedElement(4238); + addExpectedElement(4239); + addExpectedElement(4240); + addExpectedElement(4241); + addExpectedElement(4242); + addExpectedElement(4243); + addExpectedElement(4244); + addExpectedElement(4245); + addExpectedElement(4246); + addExpectedElement(4247); + addExpectedElement(4248); + addExpectedElement(4249); + addExpectedElement(4250); + addExpectedElement(4251); + addExpectedElement(4252); + addExpectedElement(4253); + addExpectedElement(4254); + addExpectedElement(4255); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 28, parse_org_emftext_language_java_statements_LocalVariableStatement_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_LocalVariableStatement" + + + + // $ANTLR start "parse_org_emftext_language_java_variables_AdditionalLocalVariable" + // Java.g:11278:1: parse_org_emftext_language_java_variables_AdditionalLocalVariable returns [org.emftext.language.java.variables.AdditionalLocalVariable element = null] : (a0= IDENTIFIER ) ( (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a2= '=' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? ; + public final org.emftext.language.java.variables.AdditionalLocalVariable parse_org_emftext_language_java_variables_AdditionalLocalVariable() throws RecognitionException { + org.emftext.language.java.variables.AdditionalLocalVariable element = null; + + int parse_org_emftext_language_java_variables_AdditionalLocalVariable_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + org.emftext.language.java.arrays.ArrayDimension a1_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a3_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 29) ) { return element; } + + // Java.g:11281:2: ( (a0= IDENTIFIER ) ( (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a2= '=' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? ) + // Java.g:11282:2: (a0= IDENTIFIER ) ( (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a2= '=' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? + { + // Java.g:11282:2: (a0= IDENTIFIER ) + // Java.g:11283:3: a0= IDENTIFIER + { + a0=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_variables_AdditionalLocalVariable9805); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createAdditionalLocalVariable(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.ADDITIONAL_LOCAL_VARIABLE__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.ADDITIONAL_LOCAL_VARIABLE__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_27_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4256); + addExpectedElement(4257); + addExpectedElement(4258); + addExpectedElement(4259); + addExpectedElement(4260); + } + + // Java.g:11322:2: ( (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop112: + do { + int alt112=2; + int LA112_0 = input.LA(1); + + if ( (LA112_0==49) ) { + alt112=1; + } + + + switch (alt112) { + case 1 : + // Java.g:11323:3: (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:11323:3: (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:11324:4: a1_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_variables_AdditionalLocalVariable9835); + a1_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createAdditionalLocalVariable(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.variables.VariablesPackage.ADDITIONAL_LOCAL_VARIABLE__ARRAY_DIMENSIONS_AFTER, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_27_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + } + break; + + default : + break loop112; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4261); + addExpectedElement(4262); + addExpectedElement(4263); + addExpectedElement(4264); + addExpectedElement(4265); + } + + // Java.g:11354:2: ( (a2= '=' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? + int alt113=2; + int LA113_0 = input.LA(1); + + if ( (LA113_0==44) ) { + alt113=1; + } + switch (alt113) { + case 1 : + // Java.g:11355:3: (a2= '=' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + { + // Java.g:11355:3: (a2= '=' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + // Java.g:11356:4: a2= '=' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + a2=(Token)match(input,44,FOLLOW_44_in_parse_org_emftext_language_java_variables_AdditionalLocalVariable9870); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createAdditionalLocalVariable(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_27_0_0_2_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4266); + addExpectedElement(4267); + addExpectedElement(4268); + addExpectedElement(4269); + addExpectedElement(4270); + addExpectedElement(4271); + addExpectedElement(4272); + addExpectedElement(4273); + addExpectedElement(4274); + addExpectedElement(4275); + addExpectedElement(4276); + addExpectedElement(4277); + addExpectedElement(4278); + addExpectedElement(4279); + addExpectedElement(4280); + addExpectedElement(4281); + addExpectedElement(4282); + addExpectedElement(4283); + addExpectedElement(4284); + addExpectedElement(4285); + addExpectedElement(4286); + addExpectedElement(4287); + addExpectedElement(4288); + addExpectedElement(4289); + addExpectedElement(4290); + addExpectedElement(4291); + addExpectedElement(4292); + addExpectedElement(4293); + addExpectedElement(4294); + addExpectedElement(4295); + addExpectedElement(4296); + addExpectedElement(4297); + addExpectedElement(4298); + addExpectedElement(4299); + addExpectedElement(4300); + addExpectedElement(4301); + addExpectedElement(4302); + addExpectedElement(4303); + addExpectedElement(4304); + addExpectedElement(4305); + addExpectedElement(4306); + addExpectedElement(4307); + addExpectedElement(4308); + } + + // Java.g:11412:4: (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:11413:5: a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_variables_AdditionalLocalVariable9896); + a3_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.variables.VariablesFactory.eINSTANCE.createAdditionalLocalVariable(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.variables.VariablesPackage.ADDITIONAL_LOCAL_VARIABLE__INITIAL_VALUE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_27_0_0_2_0_0_3, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4309); + addExpectedElement(4310); + addExpectedElement(4311); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4312); + addExpectedElement(4313); + addExpectedElement(4314); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 29, parse_org_emftext_language_java_variables_AdditionalLocalVariable_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_variables_AdditionalLocalVariable" + + + + // $ANTLR start "parse_org_emftext_language_java_members_Field" + // Java.g:11451:1: parse_org_emftext_language_java_members_Field returns [org.emftext.language.java.members.Field element = null] : ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? (a8= IDENTIFIER ) ( (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a10= '=' (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? ( (a12= ',' (a13_0= parse_org_emftext_language_java_members_AdditionalField ) ) )* a14= ';' ; + public final org.emftext.language.java.members.Field parse_org_emftext_language_java_members_Field() throws RecognitionException { + org.emftext.language.java.members.Field element = null; + + int parse_org_emftext_language_java_members_Field_StartIndex = input.index(); + + Token a3=null; + Token a5=null; + Token a7=null; + Token a8=null; + Token a10=null; + Token a12=null; + Token a14=null; + org.emftext.language.java.modifiers.AnnotationInstanceOrModifier a0_0 =null; + + org.emftext.language.java.types.TypeReference a1_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a2_0 =null; + + org.emftext.language.java.generics.TypeArgument a4_0 =null; + + org.emftext.language.java.generics.TypeArgument a6_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a9_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a11_0 =null; + + org.emftext.language.java.members.AdditionalField a13_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 30) ) { return element; } + + // Java.g:11454:2: ( ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? (a8= IDENTIFIER ) ( (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a10= '=' (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? ( (a12= ',' (a13_0= parse_org_emftext_language_java_members_AdditionalField ) ) )* a14= ';' ) + // Java.g:11455:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? (a8= IDENTIFIER ) ( (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a10= '=' (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? ( (a12= ',' (a13_0= parse_org_emftext_language_java_members_AdditionalField ) ) )* a14= ';' + { + // Java.g:11455:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* + loop114: + do { + int alt114=2; + int LA114_0 = input.LA(1); + + if ( (LA114_0==48||LA114_0==56||LA114_0==72||LA114_0==83||(LA114_0 >= 87 && LA114_0 <= 89)||(LA114_0 >= 92 && LA114_0 <= 93)||LA114_0==96||LA114_0==100||LA114_0==103) ) { + alt114=1; + } + + + switch (alt114) { + case 1 : + // Java.g:11456:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + { + // Java.g:11456:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + // Java.g:11457:4: a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_members_Field9961); + a0_0=parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.FIELD__ANNOTATIONS_AND_MODIFIERS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop114; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4315); + addExpectedElement(4316); + addExpectedElement(4317); + addExpectedElement(4318); + addExpectedElement(4319); + addExpectedElement(4320); + addExpectedElement(4321); + addExpectedElement(4322); + addExpectedElement(4323); + addExpectedElement(4324); + addExpectedElement(4325); + addExpectedElement(4326); + addExpectedElement(4327); + addExpectedElement(4328); + addExpectedElement(4329); + addExpectedElement(4330); + addExpectedElement(4331); + addExpectedElement(4332); + addExpectedElement(4333); + addExpectedElement(4334); + addExpectedElement(4335); + addExpectedElement(4336); + addExpectedElement(4337); + } + + // Java.g:11505:2: (a1_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:11506:3: a1_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_members_Field9991); + a1_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.FIELD__TYPE_REFERENCE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4338); + addExpectedElement(4339); + addExpectedElement(4340); + } + + // Java.g:11533:2: ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop115: + do { + int alt115=2; + int LA115_0 = input.LA(1); + + if ( (LA115_0==49) ) { + alt115=1; + } + + + switch (alt115) { + case 1 : + // Java.g:11534:3: (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:11534:3: (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:11535:4: a2_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_members_Field10018); + a2_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.FIELD__ARRAY_DIMENSIONS_BEFORE, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_2, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + } + break; + + default : + break loop115; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4341); + addExpectedElement(4342); + addExpectedElement(4343); + } + + // Java.g:11563:2: ( (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) )? + int alt117=2; + int LA117_0 = input.LA(1); + + if ( (LA117_0==43) ) { + alt117=1; + } + switch (alt117) { + case 1 : + // Java.g:11564:3: (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) + { + // Java.g:11564:3: (a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' ) + // Java.g:11565:4: a3= '<' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a7= '>' + { + a3=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_members_Field10053); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_3_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4344); + addExpectedElement(4345); + addExpectedElement(4346); + addExpectedElement(4347); + addExpectedElement(4348); + addExpectedElement(4349); + addExpectedElement(4350); + addExpectedElement(4351); + addExpectedElement(4352); + addExpectedElement(4353); + addExpectedElement(4354); + addExpectedElement(4355); + addExpectedElement(4356); + addExpectedElement(4357); + } + + // Java.g:11592:4: (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:11593:5: a4_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_members_Field10079); + a4_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.FIELD__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_3_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4358); + addExpectedElement(4359); + } + + // Java.g:11619:4: ( (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* + loop116: + do { + int alt116=2; + int LA116_0 = input.LA(1); + + if ( (LA116_0==33) ) { + alt116=1; + } + + + switch (alt116) { + case 1 : + // Java.g:11620:5: (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + { + // Java.g:11620:5: (a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + // Java.g:11621:6: a5= ',' (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) + { + a5=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_members_Field10120); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_3_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4360); + addExpectedElement(4361); + addExpectedElement(4362); + addExpectedElement(4363); + addExpectedElement(4364); + addExpectedElement(4365); + addExpectedElement(4366); + addExpectedElement(4367); + addExpectedElement(4368); + addExpectedElement(4369); + addExpectedElement(4370); + addExpectedElement(4371); + addExpectedElement(4372); + addExpectedElement(4373); + } + + // Java.g:11648:6: (a6_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:11649:7: a6_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_members_Field10154); + a6_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.FIELD__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_3_0_0_2_0_0_1, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4374); + addExpectedElement(4375); + } + + } + + + } + break; + + default : + break loop116; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4376); + addExpectedElement(4377); + } + + a7=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_members_Field10215); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_3_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a7, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4378); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4379); + } + + // Java.g:11704:2: (a8= IDENTIFIER ) + // Java.g:11705:3: a8= IDENTIFIER + { + a8=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_members_Field10252); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + if (a8 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a8.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.FIELD__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a8).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a8).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a8).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a8).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.FIELD__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_4, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a8, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4380); + addExpectedElement(4381); + addExpectedElement(4382); + addExpectedElement(4383); + } + + // Java.g:11743:2: ( (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop118: + do { + int alt118=2; + int LA118_0 = input.LA(1); + + if ( (LA118_0==49) ) { + alt118=1; + } + + + switch (alt118) { + case 1 : + // Java.g:11744:3: (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:11744:3: (a9_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:11745:4: a9_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_members_Field10282); + a9_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + if (a9_0 != null) { + if (a9_0 != null) { + Object value = a9_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.FIELD__ARRAY_DIMENSIONS_AFTER, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_5, a9_0, true); + copyLocalizationInfos(a9_0, element); + } + } + + } + + + } + break; + + default : + break loop118; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4384); + addExpectedElement(4385); + addExpectedElement(4386); + addExpectedElement(4387); + } + + // Java.g:11774:2: ( (a10= '=' (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? + int alt119=2; + int LA119_0 = input.LA(1); + + if ( (LA119_0==44) ) { + alt119=1; + } + switch (alt119) { + case 1 : + // Java.g:11775:3: (a10= '=' (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + { + // Java.g:11775:3: (a10= '=' (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + // Java.g:11776:4: a10= '=' (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + a10=(Token)match(input,44,FOLLOW_44_in_parse_org_emftext_language_java_members_Field10317); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_6_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a10, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4388); + addExpectedElement(4389); + addExpectedElement(4390); + addExpectedElement(4391); + addExpectedElement(4392); + addExpectedElement(4393); + addExpectedElement(4394); + addExpectedElement(4395); + addExpectedElement(4396); + addExpectedElement(4397); + addExpectedElement(4398); + addExpectedElement(4399); + addExpectedElement(4400); + addExpectedElement(4401); + addExpectedElement(4402); + addExpectedElement(4403); + addExpectedElement(4404); + addExpectedElement(4405); + addExpectedElement(4406); + addExpectedElement(4407); + addExpectedElement(4408); + addExpectedElement(4409); + addExpectedElement(4410); + addExpectedElement(4411); + addExpectedElement(4412); + addExpectedElement(4413); + addExpectedElement(4414); + addExpectedElement(4415); + addExpectedElement(4416); + addExpectedElement(4417); + addExpectedElement(4418); + addExpectedElement(4419); + addExpectedElement(4420); + addExpectedElement(4421); + addExpectedElement(4422); + addExpectedElement(4423); + addExpectedElement(4424); + addExpectedElement(4425); + addExpectedElement(4426); + addExpectedElement(4427); + addExpectedElement(4428); + addExpectedElement(4429); + addExpectedElement(4430); + } + + // Java.g:11832:4: (a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:11833:5: a11_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_members_Field10343); + a11_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + if (a11_0 != null) { + if (a11_0 != null) { + Object value = a11_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.FIELD__INITIAL_VALUE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_6_0_0_3, a11_0, true); + copyLocalizationInfos(a11_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4431); + addExpectedElement(4432); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4433); + addExpectedElement(4434); + } + + // Java.g:11867:2: ( (a12= ',' (a13_0= parse_org_emftext_language_java_members_AdditionalField ) ) )* + loop120: + do { + int alt120=2; + int LA120_0 = input.LA(1); + + if ( (LA120_0==33) ) { + alt120=1; + } + + + switch (alt120) { + case 1 : + // Java.g:11868:3: (a12= ',' (a13_0= parse_org_emftext_language_java_members_AdditionalField ) ) + { + // Java.g:11868:3: (a12= ',' (a13_0= parse_org_emftext_language_java_members_AdditionalField ) ) + // Java.g:11869:4: a12= ',' (a13_0= parse_org_emftext_language_java_members_AdditionalField ) + { + a12=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_members_Field10393); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_7_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a12, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4435); + } + + // Java.g:11883:4: (a13_0= parse_org_emftext_language_java_members_AdditionalField ) + // Java.g:11884:5: a13_0= parse_org_emftext_language_java_members_AdditionalField + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_AdditionalField_in_parse_org_emftext_language_java_members_Field10419); + a13_0=parse_org_emftext_language_java_members_AdditionalField(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + if (a13_0 != null) { + if (a13_0 != null) { + Object value = a13_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.FIELD__ADDITIONAL_FIELDS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_7_0_0_1, a13_0, true); + copyLocalizationInfos(a13_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4436); + addExpectedElement(4437); + } + + } + + + } + break; + + default : + break loop120; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4438); + addExpectedElement(4439); + } + + a14=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_members_Field10460); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createField(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_28_0_0_8, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a14, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4440); + addExpectedElement(4441); + addExpectedElement(4442); + addExpectedElement(4443); + addExpectedElement(4444); + addExpectedElement(4445); + addExpectedElement(4446); + addExpectedElement(4447); + addExpectedElement(4448); + addExpectedElement(4449); + addExpectedElement(4450); + addExpectedElement(4451); + addExpectedElement(4452); + addExpectedElement(4453); + addExpectedElement(4454); + addExpectedElement(4455); + addExpectedElement(4456); + addExpectedElement(4457); + addExpectedElement(4458); + addExpectedElement(4459); + addExpectedElement(4460); + addExpectedElement(4461); + addExpectedElement(4462); + addExpectedElement(4463); + addExpectedElement(4464); + addExpectedElement(4465); + addExpectedElement(4466); + addExpectedElement(4467); + addExpectedElement(4468); + addExpectedElement(4469); + addExpectedElement(4470); + addExpectedElement(4471); + addExpectedElement(4472); + addExpectedElement(4473); + addExpectedElement(4474); + addExpectedElement(4475); + addExpectedElement(4476); + addExpectedElement(4477); + addExpectedElement(4478); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 30, parse_org_emftext_language_java_members_Field_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_members_Field" + + + + // $ANTLR start "parse_org_emftext_language_java_members_AdditionalField" + // Java.g:11972:1: parse_org_emftext_language_java_members_AdditionalField returns [org.emftext.language.java.members.AdditionalField element = null] : (a0= IDENTIFIER ) ( (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a2= '=' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? ; + public final org.emftext.language.java.members.AdditionalField parse_org_emftext_language_java_members_AdditionalField() throws RecognitionException { + org.emftext.language.java.members.AdditionalField element = null; + + int parse_org_emftext_language_java_members_AdditionalField_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + org.emftext.language.java.arrays.ArrayDimension a1_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a3_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 31) ) { return element; } + + // Java.g:11975:2: ( (a0= IDENTIFIER ) ( (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a2= '=' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? ) + // Java.g:11976:2: (a0= IDENTIFIER ) ( (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a2= '=' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? + { + // Java.g:11976:2: (a0= IDENTIFIER ) + // Java.g:11977:3: a0= IDENTIFIER + { + a0=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_members_AdditionalField10493); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createAdditionalField(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.ADDITIONAL_FIELD__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.ADDITIONAL_FIELD__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_29_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4479); + addExpectedElement(4480); + addExpectedElement(4481); + addExpectedElement(4482); + } + + // Java.g:12015:2: ( (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop121: + do { + int alt121=2; + int LA121_0 = input.LA(1); + + if ( (LA121_0==49) ) { + alt121=1; + } + + + switch (alt121) { + case 1 : + // Java.g:12016:3: (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:12016:3: (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:12017:4: a1_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_members_AdditionalField10523); + a1_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createAdditionalField(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.members.MembersPackage.ADDITIONAL_FIELD__ARRAY_DIMENSIONS_AFTER, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_29_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + } + break; + + default : + break loop121; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4483); + addExpectedElement(4484); + addExpectedElement(4485); + addExpectedElement(4486); + } + + // Java.g:12046:2: ( (a2= '=' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? + int alt122=2; + int LA122_0 = input.LA(1); + + if ( (LA122_0==44) ) { + alt122=1; + } + switch (alt122) { + case 1 : + // Java.g:12047:3: (a2= '=' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + { + // Java.g:12047:3: (a2= '=' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + // Java.g:12048:4: a2= '=' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + a2=(Token)match(input,44,FOLLOW_44_in_parse_org_emftext_language_java_members_AdditionalField10558); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createAdditionalField(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_29_0_0_2_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4487); + addExpectedElement(4488); + addExpectedElement(4489); + addExpectedElement(4490); + addExpectedElement(4491); + addExpectedElement(4492); + addExpectedElement(4493); + addExpectedElement(4494); + addExpectedElement(4495); + addExpectedElement(4496); + addExpectedElement(4497); + addExpectedElement(4498); + addExpectedElement(4499); + addExpectedElement(4500); + addExpectedElement(4501); + addExpectedElement(4502); + addExpectedElement(4503); + addExpectedElement(4504); + addExpectedElement(4505); + addExpectedElement(4506); + addExpectedElement(4507); + addExpectedElement(4508); + addExpectedElement(4509); + addExpectedElement(4510); + addExpectedElement(4511); + addExpectedElement(4512); + addExpectedElement(4513); + addExpectedElement(4514); + addExpectedElement(4515); + addExpectedElement(4516); + addExpectedElement(4517); + addExpectedElement(4518); + addExpectedElement(4519); + addExpectedElement(4520); + addExpectedElement(4521); + addExpectedElement(4522); + addExpectedElement(4523); + addExpectedElement(4524); + addExpectedElement(4525); + addExpectedElement(4526); + addExpectedElement(4527); + addExpectedElement(4528); + addExpectedElement(4529); + } + + // Java.g:12104:4: (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:12105:5: a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_members_AdditionalField10584); + a3_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createAdditionalField(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.members.MembersPackage.ADDITIONAL_FIELD__INITIAL_VALUE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_29_0_0_2_0_0_3, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4530); + addExpectedElement(4531); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4532); + addExpectedElement(4533); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 31, parse_org_emftext_language_java_members_AdditionalField_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_members_AdditionalField" + + + + // $ANTLR start "parse_org_emftext_language_java_members_EmptyMember" + // Java.g:12141:1: parse_org_emftext_language_java_members_EmptyMember returns [org.emftext.language.java.members.EmptyMember element = null] : a0= ';' ; + public final org.emftext.language.java.members.EmptyMember parse_org_emftext_language_java_members_EmptyMember() throws RecognitionException { + org.emftext.language.java.members.EmptyMember element = null; + + int parse_org_emftext_language_java_members_EmptyMember_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 32) ) { return element; } + + // Java.g:12144:2: (a0= ';' ) + // Java.g:12145:2: a0= ';' + { + a0=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_members_EmptyMember10640); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.members.MembersFactory.eINSTANCE.createEmptyMember(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_30_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4534); + addExpectedElement(4535); + addExpectedElement(4536); + addExpectedElement(4537); + addExpectedElement(4538); + addExpectedElement(4539); + addExpectedElement(4540); + addExpectedElement(4541); + addExpectedElement(4542); + addExpectedElement(4543); + addExpectedElement(4544); + addExpectedElement(4545); + addExpectedElement(4546); + addExpectedElement(4547); + addExpectedElement(4548); + addExpectedElement(4549); + addExpectedElement(4550); + addExpectedElement(4551); + addExpectedElement(4552); + addExpectedElement(4553); + addExpectedElement(4554); + addExpectedElement(4555); + addExpectedElement(4556); + addExpectedElement(4557); + addExpectedElement(4558); + addExpectedElement(4559); + addExpectedElement(4560); + addExpectedElement(4561); + addExpectedElement(4562); + addExpectedElement(4563); + addExpectedElement(4564); + addExpectedElement(4565); + addExpectedElement(4566); + addExpectedElement(4567); + addExpectedElement(4568); + addExpectedElement(4569); + addExpectedElement(4570); + addExpectedElement(4571); + addExpectedElement(4572); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 32, parse_org_emftext_language_java_members_EmptyMember_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_members_EmptyMember" + + + + // $ANTLR start "parse_org_emftext_language_java_instantiations_NewConstructorCall" + // Java.g:12199:1: parse_org_emftext_language_java_instantiations_NewConstructorCall returns [org.emftext.language.java.instantiations.NewConstructorCall element = null] : a0= 'new' ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) )? (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7= '<' (a8_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a11= '>' ) )? a12= '(' ( ( (a13_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a14= ',' (a15_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a16= ')' ( (a17_0= parse_org_emftext_language_java_classifiers_AnonymousClass ) )? ( (a18= '.' (a19_0= parse_org_emftext_language_java_references_Reference ) ) )? ; + public final org.emftext.language.java.instantiations.NewConstructorCall parse_org_emftext_language_java_instantiations_NewConstructorCall() throws RecognitionException { + org.emftext.language.java.instantiations.NewConstructorCall element = null; + + int parse_org_emftext_language_java_instantiations_NewConstructorCall_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a3=null; + Token a5=null; + Token a7=null; + Token a9=null; + Token a11=null; + Token a12=null; + Token a14=null; + Token a16=null; + Token a18=null; + org.emftext.language.java.generics.TypeArgument a2_0 =null; + + org.emftext.language.java.generics.TypeArgument a4_0 =null; + + org.emftext.language.java.types.TypeReference a6_0 =null; + + org.emftext.language.java.generics.TypeArgument a8_0 =null; + + org.emftext.language.java.generics.TypeArgument a10_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a13_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a15_0 =null; + + org.emftext.language.java.classifiers.AnonymousClass a17_0 =null; + + org.emftext.language.java.references.Reference a19_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 33) ) { return element; } + + // Java.g:12202:2: (a0= 'new' ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) )? (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7= '<' (a8_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a11= '>' ) )? a12= '(' ( ( (a13_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a14= ',' (a15_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a16= ')' ( (a17_0= parse_org_emftext_language_java_classifiers_AnonymousClass ) )? ( (a18= '.' (a19_0= parse_org_emftext_language_java_references_Reference ) ) )? ) + // Java.g:12203:2: a0= 'new' ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) )? (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7= '<' (a8_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a11= '>' ) )? a12= '(' ( ( (a13_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a14= ',' (a15_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a16= ')' ( (a17_0= parse_org_emftext_language_java_classifiers_AnonymousClass ) )? ( (a18= '.' (a19_0= parse_org_emftext_language_java_references_Reference ) ) )? + { + a0=(Token)match(input,84,FOLLOW_84_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10669); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4573); + addExpectedElement(4574); + addExpectedElement(4575); + addExpectedElement(4576); + addExpectedElement(4577); + addExpectedElement(4578); + addExpectedElement(4579); + addExpectedElement(4580); + addExpectedElement(4581); + addExpectedElement(4582); + addExpectedElement(4583); + addExpectedElement(4584); + } + + // Java.g:12228:2: ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) )? + int alt124=2; + int LA124_0 = input.LA(1); + + if ( (LA124_0==43) ) { + alt124=1; + } + switch (alt124) { + case 1 : + // Java.g:12229:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) + { + // Java.g:12229:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) + // Java.g:12230:4: a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' + { + a1=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10692); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4585); + addExpectedElement(4586); + addExpectedElement(4587); + addExpectedElement(4588); + addExpectedElement(4589); + addExpectedElement(4590); + addExpectedElement(4591); + addExpectedElement(4592); + addExpectedElement(4593); + addExpectedElement(4594); + addExpectedElement(4595); + addExpectedElement(4596); + addExpectedElement(4597); + addExpectedElement(4598); + } + + // Java.g:12257:4: (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:12258:5: a2_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10718); + a2_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4599); + addExpectedElement(4600); + } + + // Java.g:12284:4: ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* + loop123: + do { + int alt123=2; + int LA123_0 = input.LA(1); + + if ( (LA123_0==33) ) { + alt123=1; + } + + + switch (alt123) { + case 1 : + // Java.g:12285:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + { + // Java.g:12285:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + // Java.g:12286:6: a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) + { + a3=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10759); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_1_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4601); + addExpectedElement(4602); + addExpectedElement(4603); + addExpectedElement(4604); + addExpectedElement(4605); + addExpectedElement(4606); + addExpectedElement(4607); + addExpectedElement(4608); + addExpectedElement(4609); + addExpectedElement(4610); + addExpectedElement(4611); + addExpectedElement(4612); + addExpectedElement(4613); + addExpectedElement(4614); + } + + // Java.g:12313:6: (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:12314:7: a4_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10793); + a4_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_1_0_0_2_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4615); + addExpectedElement(4616); + } + + } + + + } + break; + + default : + break loop123; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4617); + addExpectedElement(4618); + } + + a5=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10854); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_1_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4619); + addExpectedElement(4620); + addExpectedElement(4621); + addExpectedElement(4622); + addExpectedElement(4623); + addExpectedElement(4624); + addExpectedElement(4625); + addExpectedElement(4626); + addExpectedElement(4627); + addExpectedElement(4628); + addExpectedElement(4629); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4630); + addExpectedElement(4631); + addExpectedElement(4632); + addExpectedElement(4633); + addExpectedElement(4634); + addExpectedElement(4635); + addExpectedElement(4636); + addExpectedElement(4637); + addExpectedElement(4638); + addExpectedElement(4639); + addExpectedElement(4640); + } + + // Java.g:12389:2: (a6_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:12390:3: a6_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10891); + a6_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__TYPE_REFERENCE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_2, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4641); + addExpectedElement(4642); + } + + // Java.g:12416:2: ( (a7= '<' (a8_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a11= '>' ) )? + int alt126=2; + int LA126_0 = input.LA(1); + + if ( (LA126_0==43) ) { + alt126=1; + } + switch (alt126) { + case 1 : + // Java.g:12417:3: (a7= '<' (a8_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a11= '>' ) + { + // Java.g:12417:3: (a7= '<' (a8_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a11= '>' ) + // Java.g:12418:4: a7= '<' (a8_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a9= ',' (a10_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a11= '>' + { + a7=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10918); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_3_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a7, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4643); + addExpectedElement(4644); + addExpectedElement(4645); + addExpectedElement(4646); + addExpectedElement(4647); + addExpectedElement(4648); + addExpectedElement(4649); + addExpectedElement(4650); + addExpectedElement(4651); + addExpectedElement(4652); + addExpectedElement(4653); + addExpectedElement(4654); + addExpectedElement(4655); + addExpectedElement(4656); + } + + // Java.g:12445:4: (a8_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:12446:5: a8_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10944); + a8_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + if (a8_0 != null) { + if (a8_0 != null) { + Object value = a8_0; + addObjectToList(element, org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__CALL_TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_3_0_0_1, a8_0, true); + copyLocalizationInfos(a8_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4657); + addExpectedElement(4658); + } + + // Java.g:12472:4: ( (a9= ',' (a10_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* + loop125: + do { + int alt125=2; + int LA125_0 = input.LA(1); + + if ( (LA125_0==33) ) { + alt125=1; + } + + + switch (alt125) { + case 1 : + // Java.g:12473:5: (a9= ',' (a10_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + { + // Java.g:12473:5: (a9= ',' (a10_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + // Java.g:12474:6: a9= ',' (a10_0= parse_org_emftext_language_java_generics_TypeArgument ) + { + a9=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10985); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_3_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a9, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4659); + addExpectedElement(4660); + addExpectedElement(4661); + addExpectedElement(4662); + addExpectedElement(4663); + addExpectedElement(4664); + addExpectedElement(4665); + addExpectedElement(4666); + addExpectedElement(4667); + addExpectedElement(4668); + addExpectedElement(4669); + addExpectedElement(4670); + addExpectedElement(4671); + addExpectedElement(4672); + } + + // Java.g:12501:6: (a10_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:12502:7: a10_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11019); + a10_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + if (a10_0 != null) { + if (a10_0 != null) { + Object value = a10_0; + addObjectToList(element, org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__CALL_TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_3_0_0_2_0_0_1, a10_0, true); + copyLocalizationInfos(a10_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4673); + addExpectedElement(4674); + } + + } + + + } + break; + + default : + break loop125; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4675); + addExpectedElement(4676); + } + + a11=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11080); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_3_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a11, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4677); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4678); + } + + a12=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11113); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a12, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4679); + addExpectedElement(4680); + addExpectedElement(4681); + addExpectedElement(4682); + addExpectedElement(4683); + addExpectedElement(4684); + addExpectedElement(4685); + addExpectedElement(4686); + addExpectedElement(4687); + addExpectedElement(4688); + addExpectedElement(4689); + addExpectedElement(4690); + addExpectedElement(4691); + addExpectedElement(4692); + addExpectedElement(4693); + addExpectedElement(4694); + addExpectedElement(4695); + addExpectedElement(4696); + addExpectedElement(4697); + addExpectedElement(4698); + addExpectedElement(4699); + addExpectedElement(4700); + addExpectedElement(4701); + addExpectedElement(4702); + addExpectedElement(4703); + addExpectedElement(4704); + addExpectedElement(4705); + addExpectedElement(4706); + addExpectedElement(4707); + addExpectedElement(4708); + addExpectedElement(4709); + addExpectedElement(4710); + addExpectedElement(4711); + addExpectedElement(4712); + addExpectedElement(4713); + addExpectedElement(4714); + addExpectedElement(4715); + addExpectedElement(4716); + addExpectedElement(4717); + addExpectedElement(4718); + addExpectedElement(4719); + addExpectedElement(4720); + addExpectedElement(4721); + addExpectedElement(4722); + } + + // Java.g:12614:2: ( ( (a13_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a14= ',' (a15_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? + int alt128=2; + int LA128_0 = input.LA(1); + + if ( ((LA128_0 >= BOOLEAN_LITERAL && LA128_0 <= IDENTIFIER)||(LA128_0 >= OCTAL_INTEGER_LITERAL && LA128_0 <= OCTAL_LONG_LITERAL)||LA128_0==STRING_LITERAL||LA128_0==21||LA128_0==26||(LA128_0 >= 30 && LA128_0 <= 31)||(LA128_0 >= 34 && LA128_0 <= 35)||LA128_0==43||LA128_0==48||LA128_0==58||LA128_0==60||(LA128_0 >= 63 && LA128_0 <= 64)||LA128_0==68||LA128_0==74||LA128_0==80||LA128_0==82||(LA128_0 >= 84 && LA128_0 <= 85)||LA128_0==91||LA128_0==94||LA128_0==97||LA128_0==102||LA128_0==105||LA128_0==110) ) { + alt128=1; + } + switch (alt128) { + case 1 : + // Java.g:12615:3: ( (a13_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a14= ',' (a15_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) + { + // Java.g:12615:3: ( (a13_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a14= ',' (a15_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) + // Java.g:12616:4: (a13_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a14= ',' (a15_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* + { + // Java.g:12616:4: (a13_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:12617:5: a13_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11142); + a13_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + if (a13_0 != null) { + if (a13_0 != null) { + Object value = a13_0; + addObjectToList(element, org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_5_0_0_0, a13_0, true); + copyLocalizationInfos(a13_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4723); + addExpectedElement(4724); + } + + // Java.g:12643:4: ( (a14= ',' (a15_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* + loop127: + do { + int alt127=2; + int LA127_0 = input.LA(1); + + if ( (LA127_0==33) ) { + alt127=1; + } + + + switch (alt127) { + case 1 : + // Java.g:12644:5: (a14= ',' (a15_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + { + // Java.g:12644:5: (a14= ',' (a15_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + // Java.g:12645:6: a14= ',' (a15_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + a14=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11183); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_5_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a14, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4725); + addExpectedElement(4726); + addExpectedElement(4727); + addExpectedElement(4728); + addExpectedElement(4729); + addExpectedElement(4730); + addExpectedElement(4731); + addExpectedElement(4732); + addExpectedElement(4733); + addExpectedElement(4734); + addExpectedElement(4735); + addExpectedElement(4736); + addExpectedElement(4737); + addExpectedElement(4738); + addExpectedElement(4739); + addExpectedElement(4740); + addExpectedElement(4741); + addExpectedElement(4742); + addExpectedElement(4743); + addExpectedElement(4744); + addExpectedElement(4745); + addExpectedElement(4746); + addExpectedElement(4747); + addExpectedElement(4748); + addExpectedElement(4749); + addExpectedElement(4750); + addExpectedElement(4751); + addExpectedElement(4752); + addExpectedElement(4753); + addExpectedElement(4754); + addExpectedElement(4755); + addExpectedElement(4756); + addExpectedElement(4757); + addExpectedElement(4758); + addExpectedElement(4759); + addExpectedElement(4760); + addExpectedElement(4761); + addExpectedElement(4762); + addExpectedElement(4763); + addExpectedElement(4764); + addExpectedElement(4765); + addExpectedElement(4766); + addExpectedElement(4767); + } + + // Java.g:12701:6: (a15_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:12702:7: a15_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11217); + a15_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + if (a15_0 != null) { + if (a15_0 != null) { + Object value = a15_0; + addObjectToList(element, org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_5_0_0_1_0_0_1, a15_0, true); + copyLocalizationInfos(a15_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4768); + addExpectedElement(4769); + } + + } + + + } + break; + + default : + break loop127; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4770); + addExpectedElement(4771); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4772); + } + + a16=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11291); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_6, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a16, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4773); + addExpectedElement(4774); + addExpectedElement(4775); + addExpectedElement(4776); + addExpectedElement(4777); + addExpectedElement(4778); + addExpectedElement(4779); + addExpectedElement(4780); + addExpectedElement(4781); + addExpectedElement(4782); + addExpectedElement(4783); + addExpectedElement(4784); + addExpectedElement(4785); + addExpectedElement(4786); + addExpectedElement(4787); + addExpectedElement(4788); + addExpectedElement(4789); + addExpectedElement(4790); + addExpectedElement(4791); + addExpectedElement(4792); + addExpectedElement(4793); + addExpectedElement(4794); + addExpectedElement(4795); + addExpectedElement(4796); + addExpectedElement(4797); + addExpectedElement(4798); + addExpectedElement(4799); + addExpectedElement(4800); + addExpectedElement(4801); + addExpectedElement(4802); + addExpectedElement(4803); + addExpectedElement(4804); + addExpectedElement(4805); + addExpectedElement(4806); + addExpectedElement(4807); + addExpectedElement(4808); + addExpectedElement(4809); + addExpectedElement(4810); + addExpectedElement(4811); + addExpectedElement(4812); + addExpectedElement(4813); + addExpectedElement(4814); + addExpectedElement(4815); + addExpectedElement(4816); + addExpectedElement(4817); + addExpectedElement(4818); + addExpectedElement(4819); + addExpectedElement(4820); + addExpectedElement(4821); + addExpectedElement(4822); + addExpectedElement(4823); + addExpectedElement(4824); + addExpectedElement(4825); + addExpectedElement(4826); + addExpectedElement(4827); + addExpectedElement(4828); + addExpectedElement(4829); + addExpectedElement(4830); + addExpectedElement(4831); + addExpectedElement(4832); + addExpectedElement(4833); + addExpectedElement(4834); + addExpectedElement(4835); + addExpectedElement(4836); + addExpectedElement(4837); + addExpectedElement(4838); + } + + // Java.g:12822:2: ( (a17_0= parse_org_emftext_language_java_classifiers_AnonymousClass ) )? + int alt129=2; + int LA129_0 = input.LA(1); + + if ( (LA129_0==105) ) { + alt129=1; + } + switch (alt129) { + case 1 : + // Java.g:12823:3: (a17_0= parse_org_emftext_language_java_classifiers_AnonymousClass ) + { + // Java.g:12823:3: (a17_0= parse_org_emftext_language_java_classifiers_AnonymousClass ) + // Java.g:12824:4: a17_0= parse_org_emftext_language_java_classifiers_AnonymousClass + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_AnonymousClass_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11314); + a17_0=parse_org_emftext_language_java_classifiers_AnonymousClass(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + if (a17_0 != null) { + if (a17_0 != null) { + Object value = a17_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__ANONYMOUS_CLASS), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_7, a17_0, true); + copyLocalizationInfos(a17_0, element); + } + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4839); + addExpectedElement(4840); + addExpectedElement(4841); + addExpectedElement(4842); + addExpectedElement(4843); + addExpectedElement(4844); + addExpectedElement(4845); + addExpectedElement(4846); + addExpectedElement(4847); + addExpectedElement(4848); + addExpectedElement(4849); + addExpectedElement(4850); + addExpectedElement(4851); + addExpectedElement(4852); + addExpectedElement(4853); + addExpectedElement(4854); + addExpectedElement(4855); + addExpectedElement(4856); + addExpectedElement(4857); + addExpectedElement(4858); + addExpectedElement(4859); + addExpectedElement(4860); + addExpectedElement(4861); + addExpectedElement(4862); + addExpectedElement(4863); + addExpectedElement(4864); + addExpectedElement(4865); + addExpectedElement(4866); + addExpectedElement(4867); + addExpectedElement(4868); + addExpectedElement(4869); + addExpectedElement(4870); + addExpectedElement(4871); + addExpectedElement(4872); + addExpectedElement(4873); + addExpectedElement(4874); + addExpectedElement(4875); + addExpectedElement(4876); + addExpectedElement(4877); + addExpectedElement(4878); + addExpectedElement(4879); + addExpectedElement(4880); + addExpectedElement(4881); + addExpectedElement(4882); + addExpectedElement(4883); + addExpectedElement(4884); + addExpectedElement(4885); + addExpectedElement(4886); + addExpectedElement(4887); + addExpectedElement(4888); + addExpectedElement(4889); + addExpectedElement(4890); + addExpectedElement(4891); + addExpectedElement(4892); + addExpectedElement(4893); + addExpectedElement(4894); + addExpectedElement(4895); + addExpectedElement(4896); + addExpectedElement(4897); + addExpectedElement(4898); + addExpectedElement(4899); + addExpectedElement(4900); + addExpectedElement(4901); + addExpectedElement(4902); + addExpectedElement(4903); + } + + // Java.g:12914:2: ( (a18= '.' (a19_0= parse_org_emftext_language_java_references_Reference ) ) )? + int alt130=2; + int LA130_0 = input.LA(1); + + if ( (LA130_0==37) ) { + alt130=1; + } + switch (alt130) { + case 1 : + // Java.g:12915:3: (a18= '.' (a19_0= parse_org_emftext_language_java_references_Reference ) ) + { + // Java.g:12915:3: (a18= '.' (a19_0= parse_org_emftext_language_java_references_Reference ) ) + // Java.g:12916:4: a18= '.' (a19_0= parse_org_emftext_language_java_references_Reference ) + { + a18=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11349); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_8_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a18, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4904); + addExpectedElement(4905); + addExpectedElement(4906); + addExpectedElement(4907); + addExpectedElement(4908); + addExpectedElement(4909); + addExpectedElement(4910); + addExpectedElement(4911); + addExpectedElement(4912); + addExpectedElement(4913); + addExpectedElement(4914); + addExpectedElement(4915); + addExpectedElement(4916); + addExpectedElement(4917); + addExpectedElement(4918); + addExpectedElement(4919); + addExpectedElement(4920); + addExpectedElement(4921); + addExpectedElement(4922); + addExpectedElement(4923); + addExpectedElement(4924); + addExpectedElement(4925); + addExpectedElement(4926); + } + + // Java.g:12952:4: (a19_0= parse_org_emftext_language_java_references_Reference ) + // Java.g:12953:5: a19_0= parse_org_emftext_language_java_references_Reference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11375); + a19_0=parse_org_emftext_language_java_references_Reference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createNewConstructorCall(); + startIncompleteElement(element); + } + if (a19_0 != null) { + if (a19_0 != null) { + Object value = a19_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.NEW_CONSTRUCTOR_CALL__NEXT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_31_0_0_8_0_0_1, a19_0, true); + copyLocalizationInfos(a19_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4927); + addExpectedElement(4928); + addExpectedElement(4929); + addExpectedElement(4930); + addExpectedElement(4931); + addExpectedElement(4932); + addExpectedElement(4933); + addExpectedElement(4934); + addExpectedElement(4935); + addExpectedElement(4936); + addExpectedElement(4937); + addExpectedElement(4938); + addExpectedElement(4939); + addExpectedElement(4940); + addExpectedElement(4941); + addExpectedElement(4942); + addExpectedElement(4943); + addExpectedElement(4944); + addExpectedElement(4945); + addExpectedElement(4946); + addExpectedElement(4947); + addExpectedElement(4948); + addExpectedElement(4949); + addExpectedElement(4950); + addExpectedElement(4951); + addExpectedElement(4952); + addExpectedElement(4953); + addExpectedElement(4954); + addExpectedElement(4955); + addExpectedElement(4956); + addExpectedElement(4957); + addExpectedElement(4958); + addExpectedElement(4959); + addExpectedElement(4960); + addExpectedElement(4961); + addExpectedElement(4962); + addExpectedElement(4963); + addExpectedElement(4964); + addExpectedElement(4965); + addExpectedElement(4966); + addExpectedElement(4967); + addExpectedElement(4968); + addExpectedElement(4969); + addExpectedElement(4970); + addExpectedElement(4971); + addExpectedElement(4972); + addExpectedElement(4973); + addExpectedElement(4974); + addExpectedElement(4975); + addExpectedElement(4976); + addExpectedElement(4977); + addExpectedElement(4978); + addExpectedElement(4979); + addExpectedElement(4980); + addExpectedElement(4981); + addExpectedElement(4982); + addExpectedElement(4983); + addExpectedElement(4984); + addExpectedElement(4985); + addExpectedElement(4986); + addExpectedElement(4987); + addExpectedElement(4988); + addExpectedElement(4989); + addExpectedElement(4990); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(4991); + addExpectedElement(4992); + addExpectedElement(4993); + addExpectedElement(4994); + addExpectedElement(4995); + addExpectedElement(4996); + addExpectedElement(4997); + addExpectedElement(4998); + addExpectedElement(4999); + addExpectedElement(5000); + addExpectedElement(5001); + addExpectedElement(5002); + addExpectedElement(5003); + addExpectedElement(5004); + addExpectedElement(5005); + addExpectedElement(5006); + addExpectedElement(5007); + addExpectedElement(5008); + addExpectedElement(5009); + addExpectedElement(5010); + addExpectedElement(5011); + addExpectedElement(5012); + addExpectedElement(5013); + addExpectedElement(5014); + addExpectedElement(5015); + addExpectedElement(5016); + addExpectedElement(5017); + addExpectedElement(5018); + addExpectedElement(5019); + addExpectedElement(5020); + addExpectedElement(5021); + addExpectedElement(5022); + addExpectedElement(5023); + addExpectedElement(5024); + addExpectedElement(5025); + addExpectedElement(5026); + addExpectedElement(5027); + addExpectedElement(5028); + addExpectedElement(5029); + addExpectedElement(5030); + addExpectedElement(5031); + addExpectedElement(5032); + addExpectedElement(5033); + addExpectedElement(5034); + addExpectedElement(5035); + addExpectedElement(5036); + addExpectedElement(5037); + addExpectedElement(5038); + addExpectedElement(5039); + addExpectedElement(5040); + addExpectedElement(5041); + addExpectedElement(5042); + addExpectedElement(5043); + addExpectedElement(5044); + addExpectedElement(5045); + addExpectedElement(5046); + addExpectedElement(5047); + addExpectedElement(5048); + addExpectedElement(5049); + addExpectedElement(5050); + addExpectedElement(5051); + addExpectedElement(5052); + addExpectedElement(5053); + addExpectedElement(5054); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 33, parse_org_emftext_language_java_instantiations_NewConstructorCall_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_instantiations_NewConstructorCall" + + + + // $ANTLR start "parse_org_emftext_language_java_instantiations_ExplicitConstructorCall" + // Java.g:13113:1: parse_org_emftext_language_java_instantiations_ExplicitConstructorCall returns [org.emftext.language.java.instantiations.ExplicitConstructorCall element = null] : ( (a0= '<' (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a4= '>' ) )? (a5_0= parse_org_emftext_language_java_literals_Self ) a6= '(' ( ( (a7_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a8= ',' (a9_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a10= ')' ( (a11= '.' (a12_0= parse_org_emftext_language_java_references_Reference ) ) )? ; + public final org.emftext.language.java.instantiations.ExplicitConstructorCall parse_org_emftext_language_java_instantiations_ExplicitConstructorCall() throws RecognitionException { + org.emftext.language.java.instantiations.ExplicitConstructorCall element = null; + + int parse_org_emftext_language_java_instantiations_ExplicitConstructorCall_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + Token a4=null; + Token a6=null; + Token a8=null; + Token a10=null; + Token a11=null; + org.emftext.language.java.generics.TypeArgument a1_0 =null; + + org.emftext.language.java.generics.TypeArgument a3_0 =null; + + org.emftext.language.java.literals.Self a5_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a7_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a9_0 =null; + + org.emftext.language.java.references.Reference a12_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 34) ) { return element; } + + // Java.g:13116:2: ( ( (a0= '<' (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a4= '>' ) )? (a5_0= parse_org_emftext_language_java_literals_Self ) a6= '(' ( ( (a7_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a8= ',' (a9_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a10= ')' ( (a11= '.' (a12_0= parse_org_emftext_language_java_references_Reference ) ) )? ) + // Java.g:13117:2: ( (a0= '<' (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a4= '>' ) )? (a5_0= parse_org_emftext_language_java_literals_Self ) a6= '(' ( ( (a7_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a8= ',' (a9_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a10= ')' ( (a11= '.' (a12_0= parse_org_emftext_language_java_references_Reference ) ) )? + { + // Java.g:13117:2: ( (a0= '<' (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a4= '>' ) )? + int alt132=2; + int LA132_0 = input.LA(1); + + if ( (LA132_0==43) ) { + alt132=1; + } + switch (alt132) { + case 1 : + // Java.g:13118:3: (a0= '<' (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a4= '>' ) + { + // Java.g:13118:3: (a0= '<' (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a4= '>' ) + // Java.g:13119:4: a0= '<' (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a4= '>' + { + a0=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11440); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createExplicitConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_32_0_0_0_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5055); + addExpectedElement(5056); + addExpectedElement(5057); + addExpectedElement(5058); + addExpectedElement(5059); + addExpectedElement(5060); + addExpectedElement(5061); + addExpectedElement(5062); + addExpectedElement(5063); + addExpectedElement(5064); + addExpectedElement(5065); + addExpectedElement(5066); + addExpectedElement(5067); + addExpectedElement(5068); + } + + // Java.g:13146:4: (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:13147:5: a1_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11466); + a1_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createExplicitConstructorCall(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.instantiations.InstantiationsPackage.EXPLICIT_CONSTRUCTOR_CALL__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_32_0_0_0_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5069); + addExpectedElement(5070); + } + + // Java.g:13173:4: ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* + loop131: + do { + int alt131=2; + int LA131_0 = input.LA(1); + + if ( (LA131_0==33) ) { + alt131=1; + } + + + switch (alt131) { + case 1 : + // Java.g:13174:5: (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + { + // Java.g:13174:5: (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + // Java.g:13175:6: a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) + { + a2=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11507); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createExplicitConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_32_0_0_0_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5071); + addExpectedElement(5072); + addExpectedElement(5073); + addExpectedElement(5074); + addExpectedElement(5075); + addExpectedElement(5076); + addExpectedElement(5077); + addExpectedElement(5078); + addExpectedElement(5079); + addExpectedElement(5080); + addExpectedElement(5081); + addExpectedElement(5082); + addExpectedElement(5083); + addExpectedElement(5084); + } + + // Java.g:13202:6: (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:13203:7: a3_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11541); + a3_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createExplicitConstructorCall(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + addObjectToList(element, org.emftext.language.java.instantiations.InstantiationsPackage.EXPLICIT_CONSTRUCTOR_CALL__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_32_0_0_0_0_0_2_0_0_1, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5085); + addExpectedElement(5086); + } + + } + + + } + break; + + default : + break loop131; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5087); + addExpectedElement(5088); + } + + a4=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11602); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createExplicitConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_32_0_0_0_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5089); + addExpectedElement(5090); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5091); + addExpectedElement(5092); + } + + // Java.g:13260:2: (a5_0= parse_org_emftext_language_java_literals_Self ) + // Java.g:13261:3: a5_0= parse_org_emftext_language_java_literals_Self + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_Self_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11639); + a5_0=parse_org_emftext_language_java_literals_Self(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createExplicitConstructorCall(); + startIncompleteElement(element); + } + if (a5_0 != null) { + if (a5_0 != null) { + Object value = a5_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.EXPLICIT_CONSTRUCTOR_CALL__CALL_TARGET), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_32_0_0_1, a5_0, true); + copyLocalizationInfos(a5_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5093); + } + + a6=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11657); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createExplicitConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_32_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a6, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5094); + addExpectedElement(5095); + addExpectedElement(5096); + addExpectedElement(5097); + addExpectedElement(5098); + addExpectedElement(5099); + addExpectedElement(5100); + addExpectedElement(5101); + addExpectedElement(5102); + addExpectedElement(5103); + addExpectedElement(5104); + addExpectedElement(5105); + addExpectedElement(5106); + addExpectedElement(5107); + addExpectedElement(5108); + addExpectedElement(5109); + addExpectedElement(5110); + addExpectedElement(5111); + addExpectedElement(5112); + addExpectedElement(5113); + addExpectedElement(5114); + addExpectedElement(5115); + addExpectedElement(5116); + addExpectedElement(5117); + addExpectedElement(5118); + addExpectedElement(5119); + addExpectedElement(5120); + addExpectedElement(5121); + addExpectedElement(5122); + addExpectedElement(5123); + addExpectedElement(5124); + addExpectedElement(5125); + addExpectedElement(5126); + addExpectedElement(5127); + addExpectedElement(5128); + addExpectedElement(5129); + addExpectedElement(5130); + addExpectedElement(5131); + addExpectedElement(5132); + addExpectedElement(5133); + addExpectedElement(5134); + addExpectedElement(5135); + addExpectedElement(5136); + addExpectedElement(5137); + } + + // Java.g:13343:2: ( ( (a7_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a8= ',' (a9_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? + int alt134=2; + int LA134_0 = input.LA(1); + + if ( ((LA134_0 >= BOOLEAN_LITERAL && LA134_0 <= IDENTIFIER)||(LA134_0 >= OCTAL_INTEGER_LITERAL && LA134_0 <= OCTAL_LONG_LITERAL)||LA134_0==STRING_LITERAL||LA134_0==21||LA134_0==26||(LA134_0 >= 30 && LA134_0 <= 31)||(LA134_0 >= 34 && LA134_0 <= 35)||LA134_0==43||LA134_0==48||LA134_0==58||LA134_0==60||(LA134_0 >= 63 && LA134_0 <= 64)||LA134_0==68||LA134_0==74||LA134_0==80||LA134_0==82||(LA134_0 >= 84 && LA134_0 <= 85)||LA134_0==91||LA134_0==94||LA134_0==97||LA134_0==102||LA134_0==105||LA134_0==110) ) { + alt134=1; + } + switch (alt134) { + case 1 : + // Java.g:13344:3: ( (a7_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a8= ',' (a9_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) + { + // Java.g:13344:3: ( (a7_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a8= ',' (a9_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) + // Java.g:13345:4: (a7_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a8= ',' (a9_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* + { + // Java.g:13345:4: (a7_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:13346:5: a7_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11686); + a7_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createExplicitConstructorCall(); + startIncompleteElement(element); + } + if (a7_0 != null) { + if (a7_0 != null) { + Object value = a7_0; + addObjectToList(element, org.emftext.language.java.instantiations.InstantiationsPackage.EXPLICIT_CONSTRUCTOR_CALL__ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_32_0_0_3_0_0_0, a7_0, true); + copyLocalizationInfos(a7_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5138); + addExpectedElement(5139); + } + + // Java.g:13372:4: ( (a8= ',' (a9_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* + loop133: + do { + int alt133=2; + int LA133_0 = input.LA(1); + + if ( (LA133_0==33) ) { + alt133=1; + } + + + switch (alt133) { + case 1 : + // Java.g:13373:5: (a8= ',' (a9_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + { + // Java.g:13373:5: (a8= ',' (a9_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + // Java.g:13374:6: a8= ',' (a9_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + a8=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11727); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createExplicitConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_32_0_0_3_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a8, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5140); + addExpectedElement(5141); + addExpectedElement(5142); + addExpectedElement(5143); + addExpectedElement(5144); + addExpectedElement(5145); + addExpectedElement(5146); + addExpectedElement(5147); + addExpectedElement(5148); + addExpectedElement(5149); + addExpectedElement(5150); + addExpectedElement(5151); + addExpectedElement(5152); + addExpectedElement(5153); + addExpectedElement(5154); + addExpectedElement(5155); + addExpectedElement(5156); + addExpectedElement(5157); + addExpectedElement(5158); + addExpectedElement(5159); + addExpectedElement(5160); + addExpectedElement(5161); + addExpectedElement(5162); + addExpectedElement(5163); + addExpectedElement(5164); + addExpectedElement(5165); + addExpectedElement(5166); + addExpectedElement(5167); + addExpectedElement(5168); + addExpectedElement(5169); + addExpectedElement(5170); + addExpectedElement(5171); + addExpectedElement(5172); + addExpectedElement(5173); + addExpectedElement(5174); + addExpectedElement(5175); + addExpectedElement(5176); + addExpectedElement(5177); + addExpectedElement(5178); + addExpectedElement(5179); + addExpectedElement(5180); + addExpectedElement(5181); + addExpectedElement(5182); + } + + // Java.g:13430:6: (a9_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:13431:7: a9_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11761); + a9_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createExplicitConstructorCall(); + startIncompleteElement(element); + } + if (a9_0 != null) { + if (a9_0 != null) { + Object value = a9_0; + addObjectToList(element, org.emftext.language.java.instantiations.InstantiationsPackage.EXPLICIT_CONSTRUCTOR_CALL__ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_32_0_0_3_0_0_1_0_0_1, a9_0, true); + copyLocalizationInfos(a9_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5183); + addExpectedElement(5184); + } + + } + + + } + break; + + default : + break loop133; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5185); + addExpectedElement(5186); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5187); + } + + a10=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11835); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createExplicitConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_32_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a10, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5188); + addExpectedElement(5189); + addExpectedElement(5190); + addExpectedElement(5191); + addExpectedElement(5192); + addExpectedElement(5193); + addExpectedElement(5194); + addExpectedElement(5195); + addExpectedElement(5196); + addExpectedElement(5197); + addExpectedElement(5198); + addExpectedElement(5199); + addExpectedElement(5200); + addExpectedElement(5201); + addExpectedElement(5202); + addExpectedElement(5203); + addExpectedElement(5204); + addExpectedElement(5205); + addExpectedElement(5206); + addExpectedElement(5207); + addExpectedElement(5208); + addExpectedElement(5209); + addExpectedElement(5210); + addExpectedElement(5211); + addExpectedElement(5212); + addExpectedElement(5213); + addExpectedElement(5214); + addExpectedElement(5215); + addExpectedElement(5216); + addExpectedElement(5217); + addExpectedElement(5218); + addExpectedElement(5219); + addExpectedElement(5220); + addExpectedElement(5221); + addExpectedElement(5222); + addExpectedElement(5223); + addExpectedElement(5224); + addExpectedElement(5225); + addExpectedElement(5226); + addExpectedElement(5227); + addExpectedElement(5228); + addExpectedElement(5229); + addExpectedElement(5230); + addExpectedElement(5231); + addExpectedElement(5232); + addExpectedElement(5233); + addExpectedElement(5234); + addExpectedElement(5235); + addExpectedElement(5236); + addExpectedElement(5237); + addExpectedElement(5238); + addExpectedElement(5239); + addExpectedElement(5240); + addExpectedElement(5241); + addExpectedElement(5242); + addExpectedElement(5243); + addExpectedElement(5244); + addExpectedElement(5245); + addExpectedElement(5246); + addExpectedElement(5247); + addExpectedElement(5248); + addExpectedElement(5249); + addExpectedElement(5250); + addExpectedElement(5251); + addExpectedElement(5252); + } + + // Java.g:13550:2: ( (a11= '.' (a12_0= parse_org_emftext_language_java_references_Reference ) ) )? + int alt135=2; + int LA135_0 = input.LA(1); + + if ( (LA135_0==37) ) { + alt135=1; + } + switch (alt135) { + case 1 : + // Java.g:13551:3: (a11= '.' (a12_0= parse_org_emftext_language_java_references_Reference ) ) + { + // Java.g:13551:3: (a11= '.' (a12_0= parse_org_emftext_language_java_references_Reference ) ) + // Java.g:13552:4: a11= '.' (a12_0= parse_org_emftext_language_java_references_Reference ) + { + a11=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11858); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createExplicitConstructorCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_32_0_0_5_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a11, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5253); + addExpectedElement(5254); + addExpectedElement(5255); + addExpectedElement(5256); + addExpectedElement(5257); + addExpectedElement(5258); + addExpectedElement(5259); + addExpectedElement(5260); + addExpectedElement(5261); + addExpectedElement(5262); + addExpectedElement(5263); + addExpectedElement(5264); + addExpectedElement(5265); + addExpectedElement(5266); + addExpectedElement(5267); + addExpectedElement(5268); + addExpectedElement(5269); + addExpectedElement(5270); + addExpectedElement(5271); + addExpectedElement(5272); + addExpectedElement(5273); + addExpectedElement(5274); + addExpectedElement(5275); + } + + // Java.g:13588:4: (a12_0= parse_org_emftext_language_java_references_Reference ) + // Java.g:13589:5: a12_0= parse_org_emftext_language_java_references_Reference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11884); + a12_0=parse_org_emftext_language_java_references_Reference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.instantiations.InstantiationsFactory.eINSTANCE.createExplicitConstructorCall(); + startIncompleteElement(element); + } + if (a12_0 != null) { + if (a12_0 != null) { + Object value = a12_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.instantiations.InstantiationsPackage.EXPLICIT_CONSTRUCTOR_CALL__NEXT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_32_0_0_5_0_0_1, a12_0, true); + copyLocalizationInfos(a12_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5276); + addExpectedElement(5277); + addExpectedElement(5278); + addExpectedElement(5279); + addExpectedElement(5280); + addExpectedElement(5281); + addExpectedElement(5282); + addExpectedElement(5283); + addExpectedElement(5284); + addExpectedElement(5285); + addExpectedElement(5286); + addExpectedElement(5287); + addExpectedElement(5288); + addExpectedElement(5289); + addExpectedElement(5290); + addExpectedElement(5291); + addExpectedElement(5292); + addExpectedElement(5293); + addExpectedElement(5294); + addExpectedElement(5295); + addExpectedElement(5296); + addExpectedElement(5297); + addExpectedElement(5298); + addExpectedElement(5299); + addExpectedElement(5300); + addExpectedElement(5301); + addExpectedElement(5302); + addExpectedElement(5303); + addExpectedElement(5304); + addExpectedElement(5305); + addExpectedElement(5306); + addExpectedElement(5307); + addExpectedElement(5308); + addExpectedElement(5309); + addExpectedElement(5310); + addExpectedElement(5311); + addExpectedElement(5312); + addExpectedElement(5313); + addExpectedElement(5314); + addExpectedElement(5315); + addExpectedElement(5316); + addExpectedElement(5317); + addExpectedElement(5318); + addExpectedElement(5319); + addExpectedElement(5320); + addExpectedElement(5321); + addExpectedElement(5322); + addExpectedElement(5323); + addExpectedElement(5324); + addExpectedElement(5325); + addExpectedElement(5326); + addExpectedElement(5327); + addExpectedElement(5328); + addExpectedElement(5329); + addExpectedElement(5330); + addExpectedElement(5331); + addExpectedElement(5332); + addExpectedElement(5333); + addExpectedElement(5334); + addExpectedElement(5335); + addExpectedElement(5336); + addExpectedElement(5337); + addExpectedElement(5338); + addExpectedElement(5339); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5340); + addExpectedElement(5341); + addExpectedElement(5342); + addExpectedElement(5343); + addExpectedElement(5344); + addExpectedElement(5345); + addExpectedElement(5346); + addExpectedElement(5347); + addExpectedElement(5348); + addExpectedElement(5349); + addExpectedElement(5350); + addExpectedElement(5351); + addExpectedElement(5352); + addExpectedElement(5353); + addExpectedElement(5354); + addExpectedElement(5355); + addExpectedElement(5356); + addExpectedElement(5357); + addExpectedElement(5358); + addExpectedElement(5359); + addExpectedElement(5360); + addExpectedElement(5361); + addExpectedElement(5362); + addExpectedElement(5363); + addExpectedElement(5364); + addExpectedElement(5365); + addExpectedElement(5366); + addExpectedElement(5367); + addExpectedElement(5368); + addExpectedElement(5369); + addExpectedElement(5370); + addExpectedElement(5371); + addExpectedElement(5372); + addExpectedElement(5373); + addExpectedElement(5374); + addExpectedElement(5375); + addExpectedElement(5376); + addExpectedElement(5377); + addExpectedElement(5378); + addExpectedElement(5379); + addExpectedElement(5380); + addExpectedElement(5381); + addExpectedElement(5382); + addExpectedElement(5383); + addExpectedElement(5384); + addExpectedElement(5385); + addExpectedElement(5386); + addExpectedElement(5387); + addExpectedElement(5388); + addExpectedElement(5389); + addExpectedElement(5390); + addExpectedElement(5391); + addExpectedElement(5392); + addExpectedElement(5393); + addExpectedElement(5394); + addExpectedElement(5395); + addExpectedElement(5396); + addExpectedElement(5397); + addExpectedElement(5398); + addExpectedElement(5399); + addExpectedElement(5400); + addExpectedElement(5401); + addExpectedElement(5402); + addExpectedElement(5403); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 34, parse_org_emftext_language_java_instantiations_ExplicitConstructorCall_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_instantiations_ExplicitConstructorCall" + + + + // $ANTLR start "parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped" + // Java.g:13749:1: parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped returns [org.emftext.language.java.arrays.ArrayInstantiationByValuesTyped element = null] : a0= 'new' (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )+ (a3_0= parse_org_emftext_language_java_arrays_ArrayInitializer ) ( (a4_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a5= '.' (a6_0= parse_org_emftext_language_java_references_Reference ) ) )? ; + public final org.emftext.language.java.arrays.ArrayInstantiationByValuesTyped parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped() throws RecognitionException { + org.emftext.language.java.arrays.ArrayInstantiationByValuesTyped element = null; + + int parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped_StartIndex = input.index(); + + Token a0=null; + Token a5=null; + org.emftext.language.java.types.TypeReference a1_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a2_0 =null; + + org.emftext.language.java.arrays.ArrayInitializer a3_0 =null; + + org.emftext.language.java.arrays.ArraySelector a4_0 =null; + + org.emftext.language.java.references.Reference a6_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 35) ) { return element; } + + // Java.g:13752:2: (a0= 'new' (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )+ (a3_0= parse_org_emftext_language_java_arrays_ArrayInitializer ) ( (a4_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a5= '.' (a6_0= parse_org_emftext_language_java_references_Reference ) ) )? ) + // Java.g:13753:2: a0= 'new' (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )+ (a3_0= parse_org_emftext_language_java_arrays_ArrayInitializer ) ( (a4_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a5= '.' (a6_0= parse_org_emftext_language_java_references_Reference ) ) )? + { + a0=(Token)match(input,84,FOLLOW_84_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped11940); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationByValuesTyped(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_33_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5404); + addExpectedElement(5405); + addExpectedElement(5406); + addExpectedElement(5407); + addExpectedElement(5408); + addExpectedElement(5409); + addExpectedElement(5410); + addExpectedElement(5411); + addExpectedElement(5412); + addExpectedElement(5413); + addExpectedElement(5414); + } + + // Java.g:13777:2: (a1_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:13778:3: a1_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped11958); + a1_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationByValuesTyped(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_TYPED__TYPE_REFERENCE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_33_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5415); + } + + // Java.g:13803:2: ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )+ + int cnt136=0; + loop136: + do { + int alt136=2; + int LA136_0 = input.LA(1); + + if ( (LA136_0==49) ) { + alt136=1; + } + + + switch (alt136) { + case 1 : + // Java.g:13804:3: (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:13804:3: (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:13805:4: a2_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped11985); + a2_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationByValuesTyped(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_TYPED__ARRAY_DIMENSIONS_BEFORE, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_33_0_0_2, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + } + break; + + default : + if ( cnt136 >= 1 ) break loop136; + if (state.backtracking>0) {state.failed=true; return element;} + EarlyExitException eee = + new EarlyExitException(136, input); + throw eee; + } + cnt136++; + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5416); + addExpectedElement(5417); + } + + // Java.g:13832:2: (a3_0= parse_org_emftext_language_java_arrays_ArrayInitializer ) + // Java.g:13833:3: a3_0= parse_org_emftext_language_java_arrays_ArrayInitializer + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped12015); + a3_0=parse_org_emftext_language_java_arrays_ArrayInitializer(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationByValuesTyped(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_TYPED__ARRAY_INITIALIZER), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_33_0_0_3, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5418); + addExpectedElement(5419); + addExpectedElement(5420); + addExpectedElement(5421); + addExpectedElement(5422); + addExpectedElement(5423); + addExpectedElement(5424); + addExpectedElement(5425); + addExpectedElement(5426); + addExpectedElement(5427); + addExpectedElement(5428); + addExpectedElement(5429); + addExpectedElement(5430); + addExpectedElement(5431); + addExpectedElement(5432); + addExpectedElement(5433); + addExpectedElement(5434); + addExpectedElement(5435); + addExpectedElement(5436); + addExpectedElement(5437); + addExpectedElement(5438); + addExpectedElement(5439); + addExpectedElement(5440); + addExpectedElement(5441); + addExpectedElement(5442); + addExpectedElement(5443); + addExpectedElement(5444); + addExpectedElement(5445); + addExpectedElement(5446); + addExpectedElement(5447); + addExpectedElement(5448); + addExpectedElement(5449); + addExpectedElement(5450); + addExpectedElement(5451); + addExpectedElement(5452); + addExpectedElement(5453); + addExpectedElement(5454); + addExpectedElement(5455); + addExpectedElement(5456); + addExpectedElement(5457); + addExpectedElement(5458); + addExpectedElement(5459); + addExpectedElement(5460); + addExpectedElement(5461); + addExpectedElement(5462); + addExpectedElement(5463); + addExpectedElement(5464); + addExpectedElement(5465); + addExpectedElement(5466); + addExpectedElement(5467); + addExpectedElement(5468); + addExpectedElement(5469); + addExpectedElement(5470); + addExpectedElement(5471); + addExpectedElement(5472); + addExpectedElement(5473); + addExpectedElement(5474); + addExpectedElement(5475); + addExpectedElement(5476); + addExpectedElement(5477); + addExpectedElement(5478); + addExpectedElement(5479); + addExpectedElement(5480); + addExpectedElement(5481); + addExpectedElement(5482); + addExpectedElement(5483); + } + + // Java.g:13923:2: ( (a4_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* + loop137: + do { + int alt137=2; + int LA137_0 = input.LA(1); + + if ( (LA137_0==49) ) { + alt137=1; + } + + + switch (alt137) { + case 1 : + // Java.g:13924:3: (a4_0= parse_org_emftext_language_java_arrays_ArraySelector ) + { + // Java.g:13924:3: (a4_0= parse_org_emftext_language_java_arrays_ArraySelector ) + // Java.g:13925:4: a4_0= parse_org_emftext_language_java_arrays_ArraySelector + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArraySelector_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped12042); + a4_0=parse_org_emftext_language_java_arrays_ArraySelector(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationByValuesTyped(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_TYPED__ARRAY_SELECTORS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_33_0_0_4, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + } + break; + + default : + break loop137; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5484); + addExpectedElement(5485); + addExpectedElement(5486); + addExpectedElement(5487); + addExpectedElement(5488); + addExpectedElement(5489); + addExpectedElement(5490); + addExpectedElement(5491); + addExpectedElement(5492); + addExpectedElement(5493); + addExpectedElement(5494); + addExpectedElement(5495); + addExpectedElement(5496); + addExpectedElement(5497); + addExpectedElement(5498); + addExpectedElement(5499); + addExpectedElement(5500); + addExpectedElement(5501); + addExpectedElement(5502); + addExpectedElement(5503); + addExpectedElement(5504); + addExpectedElement(5505); + addExpectedElement(5506); + addExpectedElement(5507); + addExpectedElement(5508); + addExpectedElement(5509); + addExpectedElement(5510); + addExpectedElement(5511); + addExpectedElement(5512); + addExpectedElement(5513); + addExpectedElement(5514); + addExpectedElement(5515); + addExpectedElement(5516); + addExpectedElement(5517); + addExpectedElement(5518); + addExpectedElement(5519); + addExpectedElement(5520); + addExpectedElement(5521); + addExpectedElement(5522); + addExpectedElement(5523); + addExpectedElement(5524); + addExpectedElement(5525); + addExpectedElement(5526); + addExpectedElement(5527); + addExpectedElement(5528); + addExpectedElement(5529); + addExpectedElement(5530); + addExpectedElement(5531); + addExpectedElement(5532); + addExpectedElement(5533); + addExpectedElement(5534); + addExpectedElement(5535); + addExpectedElement(5536); + addExpectedElement(5537); + addExpectedElement(5538); + addExpectedElement(5539); + addExpectedElement(5540); + addExpectedElement(5541); + addExpectedElement(5542); + addExpectedElement(5543); + addExpectedElement(5544); + addExpectedElement(5545); + addExpectedElement(5546); + addExpectedElement(5547); + addExpectedElement(5548); + addExpectedElement(5549); + } + + // Java.g:14016:2: ( (a5= '.' (a6_0= parse_org_emftext_language_java_references_Reference ) ) )? + int alt138=2; + int LA138_0 = input.LA(1); + + if ( (LA138_0==37) ) { + alt138=1; + } + switch (alt138) { + case 1 : + // Java.g:14017:3: (a5= '.' (a6_0= parse_org_emftext_language_java_references_Reference ) ) + { + // Java.g:14017:3: (a5= '.' (a6_0= parse_org_emftext_language_java_references_Reference ) ) + // Java.g:14018:4: a5= '.' (a6_0= parse_org_emftext_language_java_references_Reference ) + { + a5=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped12077); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationByValuesTyped(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_33_0_0_5_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5550); + addExpectedElement(5551); + addExpectedElement(5552); + addExpectedElement(5553); + addExpectedElement(5554); + addExpectedElement(5555); + addExpectedElement(5556); + addExpectedElement(5557); + addExpectedElement(5558); + addExpectedElement(5559); + addExpectedElement(5560); + addExpectedElement(5561); + addExpectedElement(5562); + addExpectedElement(5563); + addExpectedElement(5564); + addExpectedElement(5565); + addExpectedElement(5566); + addExpectedElement(5567); + addExpectedElement(5568); + addExpectedElement(5569); + addExpectedElement(5570); + addExpectedElement(5571); + addExpectedElement(5572); + } + + // Java.g:14054:4: (a6_0= parse_org_emftext_language_java_references_Reference ) + // Java.g:14055:5: a6_0= parse_org_emftext_language_java_references_Reference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped12103); + a6_0=parse_org_emftext_language_java_references_Reference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationByValuesTyped(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_TYPED__NEXT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_33_0_0_5_0_0_1, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5573); + addExpectedElement(5574); + addExpectedElement(5575); + addExpectedElement(5576); + addExpectedElement(5577); + addExpectedElement(5578); + addExpectedElement(5579); + addExpectedElement(5580); + addExpectedElement(5581); + addExpectedElement(5582); + addExpectedElement(5583); + addExpectedElement(5584); + addExpectedElement(5585); + addExpectedElement(5586); + addExpectedElement(5587); + addExpectedElement(5588); + addExpectedElement(5589); + addExpectedElement(5590); + addExpectedElement(5591); + addExpectedElement(5592); + addExpectedElement(5593); + addExpectedElement(5594); + addExpectedElement(5595); + addExpectedElement(5596); + addExpectedElement(5597); + addExpectedElement(5598); + addExpectedElement(5599); + addExpectedElement(5600); + addExpectedElement(5601); + addExpectedElement(5602); + addExpectedElement(5603); + addExpectedElement(5604); + addExpectedElement(5605); + addExpectedElement(5606); + addExpectedElement(5607); + addExpectedElement(5608); + addExpectedElement(5609); + addExpectedElement(5610); + addExpectedElement(5611); + addExpectedElement(5612); + addExpectedElement(5613); + addExpectedElement(5614); + addExpectedElement(5615); + addExpectedElement(5616); + addExpectedElement(5617); + addExpectedElement(5618); + addExpectedElement(5619); + addExpectedElement(5620); + addExpectedElement(5621); + addExpectedElement(5622); + addExpectedElement(5623); + addExpectedElement(5624); + addExpectedElement(5625); + addExpectedElement(5626); + addExpectedElement(5627); + addExpectedElement(5628); + addExpectedElement(5629); + addExpectedElement(5630); + addExpectedElement(5631); + addExpectedElement(5632); + addExpectedElement(5633); + addExpectedElement(5634); + addExpectedElement(5635); + addExpectedElement(5636); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5637); + addExpectedElement(5638); + addExpectedElement(5639); + addExpectedElement(5640); + addExpectedElement(5641); + addExpectedElement(5642); + addExpectedElement(5643); + addExpectedElement(5644); + addExpectedElement(5645); + addExpectedElement(5646); + addExpectedElement(5647); + addExpectedElement(5648); + addExpectedElement(5649); + addExpectedElement(5650); + addExpectedElement(5651); + addExpectedElement(5652); + addExpectedElement(5653); + addExpectedElement(5654); + addExpectedElement(5655); + addExpectedElement(5656); + addExpectedElement(5657); + addExpectedElement(5658); + addExpectedElement(5659); + addExpectedElement(5660); + addExpectedElement(5661); + addExpectedElement(5662); + addExpectedElement(5663); + addExpectedElement(5664); + addExpectedElement(5665); + addExpectedElement(5666); + addExpectedElement(5667); + addExpectedElement(5668); + addExpectedElement(5669); + addExpectedElement(5670); + addExpectedElement(5671); + addExpectedElement(5672); + addExpectedElement(5673); + addExpectedElement(5674); + addExpectedElement(5675); + addExpectedElement(5676); + addExpectedElement(5677); + addExpectedElement(5678); + addExpectedElement(5679); + addExpectedElement(5680); + addExpectedElement(5681); + addExpectedElement(5682); + addExpectedElement(5683); + addExpectedElement(5684); + addExpectedElement(5685); + addExpectedElement(5686); + addExpectedElement(5687); + addExpectedElement(5688); + addExpectedElement(5689); + addExpectedElement(5690); + addExpectedElement(5691); + addExpectedElement(5692); + addExpectedElement(5693); + addExpectedElement(5694); + addExpectedElement(5695); + addExpectedElement(5696); + addExpectedElement(5697); + addExpectedElement(5698); + addExpectedElement(5699); + addExpectedElement(5700); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 35, parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped" + + + + // $ANTLR start "parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped" + // Java.g:14215:1: parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped returns [org.emftext.language.java.arrays.ArrayInstantiationByValuesUntyped element = null] : (a0_0= parse_org_emftext_language_java_arrays_ArrayInitializer ) ( (a1_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a2= '.' (a3_0= parse_org_emftext_language_java_references_Reference ) ) )? ; + public final org.emftext.language.java.arrays.ArrayInstantiationByValuesUntyped parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped() throws RecognitionException { + org.emftext.language.java.arrays.ArrayInstantiationByValuesUntyped element = null; + + int parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped_StartIndex = input.index(); + + Token a2=null; + org.emftext.language.java.arrays.ArrayInitializer a0_0 =null; + + org.emftext.language.java.arrays.ArraySelector a1_0 =null; + + org.emftext.language.java.references.Reference a3_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 36) ) { return element; } + + // Java.g:14218:2: ( (a0_0= parse_org_emftext_language_java_arrays_ArrayInitializer ) ( (a1_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a2= '.' (a3_0= parse_org_emftext_language_java_references_Reference ) ) )? ) + // Java.g:14219:2: (a0_0= parse_org_emftext_language_java_arrays_ArrayInitializer ) ( (a1_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a2= '.' (a3_0= parse_org_emftext_language_java_references_Reference ) ) )? + { + // Java.g:14219:2: (a0_0= parse_org_emftext_language_java_arrays_ArrayInitializer ) + // Java.g:14220:3: a0_0= parse_org_emftext_language_java_arrays_ArrayInitializer + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped12163); + a0_0=parse_org_emftext_language_java_arrays_ArrayInitializer(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationByValuesUntyped(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_UNTYPED__ARRAY_INITIALIZER), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_34_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5701); + addExpectedElement(5702); + addExpectedElement(5703); + addExpectedElement(5704); + addExpectedElement(5705); + addExpectedElement(5706); + addExpectedElement(5707); + addExpectedElement(5708); + addExpectedElement(5709); + addExpectedElement(5710); + addExpectedElement(5711); + addExpectedElement(5712); + addExpectedElement(5713); + addExpectedElement(5714); + addExpectedElement(5715); + addExpectedElement(5716); + addExpectedElement(5717); + addExpectedElement(5718); + addExpectedElement(5719); + addExpectedElement(5720); + addExpectedElement(5721); + addExpectedElement(5722); + addExpectedElement(5723); + addExpectedElement(5724); + addExpectedElement(5725); + addExpectedElement(5726); + addExpectedElement(5727); + addExpectedElement(5728); + addExpectedElement(5729); + addExpectedElement(5730); + addExpectedElement(5731); + addExpectedElement(5732); + addExpectedElement(5733); + addExpectedElement(5734); + addExpectedElement(5735); + addExpectedElement(5736); + addExpectedElement(5737); + addExpectedElement(5738); + addExpectedElement(5739); + addExpectedElement(5740); + addExpectedElement(5741); + addExpectedElement(5742); + addExpectedElement(5743); + addExpectedElement(5744); + addExpectedElement(5745); + addExpectedElement(5746); + addExpectedElement(5747); + addExpectedElement(5748); + addExpectedElement(5749); + addExpectedElement(5750); + addExpectedElement(5751); + addExpectedElement(5752); + addExpectedElement(5753); + addExpectedElement(5754); + addExpectedElement(5755); + addExpectedElement(5756); + addExpectedElement(5757); + addExpectedElement(5758); + addExpectedElement(5759); + addExpectedElement(5760); + addExpectedElement(5761); + addExpectedElement(5762); + addExpectedElement(5763); + addExpectedElement(5764); + addExpectedElement(5765); + addExpectedElement(5766); + } + + // Java.g:14310:2: ( (a1_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* + loop139: + do { + int alt139=2; + int LA139_0 = input.LA(1); + + if ( (LA139_0==49) ) { + alt139=1; + } + + + switch (alt139) { + case 1 : + // Java.g:14311:3: (a1_0= parse_org_emftext_language_java_arrays_ArraySelector ) + { + // Java.g:14311:3: (a1_0= parse_org_emftext_language_java_arrays_ArraySelector ) + // Java.g:14312:4: a1_0= parse_org_emftext_language_java_arrays_ArraySelector + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArraySelector_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped12190); + a1_0=parse_org_emftext_language_java_arrays_ArraySelector(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationByValuesUntyped(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_UNTYPED__ARRAY_SELECTORS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_34_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + } + break; + + default : + break loop139; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5767); + addExpectedElement(5768); + addExpectedElement(5769); + addExpectedElement(5770); + addExpectedElement(5771); + addExpectedElement(5772); + addExpectedElement(5773); + addExpectedElement(5774); + addExpectedElement(5775); + addExpectedElement(5776); + addExpectedElement(5777); + addExpectedElement(5778); + addExpectedElement(5779); + addExpectedElement(5780); + addExpectedElement(5781); + addExpectedElement(5782); + addExpectedElement(5783); + addExpectedElement(5784); + addExpectedElement(5785); + addExpectedElement(5786); + addExpectedElement(5787); + addExpectedElement(5788); + addExpectedElement(5789); + addExpectedElement(5790); + addExpectedElement(5791); + addExpectedElement(5792); + addExpectedElement(5793); + addExpectedElement(5794); + addExpectedElement(5795); + addExpectedElement(5796); + addExpectedElement(5797); + addExpectedElement(5798); + addExpectedElement(5799); + addExpectedElement(5800); + addExpectedElement(5801); + addExpectedElement(5802); + addExpectedElement(5803); + addExpectedElement(5804); + addExpectedElement(5805); + addExpectedElement(5806); + addExpectedElement(5807); + addExpectedElement(5808); + addExpectedElement(5809); + addExpectedElement(5810); + addExpectedElement(5811); + addExpectedElement(5812); + addExpectedElement(5813); + addExpectedElement(5814); + addExpectedElement(5815); + addExpectedElement(5816); + addExpectedElement(5817); + addExpectedElement(5818); + addExpectedElement(5819); + addExpectedElement(5820); + addExpectedElement(5821); + addExpectedElement(5822); + addExpectedElement(5823); + addExpectedElement(5824); + addExpectedElement(5825); + addExpectedElement(5826); + addExpectedElement(5827); + addExpectedElement(5828); + addExpectedElement(5829); + addExpectedElement(5830); + addExpectedElement(5831); + addExpectedElement(5832); + } + + // Java.g:14403:2: ( (a2= '.' (a3_0= parse_org_emftext_language_java_references_Reference ) ) )? + int alt140=2; + int LA140_0 = input.LA(1); + + if ( (LA140_0==37) ) { + alt140=1; + } + switch (alt140) { + case 1 : + // Java.g:14404:3: (a2= '.' (a3_0= parse_org_emftext_language_java_references_Reference ) ) + { + // Java.g:14404:3: (a2= '.' (a3_0= parse_org_emftext_language_java_references_Reference ) ) + // Java.g:14405:4: a2= '.' (a3_0= parse_org_emftext_language_java_references_Reference ) + { + a2=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped12225); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationByValuesUntyped(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_34_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5833); + addExpectedElement(5834); + addExpectedElement(5835); + addExpectedElement(5836); + addExpectedElement(5837); + addExpectedElement(5838); + addExpectedElement(5839); + addExpectedElement(5840); + addExpectedElement(5841); + addExpectedElement(5842); + addExpectedElement(5843); + addExpectedElement(5844); + addExpectedElement(5845); + addExpectedElement(5846); + addExpectedElement(5847); + addExpectedElement(5848); + addExpectedElement(5849); + addExpectedElement(5850); + addExpectedElement(5851); + addExpectedElement(5852); + addExpectedElement(5853); + addExpectedElement(5854); + addExpectedElement(5855); + } + + // Java.g:14441:4: (a3_0= parse_org_emftext_language_java_references_Reference ) + // Java.g:14442:5: a3_0= parse_org_emftext_language_java_references_Reference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped12251); + a3_0=parse_org_emftext_language_java_references_Reference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationByValuesUntyped(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_VALUES_UNTYPED__NEXT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_34_0_0_2_0_0_1, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5856); + addExpectedElement(5857); + addExpectedElement(5858); + addExpectedElement(5859); + addExpectedElement(5860); + addExpectedElement(5861); + addExpectedElement(5862); + addExpectedElement(5863); + addExpectedElement(5864); + addExpectedElement(5865); + addExpectedElement(5866); + addExpectedElement(5867); + addExpectedElement(5868); + addExpectedElement(5869); + addExpectedElement(5870); + addExpectedElement(5871); + addExpectedElement(5872); + addExpectedElement(5873); + addExpectedElement(5874); + addExpectedElement(5875); + addExpectedElement(5876); + addExpectedElement(5877); + addExpectedElement(5878); + addExpectedElement(5879); + addExpectedElement(5880); + addExpectedElement(5881); + addExpectedElement(5882); + addExpectedElement(5883); + addExpectedElement(5884); + addExpectedElement(5885); + addExpectedElement(5886); + addExpectedElement(5887); + addExpectedElement(5888); + addExpectedElement(5889); + addExpectedElement(5890); + addExpectedElement(5891); + addExpectedElement(5892); + addExpectedElement(5893); + addExpectedElement(5894); + addExpectedElement(5895); + addExpectedElement(5896); + addExpectedElement(5897); + addExpectedElement(5898); + addExpectedElement(5899); + addExpectedElement(5900); + addExpectedElement(5901); + addExpectedElement(5902); + addExpectedElement(5903); + addExpectedElement(5904); + addExpectedElement(5905); + addExpectedElement(5906); + addExpectedElement(5907); + addExpectedElement(5908); + addExpectedElement(5909); + addExpectedElement(5910); + addExpectedElement(5911); + addExpectedElement(5912); + addExpectedElement(5913); + addExpectedElement(5914); + addExpectedElement(5915); + addExpectedElement(5916); + addExpectedElement(5917); + addExpectedElement(5918); + addExpectedElement(5919); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5920); + addExpectedElement(5921); + addExpectedElement(5922); + addExpectedElement(5923); + addExpectedElement(5924); + addExpectedElement(5925); + addExpectedElement(5926); + addExpectedElement(5927); + addExpectedElement(5928); + addExpectedElement(5929); + addExpectedElement(5930); + addExpectedElement(5931); + addExpectedElement(5932); + addExpectedElement(5933); + addExpectedElement(5934); + addExpectedElement(5935); + addExpectedElement(5936); + addExpectedElement(5937); + addExpectedElement(5938); + addExpectedElement(5939); + addExpectedElement(5940); + addExpectedElement(5941); + addExpectedElement(5942); + addExpectedElement(5943); + addExpectedElement(5944); + addExpectedElement(5945); + addExpectedElement(5946); + addExpectedElement(5947); + addExpectedElement(5948); + addExpectedElement(5949); + addExpectedElement(5950); + addExpectedElement(5951); + addExpectedElement(5952); + addExpectedElement(5953); + addExpectedElement(5954); + addExpectedElement(5955); + addExpectedElement(5956); + addExpectedElement(5957); + addExpectedElement(5958); + addExpectedElement(5959); + addExpectedElement(5960); + addExpectedElement(5961); + addExpectedElement(5962); + addExpectedElement(5963); + addExpectedElement(5964); + addExpectedElement(5965); + addExpectedElement(5966); + addExpectedElement(5967); + addExpectedElement(5968); + addExpectedElement(5969); + addExpectedElement(5970); + addExpectedElement(5971); + addExpectedElement(5972); + addExpectedElement(5973); + addExpectedElement(5974); + addExpectedElement(5975); + addExpectedElement(5976); + addExpectedElement(5977); + addExpectedElement(5978); + addExpectedElement(5979); + addExpectedElement(5980); + addExpectedElement(5981); + addExpectedElement(5982); + addExpectedElement(5983); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 36, parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped" + + + + // $ANTLR start "parse_org_emftext_language_java_arrays_ArrayInstantiationBySize" + // Java.g:14602:1: parse_org_emftext_language_java_arrays_ArrayInstantiationBySize returns [org.emftext.language.java.arrays.ArrayInstantiationBySize element = null] : a0= 'new' (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2= '[' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a4= ']' ) )+ ( (a5_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a6= '.' (a7_0= parse_org_emftext_language_java_references_Reference ) ) )? ; + public final org.emftext.language.java.arrays.ArrayInstantiationBySize parse_org_emftext_language_java_arrays_ArrayInstantiationBySize() throws RecognitionException { + org.emftext.language.java.arrays.ArrayInstantiationBySize element = null; + + int parse_org_emftext_language_java_arrays_ArrayInstantiationBySize_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + Token a4=null; + Token a6=null; + org.emftext.language.java.types.TypeReference a1_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a3_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a5_0 =null; + + org.emftext.language.java.references.Reference a7_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 37) ) { return element; } + + // Java.g:14605:2: (a0= 'new' (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2= '[' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a4= ']' ) )+ ( (a5_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a6= '.' (a7_0= parse_org_emftext_language_java_references_Reference ) ) )? ) + // Java.g:14606:2: a0= 'new' (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2= '[' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a4= ']' ) )+ ( (a5_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a6= '.' (a7_0= parse_org_emftext_language_java_references_Reference ) ) )? + { + a0=(Token)match(input,84,FOLLOW_84_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12307); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationBySize(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_35_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5984); + addExpectedElement(5985); + addExpectedElement(5986); + addExpectedElement(5987); + addExpectedElement(5988); + addExpectedElement(5989); + addExpectedElement(5990); + addExpectedElement(5991); + addExpectedElement(5992); + addExpectedElement(5993); + addExpectedElement(5994); + } + + // Java.g:14630:2: (a1_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:14631:3: a1_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12325); + a1_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationBySize(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_SIZE__TYPE_REFERENCE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_35_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5995); + } + + // Java.g:14656:2: ( (a2= '[' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a4= ']' ) )+ + int cnt141=0; + loop141: + do { + int alt141=2; + int LA141_0 = input.LA(1); + + if ( (LA141_0==49) ) { + int LA141_1 = input.LA(2); + + if ( ((LA141_1 >= BOOLEAN_LITERAL && LA141_1 <= IDENTIFIER)||(LA141_1 >= OCTAL_INTEGER_LITERAL && LA141_1 <= OCTAL_LONG_LITERAL)||LA141_1==STRING_LITERAL||LA141_1==21||LA141_1==26||(LA141_1 >= 30 && LA141_1 <= 31)||(LA141_1 >= 34 && LA141_1 <= 35)||LA141_1==43||LA141_1==48||LA141_1==58||LA141_1==60||(LA141_1 >= 63 && LA141_1 <= 64)||LA141_1==68||LA141_1==74||LA141_1==80||LA141_1==82||(LA141_1 >= 84 && LA141_1 <= 85)||LA141_1==91||LA141_1==94||LA141_1==97||LA141_1==102||LA141_1==105||LA141_1==110) ) { + alt141=1; + } + + + } + + + switch (alt141) { + case 1 : + // Java.g:14657:3: (a2= '[' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a4= ']' ) + { + // Java.g:14657:3: (a2= '[' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a4= ']' ) + // Java.g:14658:4: a2= '[' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a4= ']' + { + a2=(Token)match(input,49,FOLLOW_49_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12352); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationBySize(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_35_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(5996); + addExpectedElement(5997); + addExpectedElement(5998); + addExpectedElement(5999); + addExpectedElement(6000); + addExpectedElement(6001); + addExpectedElement(6002); + addExpectedElement(6003); + addExpectedElement(6004); + addExpectedElement(6005); + addExpectedElement(6006); + addExpectedElement(6007); + addExpectedElement(6008); + addExpectedElement(6009); + addExpectedElement(6010); + addExpectedElement(6011); + addExpectedElement(6012); + addExpectedElement(6013); + addExpectedElement(6014); + addExpectedElement(6015); + addExpectedElement(6016); + addExpectedElement(6017); + addExpectedElement(6018); + addExpectedElement(6019); + addExpectedElement(6020); + addExpectedElement(6021); + addExpectedElement(6022); + addExpectedElement(6023); + addExpectedElement(6024); + addExpectedElement(6025); + addExpectedElement(6026); + addExpectedElement(6027); + addExpectedElement(6028); + addExpectedElement(6029); + addExpectedElement(6030); + addExpectedElement(6031); + addExpectedElement(6032); + addExpectedElement(6033); + addExpectedElement(6034); + addExpectedElement(6035); + addExpectedElement(6036); + addExpectedElement(6037); + addExpectedElement(6038); + } + + // Java.g:14714:4: (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:14715:5: a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12378); + a3_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationBySize(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + addObjectToList(element, org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_SIZE__SIZES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_35_0_0_2_0_0_1, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6039); + } + + a4=(Token)match(input,53,FOLLOW_53_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12406); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationBySize(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_35_0_0_2_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6040); + addExpectedElement(6041); + addExpectedElement(6042); + addExpectedElement(6043); + addExpectedElement(6044); + addExpectedElement(6045); + addExpectedElement(6046); + addExpectedElement(6047); + addExpectedElement(6048); + addExpectedElement(6049); + addExpectedElement(6050); + addExpectedElement(6051); + addExpectedElement(6052); + addExpectedElement(6053); + addExpectedElement(6054); + addExpectedElement(6055); + addExpectedElement(6056); + addExpectedElement(6057); + addExpectedElement(6058); + addExpectedElement(6059); + addExpectedElement(6060); + addExpectedElement(6061); + addExpectedElement(6062); + addExpectedElement(6063); + addExpectedElement(6064); + addExpectedElement(6065); + addExpectedElement(6066); + addExpectedElement(6067); + addExpectedElement(6068); + addExpectedElement(6069); + addExpectedElement(6070); + addExpectedElement(6071); + addExpectedElement(6072); + addExpectedElement(6073); + addExpectedElement(6074); + addExpectedElement(6075); + addExpectedElement(6076); + addExpectedElement(6077); + addExpectedElement(6078); + addExpectedElement(6079); + addExpectedElement(6080); + addExpectedElement(6081); + addExpectedElement(6082); + addExpectedElement(6083); + addExpectedElement(6084); + addExpectedElement(6085); + addExpectedElement(6086); + addExpectedElement(6087); + addExpectedElement(6088); + addExpectedElement(6089); + addExpectedElement(6090); + addExpectedElement(6091); + addExpectedElement(6092); + addExpectedElement(6093); + addExpectedElement(6094); + addExpectedElement(6095); + addExpectedElement(6096); + addExpectedElement(6097); + addExpectedElement(6098); + addExpectedElement(6099); + addExpectedElement(6100); + addExpectedElement(6101); + addExpectedElement(6102); + addExpectedElement(6103); + addExpectedElement(6104); + addExpectedElement(6105); + addExpectedElement(6106); + } + + } + + + } + break; + + default : + if ( cnt141 >= 1 ) break loop141; + if (state.backtracking>0) {state.failed=true; return element;} + EarlyExitException eee = + new EarlyExitException(141, input); + throw eee; + } + cnt141++; + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6107); + addExpectedElement(6108); + addExpectedElement(6109); + addExpectedElement(6110); + addExpectedElement(6111); + addExpectedElement(6112); + addExpectedElement(6113); + addExpectedElement(6114); + addExpectedElement(6115); + addExpectedElement(6116); + addExpectedElement(6117); + addExpectedElement(6118); + addExpectedElement(6119); + addExpectedElement(6120); + addExpectedElement(6121); + addExpectedElement(6122); + addExpectedElement(6123); + addExpectedElement(6124); + addExpectedElement(6125); + addExpectedElement(6126); + addExpectedElement(6127); + addExpectedElement(6128); + addExpectedElement(6129); + addExpectedElement(6130); + addExpectedElement(6131); + addExpectedElement(6132); + addExpectedElement(6133); + addExpectedElement(6134); + addExpectedElement(6135); + addExpectedElement(6136); + addExpectedElement(6137); + addExpectedElement(6138); + addExpectedElement(6139); + addExpectedElement(6140); + addExpectedElement(6141); + addExpectedElement(6142); + addExpectedElement(6143); + addExpectedElement(6144); + addExpectedElement(6145); + addExpectedElement(6146); + addExpectedElement(6147); + addExpectedElement(6148); + addExpectedElement(6149); + addExpectedElement(6150); + addExpectedElement(6151); + addExpectedElement(6152); + addExpectedElement(6153); + addExpectedElement(6154); + addExpectedElement(6155); + addExpectedElement(6156); + addExpectedElement(6157); + addExpectedElement(6158); + addExpectedElement(6159); + addExpectedElement(6160); + addExpectedElement(6161); + addExpectedElement(6162); + addExpectedElement(6163); + addExpectedElement(6164); + addExpectedElement(6165); + addExpectedElement(6166); + addExpectedElement(6167); + addExpectedElement(6168); + addExpectedElement(6169); + addExpectedElement(6170); + addExpectedElement(6171); + addExpectedElement(6172); + addExpectedElement(6173); + } + + // Java.g:14893:2: ( (a5_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop142: + do { + int alt142=2; + int LA142_0 = input.LA(1); + + if ( (LA142_0==49) ) { + alt142=1; + } + + + switch (alt142) { + case 1 : + // Java.g:14894:3: (a5_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:14894:3: (a5_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:14895:4: a5_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12448); + a5_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationBySize(); + startIncompleteElement(element); + } + if (a5_0 != null) { + if (a5_0 != null) { + Object value = a5_0; + addObjectToList(element, org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_SIZE__ARRAY_DIMENSIONS_BEFORE, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_35_0_0_3, a5_0, true); + copyLocalizationInfos(a5_0, element); + } + } + + } + + + } + break; + + default : + break loop142; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6174); + addExpectedElement(6175); + addExpectedElement(6176); + addExpectedElement(6177); + addExpectedElement(6178); + addExpectedElement(6179); + addExpectedElement(6180); + addExpectedElement(6181); + addExpectedElement(6182); + addExpectedElement(6183); + addExpectedElement(6184); + addExpectedElement(6185); + addExpectedElement(6186); + addExpectedElement(6187); + addExpectedElement(6188); + addExpectedElement(6189); + addExpectedElement(6190); + addExpectedElement(6191); + addExpectedElement(6192); + addExpectedElement(6193); + addExpectedElement(6194); + addExpectedElement(6195); + addExpectedElement(6196); + addExpectedElement(6197); + addExpectedElement(6198); + addExpectedElement(6199); + addExpectedElement(6200); + addExpectedElement(6201); + addExpectedElement(6202); + addExpectedElement(6203); + addExpectedElement(6204); + addExpectedElement(6205); + addExpectedElement(6206); + addExpectedElement(6207); + addExpectedElement(6208); + addExpectedElement(6209); + addExpectedElement(6210); + addExpectedElement(6211); + addExpectedElement(6212); + addExpectedElement(6213); + addExpectedElement(6214); + addExpectedElement(6215); + addExpectedElement(6216); + addExpectedElement(6217); + addExpectedElement(6218); + addExpectedElement(6219); + addExpectedElement(6220); + addExpectedElement(6221); + addExpectedElement(6222); + addExpectedElement(6223); + addExpectedElement(6224); + addExpectedElement(6225); + addExpectedElement(6226); + addExpectedElement(6227); + addExpectedElement(6228); + addExpectedElement(6229); + addExpectedElement(6230); + addExpectedElement(6231); + addExpectedElement(6232); + addExpectedElement(6233); + addExpectedElement(6234); + addExpectedElement(6235); + addExpectedElement(6236); + addExpectedElement(6237); + addExpectedElement(6238); + addExpectedElement(6239); + } + + // Java.g:14986:2: ( (a6= '.' (a7_0= parse_org_emftext_language_java_references_Reference ) ) )? + int alt143=2; + int LA143_0 = input.LA(1); + + if ( (LA143_0==37) ) { + alt143=1; + } + switch (alt143) { + case 1 : + // Java.g:14987:3: (a6= '.' (a7_0= parse_org_emftext_language_java_references_Reference ) ) + { + // Java.g:14987:3: (a6= '.' (a7_0= parse_org_emftext_language_java_references_Reference ) ) + // Java.g:14988:4: a6= '.' (a7_0= parse_org_emftext_language_java_references_Reference ) + { + a6=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12483); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationBySize(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_35_0_0_4_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a6, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6240); + addExpectedElement(6241); + addExpectedElement(6242); + addExpectedElement(6243); + addExpectedElement(6244); + addExpectedElement(6245); + addExpectedElement(6246); + addExpectedElement(6247); + addExpectedElement(6248); + addExpectedElement(6249); + addExpectedElement(6250); + addExpectedElement(6251); + addExpectedElement(6252); + addExpectedElement(6253); + addExpectedElement(6254); + addExpectedElement(6255); + addExpectedElement(6256); + addExpectedElement(6257); + addExpectedElement(6258); + addExpectedElement(6259); + addExpectedElement(6260); + addExpectedElement(6261); + addExpectedElement(6262); + } + + // Java.g:15024:4: (a7_0= parse_org_emftext_language_java_references_Reference ) + // Java.g:15025:5: a7_0= parse_org_emftext_language_java_references_Reference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12509); + a7_0=parse_org_emftext_language_java_references_Reference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInstantiationBySize(); + startIncompleteElement(element); + } + if (a7_0 != null) { + if (a7_0 != null) { + Object value = a7_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_INSTANTIATION_BY_SIZE__NEXT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_35_0_0_4_0_0_1, a7_0, true); + copyLocalizationInfos(a7_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6263); + addExpectedElement(6264); + addExpectedElement(6265); + addExpectedElement(6266); + addExpectedElement(6267); + addExpectedElement(6268); + addExpectedElement(6269); + addExpectedElement(6270); + addExpectedElement(6271); + addExpectedElement(6272); + addExpectedElement(6273); + addExpectedElement(6274); + addExpectedElement(6275); + addExpectedElement(6276); + addExpectedElement(6277); + addExpectedElement(6278); + addExpectedElement(6279); + addExpectedElement(6280); + addExpectedElement(6281); + addExpectedElement(6282); + addExpectedElement(6283); + addExpectedElement(6284); + addExpectedElement(6285); + addExpectedElement(6286); + addExpectedElement(6287); + addExpectedElement(6288); + addExpectedElement(6289); + addExpectedElement(6290); + addExpectedElement(6291); + addExpectedElement(6292); + addExpectedElement(6293); + addExpectedElement(6294); + addExpectedElement(6295); + addExpectedElement(6296); + addExpectedElement(6297); + addExpectedElement(6298); + addExpectedElement(6299); + addExpectedElement(6300); + addExpectedElement(6301); + addExpectedElement(6302); + addExpectedElement(6303); + addExpectedElement(6304); + addExpectedElement(6305); + addExpectedElement(6306); + addExpectedElement(6307); + addExpectedElement(6308); + addExpectedElement(6309); + addExpectedElement(6310); + addExpectedElement(6311); + addExpectedElement(6312); + addExpectedElement(6313); + addExpectedElement(6314); + addExpectedElement(6315); + addExpectedElement(6316); + addExpectedElement(6317); + addExpectedElement(6318); + addExpectedElement(6319); + addExpectedElement(6320); + addExpectedElement(6321); + addExpectedElement(6322); + addExpectedElement(6323); + addExpectedElement(6324); + addExpectedElement(6325); + addExpectedElement(6326); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6327); + addExpectedElement(6328); + addExpectedElement(6329); + addExpectedElement(6330); + addExpectedElement(6331); + addExpectedElement(6332); + addExpectedElement(6333); + addExpectedElement(6334); + addExpectedElement(6335); + addExpectedElement(6336); + addExpectedElement(6337); + addExpectedElement(6338); + addExpectedElement(6339); + addExpectedElement(6340); + addExpectedElement(6341); + addExpectedElement(6342); + addExpectedElement(6343); + addExpectedElement(6344); + addExpectedElement(6345); + addExpectedElement(6346); + addExpectedElement(6347); + addExpectedElement(6348); + addExpectedElement(6349); + addExpectedElement(6350); + addExpectedElement(6351); + addExpectedElement(6352); + addExpectedElement(6353); + addExpectedElement(6354); + addExpectedElement(6355); + addExpectedElement(6356); + addExpectedElement(6357); + addExpectedElement(6358); + addExpectedElement(6359); + addExpectedElement(6360); + addExpectedElement(6361); + addExpectedElement(6362); + addExpectedElement(6363); + addExpectedElement(6364); + addExpectedElement(6365); + addExpectedElement(6366); + addExpectedElement(6367); + addExpectedElement(6368); + addExpectedElement(6369); + addExpectedElement(6370); + addExpectedElement(6371); + addExpectedElement(6372); + addExpectedElement(6373); + addExpectedElement(6374); + addExpectedElement(6375); + addExpectedElement(6376); + addExpectedElement(6377); + addExpectedElement(6378); + addExpectedElement(6379); + addExpectedElement(6380); + addExpectedElement(6381); + addExpectedElement(6382); + addExpectedElement(6383); + addExpectedElement(6384); + addExpectedElement(6385); + addExpectedElement(6386); + addExpectedElement(6387); + addExpectedElement(6388); + addExpectedElement(6389); + addExpectedElement(6390); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 37, parse_org_emftext_language_java_arrays_ArrayInstantiationBySize_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_arrays_ArrayInstantiationBySize" + + + + // $ANTLR start "parse_org_emftext_language_java_arrays_ArrayInitializer" + // Java.g:15185:1: parse_org_emftext_language_java_arrays_ArrayInitializer returns [org.emftext.language.java.arrays.ArrayInitializer element = null] : a0= '{' ( ( (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a1_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a3_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ) )* ) )? ( (a4= ',' ) )? a5= '}' ; + public final org.emftext.language.java.arrays.ArrayInitializer parse_org_emftext_language_java_arrays_ArrayInitializer() throws RecognitionException { + org.emftext.language.java.arrays.ArrayInitializer element = null; + + int parse_org_emftext_language_java_arrays_ArrayInitializer_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + Token a4=null; + Token a5=null; + org.emftext.language.java.expressions.AssignmentExpression a1_0 =null; + + org.emftext.language.java.arrays.ArrayInitializer a1_1 =null; + + org.emftext.language.java.expressions.AssignmentExpression a3_0 =null; + + org.emftext.language.java.arrays.ArrayInitializer a3_1 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 38) ) { return element; } + + // Java.g:15188:2: (a0= '{' ( ( (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a1_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a3_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ) )* ) )? ( (a4= ',' ) )? a5= '}' ) + // Java.g:15189:2: a0= '{' ( ( (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a1_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a3_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ) )* ) )? ( (a4= ',' ) )? a5= '}' + { + a0=(Token)match(input,105,FOLLOW_105_in_parse_org_emftext_language_java_arrays_ArrayInitializer12565); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInitializer(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_36_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6391); + addExpectedElement(6392); + addExpectedElement(6393); + addExpectedElement(6394); + addExpectedElement(6395); + addExpectedElement(6396); + addExpectedElement(6397); + addExpectedElement(6398); + addExpectedElement(6399); + addExpectedElement(6400); + addExpectedElement(6401); + addExpectedElement(6402); + addExpectedElement(6403); + addExpectedElement(6404); + addExpectedElement(6405); + addExpectedElement(6406); + addExpectedElement(6407); + addExpectedElement(6408); + addExpectedElement(6409); + addExpectedElement(6410); + addExpectedElement(6411); + addExpectedElement(6412); + addExpectedElement(6413); + addExpectedElement(6414); + addExpectedElement(6415); + addExpectedElement(6416); + addExpectedElement(6417); + addExpectedElement(6418); + addExpectedElement(6419); + addExpectedElement(6420); + addExpectedElement(6421); + addExpectedElement(6422); + addExpectedElement(6423); + addExpectedElement(6424); + addExpectedElement(6425); + addExpectedElement(6426); + addExpectedElement(6427); + addExpectedElement(6428); + addExpectedElement(6429); + addExpectedElement(6430); + addExpectedElement(6431); + addExpectedElement(6432); + addExpectedElement(6433); + addExpectedElement(6434); + addExpectedElement(6435); + } + + // Java.g:15247:2: ( ( (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a1_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a3_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ) )* ) )? + int alt147=2; + int LA147_0 = input.LA(1); + + if ( ((LA147_0 >= BOOLEAN_LITERAL && LA147_0 <= IDENTIFIER)||(LA147_0 >= OCTAL_INTEGER_LITERAL && LA147_0 <= OCTAL_LONG_LITERAL)||LA147_0==STRING_LITERAL||LA147_0==21||LA147_0==26||(LA147_0 >= 30 && LA147_0 <= 31)||(LA147_0 >= 34 && LA147_0 <= 35)||LA147_0==43||LA147_0==48||LA147_0==58||LA147_0==60||(LA147_0 >= 63 && LA147_0 <= 64)||LA147_0==68||LA147_0==74||LA147_0==80||LA147_0==82||(LA147_0 >= 84 && LA147_0 <= 85)||LA147_0==91||LA147_0==94||LA147_0==97||LA147_0==102||LA147_0==105||LA147_0==110) ) { + alt147=1; + } + switch (alt147) { + case 1 : + // Java.g:15248:3: ( (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a1_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a3_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ) )* ) + { + // Java.g:15248:3: ( (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a1_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a3_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ) )* ) + // Java.g:15249:4: (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a1_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a3_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ) )* + { + // Java.g:15249:4: (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a1_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) + int alt144=2; + int LA144_0 = input.LA(1); + + if ( ((LA144_0 >= BOOLEAN_LITERAL && LA144_0 <= IDENTIFIER)||(LA144_0 >= OCTAL_INTEGER_LITERAL && LA144_0 <= OCTAL_LONG_LITERAL)||LA144_0==STRING_LITERAL||LA144_0==21||LA144_0==26||(LA144_0 >= 30 && LA144_0 <= 31)||(LA144_0 >= 34 && LA144_0 <= 35)||LA144_0==43||LA144_0==48||LA144_0==58||LA144_0==60||(LA144_0 >= 63 && LA144_0 <= 64)||LA144_0==68||LA144_0==74||LA144_0==80||LA144_0==82||(LA144_0 >= 84 && LA144_0 <= 85)||LA144_0==91||LA144_0==94||LA144_0==97||LA144_0==102||LA144_0==110) ) { + alt144=1; + } + else if ( (LA144_0==105) ) { + int LA144_10 = input.LA(2); + + if ( (synpred145_Java()) ) { + alt144=1; + } + else if ( (true) ) { + alt144=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 144, 10, input); + + throw nvae; + + } + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 144, 0, input); + + throw nvae; + + } + switch (alt144) { + case 1 : + // Java.g:15250:5: a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_arrays_ArrayInitializer12594); + a1_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInitializer(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.arrays.ArraysPackage.ARRAY_INITIALIZER__INITIAL_VALUES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_36_0_0_2_0_0_0, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + break; + case 2 : + // Java.g:15269:10: a1_1= parse_org_emftext_language_java_arrays_ArrayInitializer + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_parse_org_emftext_language_java_arrays_ArrayInitializer12614); + a1_1=parse_org_emftext_language_java_arrays_ArrayInitializer(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInitializer(); + startIncompleteElement(element); + } + if (a1_1 != null) { + if (a1_1 != null) { + Object value = a1_1; + addObjectToList(element, org.emftext.language.java.arrays.ArraysPackage.ARRAY_INITIALIZER__INITIAL_VALUES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_36_0_0_2_0_0_0, a1_1, true); + copyLocalizationInfos(a1_1, element); + } + } + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6436); + addExpectedElement(6437); + addExpectedElement(6438); + } + + // Java.g:15296:4: ( (a2= ',' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a3_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ) )* + loop146: + do { + int alt146=2; + int LA146_0 = input.LA(1); + + if ( (LA146_0==33) ) { + int LA146_1 = input.LA(2); + + if ( ((LA146_1 >= BOOLEAN_LITERAL && LA146_1 <= IDENTIFIER)||(LA146_1 >= OCTAL_INTEGER_LITERAL && LA146_1 <= OCTAL_LONG_LITERAL)||LA146_1==STRING_LITERAL||LA146_1==21||LA146_1==26||(LA146_1 >= 30 && LA146_1 <= 31)||(LA146_1 >= 34 && LA146_1 <= 35)||LA146_1==43||LA146_1==48||LA146_1==58||LA146_1==60||(LA146_1 >= 63 && LA146_1 <= 64)||LA146_1==68||LA146_1==74||LA146_1==80||LA146_1==82||(LA146_1 >= 84 && LA146_1 <= 85)||LA146_1==91||LA146_1==94||LA146_1==97||LA146_1==102||LA146_1==105||LA146_1==110) ) { + alt146=1; + } + + + } + + + switch (alt146) { + case 1 : + // Java.g:15297:5: (a2= ',' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a3_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ) + { + // Java.g:15297:5: (a2= ',' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a3_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) ) + // Java.g:15298:6: a2= ',' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a3_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) + { + a2=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_arrays_ArrayInitializer12655); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInitializer(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_36_0_0_2_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6439); + addExpectedElement(6440); + addExpectedElement(6441); + addExpectedElement(6442); + addExpectedElement(6443); + addExpectedElement(6444); + addExpectedElement(6445); + addExpectedElement(6446); + addExpectedElement(6447); + addExpectedElement(6448); + addExpectedElement(6449); + addExpectedElement(6450); + addExpectedElement(6451); + addExpectedElement(6452); + addExpectedElement(6453); + addExpectedElement(6454); + addExpectedElement(6455); + addExpectedElement(6456); + addExpectedElement(6457); + addExpectedElement(6458); + addExpectedElement(6459); + addExpectedElement(6460); + addExpectedElement(6461); + addExpectedElement(6462); + addExpectedElement(6463); + addExpectedElement(6464); + addExpectedElement(6465); + addExpectedElement(6466); + addExpectedElement(6467); + addExpectedElement(6468); + addExpectedElement(6469); + addExpectedElement(6470); + addExpectedElement(6471); + addExpectedElement(6472); + addExpectedElement(6473); + addExpectedElement(6474); + addExpectedElement(6475); + addExpectedElement(6476); + addExpectedElement(6477); + addExpectedElement(6478); + addExpectedElement(6479); + addExpectedElement(6480); + addExpectedElement(6481); + } + + // Java.g:15354:6: (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression |a3_1= parse_org_emftext_language_java_arrays_ArrayInitializer ) + int alt145=2; + int LA145_0 = input.LA(1); + + if ( ((LA145_0 >= BOOLEAN_LITERAL && LA145_0 <= IDENTIFIER)||(LA145_0 >= OCTAL_INTEGER_LITERAL && LA145_0 <= OCTAL_LONG_LITERAL)||LA145_0==STRING_LITERAL||LA145_0==21||LA145_0==26||(LA145_0 >= 30 && LA145_0 <= 31)||(LA145_0 >= 34 && LA145_0 <= 35)||LA145_0==43||LA145_0==48||LA145_0==58||LA145_0==60||(LA145_0 >= 63 && LA145_0 <= 64)||LA145_0==68||LA145_0==74||LA145_0==80||LA145_0==82||(LA145_0 >= 84 && LA145_0 <= 85)||LA145_0==91||LA145_0==94||LA145_0==97||LA145_0==102||LA145_0==110) ) { + alt145=1; + } + else if ( (LA145_0==105) ) { + int LA145_10 = input.LA(2); + + if ( (synpred146_Java()) ) { + alt145=1; + } + else if ( (true) ) { + alt145=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 145, 10, input); + + throw nvae; + + } + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 145, 0, input); + + throw nvae; + + } + switch (alt145) { + case 1 : + // Java.g:15355:7: a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_arrays_ArrayInitializer12689); + a3_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInitializer(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + addObjectToList(element, org.emftext.language.java.arrays.ArraysPackage.ARRAY_INITIALIZER__INITIAL_VALUES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_36_0_0_2_0_0_1_0_0_1, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + break; + case 2 : + // Java.g:15374:14: a3_1= parse_org_emftext_language_java_arrays_ArrayInitializer + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_parse_org_emftext_language_java_arrays_ArrayInitializer12715); + a3_1=parse_org_emftext_language_java_arrays_ArrayInitializer(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInitializer(); + startIncompleteElement(element); + } + if (a3_1 != null) { + if (a3_1 != null) { + Object value = a3_1; + addObjectToList(element, org.emftext.language.java.arrays.ArraysPackage.ARRAY_INITIALIZER__INITIAL_VALUES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_36_0_0_2_0_0_1_0_0_1, a3_1, true); + copyLocalizationInfos(a3_1, element); + } + } + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6482); + addExpectedElement(6483); + addExpectedElement(6484); + } + + } + + + } + break; + + default : + break loop146; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6485); + addExpectedElement(6486); + addExpectedElement(6487); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6488); + addExpectedElement(6489); + } + + // Java.g:15418:2: ( (a4= ',' ) )? + int alt148=2; + int LA148_0 = input.LA(1); + + if ( (LA148_0==33) ) { + alt148=1; + } + switch (alt148) { + case 1 : + // Java.g:15419:3: (a4= ',' ) + { + // Java.g:15419:3: (a4= ',' ) + // Java.g:15420:4: a4= ',' + { + a4=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_arrays_ArrayInitializer12798); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInitializer(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_36_0_0_3_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6490); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6491); + } + + a5=(Token)match(input,109,FOLLOW_109_in_parse_org_emftext_language_java_arrays_ArrayInitializer12831); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayInitializer(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_36_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6492); + addExpectedElement(6493); + addExpectedElement(6494); + addExpectedElement(6495); + addExpectedElement(6496); + addExpectedElement(6497); + addExpectedElement(6498); + addExpectedElement(6499); + addExpectedElement(6500); + addExpectedElement(6501); + addExpectedElement(6502); + addExpectedElement(6503); + addExpectedElement(6504); + addExpectedElement(6505); + addExpectedElement(6506); + addExpectedElement(6507); + addExpectedElement(6508); + addExpectedElement(6509); + addExpectedElement(6510); + addExpectedElement(6511); + addExpectedElement(6512); + addExpectedElement(6513); + addExpectedElement(6514); + addExpectedElement(6515); + addExpectedElement(6516); + addExpectedElement(6517); + addExpectedElement(6518); + addExpectedElement(6519); + addExpectedElement(6520); + addExpectedElement(6521); + addExpectedElement(6522); + addExpectedElement(6523); + addExpectedElement(6524); + addExpectedElement(6525); + addExpectedElement(6526); + addExpectedElement(6527); + addExpectedElement(6528); + addExpectedElement(6529); + addExpectedElement(6530); + addExpectedElement(6531); + addExpectedElement(6532); + addExpectedElement(6533); + addExpectedElement(6534); + addExpectedElement(6535); + addExpectedElement(6536); + addExpectedElement(6537); + addExpectedElement(6538); + addExpectedElement(6539); + addExpectedElement(6540); + addExpectedElement(6541); + addExpectedElement(6542); + addExpectedElement(6543); + addExpectedElement(6544); + addExpectedElement(6545); + addExpectedElement(6546); + addExpectedElement(6547); + addExpectedElement(6548); + addExpectedElement(6549); + addExpectedElement(6550); + addExpectedElement(6551); + addExpectedElement(6552); + addExpectedElement(6553); + addExpectedElement(6554); + addExpectedElement(6555); + addExpectedElement(6556); + addExpectedElement(6557); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 38, parse_org_emftext_language_java_arrays_ArrayInitializer_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_arrays_ArrayInitializer" + + + + // $ANTLR start "parse_org_emftext_language_java_arrays_ArraySelector" + // Java.g:15522:1: parse_org_emftext_language_java_arrays_ArraySelector returns [org.emftext.language.java.arrays.ArraySelector element = null] : a0= '[' ( (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) )? a2= ']' ; + public final org.emftext.language.java.arrays.ArraySelector parse_org_emftext_language_java_arrays_ArraySelector() throws RecognitionException { + org.emftext.language.java.arrays.ArraySelector element = null; + + int parse_org_emftext_language_java_arrays_ArraySelector_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + org.emftext.language.java.expressions.AssignmentExpression a1_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 39) ) { return element; } + + // Java.g:15525:2: (a0= '[' ( (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) )? a2= ']' ) + // Java.g:15526:2: a0= '[' ( (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) )? a2= ']' + { + a0=(Token)match(input,49,FOLLOW_49_in_parse_org_emftext_language_java_arrays_ArraySelector12860); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArraySelector(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_37_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6558); + addExpectedElement(6559); + addExpectedElement(6560); + addExpectedElement(6561); + addExpectedElement(6562); + addExpectedElement(6563); + addExpectedElement(6564); + addExpectedElement(6565); + addExpectedElement(6566); + addExpectedElement(6567); + addExpectedElement(6568); + addExpectedElement(6569); + addExpectedElement(6570); + addExpectedElement(6571); + addExpectedElement(6572); + addExpectedElement(6573); + addExpectedElement(6574); + addExpectedElement(6575); + addExpectedElement(6576); + addExpectedElement(6577); + addExpectedElement(6578); + addExpectedElement(6579); + addExpectedElement(6580); + addExpectedElement(6581); + addExpectedElement(6582); + addExpectedElement(6583); + addExpectedElement(6584); + addExpectedElement(6585); + addExpectedElement(6586); + addExpectedElement(6587); + addExpectedElement(6588); + addExpectedElement(6589); + addExpectedElement(6590); + addExpectedElement(6591); + addExpectedElement(6592); + addExpectedElement(6593); + addExpectedElement(6594); + addExpectedElement(6595); + addExpectedElement(6596); + addExpectedElement(6597); + addExpectedElement(6598); + addExpectedElement(6599); + addExpectedElement(6600); + addExpectedElement(6601); + } + + // Java.g:15583:2: ( (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) )? + int alt149=2; + int LA149_0 = input.LA(1); + + if ( ((LA149_0 >= BOOLEAN_LITERAL && LA149_0 <= IDENTIFIER)||(LA149_0 >= OCTAL_INTEGER_LITERAL && LA149_0 <= OCTAL_LONG_LITERAL)||LA149_0==STRING_LITERAL||LA149_0==21||LA149_0==26||(LA149_0 >= 30 && LA149_0 <= 31)||(LA149_0 >= 34 && LA149_0 <= 35)||LA149_0==43||LA149_0==48||LA149_0==58||LA149_0==60||(LA149_0 >= 63 && LA149_0 <= 64)||LA149_0==68||LA149_0==74||LA149_0==80||LA149_0==82||(LA149_0 >= 84 && LA149_0 <= 85)||LA149_0==91||LA149_0==94||LA149_0==97||LA149_0==102||LA149_0==105||LA149_0==110) ) { + alt149=1; + } + switch (alt149) { + case 1 : + // Java.g:15584:3: (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + // Java.g:15584:3: (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:15585:4: a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_arrays_ArraySelector12883); + a1_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArraySelector(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.arrays.ArraysPackage.ARRAY_SELECTOR__POSITION), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_37_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6602); + } + + a2=(Token)match(input,53,FOLLOW_53_in_parse_org_emftext_language_java_arrays_ArraySelector12909); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArraySelector(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_37_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6603); + addExpectedElement(6604); + addExpectedElement(6605); + addExpectedElement(6606); + addExpectedElement(6607); + addExpectedElement(6608); + addExpectedElement(6609); + addExpectedElement(6610); + addExpectedElement(6611); + addExpectedElement(6612); + addExpectedElement(6613); + addExpectedElement(6614); + addExpectedElement(6615); + addExpectedElement(6616); + addExpectedElement(6617); + addExpectedElement(6618); + addExpectedElement(6619); + addExpectedElement(6620); + addExpectedElement(6621); + addExpectedElement(6622); + addExpectedElement(6623); + addExpectedElement(6624); + addExpectedElement(6625); + addExpectedElement(6626); + addExpectedElement(6627); + addExpectedElement(6628); + addExpectedElement(6629); + addExpectedElement(6630); + addExpectedElement(6631); + addExpectedElement(6632); + addExpectedElement(6633); + addExpectedElement(6634); + addExpectedElement(6635); + addExpectedElement(6636); + addExpectedElement(6637); + addExpectedElement(6638); + addExpectedElement(6639); + addExpectedElement(6640); + addExpectedElement(6641); + addExpectedElement(6642); + addExpectedElement(6643); + addExpectedElement(6644); + addExpectedElement(6645); + addExpectedElement(6646); + addExpectedElement(6647); + addExpectedElement(6648); + addExpectedElement(6649); + addExpectedElement(6650); + addExpectedElement(6651); + addExpectedElement(6652); + addExpectedElement(6653); + addExpectedElement(6654); + addExpectedElement(6655); + addExpectedElement(6656); + addExpectedElement(6657); + addExpectedElement(6658); + addExpectedElement(6659); + addExpectedElement(6660); + addExpectedElement(6661); + addExpectedElement(6662); + addExpectedElement(6663); + addExpectedElement(6664); + addExpectedElement(6665); + addExpectedElement(6666); + addExpectedElement(6667); + addExpectedElement(6668); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 39, parse_org_emftext_language_java_arrays_ArraySelector_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_arrays_ArraySelector" + + + + // $ANTLR start "parse_org_emftext_language_java_types_NamespaceClassifierReference" + // Java.g:15692:1: parse_org_emftext_language_java_types_NamespaceClassifierReference returns [org.emftext.language.java.types.NamespaceClassifierReference element = null] : ( ( (a0= IDENTIFIER ) a1= '.' ) )* ( ( (a2_0= parse_org_emftext_language_java_types_ClassifierReference ) a3= '.' ) )* (a4_0= parse_org_emftext_language_java_types_ClassifierReference ) ; + public final org.emftext.language.java.types.NamespaceClassifierReference parse_org_emftext_language_java_types_NamespaceClassifierReference() throws RecognitionException { + org.emftext.language.java.types.NamespaceClassifierReference element = null; + + int parse_org_emftext_language_java_types_NamespaceClassifierReference_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a3=null; + org.emftext.language.java.types.ClassifierReference a2_0 =null; + + org.emftext.language.java.types.ClassifierReference a4_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 40) ) { return element; } + + // Java.g:15695:2: ( ( ( (a0= IDENTIFIER ) a1= '.' ) )* ( ( (a2_0= parse_org_emftext_language_java_types_ClassifierReference ) a3= '.' ) )* (a4_0= parse_org_emftext_language_java_types_ClassifierReference ) ) + // Java.g:15696:2: ( ( (a0= IDENTIFIER ) a1= '.' ) )* ( ( (a2_0= parse_org_emftext_language_java_types_ClassifierReference ) a3= '.' ) )* (a4_0= parse_org_emftext_language_java_types_ClassifierReference ) + { + // Java.g:15696:2: ( ( (a0= IDENTIFIER ) a1= '.' ) )* + loop150: + do { + int alt150=2; + int LA150_0 = input.LA(1); + + if ( (LA150_0==IDENTIFIER) ) { + int LA150_1 = input.LA(2); + + if ( (LA150_1==37) ) { + int LA150_3 = input.LA(3); + + if ( (synpred151_Java()) ) { + alt150=1; + } + + + } + + + } + + + switch (alt150) { + case 1 : + // Java.g:15697:3: ( (a0= IDENTIFIER ) a1= '.' ) + { + // Java.g:15697:3: ( (a0= IDENTIFIER ) a1= '.' ) + // Java.g:15698:4: (a0= IDENTIFIER ) a1= '.' + { + // Java.g:15698:4: (a0= IDENTIFIER ) + // Java.g:15699:5: a0= IDENTIFIER + { + a0=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_types_NamespaceClassifierReference12953); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createNamespaceClassifierReference(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.types.TypesPackage.NAMESPACE_CLASSIFIER_REFERENCE__NAMESPACES), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + addObjectToList(element, org.emftext.language.java.types.TypesPackage.NAMESPACE_CLASSIFIER_REFERENCE__NAMESPACES, value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_38_0_0_0_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6669); + } + + a1=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_types_NamespaceClassifierReference12986); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createNamespaceClassifierReference(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_38_0_0_0_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6670); + addExpectedElement(6671); + } + + } + + + } + break; + + default : + break loop150; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6672); + addExpectedElement(6673); + } + + // Java.g:15757:2: ( ( (a2_0= parse_org_emftext_language_java_types_ClassifierReference ) a3= '.' ) )* + loop151: + do { + int alt151=2; + int LA151_0 = input.LA(1); + + if ( (LA151_0==IDENTIFIER) ) { + int LA151_1 = input.LA(2); + + if ( (synpred152_Java()) ) { + alt151=1; + } + + + } + + + switch (alt151) { + case 1 : + // Java.g:15758:3: ( (a2_0= parse_org_emftext_language_java_types_ClassifierReference ) a3= '.' ) + { + // Java.g:15758:3: ( (a2_0= parse_org_emftext_language_java_types_ClassifierReference ) a3= '.' ) + // Java.g:15759:4: (a2_0= parse_org_emftext_language_java_types_ClassifierReference ) a3= '.' + { + // Java.g:15759:4: (a2_0= parse_org_emftext_language_java_types_ClassifierReference ) + // Java.g:15760:5: a2_0= parse_org_emftext_language_java_types_ClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_ClassifierReference_in_parse_org_emftext_language_java_types_NamespaceClassifierReference13034); + a2_0=parse_org_emftext_language_java_types_ClassifierReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createNamespaceClassifierReference(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.types.TypesPackage.NAMESPACE_CLASSIFIER_REFERENCE__CLASSIFIER_REFERENCES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_38_0_0_1_0_0_0, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6674); + } + + a3=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_types_NamespaceClassifierReference13062); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createNamespaceClassifierReference(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_38_0_0_1_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6675); + } + + } + + + } + break; + + default : + break loop151; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6676); + } + + // Java.g:15806:2: (a4_0= parse_org_emftext_language_java_types_ClassifierReference ) + // Java.g:15807:3: a4_0= parse_org_emftext_language_java_types_ClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_ClassifierReference_in_parse_org_emftext_language_java_types_NamespaceClassifierReference13099); + a4_0=parse_org_emftext_language_java_types_ClassifierReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createNamespaceClassifierReference(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.types.TypesPackage.NAMESPACE_CLASSIFIER_REFERENCE__CLASSIFIER_REFERENCES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_38_0_0_2, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6677); + addExpectedElement(6678); + addExpectedElement(6679); + addExpectedElement(6680); + addExpectedElement(6681); + addExpectedElement(6682); + addExpectedElement(6683); + addExpectedElement(6684); + addExpectedElement(6685); + addExpectedElement(6686); + addExpectedElement(6687); + addExpectedElement(6688); + addExpectedElement(6689); + addExpectedElement(6690); + addExpectedElement(6691); + addExpectedElement(6692); + addExpectedElement(6693); + addExpectedElement(6694); + addExpectedElement(6695); + addExpectedElement(6696); + addExpectedElement(6697); + addExpectedElement(6698); + addExpectedElement(6699); + addExpectedElement(6700); + addExpectedElement(6701); + addExpectedElement(6702); + addExpectedElement(6703); + addExpectedElement(6704); + addExpectedElement(6705); + addExpectedElement(6706); + addExpectedElement(6707); + addExpectedElement(6708); + addExpectedElement(6709); + addExpectedElement(6710); + addExpectedElement(6711); + addExpectedElement(6712); + addExpectedElement(6713); + addExpectedElement(6714); + addExpectedElement(6715); + addExpectedElement(6716); + addExpectedElement(6717); + addExpectedElement(6718); + addExpectedElement(6719); + addExpectedElement(6720); + addExpectedElement(6721); + addExpectedElement(6722); + addExpectedElement(6723); + addExpectedElement(6724); + addExpectedElement(6725); + addExpectedElement(6726); + addExpectedElement(6727); + addExpectedElement(6728); + addExpectedElement(6729); + addExpectedElement(6730); + addExpectedElement(6731); + addExpectedElement(6732); + addExpectedElement(6733); + addExpectedElement(6734); + addExpectedElement(6735); + addExpectedElement(6736); + addExpectedElement(6737); + addExpectedElement(6738); + addExpectedElement(6739); + addExpectedElement(6740); + addExpectedElement(6741); + addExpectedElement(6742); + addExpectedElement(6743); + addExpectedElement(6744); + addExpectedElement(6745); + addExpectedElement(6746); + addExpectedElement(6747); + addExpectedElement(6748); + addExpectedElement(6749); + addExpectedElement(6750); + addExpectedElement(6751); + addExpectedElement(6752); + addExpectedElement(6753); + addExpectedElement(6754); + addExpectedElement(6755); + addExpectedElement(6756); + addExpectedElement(6757); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 40, parse_org_emftext_language_java_types_NamespaceClassifierReference_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_types_NamespaceClassifierReference" + + + + // $ANTLR start "parse_org_emftext_language_java_types_ClassifierReference" + // Java.g:15914:1: parse_org_emftext_language_java_types_ClassifierReference returns [org.emftext.language.java.types.ClassifierReference element = null] : (a0= IDENTIFIER ) ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) )? ; + private JavaContextDependentURIFragmentFactory classifierReferenceURIFragmentFactory = new JavaContextDependentURIFragmentFactory(getReferenceResolverSwitch().getClassifierReferenceTargetReferenceResolver()); + public final org.emftext.language.java.types.ClassifierReference parse_org_emftext_language_java_types_ClassifierReference() throws RecognitionException { + org.emftext.language.java.types.ClassifierReference element = null; + + int parse_org_emftext_language_java_types_ClassifierReference_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a3=null; + Token a5=null; + org.emftext.language.java.generics.TypeArgument a2_0 =null; + + org.emftext.language.java.generics.TypeArgument a4_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 41) ) { return element; } + + // Java.g:15917:2: ( (a0= IDENTIFIER ) ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) )? ) + // Java.g:15918:2: (a0= IDENTIFIER ) ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) )? + { + // Java.g:15918:2: (a0= IDENTIFIER ) + // Java.g:15919:3: a0= IDENTIFIER + { + a0=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_types_ClassifierReference13136); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createClassifierReference(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.types.TypesPackage.CLASSIFIER_REFERENCE__TARGET), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + String resolved = (String) resolvedObject; + org.emftext.language.java.classifiers.Classifier proxy = org.emftext.language.java.classifiers.ClassifiersFactory.eINSTANCE.createClass(); + collectHiddenTokens(element); + + registerContextDependentProxy(classifierReferenceURIFragmentFactory, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.emftext.language.java.types.TypesPackage.CLASSIFIER_REFERENCE__TARGET), resolved, proxy); + if (proxy != null) { + Object value = proxy; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.types.TypesPackage.CLASSIFIER_REFERENCE__TARGET), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_39_0_0_0, proxy, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, proxy); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6758); + addExpectedElement(6759); + addExpectedElement(6760); + addExpectedElement(6761); + addExpectedElement(6762); + addExpectedElement(6763); + addExpectedElement(6764); + addExpectedElement(6765); + addExpectedElement(6766); + addExpectedElement(6767); + addExpectedElement(6768); + addExpectedElement(6769); + addExpectedElement(6770); + addExpectedElement(6771); + addExpectedElement(6772); + addExpectedElement(6773); + addExpectedElement(6774); + addExpectedElement(6775); + addExpectedElement(6776); + addExpectedElement(6777); + addExpectedElement(6778); + addExpectedElement(6779); + addExpectedElement(6780); + addExpectedElement(6781); + addExpectedElement(6782); + addExpectedElement(6783); + addExpectedElement(6784); + addExpectedElement(6785); + addExpectedElement(6786); + addExpectedElement(6787); + addExpectedElement(6788); + addExpectedElement(6789); + addExpectedElement(6790); + addExpectedElement(6791); + addExpectedElement(6792); + addExpectedElement(6793); + addExpectedElement(6794); + addExpectedElement(6795); + addExpectedElement(6796); + addExpectedElement(6797); + addExpectedElement(6798); + addExpectedElement(6799); + addExpectedElement(6800); + addExpectedElement(6801); + addExpectedElement(6802); + addExpectedElement(6803); + addExpectedElement(6804); + addExpectedElement(6805); + addExpectedElement(6806); + addExpectedElement(6807); + addExpectedElement(6808); + addExpectedElement(6809); + addExpectedElement(6810); + addExpectedElement(6811); + addExpectedElement(6812); + addExpectedElement(6813); + addExpectedElement(6814); + addExpectedElement(6815); + addExpectedElement(6816); + addExpectedElement(6817); + addExpectedElement(6818); + addExpectedElement(6819); + addExpectedElement(6820); + addExpectedElement(6821); + addExpectedElement(6822); + addExpectedElement(6823); + addExpectedElement(6824); + addExpectedElement(6825); + addExpectedElement(6826); + addExpectedElement(6827); + addExpectedElement(6828); + addExpectedElement(6829); + addExpectedElement(6830); + addExpectedElement(6831); + addExpectedElement(6832); + addExpectedElement(6833); + addExpectedElement(6834); + addExpectedElement(6835); + addExpectedElement(6836); + addExpectedElement(6837); + addExpectedElement(6838); + addExpectedElement(6839); + addExpectedElement(6840); + } + + // Java.g:16040:2: ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) )? + int alt153=2; + int LA153_0 = input.LA(1); + + if ( (LA153_0==43) ) { + int LA153_1 = input.LA(2); + + if ( (synpred154_Java()) ) { + alt153=1; + } + } + switch (alt153) { + case 1 : + // Java.g:16041:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) + { + // Java.g:16041:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) + // Java.g:16042:4: a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' + { + a1=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_types_ClassifierReference13166); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createClassifierReference(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_39_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6841); + addExpectedElement(6842); + addExpectedElement(6843); + addExpectedElement(6844); + addExpectedElement(6845); + addExpectedElement(6846); + addExpectedElement(6847); + addExpectedElement(6848); + addExpectedElement(6849); + addExpectedElement(6850); + addExpectedElement(6851); + addExpectedElement(6852); + addExpectedElement(6853); + addExpectedElement(6854); + } + + // Java.g:16069:4: (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:16070:5: a2_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_types_ClassifierReference13192); + a2_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createClassifierReference(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.types.TypesPackage.CLASSIFIER_REFERENCE__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_39_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6855); + addExpectedElement(6856); + } + + // Java.g:16096:4: ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* + loop152: + do { + int alt152=2; + int LA152_0 = input.LA(1); + + if ( (LA152_0==33) ) { + alt152=1; + } + + + switch (alt152) { + case 1 : + // Java.g:16097:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + { + // Java.g:16097:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + // Java.g:16098:6: a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) + { + a3=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_types_ClassifierReference13233); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createClassifierReference(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_39_0_0_1_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6857); + addExpectedElement(6858); + addExpectedElement(6859); + addExpectedElement(6860); + addExpectedElement(6861); + addExpectedElement(6862); + addExpectedElement(6863); + addExpectedElement(6864); + addExpectedElement(6865); + addExpectedElement(6866); + addExpectedElement(6867); + addExpectedElement(6868); + addExpectedElement(6869); + addExpectedElement(6870); + } + + // Java.g:16125:6: (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:16126:7: a4_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_types_ClassifierReference13267); + a4_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createClassifierReference(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.types.TypesPackage.CLASSIFIER_REFERENCE__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_39_0_0_1_0_0_2_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6871); + addExpectedElement(6872); + } + + } + + + } + break; + + default : + break loop152; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6873); + addExpectedElement(6874); + } + + a5=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_types_ClassifierReference13328); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createClassifierReference(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_39_0_0_1_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6875); + addExpectedElement(6876); + addExpectedElement(6877); + addExpectedElement(6878); + addExpectedElement(6879); + addExpectedElement(6880); + addExpectedElement(6881); + addExpectedElement(6882); + addExpectedElement(6883); + addExpectedElement(6884); + addExpectedElement(6885); + addExpectedElement(6886); + addExpectedElement(6887); + addExpectedElement(6888); + addExpectedElement(6889); + addExpectedElement(6890); + addExpectedElement(6891); + addExpectedElement(6892); + addExpectedElement(6893); + addExpectedElement(6894); + addExpectedElement(6895); + addExpectedElement(6896); + addExpectedElement(6897); + addExpectedElement(6898); + addExpectedElement(6899); + addExpectedElement(6900); + addExpectedElement(6901); + addExpectedElement(6902); + addExpectedElement(6903); + addExpectedElement(6904); + addExpectedElement(6905); + addExpectedElement(6906); + addExpectedElement(6907); + addExpectedElement(6908); + addExpectedElement(6909); + addExpectedElement(6910); + addExpectedElement(6911); + addExpectedElement(6912); + addExpectedElement(6913); + addExpectedElement(6914); + addExpectedElement(6915); + addExpectedElement(6916); + addExpectedElement(6917); + addExpectedElement(6918); + addExpectedElement(6919); + addExpectedElement(6920); + addExpectedElement(6921); + addExpectedElement(6922); + addExpectedElement(6923); + addExpectedElement(6924); + addExpectedElement(6925); + addExpectedElement(6926); + addExpectedElement(6927); + addExpectedElement(6928); + addExpectedElement(6929); + addExpectedElement(6930); + addExpectedElement(6931); + addExpectedElement(6932); + addExpectedElement(6933); + addExpectedElement(6934); + addExpectedElement(6935); + addExpectedElement(6936); + addExpectedElement(6937); + addExpectedElement(6938); + addExpectedElement(6939); + addExpectedElement(6940); + addExpectedElement(6941); + addExpectedElement(6942); + addExpectedElement(6943); + addExpectedElement(6944); + addExpectedElement(6945); + addExpectedElement(6946); + addExpectedElement(6947); + addExpectedElement(6948); + addExpectedElement(6949); + addExpectedElement(6950); + addExpectedElement(6951); + addExpectedElement(6952); + addExpectedElement(6953); + addExpectedElement(6954); + addExpectedElement(6955); + addExpectedElement(6956); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(6957); + addExpectedElement(6958); + addExpectedElement(6959); + addExpectedElement(6960); + addExpectedElement(6961); + addExpectedElement(6962); + addExpectedElement(6963); + addExpectedElement(6964); + addExpectedElement(6965); + addExpectedElement(6966); + addExpectedElement(6967); + addExpectedElement(6968); + addExpectedElement(6969); + addExpectedElement(6970); + addExpectedElement(6971); + addExpectedElement(6972); + addExpectedElement(6973); + addExpectedElement(6974); + addExpectedElement(6975); + addExpectedElement(6976); + addExpectedElement(6977); + addExpectedElement(6978); + addExpectedElement(6979); + addExpectedElement(6980); + addExpectedElement(6981); + addExpectedElement(6982); + addExpectedElement(6983); + addExpectedElement(6984); + addExpectedElement(6985); + addExpectedElement(6986); + addExpectedElement(6987); + addExpectedElement(6988); + addExpectedElement(6989); + addExpectedElement(6990); + addExpectedElement(6991); + addExpectedElement(6992); + addExpectedElement(6993); + addExpectedElement(6994); + addExpectedElement(6995); + addExpectedElement(6996); + addExpectedElement(6997); + addExpectedElement(6998); + addExpectedElement(6999); + addExpectedElement(7000); + addExpectedElement(7001); + addExpectedElement(7002); + addExpectedElement(7003); + addExpectedElement(7004); + addExpectedElement(7005); + addExpectedElement(7006); + addExpectedElement(7007); + addExpectedElement(7008); + addExpectedElement(7009); + addExpectedElement(7010); + addExpectedElement(7011); + addExpectedElement(7012); + addExpectedElement(7013); + addExpectedElement(7014); + addExpectedElement(7015); + addExpectedElement(7016); + addExpectedElement(7017); + addExpectedElement(7018); + addExpectedElement(7019); + addExpectedElement(7020); + addExpectedElement(7021); + addExpectedElement(7022); + addExpectedElement(7023); + addExpectedElement(7024); + addExpectedElement(7025); + addExpectedElement(7026); + addExpectedElement(7027); + addExpectedElement(7028); + addExpectedElement(7029); + addExpectedElement(7030); + addExpectedElement(7031); + addExpectedElement(7032); + addExpectedElement(7033); + addExpectedElement(7034); + addExpectedElement(7035); + addExpectedElement(7036); + addExpectedElement(7037); + addExpectedElement(7038); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 41, parse_org_emftext_language_java_types_ClassifierReference_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_types_ClassifierReference" + + + + // $ANTLR start "parse_org_emftext_language_java_references_MethodCall" + // Java.g:16345:1: parse_org_emftext_language_java_references_MethodCall returns [org.emftext.language.java.references.MethodCall element = null] : ( (a0= '<' (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a4= '>' ) )? (a5= IDENTIFIER ) ( (a6= '<' (a7_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a8= ',' (a9_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a10= '>' ) )? a11= '(' ( ( (a12_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a13= ',' (a14_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a15= ')' ( (a16_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a17= '.' (a18_0= parse_org_emftext_language_java_references_Reference ) ) )? ; + private JavaContextDependentURIFragmentFactory methodCallURIFragmentFactory = new JavaContextDependentURIFragmentFactory(getReferenceResolverSwitch().getElementReferenceTargetReferenceResolver()); + public final org.emftext.language.java.references.MethodCall parse_org_emftext_language_java_references_MethodCall() throws RecognitionException { + org.emftext.language.java.references.MethodCall element = null; + + int parse_org_emftext_language_java_references_MethodCall_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + Token a4=null; + Token a5=null; + Token a6=null; + Token a8=null; + Token a10=null; + Token a11=null; + Token a13=null; + Token a15=null; + Token a17=null; + org.emftext.language.java.generics.TypeArgument a1_0 =null; + + org.emftext.language.java.generics.TypeArgument a3_0 =null; + + org.emftext.language.java.generics.TypeArgument a7_0 =null; + + org.emftext.language.java.generics.TypeArgument a9_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a12_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a14_0 =null; + + org.emftext.language.java.arrays.ArraySelector a16_0 =null; + + org.emftext.language.java.references.Reference a18_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 42) ) { return element; } + + // Java.g:16348:2: ( ( (a0= '<' (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a4= '>' ) )? (a5= IDENTIFIER ) ( (a6= '<' (a7_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a8= ',' (a9_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a10= '>' ) )? a11= '(' ( ( (a12_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a13= ',' (a14_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a15= ')' ( (a16_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a17= '.' (a18_0= parse_org_emftext_language_java_references_Reference ) ) )? ) + // Java.g:16349:2: ( (a0= '<' (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a4= '>' ) )? (a5= IDENTIFIER ) ( (a6= '<' (a7_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a8= ',' (a9_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a10= '>' ) )? a11= '(' ( ( (a12_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a13= ',' (a14_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a15= ')' ( (a16_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a17= '.' (a18_0= parse_org_emftext_language_java_references_Reference ) ) )? + { + // Java.g:16349:2: ( (a0= '<' (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a4= '>' ) )? + int alt155=2; + int LA155_0 = input.LA(1); + + if ( (LA155_0==43) ) { + alt155=1; + } + switch (alt155) { + case 1 : + // Java.g:16350:3: (a0= '<' (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a4= '>' ) + { + // Java.g:16350:3: (a0= '<' (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a4= '>' ) + // Java.g:16351:4: a0= '<' (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a4= '>' + { + a0=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_references_MethodCall13385); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_0_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7039); + addExpectedElement(7040); + addExpectedElement(7041); + addExpectedElement(7042); + addExpectedElement(7043); + addExpectedElement(7044); + addExpectedElement(7045); + addExpectedElement(7046); + addExpectedElement(7047); + addExpectedElement(7048); + addExpectedElement(7049); + addExpectedElement(7050); + addExpectedElement(7051); + addExpectedElement(7052); + } + + // Java.g:16378:4: (a1_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:16379:5: a1_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_references_MethodCall13411); + a1_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__CALL_TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_0_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7053); + addExpectedElement(7054); + } + + // Java.g:16405:4: ( (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* + loop154: + do { + int alt154=2; + int LA154_0 = input.LA(1); + + if ( (LA154_0==33) ) { + alt154=1; + } + + + switch (alt154) { + case 1 : + // Java.g:16406:5: (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + { + // Java.g:16406:5: (a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + // Java.g:16407:6: a2= ',' (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) + { + a2=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_references_MethodCall13452); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_0_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7055); + addExpectedElement(7056); + addExpectedElement(7057); + addExpectedElement(7058); + addExpectedElement(7059); + addExpectedElement(7060); + addExpectedElement(7061); + addExpectedElement(7062); + addExpectedElement(7063); + addExpectedElement(7064); + addExpectedElement(7065); + addExpectedElement(7066); + addExpectedElement(7067); + addExpectedElement(7068); + } + + // Java.g:16434:6: (a3_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:16435:7: a3_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_references_MethodCall13486); + a3_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + addObjectToList(element, org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__CALL_TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_0_0_0_2_0_0_1, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7069); + addExpectedElement(7070); + } + + } + + + } + break; + + default : + break loop154; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7071); + addExpectedElement(7072); + } + + a4=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_references_MethodCall13547); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_0_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7073); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7074); + } + + // Java.g:16490:2: (a5= IDENTIFIER ) + // Java.g:16491:3: a5= IDENTIFIER + { + a5=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_references_MethodCall13584); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + if (a5 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a5.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__TARGET), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a5).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a5).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a5).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a5).getStopIndex()); + } + String resolved = (String) resolvedObject; + org.emftext.language.java.references.ReferenceableElement proxy = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + collectHiddenTokens(element); + + registerContextDependentProxy(methodCallURIFragmentFactory, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__TARGET), resolved, proxy); + if (proxy != null) { + Object value = proxy; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__TARGET), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_1, proxy, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a5, element); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a5, proxy); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7075); + addExpectedElement(7076); + } + + // Java.g:16531:2: ( (a6= '<' (a7_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a8= ',' (a9_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a10= '>' ) )? + int alt157=2; + int LA157_0 = input.LA(1); + + if ( (LA157_0==43) ) { + alt157=1; + } + switch (alt157) { + case 1 : + // Java.g:16532:3: (a6= '<' (a7_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a8= ',' (a9_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a10= '>' ) + { + // Java.g:16532:3: (a6= '<' (a7_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a8= ',' (a9_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a10= '>' ) + // Java.g:16533:4: a6= '<' (a7_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a8= ',' (a9_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a10= '>' + { + a6=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_references_MethodCall13614); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a6, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7077); + addExpectedElement(7078); + addExpectedElement(7079); + addExpectedElement(7080); + addExpectedElement(7081); + addExpectedElement(7082); + addExpectedElement(7083); + addExpectedElement(7084); + addExpectedElement(7085); + addExpectedElement(7086); + addExpectedElement(7087); + addExpectedElement(7088); + addExpectedElement(7089); + addExpectedElement(7090); + } + + // Java.g:16560:4: (a7_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:16561:5: a7_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_references_MethodCall13640); + a7_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + if (a7_0 != null) { + if (a7_0 != null) { + Object value = a7_0; + addObjectToList(element, org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_2_0_0_1, a7_0, true); + copyLocalizationInfos(a7_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7091); + addExpectedElement(7092); + } + + // Java.g:16587:4: ( (a8= ',' (a9_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* + loop156: + do { + int alt156=2; + int LA156_0 = input.LA(1); + + if ( (LA156_0==33) ) { + alt156=1; + } + + + switch (alt156) { + case 1 : + // Java.g:16588:5: (a8= ',' (a9_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + { + // Java.g:16588:5: (a8= ',' (a9_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + // Java.g:16589:6: a8= ',' (a9_0= parse_org_emftext_language_java_generics_TypeArgument ) + { + a8=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_references_MethodCall13681); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_2_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a8, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7093); + addExpectedElement(7094); + addExpectedElement(7095); + addExpectedElement(7096); + addExpectedElement(7097); + addExpectedElement(7098); + addExpectedElement(7099); + addExpectedElement(7100); + addExpectedElement(7101); + addExpectedElement(7102); + addExpectedElement(7103); + addExpectedElement(7104); + addExpectedElement(7105); + addExpectedElement(7106); + } + + // Java.g:16616:6: (a9_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:16617:7: a9_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_references_MethodCall13715); + a9_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + if (a9_0 != null) { + if (a9_0 != null) { + Object value = a9_0; + addObjectToList(element, org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_2_0_0_2_0_0_1, a9_0, true); + copyLocalizationInfos(a9_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7107); + addExpectedElement(7108); + } + + } + + + } + break; + + default : + break loop156; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7109); + addExpectedElement(7110); + } + + a10=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_references_MethodCall13776); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_2_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a10, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7111); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7112); + } + + a11=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_references_MethodCall13809); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a11, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7113); + addExpectedElement(7114); + addExpectedElement(7115); + addExpectedElement(7116); + addExpectedElement(7117); + addExpectedElement(7118); + addExpectedElement(7119); + addExpectedElement(7120); + addExpectedElement(7121); + addExpectedElement(7122); + addExpectedElement(7123); + addExpectedElement(7124); + addExpectedElement(7125); + addExpectedElement(7126); + addExpectedElement(7127); + addExpectedElement(7128); + addExpectedElement(7129); + addExpectedElement(7130); + addExpectedElement(7131); + addExpectedElement(7132); + addExpectedElement(7133); + addExpectedElement(7134); + addExpectedElement(7135); + addExpectedElement(7136); + addExpectedElement(7137); + addExpectedElement(7138); + addExpectedElement(7139); + addExpectedElement(7140); + addExpectedElement(7141); + addExpectedElement(7142); + addExpectedElement(7143); + addExpectedElement(7144); + addExpectedElement(7145); + addExpectedElement(7146); + addExpectedElement(7147); + addExpectedElement(7148); + addExpectedElement(7149); + addExpectedElement(7150); + addExpectedElement(7151); + addExpectedElement(7152); + addExpectedElement(7153); + addExpectedElement(7154); + addExpectedElement(7155); + addExpectedElement(7156); + } + + // Java.g:16729:2: ( ( (a12_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a13= ',' (a14_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? + int alt159=2; + int LA159_0 = input.LA(1); + + if ( ((LA159_0 >= BOOLEAN_LITERAL && LA159_0 <= IDENTIFIER)||(LA159_0 >= OCTAL_INTEGER_LITERAL && LA159_0 <= OCTAL_LONG_LITERAL)||LA159_0==STRING_LITERAL||LA159_0==21||LA159_0==26||(LA159_0 >= 30 && LA159_0 <= 31)||(LA159_0 >= 34 && LA159_0 <= 35)||LA159_0==43||LA159_0==48||LA159_0==58||LA159_0==60||(LA159_0 >= 63 && LA159_0 <= 64)||LA159_0==68||LA159_0==74||LA159_0==80||LA159_0==82||(LA159_0 >= 84 && LA159_0 <= 85)||LA159_0==91||LA159_0==94||LA159_0==97||LA159_0==102||LA159_0==105||LA159_0==110) ) { + alt159=1; + } + switch (alt159) { + case 1 : + // Java.g:16730:3: ( (a12_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a13= ',' (a14_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) + { + // Java.g:16730:3: ( (a12_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a13= ',' (a14_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) + // Java.g:16731:4: (a12_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a13= ',' (a14_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* + { + // Java.g:16731:4: (a12_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:16732:5: a12_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_references_MethodCall13838); + a12_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + if (a12_0 != null) { + if (a12_0 != null) { + Object value = a12_0; + addObjectToList(element, org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_4_0_0_0, a12_0, true); + copyLocalizationInfos(a12_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7157); + addExpectedElement(7158); + } + + // Java.g:16758:4: ( (a13= ',' (a14_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* + loop158: + do { + int alt158=2; + int LA158_0 = input.LA(1); + + if ( (LA158_0==33) ) { + alt158=1; + } + + + switch (alt158) { + case 1 : + // Java.g:16759:5: (a13= ',' (a14_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + { + // Java.g:16759:5: (a13= ',' (a14_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + // Java.g:16760:6: a13= ',' (a14_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + a13=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_references_MethodCall13879); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_4_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a13, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7159); + addExpectedElement(7160); + addExpectedElement(7161); + addExpectedElement(7162); + addExpectedElement(7163); + addExpectedElement(7164); + addExpectedElement(7165); + addExpectedElement(7166); + addExpectedElement(7167); + addExpectedElement(7168); + addExpectedElement(7169); + addExpectedElement(7170); + addExpectedElement(7171); + addExpectedElement(7172); + addExpectedElement(7173); + addExpectedElement(7174); + addExpectedElement(7175); + addExpectedElement(7176); + addExpectedElement(7177); + addExpectedElement(7178); + addExpectedElement(7179); + addExpectedElement(7180); + addExpectedElement(7181); + addExpectedElement(7182); + addExpectedElement(7183); + addExpectedElement(7184); + addExpectedElement(7185); + addExpectedElement(7186); + addExpectedElement(7187); + addExpectedElement(7188); + addExpectedElement(7189); + addExpectedElement(7190); + addExpectedElement(7191); + addExpectedElement(7192); + addExpectedElement(7193); + addExpectedElement(7194); + addExpectedElement(7195); + addExpectedElement(7196); + addExpectedElement(7197); + addExpectedElement(7198); + addExpectedElement(7199); + addExpectedElement(7200); + addExpectedElement(7201); + } + + // Java.g:16816:6: (a14_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:16817:7: a14_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_references_MethodCall13913); + a14_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + if (a14_0 != null) { + if (a14_0 != null) { + Object value = a14_0; + addObjectToList(element, org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_4_0_0_1_0_0_1, a14_0, true); + copyLocalizationInfos(a14_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7202); + addExpectedElement(7203); + } + + } + + + } + break; + + default : + break loop158; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7204); + addExpectedElement(7205); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7206); + } + + a15=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_references_MethodCall13987); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_5, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a15, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7207); + addExpectedElement(7208); + addExpectedElement(7209); + addExpectedElement(7210); + addExpectedElement(7211); + addExpectedElement(7212); + addExpectedElement(7213); + addExpectedElement(7214); + addExpectedElement(7215); + addExpectedElement(7216); + addExpectedElement(7217); + addExpectedElement(7218); + addExpectedElement(7219); + addExpectedElement(7220); + addExpectedElement(7221); + addExpectedElement(7222); + addExpectedElement(7223); + addExpectedElement(7224); + addExpectedElement(7225); + addExpectedElement(7226); + addExpectedElement(7227); + addExpectedElement(7228); + addExpectedElement(7229); + addExpectedElement(7230); + addExpectedElement(7231); + addExpectedElement(7232); + addExpectedElement(7233); + addExpectedElement(7234); + addExpectedElement(7235); + addExpectedElement(7236); + addExpectedElement(7237); + addExpectedElement(7238); + addExpectedElement(7239); + addExpectedElement(7240); + addExpectedElement(7241); + addExpectedElement(7242); + addExpectedElement(7243); + addExpectedElement(7244); + addExpectedElement(7245); + addExpectedElement(7246); + addExpectedElement(7247); + addExpectedElement(7248); + addExpectedElement(7249); + addExpectedElement(7250); + addExpectedElement(7251); + addExpectedElement(7252); + addExpectedElement(7253); + addExpectedElement(7254); + addExpectedElement(7255); + addExpectedElement(7256); + addExpectedElement(7257); + addExpectedElement(7258); + addExpectedElement(7259); + addExpectedElement(7260); + addExpectedElement(7261); + addExpectedElement(7262); + addExpectedElement(7263); + addExpectedElement(7264); + addExpectedElement(7265); + addExpectedElement(7266); + addExpectedElement(7267); + addExpectedElement(7268); + addExpectedElement(7269); + addExpectedElement(7270); + addExpectedElement(7271); + addExpectedElement(7272); + } + + // Java.g:16937:2: ( (a16_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* + loop160: + do { + int alt160=2; + int LA160_0 = input.LA(1); + + if ( (LA160_0==49) ) { + alt160=1; + } + + + switch (alt160) { + case 1 : + // Java.g:16938:3: (a16_0= parse_org_emftext_language_java_arrays_ArraySelector ) + { + // Java.g:16938:3: (a16_0= parse_org_emftext_language_java_arrays_ArraySelector ) + // Java.g:16939:4: a16_0= parse_org_emftext_language_java_arrays_ArraySelector + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArraySelector_in_parse_org_emftext_language_java_references_MethodCall14010); + a16_0=parse_org_emftext_language_java_arrays_ArraySelector(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + if (a16_0 != null) { + if (a16_0 != null) { + Object value = a16_0; + addObjectToList(element, org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__ARRAY_SELECTORS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_6, a16_0, true); + copyLocalizationInfos(a16_0, element); + } + } + + } + + + } + break; + + default : + break loop160; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7273); + addExpectedElement(7274); + addExpectedElement(7275); + addExpectedElement(7276); + addExpectedElement(7277); + addExpectedElement(7278); + addExpectedElement(7279); + addExpectedElement(7280); + addExpectedElement(7281); + addExpectedElement(7282); + addExpectedElement(7283); + addExpectedElement(7284); + addExpectedElement(7285); + addExpectedElement(7286); + addExpectedElement(7287); + addExpectedElement(7288); + addExpectedElement(7289); + addExpectedElement(7290); + addExpectedElement(7291); + addExpectedElement(7292); + addExpectedElement(7293); + addExpectedElement(7294); + addExpectedElement(7295); + addExpectedElement(7296); + addExpectedElement(7297); + addExpectedElement(7298); + addExpectedElement(7299); + addExpectedElement(7300); + addExpectedElement(7301); + addExpectedElement(7302); + addExpectedElement(7303); + addExpectedElement(7304); + addExpectedElement(7305); + addExpectedElement(7306); + addExpectedElement(7307); + addExpectedElement(7308); + addExpectedElement(7309); + addExpectedElement(7310); + addExpectedElement(7311); + addExpectedElement(7312); + addExpectedElement(7313); + addExpectedElement(7314); + addExpectedElement(7315); + addExpectedElement(7316); + addExpectedElement(7317); + addExpectedElement(7318); + addExpectedElement(7319); + addExpectedElement(7320); + addExpectedElement(7321); + addExpectedElement(7322); + addExpectedElement(7323); + addExpectedElement(7324); + addExpectedElement(7325); + addExpectedElement(7326); + addExpectedElement(7327); + addExpectedElement(7328); + addExpectedElement(7329); + addExpectedElement(7330); + addExpectedElement(7331); + addExpectedElement(7332); + addExpectedElement(7333); + addExpectedElement(7334); + addExpectedElement(7335); + addExpectedElement(7336); + addExpectedElement(7337); + addExpectedElement(7338); + } + + // Java.g:17030:2: ( (a17= '.' (a18_0= parse_org_emftext_language_java_references_Reference ) ) )? + int alt161=2; + int LA161_0 = input.LA(1); + + if ( (LA161_0==37) ) { + alt161=1; + } + switch (alt161) { + case 1 : + // Java.g:17031:3: (a17= '.' (a18_0= parse_org_emftext_language_java_references_Reference ) ) + { + // Java.g:17031:3: (a17= '.' (a18_0= parse_org_emftext_language_java_references_Reference ) ) + // Java.g:17032:4: a17= '.' (a18_0= parse_org_emftext_language_java_references_Reference ) + { + a17=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_references_MethodCall14045); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_7_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a17, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7339); + addExpectedElement(7340); + addExpectedElement(7341); + addExpectedElement(7342); + addExpectedElement(7343); + addExpectedElement(7344); + addExpectedElement(7345); + addExpectedElement(7346); + addExpectedElement(7347); + addExpectedElement(7348); + addExpectedElement(7349); + addExpectedElement(7350); + addExpectedElement(7351); + addExpectedElement(7352); + addExpectedElement(7353); + addExpectedElement(7354); + addExpectedElement(7355); + addExpectedElement(7356); + addExpectedElement(7357); + addExpectedElement(7358); + addExpectedElement(7359); + addExpectedElement(7360); + addExpectedElement(7361); + } + + // Java.g:17068:4: (a18_0= parse_org_emftext_language_java_references_Reference ) + // Java.g:17069:5: a18_0= parse_org_emftext_language_java_references_Reference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_references_MethodCall14071); + a18_0=parse_org_emftext_language_java_references_Reference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createMethodCall(); + startIncompleteElement(element); + } + if (a18_0 != null) { + if (a18_0 != null) { + Object value = a18_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.METHOD_CALL__NEXT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_40_0_0_7_0_0_1, a18_0, true); + copyLocalizationInfos(a18_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7362); + addExpectedElement(7363); + addExpectedElement(7364); + addExpectedElement(7365); + addExpectedElement(7366); + addExpectedElement(7367); + addExpectedElement(7368); + addExpectedElement(7369); + addExpectedElement(7370); + addExpectedElement(7371); + addExpectedElement(7372); + addExpectedElement(7373); + addExpectedElement(7374); + addExpectedElement(7375); + addExpectedElement(7376); + addExpectedElement(7377); + addExpectedElement(7378); + addExpectedElement(7379); + addExpectedElement(7380); + addExpectedElement(7381); + addExpectedElement(7382); + addExpectedElement(7383); + addExpectedElement(7384); + addExpectedElement(7385); + addExpectedElement(7386); + addExpectedElement(7387); + addExpectedElement(7388); + addExpectedElement(7389); + addExpectedElement(7390); + addExpectedElement(7391); + addExpectedElement(7392); + addExpectedElement(7393); + addExpectedElement(7394); + addExpectedElement(7395); + addExpectedElement(7396); + addExpectedElement(7397); + addExpectedElement(7398); + addExpectedElement(7399); + addExpectedElement(7400); + addExpectedElement(7401); + addExpectedElement(7402); + addExpectedElement(7403); + addExpectedElement(7404); + addExpectedElement(7405); + addExpectedElement(7406); + addExpectedElement(7407); + addExpectedElement(7408); + addExpectedElement(7409); + addExpectedElement(7410); + addExpectedElement(7411); + addExpectedElement(7412); + addExpectedElement(7413); + addExpectedElement(7414); + addExpectedElement(7415); + addExpectedElement(7416); + addExpectedElement(7417); + addExpectedElement(7418); + addExpectedElement(7419); + addExpectedElement(7420); + addExpectedElement(7421); + addExpectedElement(7422); + addExpectedElement(7423); + addExpectedElement(7424); + addExpectedElement(7425); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7426); + addExpectedElement(7427); + addExpectedElement(7428); + addExpectedElement(7429); + addExpectedElement(7430); + addExpectedElement(7431); + addExpectedElement(7432); + addExpectedElement(7433); + addExpectedElement(7434); + addExpectedElement(7435); + addExpectedElement(7436); + addExpectedElement(7437); + addExpectedElement(7438); + addExpectedElement(7439); + addExpectedElement(7440); + addExpectedElement(7441); + addExpectedElement(7442); + addExpectedElement(7443); + addExpectedElement(7444); + addExpectedElement(7445); + addExpectedElement(7446); + addExpectedElement(7447); + addExpectedElement(7448); + addExpectedElement(7449); + addExpectedElement(7450); + addExpectedElement(7451); + addExpectedElement(7452); + addExpectedElement(7453); + addExpectedElement(7454); + addExpectedElement(7455); + addExpectedElement(7456); + addExpectedElement(7457); + addExpectedElement(7458); + addExpectedElement(7459); + addExpectedElement(7460); + addExpectedElement(7461); + addExpectedElement(7462); + addExpectedElement(7463); + addExpectedElement(7464); + addExpectedElement(7465); + addExpectedElement(7466); + addExpectedElement(7467); + addExpectedElement(7468); + addExpectedElement(7469); + addExpectedElement(7470); + addExpectedElement(7471); + addExpectedElement(7472); + addExpectedElement(7473); + addExpectedElement(7474); + addExpectedElement(7475); + addExpectedElement(7476); + addExpectedElement(7477); + addExpectedElement(7478); + addExpectedElement(7479); + addExpectedElement(7480); + addExpectedElement(7481); + addExpectedElement(7482); + addExpectedElement(7483); + addExpectedElement(7484); + addExpectedElement(7485); + addExpectedElement(7486); + addExpectedElement(7487); + addExpectedElement(7488); + addExpectedElement(7489); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 42, parse_org_emftext_language_java_references_MethodCall_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_references_MethodCall" + + + + // $ANTLR start "parse_org_emftext_language_java_references_IdentifierReference" + // Java.g:17229:1: parse_org_emftext_language_java_references_IdentifierReference returns [org.emftext.language.java.references.IdentifierReference element = null] : (a0= IDENTIFIER ) ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) )? ( (a6_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a7= '.' (a8_0= parse_org_emftext_language_java_references_Reference ) ) )? ; + private JavaContextDependentURIFragmentFactory identifierReferenceURIFragmentFactory = new JavaContextDependentURIFragmentFactory(getReferenceResolverSwitch().getElementReferenceTargetReferenceResolver()); + public final org.emftext.language.java.references.IdentifierReference parse_org_emftext_language_java_references_IdentifierReference() throws RecognitionException { + org.emftext.language.java.references.IdentifierReference element = null; + + int parse_org_emftext_language_java_references_IdentifierReference_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a3=null; + Token a5=null; + Token a7=null; + org.emftext.language.java.generics.TypeArgument a2_0 =null; + + org.emftext.language.java.generics.TypeArgument a4_0 =null; + + org.emftext.language.java.arrays.ArraySelector a6_0 =null; + + org.emftext.language.java.references.Reference a8_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 43) ) { return element; } + + // Java.g:17232:2: ( (a0= IDENTIFIER ) ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) )? ( (a6_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a7= '.' (a8_0= parse_org_emftext_language_java_references_Reference ) ) )? ) + // Java.g:17233:2: (a0= IDENTIFIER ) ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) )? ( (a6_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a7= '.' (a8_0= parse_org_emftext_language_java_references_Reference ) ) )? + { + // Java.g:17233:2: (a0= IDENTIFIER ) + // Java.g:17234:3: a0= IDENTIFIER + { + a0=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_references_IdentifierReference14131); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createIdentifierReference(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.IDENTIFIER_REFERENCE__TARGET), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + String resolved = (String) resolvedObject; + org.emftext.language.java.references.ReferenceableElement proxy = org.emftext.language.java.annotations.AnnotationsFactory.eINSTANCE.createAnnotationAttribute(); + collectHiddenTokens(element); + + registerContextDependentProxy(identifierReferenceURIFragmentFactory, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.IDENTIFIER_REFERENCE__TARGET), resolved, proxy); + if (proxy != null) { + Object value = proxy; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.IDENTIFIER_REFERENCE__TARGET), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_41_0_0_0, proxy, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, proxy); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7490); + addExpectedElement(7491); + addExpectedElement(7492); + addExpectedElement(7493); + addExpectedElement(7494); + addExpectedElement(7495); + addExpectedElement(7496); + addExpectedElement(7497); + addExpectedElement(7498); + addExpectedElement(7499); + addExpectedElement(7500); + addExpectedElement(7501); + addExpectedElement(7502); + addExpectedElement(7503); + addExpectedElement(7504); + addExpectedElement(7505); + addExpectedElement(7506); + addExpectedElement(7507); + addExpectedElement(7508); + addExpectedElement(7509); + addExpectedElement(7510); + addExpectedElement(7511); + addExpectedElement(7512); + addExpectedElement(7513); + addExpectedElement(7514); + addExpectedElement(7515); + addExpectedElement(7516); + addExpectedElement(7517); + addExpectedElement(7518); + addExpectedElement(7519); + addExpectedElement(7520); + addExpectedElement(7521); + addExpectedElement(7522); + addExpectedElement(7523); + addExpectedElement(7524); + addExpectedElement(7525); + addExpectedElement(7526); + addExpectedElement(7527); + addExpectedElement(7528); + addExpectedElement(7529); + addExpectedElement(7530); + addExpectedElement(7531); + addExpectedElement(7532); + addExpectedElement(7533); + addExpectedElement(7534); + addExpectedElement(7535); + addExpectedElement(7536); + addExpectedElement(7537); + addExpectedElement(7538); + addExpectedElement(7539); + addExpectedElement(7540); + addExpectedElement(7541); + addExpectedElement(7542); + addExpectedElement(7543); + addExpectedElement(7544); + addExpectedElement(7545); + addExpectedElement(7546); + addExpectedElement(7547); + addExpectedElement(7548); + addExpectedElement(7549); + addExpectedElement(7550); + addExpectedElement(7551); + addExpectedElement(7552); + addExpectedElement(7553); + addExpectedElement(7554); + addExpectedElement(7555); + addExpectedElement(7556); + } + + // Java.g:17339:2: ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) )? + int alt163=2; + int LA163_0 = input.LA(1); + + if ( (LA163_0==43) ) { + int LA163_1 = input.LA(2); + + if ( (synpred164_Java()) ) { + alt163=1; + } + } + switch (alt163) { + case 1 : + // Java.g:17340:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) + { + // Java.g:17340:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) + // Java.g:17341:4: a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' + { + a1=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_references_IdentifierReference14161); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createIdentifierReference(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_41_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7557); + addExpectedElement(7558); + addExpectedElement(7559); + addExpectedElement(7560); + addExpectedElement(7561); + addExpectedElement(7562); + addExpectedElement(7563); + addExpectedElement(7564); + addExpectedElement(7565); + addExpectedElement(7566); + addExpectedElement(7567); + addExpectedElement(7568); + addExpectedElement(7569); + addExpectedElement(7570); + } + + // Java.g:17368:4: (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:17369:5: a2_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_references_IdentifierReference14187); + a2_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createIdentifierReference(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.references.ReferencesPackage.IDENTIFIER_REFERENCE__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_41_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7571); + addExpectedElement(7572); + } + + // Java.g:17395:4: ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* + loop162: + do { + int alt162=2; + int LA162_0 = input.LA(1); + + if ( (LA162_0==33) ) { + alt162=1; + } + + + switch (alt162) { + case 1 : + // Java.g:17396:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + { + // Java.g:17396:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + // Java.g:17397:6: a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) + { + a3=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_references_IdentifierReference14228); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createIdentifierReference(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_41_0_0_1_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7573); + addExpectedElement(7574); + addExpectedElement(7575); + addExpectedElement(7576); + addExpectedElement(7577); + addExpectedElement(7578); + addExpectedElement(7579); + addExpectedElement(7580); + addExpectedElement(7581); + addExpectedElement(7582); + addExpectedElement(7583); + addExpectedElement(7584); + addExpectedElement(7585); + addExpectedElement(7586); + } + + // Java.g:17424:6: (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:17425:7: a4_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_references_IdentifierReference14262); + a4_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createIdentifierReference(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.references.ReferencesPackage.IDENTIFIER_REFERENCE__TYPE_ARGUMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_41_0_0_1_0_0_2_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7587); + addExpectedElement(7588); + } + + } + + + } + break; + + default : + break loop162; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7589); + addExpectedElement(7590); + } + + a5=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_references_IdentifierReference14323); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createIdentifierReference(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_41_0_0_1_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7591); + addExpectedElement(7592); + addExpectedElement(7593); + addExpectedElement(7594); + addExpectedElement(7595); + addExpectedElement(7596); + addExpectedElement(7597); + addExpectedElement(7598); + addExpectedElement(7599); + addExpectedElement(7600); + addExpectedElement(7601); + addExpectedElement(7602); + addExpectedElement(7603); + addExpectedElement(7604); + addExpectedElement(7605); + addExpectedElement(7606); + addExpectedElement(7607); + addExpectedElement(7608); + addExpectedElement(7609); + addExpectedElement(7610); + addExpectedElement(7611); + addExpectedElement(7612); + addExpectedElement(7613); + addExpectedElement(7614); + addExpectedElement(7615); + addExpectedElement(7616); + addExpectedElement(7617); + addExpectedElement(7618); + addExpectedElement(7619); + addExpectedElement(7620); + addExpectedElement(7621); + addExpectedElement(7622); + addExpectedElement(7623); + addExpectedElement(7624); + addExpectedElement(7625); + addExpectedElement(7626); + addExpectedElement(7627); + addExpectedElement(7628); + addExpectedElement(7629); + addExpectedElement(7630); + addExpectedElement(7631); + addExpectedElement(7632); + addExpectedElement(7633); + addExpectedElement(7634); + addExpectedElement(7635); + addExpectedElement(7636); + addExpectedElement(7637); + addExpectedElement(7638); + addExpectedElement(7639); + addExpectedElement(7640); + addExpectedElement(7641); + addExpectedElement(7642); + addExpectedElement(7643); + addExpectedElement(7644); + addExpectedElement(7645); + addExpectedElement(7646); + addExpectedElement(7647); + addExpectedElement(7648); + addExpectedElement(7649); + addExpectedElement(7650); + addExpectedElement(7651); + addExpectedElement(7652); + addExpectedElement(7653); + addExpectedElement(7654); + addExpectedElement(7655); + addExpectedElement(7656); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7657); + addExpectedElement(7658); + addExpectedElement(7659); + addExpectedElement(7660); + addExpectedElement(7661); + addExpectedElement(7662); + addExpectedElement(7663); + addExpectedElement(7664); + addExpectedElement(7665); + addExpectedElement(7666); + addExpectedElement(7667); + addExpectedElement(7668); + addExpectedElement(7669); + addExpectedElement(7670); + addExpectedElement(7671); + addExpectedElement(7672); + addExpectedElement(7673); + addExpectedElement(7674); + addExpectedElement(7675); + addExpectedElement(7676); + addExpectedElement(7677); + addExpectedElement(7678); + addExpectedElement(7679); + addExpectedElement(7680); + addExpectedElement(7681); + addExpectedElement(7682); + addExpectedElement(7683); + addExpectedElement(7684); + addExpectedElement(7685); + addExpectedElement(7686); + addExpectedElement(7687); + addExpectedElement(7688); + addExpectedElement(7689); + addExpectedElement(7690); + addExpectedElement(7691); + addExpectedElement(7692); + addExpectedElement(7693); + addExpectedElement(7694); + addExpectedElement(7695); + addExpectedElement(7696); + addExpectedElement(7697); + addExpectedElement(7698); + addExpectedElement(7699); + addExpectedElement(7700); + addExpectedElement(7701); + addExpectedElement(7702); + addExpectedElement(7703); + addExpectedElement(7704); + addExpectedElement(7705); + addExpectedElement(7706); + addExpectedElement(7707); + addExpectedElement(7708); + addExpectedElement(7709); + addExpectedElement(7710); + addExpectedElement(7711); + addExpectedElement(7712); + addExpectedElement(7713); + addExpectedElement(7714); + addExpectedElement(7715); + addExpectedElement(7716); + addExpectedElement(7717); + addExpectedElement(7718); + addExpectedElement(7719); + addExpectedElement(7720); + addExpectedElement(7721); + addExpectedElement(7722); + } + + // Java.g:17610:2: ( (a6_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* + loop164: + do { + int alt164=2; + int LA164_0 = input.LA(1); + + if ( (LA164_0==49) ) { + alt164=1; + } + + + switch (alt164) { + case 1 : + // Java.g:17611:3: (a6_0= parse_org_emftext_language_java_arrays_ArraySelector ) + { + // Java.g:17611:3: (a6_0= parse_org_emftext_language_java_arrays_ArraySelector ) + // Java.g:17612:4: a6_0= parse_org_emftext_language_java_arrays_ArraySelector + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArraySelector_in_parse_org_emftext_language_java_references_IdentifierReference14365); + a6_0=parse_org_emftext_language_java_arrays_ArraySelector(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createIdentifierReference(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + addObjectToList(element, org.emftext.language.java.references.ReferencesPackage.IDENTIFIER_REFERENCE__ARRAY_SELECTORS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_41_0_0_2, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + } + break; + + default : + break loop164; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7723); + addExpectedElement(7724); + addExpectedElement(7725); + addExpectedElement(7726); + addExpectedElement(7727); + addExpectedElement(7728); + addExpectedElement(7729); + addExpectedElement(7730); + addExpectedElement(7731); + addExpectedElement(7732); + addExpectedElement(7733); + addExpectedElement(7734); + addExpectedElement(7735); + addExpectedElement(7736); + addExpectedElement(7737); + addExpectedElement(7738); + addExpectedElement(7739); + addExpectedElement(7740); + addExpectedElement(7741); + addExpectedElement(7742); + addExpectedElement(7743); + addExpectedElement(7744); + addExpectedElement(7745); + addExpectedElement(7746); + addExpectedElement(7747); + addExpectedElement(7748); + addExpectedElement(7749); + addExpectedElement(7750); + addExpectedElement(7751); + addExpectedElement(7752); + addExpectedElement(7753); + addExpectedElement(7754); + addExpectedElement(7755); + addExpectedElement(7756); + addExpectedElement(7757); + addExpectedElement(7758); + addExpectedElement(7759); + addExpectedElement(7760); + addExpectedElement(7761); + addExpectedElement(7762); + addExpectedElement(7763); + addExpectedElement(7764); + addExpectedElement(7765); + addExpectedElement(7766); + addExpectedElement(7767); + addExpectedElement(7768); + addExpectedElement(7769); + addExpectedElement(7770); + addExpectedElement(7771); + addExpectedElement(7772); + addExpectedElement(7773); + addExpectedElement(7774); + addExpectedElement(7775); + addExpectedElement(7776); + addExpectedElement(7777); + addExpectedElement(7778); + addExpectedElement(7779); + addExpectedElement(7780); + addExpectedElement(7781); + addExpectedElement(7782); + addExpectedElement(7783); + addExpectedElement(7784); + addExpectedElement(7785); + addExpectedElement(7786); + addExpectedElement(7787); + addExpectedElement(7788); + } + + // Java.g:17703:2: ( (a7= '.' (a8_0= parse_org_emftext_language_java_references_Reference ) ) )? + int alt165=2; + int LA165_0 = input.LA(1); + + if ( (LA165_0==37) ) { + alt165=1; + } + switch (alt165) { + case 1 : + // Java.g:17704:3: (a7= '.' (a8_0= parse_org_emftext_language_java_references_Reference ) ) + { + // Java.g:17704:3: (a7= '.' (a8_0= parse_org_emftext_language_java_references_Reference ) ) + // Java.g:17705:4: a7= '.' (a8_0= parse_org_emftext_language_java_references_Reference ) + { + a7=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_references_IdentifierReference14400); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createIdentifierReference(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_41_0_0_3_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a7, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7789); + addExpectedElement(7790); + addExpectedElement(7791); + addExpectedElement(7792); + addExpectedElement(7793); + addExpectedElement(7794); + addExpectedElement(7795); + addExpectedElement(7796); + addExpectedElement(7797); + addExpectedElement(7798); + addExpectedElement(7799); + addExpectedElement(7800); + addExpectedElement(7801); + addExpectedElement(7802); + addExpectedElement(7803); + addExpectedElement(7804); + addExpectedElement(7805); + addExpectedElement(7806); + addExpectedElement(7807); + addExpectedElement(7808); + addExpectedElement(7809); + addExpectedElement(7810); + addExpectedElement(7811); + } + + // Java.g:17741:4: (a8_0= parse_org_emftext_language_java_references_Reference ) + // Java.g:17742:5: a8_0= parse_org_emftext_language_java_references_Reference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_references_IdentifierReference14426); + a8_0=parse_org_emftext_language_java_references_Reference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createIdentifierReference(); + startIncompleteElement(element); + } + if (a8_0 != null) { + if (a8_0 != null) { + Object value = a8_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.IDENTIFIER_REFERENCE__NEXT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_41_0_0_3_0_0_1, a8_0, true); + copyLocalizationInfos(a8_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7812); + addExpectedElement(7813); + addExpectedElement(7814); + addExpectedElement(7815); + addExpectedElement(7816); + addExpectedElement(7817); + addExpectedElement(7818); + addExpectedElement(7819); + addExpectedElement(7820); + addExpectedElement(7821); + addExpectedElement(7822); + addExpectedElement(7823); + addExpectedElement(7824); + addExpectedElement(7825); + addExpectedElement(7826); + addExpectedElement(7827); + addExpectedElement(7828); + addExpectedElement(7829); + addExpectedElement(7830); + addExpectedElement(7831); + addExpectedElement(7832); + addExpectedElement(7833); + addExpectedElement(7834); + addExpectedElement(7835); + addExpectedElement(7836); + addExpectedElement(7837); + addExpectedElement(7838); + addExpectedElement(7839); + addExpectedElement(7840); + addExpectedElement(7841); + addExpectedElement(7842); + addExpectedElement(7843); + addExpectedElement(7844); + addExpectedElement(7845); + addExpectedElement(7846); + addExpectedElement(7847); + addExpectedElement(7848); + addExpectedElement(7849); + addExpectedElement(7850); + addExpectedElement(7851); + addExpectedElement(7852); + addExpectedElement(7853); + addExpectedElement(7854); + addExpectedElement(7855); + addExpectedElement(7856); + addExpectedElement(7857); + addExpectedElement(7858); + addExpectedElement(7859); + addExpectedElement(7860); + addExpectedElement(7861); + addExpectedElement(7862); + addExpectedElement(7863); + addExpectedElement(7864); + addExpectedElement(7865); + addExpectedElement(7866); + addExpectedElement(7867); + addExpectedElement(7868); + addExpectedElement(7869); + addExpectedElement(7870); + addExpectedElement(7871); + addExpectedElement(7872); + addExpectedElement(7873); + addExpectedElement(7874); + addExpectedElement(7875); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7876); + addExpectedElement(7877); + addExpectedElement(7878); + addExpectedElement(7879); + addExpectedElement(7880); + addExpectedElement(7881); + addExpectedElement(7882); + addExpectedElement(7883); + addExpectedElement(7884); + addExpectedElement(7885); + addExpectedElement(7886); + addExpectedElement(7887); + addExpectedElement(7888); + addExpectedElement(7889); + addExpectedElement(7890); + addExpectedElement(7891); + addExpectedElement(7892); + addExpectedElement(7893); + addExpectedElement(7894); + addExpectedElement(7895); + addExpectedElement(7896); + addExpectedElement(7897); + addExpectedElement(7898); + addExpectedElement(7899); + addExpectedElement(7900); + addExpectedElement(7901); + addExpectedElement(7902); + addExpectedElement(7903); + addExpectedElement(7904); + addExpectedElement(7905); + addExpectedElement(7906); + addExpectedElement(7907); + addExpectedElement(7908); + addExpectedElement(7909); + addExpectedElement(7910); + addExpectedElement(7911); + addExpectedElement(7912); + addExpectedElement(7913); + addExpectedElement(7914); + addExpectedElement(7915); + addExpectedElement(7916); + addExpectedElement(7917); + addExpectedElement(7918); + addExpectedElement(7919); + addExpectedElement(7920); + addExpectedElement(7921); + addExpectedElement(7922); + addExpectedElement(7923); + addExpectedElement(7924); + addExpectedElement(7925); + addExpectedElement(7926); + addExpectedElement(7927); + addExpectedElement(7928); + addExpectedElement(7929); + addExpectedElement(7930); + addExpectedElement(7931); + addExpectedElement(7932); + addExpectedElement(7933); + addExpectedElement(7934); + addExpectedElement(7935); + addExpectedElement(7936); + addExpectedElement(7937); + addExpectedElement(7938); + addExpectedElement(7939); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 43, parse_org_emftext_language_java_references_IdentifierReference_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_references_IdentifierReference" + + + + // $ANTLR start "parse_org_emftext_language_java_references_ReflectiveClassReference" + // Java.g:17902:1: parse_org_emftext_language_java_references_ReflectiveClassReference returns [org.emftext.language.java.references.ReflectiveClassReference element = null] : a0= 'class' ( (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) )? ; + public final org.emftext.language.java.references.ReflectiveClassReference parse_org_emftext_language_java_references_ReflectiveClassReference() throws RecognitionException { + org.emftext.language.java.references.ReflectiveClassReference element = null; + + int parse_org_emftext_language_java_references_ReflectiveClassReference_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + org.emftext.language.java.references.Reference a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 44) ) { return element; } + + // Java.g:17905:2: (a0= 'class' ( (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) )? ) + // Java.g:17906:2: a0= 'class' ( (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) )? + { + a0=(Token)match(input,64,FOLLOW_64_in_parse_org_emftext_language_java_references_ReflectiveClassReference14482); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createReflectiveClassReference(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_42_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(7940); + addExpectedElement(7941); + addExpectedElement(7942); + addExpectedElement(7943); + addExpectedElement(7944); + addExpectedElement(7945); + addExpectedElement(7946); + addExpectedElement(7947); + addExpectedElement(7948); + addExpectedElement(7949); + addExpectedElement(7950); + addExpectedElement(7951); + addExpectedElement(7952); + addExpectedElement(7953); + addExpectedElement(7954); + addExpectedElement(7955); + addExpectedElement(7956); + addExpectedElement(7957); + addExpectedElement(7958); + addExpectedElement(7959); + addExpectedElement(7960); + addExpectedElement(7961); + addExpectedElement(7962); + addExpectedElement(7963); + addExpectedElement(7964); + addExpectedElement(7965); + addExpectedElement(7966); + addExpectedElement(7967); + addExpectedElement(7968); + addExpectedElement(7969); + addExpectedElement(7970); + addExpectedElement(7971); + addExpectedElement(7972); + addExpectedElement(7973); + addExpectedElement(7974); + addExpectedElement(7975); + addExpectedElement(7976); + addExpectedElement(7977); + addExpectedElement(7978); + addExpectedElement(7979); + addExpectedElement(7980); + addExpectedElement(7981); + addExpectedElement(7982); + addExpectedElement(7983); + addExpectedElement(7984); + addExpectedElement(7985); + addExpectedElement(7986); + addExpectedElement(7987); + addExpectedElement(7988); + addExpectedElement(7989); + addExpectedElement(7990); + addExpectedElement(7991); + addExpectedElement(7992); + addExpectedElement(7993); + addExpectedElement(7994); + addExpectedElement(7995); + addExpectedElement(7996); + addExpectedElement(7997); + addExpectedElement(7998); + addExpectedElement(7999); + addExpectedElement(8000); + addExpectedElement(8001); + addExpectedElement(8002); + addExpectedElement(8003); + addExpectedElement(8004); + } + + // Java.g:17984:2: ( (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) )? + int alt166=2; + int LA166_0 = input.LA(1); + + if ( (LA166_0==37) ) { + alt166=1; + } + switch (alt166) { + case 1 : + // Java.g:17985:3: (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) + { + // Java.g:17985:3: (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) + // Java.g:17986:4: a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) + { + a1=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_references_ReflectiveClassReference14505); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createReflectiveClassReference(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_42_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8005); + addExpectedElement(8006); + addExpectedElement(8007); + addExpectedElement(8008); + addExpectedElement(8009); + addExpectedElement(8010); + addExpectedElement(8011); + addExpectedElement(8012); + addExpectedElement(8013); + addExpectedElement(8014); + addExpectedElement(8015); + addExpectedElement(8016); + addExpectedElement(8017); + addExpectedElement(8018); + addExpectedElement(8019); + addExpectedElement(8020); + addExpectedElement(8021); + addExpectedElement(8022); + addExpectedElement(8023); + addExpectedElement(8024); + addExpectedElement(8025); + addExpectedElement(8026); + addExpectedElement(8027); + } + + // Java.g:18022:4: (a2_0= parse_org_emftext_language_java_references_Reference ) + // Java.g:18023:5: a2_0= parse_org_emftext_language_java_references_Reference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_references_ReflectiveClassReference14531); + a2_0=parse_org_emftext_language_java_references_Reference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createReflectiveClassReference(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.REFLECTIVE_CLASS_REFERENCE__NEXT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_42_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8028); + addExpectedElement(8029); + addExpectedElement(8030); + addExpectedElement(8031); + addExpectedElement(8032); + addExpectedElement(8033); + addExpectedElement(8034); + addExpectedElement(8035); + addExpectedElement(8036); + addExpectedElement(8037); + addExpectedElement(8038); + addExpectedElement(8039); + addExpectedElement(8040); + addExpectedElement(8041); + addExpectedElement(8042); + addExpectedElement(8043); + addExpectedElement(8044); + addExpectedElement(8045); + addExpectedElement(8046); + addExpectedElement(8047); + addExpectedElement(8048); + addExpectedElement(8049); + addExpectedElement(8050); + addExpectedElement(8051); + addExpectedElement(8052); + addExpectedElement(8053); + addExpectedElement(8054); + addExpectedElement(8055); + addExpectedElement(8056); + addExpectedElement(8057); + addExpectedElement(8058); + addExpectedElement(8059); + addExpectedElement(8060); + addExpectedElement(8061); + addExpectedElement(8062); + addExpectedElement(8063); + addExpectedElement(8064); + addExpectedElement(8065); + addExpectedElement(8066); + addExpectedElement(8067); + addExpectedElement(8068); + addExpectedElement(8069); + addExpectedElement(8070); + addExpectedElement(8071); + addExpectedElement(8072); + addExpectedElement(8073); + addExpectedElement(8074); + addExpectedElement(8075); + addExpectedElement(8076); + addExpectedElement(8077); + addExpectedElement(8078); + addExpectedElement(8079); + addExpectedElement(8080); + addExpectedElement(8081); + addExpectedElement(8082); + addExpectedElement(8083); + addExpectedElement(8084); + addExpectedElement(8085); + addExpectedElement(8086); + addExpectedElement(8087); + addExpectedElement(8088); + addExpectedElement(8089); + addExpectedElement(8090); + addExpectedElement(8091); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8092); + addExpectedElement(8093); + addExpectedElement(8094); + addExpectedElement(8095); + addExpectedElement(8096); + addExpectedElement(8097); + addExpectedElement(8098); + addExpectedElement(8099); + addExpectedElement(8100); + addExpectedElement(8101); + addExpectedElement(8102); + addExpectedElement(8103); + addExpectedElement(8104); + addExpectedElement(8105); + addExpectedElement(8106); + addExpectedElement(8107); + addExpectedElement(8108); + addExpectedElement(8109); + addExpectedElement(8110); + addExpectedElement(8111); + addExpectedElement(8112); + addExpectedElement(8113); + addExpectedElement(8114); + addExpectedElement(8115); + addExpectedElement(8116); + addExpectedElement(8117); + addExpectedElement(8118); + addExpectedElement(8119); + addExpectedElement(8120); + addExpectedElement(8121); + addExpectedElement(8122); + addExpectedElement(8123); + addExpectedElement(8124); + addExpectedElement(8125); + addExpectedElement(8126); + addExpectedElement(8127); + addExpectedElement(8128); + addExpectedElement(8129); + addExpectedElement(8130); + addExpectedElement(8131); + addExpectedElement(8132); + addExpectedElement(8133); + addExpectedElement(8134); + addExpectedElement(8135); + addExpectedElement(8136); + addExpectedElement(8137); + addExpectedElement(8138); + addExpectedElement(8139); + addExpectedElement(8140); + addExpectedElement(8141); + addExpectedElement(8142); + addExpectedElement(8143); + addExpectedElement(8144); + addExpectedElement(8145); + addExpectedElement(8146); + addExpectedElement(8147); + addExpectedElement(8148); + addExpectedElement(8149); + addExpectedElement(8150); + addExpectedElement(8151); + addExpectedElement(8152); + addExpectedElement(8153); + addExpectedElement(8154); + addExpectedElement(8155); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 44, parse_org_emftext_language_java_references_ReflectiveClassReference_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_references_ReflectiveClassReference" + + + + // $ANTLR start "parse_org_emftext_language_java_references_SelfReference" + // Java.g:18183:1: parse_org_emftext_language_java_references_SelfReference returns [org.emftext.language.java.references.SelfReference element = null] : (a0_0= parse_org_emftext_language_java_literals_Self ) ( (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) )? ; + public final org.emftext.language.java.references.SelfReference parse_org_emftext_language_java_references_SelfReference() throws RecognitionException { + org.emftext.language.java.references.SelfReference element = null; + + int parse_org_emftext_language_java_references_SelfReference_StartIndex = input.index(); + + Token a1=null; + org.emftext.language.java.literals.Self a0_0 =null; + + org.emftext.language.java.references.Reference a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 45) ) { return element; } + + // Java.g:18186:2: ( (a0_0= parse_org_emftext_language_java_literals_Self ) ( (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) )? ) + // Java.g:18187:2: (a0_0= parse_org_emftext_language_java_literals_Self ) ( (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) )? + { + // Java.g:18187:2: (a0_0= parse_org_emftext_language_java_literals_Self ) + // Java.g:18188:3: a0_0= parse_org_emftext_language_java_literals_Self + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_Self_in_parse_org_emftext_language_java_references_SelfReference14591); + a0_0=parse_org_emftext_language_java_literals_Self(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createSelfReference(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.SELF_REFERENCE__SELF), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_43_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8156); + addExpectedElement(8157); + addExpectedElement(8158); + addExpectedElement(8159); + addExpectedElement(8160); + addExpectedElement(8161); + addExpectedElement(8162); + addExpectedElement(8163); + addExpectedElement(8164); + addExpectedElement(8165); + addExpectedElement(8166); + addExpectedElement(8167); + addExpectedElement(8168); + addExpectedElement(8169); + addExpectedElement(8170); + addExpectedElement(8171); + addExpectedElement(8172); + addExpectedElement(8173); + addExpectedElement(8174); + addExpectedElement(8175); + addExpectedElement(8176); + addExpectedElement(8177); + addExpectedElement(8178); + addExpectedElement(8179); + addExpectedElement(8180); + addExpectedElement(8181); + addExpectedElement(8182); + addExpectedElement(8183); + addExpectedElement(8184); + addExpectedElement(8185); + addExpectedElement(8186); + addExpectedElement(8187); + addExpectedElement(8188); + addExpectedElement(8189); + addExpectedElement(8190); + addExpectedElement(8191); + addExpectedElement(8192); + addExpectedElement(8193); + addExpectedElement(8194); + addExpectedElement(8195); + addExpectedElement(8196); + addExpectedElement(8197); + addExpectedElement(8198); + addExpectedElement(8199); + addExpectedElement(8200); + addExpectedElement(8201); + addExpectedElement(8202); + addExpectedElement(8203); + addExpectedElement(8204); + addExpectedElement(8205); + addExpectedElement(8206); + addExpectedElement(8207); + addExpectedElement(8208); + addExpectedElement(8209); + addExpectedElement(8210); + addExpectedElement(8211); + addExpectedElement(8212); + addExpectedElement(8213); + addExpectedElement(8214); + addExpectedElement(8215); + addExpectedElement(8216); + addExpectedElement(8217); + addExpectedElement(8218); + addExpectedElement(8219); + addExpectedElement(8220); + } + + // Java.g:18277:2: ( (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) )? + int alt167=2; + int LA167_0 = input.LA(1); + + if ( (LA167_0==37) ) { + alt167=1; + } + switch (alt167) { + case 1 : + // Java.g:18278:3: (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) + { + // Java.g:18278:3: (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) + // Java.g:18279:4: a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) + { + a1=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_references_SelfReference14618); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createSelfReference(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_43_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8221); + addExpectedElement(8222); + addExpectedElement(8223); + addExpectedElement(8224); + addExpectedElement(8225); + addExpectedElement(8226); + addExpectedElement(8227); + addExpectedElement(8228); + addExpectedElement(8229); + addExpectedElement(8230); + addExpectedElement(8231); + addExpectedElement(8232); + addExpectedElement(8233); + addExpectedElement(8234); + addExpectedElement(8235); + addExpectedElement(8236); + addExpectedElement(8237); + addExpectedElement(8238); + addExpectedElement(8239); + addExpectedElement(8240); + addExpectedElement(8241); + addExpectedElement(8242); + addExpectedElement(8243); + } + + // Java.g:18315:4: (a2_0= parse_org_emftext_language_java_references_Reference ) + // Java.g:18316:5: a2_0= parse_org_emftext_language_java_references_Reference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_references_SelfReference14644); + a2_0=parse_org_emftext_language_java_references_Reference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createSelfReference(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.SELF_REFERENCE__NEXT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_43_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8244); + addExpectedElement(8245); + addExpectedElement(8246); + addExpectedElement(8247); + addExpectedElement(8248); + addExpectedElement(8249); + addExpectedElement(8250); + addExpectedElement(8251); + addExpectedElement(8252); + addExpectedElement(8253); + addExpectedElement(8254); + addExpectedElement(8255); + addExpectedElement(8256); + addExpectedElement(8257); + addExpectedElement(8258); + addExpectedElement(8259); + addExpectedElement(8260); + addExpectedElement(8261); + addExpectedElement(8262); + addExpectedElement(8263); + addExpectedElement(8264); + addExpectedElement(8265); + addExpectedElement(8266); + addExpectedElement(8267); + addExpectedElement(8268); + addExpectedElement(8269); + addExpectedElement(8270); + addExpectedElement(8271); + addExpectedElement(8272); + addExpectedElement(8273); + addExpectedElement(8274); + addExpectedElement(8275); + addExpectedElement(8276); + addExpectedElement(8277); + addExpectedElement(8278); + addExpectedElement(8279); + addExpectedElement(8280); + addExpectedElement(8281); + addExpectedElement(8282); + addExpectedElement(8283); + addExpectedElement(8284); + addExpectedElement(8285); + addExpectedElement(8286); + addExpectedElement(8287); + addExpectedElement(8288); + addExpectedElement(8289); + addExpectedElement(8290); + addExpectedElement(8291); + addExpectedElement(8292); + addExpectedElement(8293); + addExpectedElement(8294); + addExpectedElement(8295); + addExpectedElement(8296); + addExpectedElement(8297); + addExpectedElement(8298); + addExpectedElement(8299); + addExpectedElement(8300); + addExpectedElement(8301); + addExpectedElement(8302); + addExpectedElement(8303); + addExpectedElement(8304); + addExpectedElement(8305); + addExpectedElement(8306); + addExpectedElement(8307); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8308); + addExpectedElement(8309); + addExpectedElement(8310); + addExpectedElement(8311); + addExpectedElement(8312); + addExpectedElement(8313); + addExpectedElement(8314); + addExpectedElement(8315); + addExpectedElement(8316); + addExpectedElement(8317); + addExpectedElement(8318); + addExpectedElement(8319); + addExpectedElement(8320); + addExpectedElement(8321); + addExpectedElement(8322); + addExpectedElement(8323); + addExpectedElement(8324); + addExpectedElement(8325); + addExpectedElement(8326); + addExpectedElement(8327); + addExpectedElement(8328); + addExpectedElement(8329); + addExpectedElement(8330); + addExpectedElement(8331); + addExpectedElement(8332); + addExpectedElement(8333); + addExpectedElement(8334); + addExpectedElement(8335); + addExpectedElement(8336); + addExpectedElement(8337); + addExpectedElement(8338); + addExpectedElement(8339); + addExpectedElement(8340); + addExpectedElement(8341); + addExpectedElement(8342); + addExpectedElement(8343); + addExpectedElement(8344); + addExpectedElement(8345); + addExpectedElement(8346); + addExpectedElement(8347); + addExpectedElement(8348); + addExpectedElement(8349); + addExpectedElement(8350); + addExpectedElement(8351); + addExpectedElement(8352); + addExpectedElement(8353); + addExpectedElement(8354); + addExpectedElement(8355); + addExpectedElement(8356); + addExpectedElement(8357); + addExpectedElement(8358); + addExpectedElement(8359); + addExpectedElement(8360); + addExpectedElement(8361); + addExpectedElement(8362); + addExpectedElement(8363); + addExpectedElement(8364); + addExpectedElement(8365); + addExpectedElement(8366); + addExpectedElement(8367); + addExpectedElement(8368); + addExpectedElement(8369); + addExpectedElement(8370); + addExpectedElement(8371); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 45, parse_org_emftext_language_java_references_SelfReference_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_references_SelfReference" + + + + // $ANTLR start "parse_org_emftext_language_java_references_PrimitiveTypeReference" + // Java.g:18476:1: parse_org_emftext_language_java_references_PrimitiveTypeReference returns [org.emftext.language.java.references.PrimitiveTypeReference element = null] : (a0_0= parse_org_emftext_language_java_types_PrimitiveType ) ( (a1_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a2= '.' (a3_0= parse_org_emftext_language_java_references_Reference ) ) )? ; + public final org.emftext.language.java.references.PrimitiveTypeReference parse_org_emftext_language_java_references_PrimitiveTypeReference() throws RecognitionException { + org.emftext.language.java.references.PrimitiveTypeReference element = null; + + int parse_org_emftext_language_java_references_PrimitiveTypeReference_StartIndex = input.index(); + + Token a2=null; + org.emftext.language.java.types.PrimitiveType a0_0 =null; + + org.emftext.language.java.arrays.ArraySelector a1_0 =null; + + org.emftext.language.java.references.Reference a3_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 46) ) { return element; } + + // Java.g:18479:2: ( (a0_0= parse_org_emftext_language_java_types_PrimitiveType ) ( (a1_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a2= '.' (a3_0= parse_org_emftext_language_java_references_Reference ) ) )? ) + // Java.g:18480:2: (a0_0= parse_org_emftext_language_java_types_PrimitiveType ) ( (a1_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a2= '.' (a3_0= parse_org_emftext_language_java_references_Reference ) ) )? + { + // Java.g:18480:2: (a0_0= parse_org_emftext_language_java_types_PrimitiveType ) + // Java.g:18481:3: a0_0= parse_org_emftext_language_java_types_PrimitiveType + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_PrimitiveType_in_parse_org_emftext_language_java_references_PrimitiveTypeReference14704); + a0_0=parse_org_emftext_language_java_types_PrimitiveType(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createPrimitiveTypeReference(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.PRIMITIVE_TYPE_REFERENCE__PRIMITIVE_TYPE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_44_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8372); + addExpectedElement(8373); + addExpectedElement(8374); + addExpectedElement(8375); + addExpectedElement(8376); + addExpectedElement(8377); + addExpectedElement(8378); + addExpectedElement(8379); + addExpectedElement(8380); + addExpectedElement(8381); + addExpectedElement(8382); + addExpectedElement(8383); + addExpectedElement(8384); + addExpectedElement(8385); + addExpectedElement(8386); + addExpectedElement(8387); + addExpectedElement(8388); + addExpectedElement(8389); + addExpectedElement(8390); + addExpectedElement(8391); + addExpectedElement(8392); + addExpectedElement(8393); + addExpectedElement(8394); + addExpectedElement(8395); + addExpectedElement(8396); + addExpectedElement(8397); + addExpectedElement(8398); + addExpectedElement(8399); + addExpectedElement(8400); + addExpectedElement(8401); + addExpectedElement(8402); + addExpectedElement(8403); + addExpectedElement(8404); + addExpectedElement(8405); + addExpectedElement(8406); + addExpectedElement(8407); + addExpectedElement(8408); + addExpectedElement(8409); + addExpectedElement(8410); + addExpectedElement(8411); + addExpectedElement(8412); + addExpectedElement(8413); + addExpectedElement(8414); + addExpectedElement(8415); + addExpectedElement(8416); + addExpectedElement(8417); + addExpectedElement(8418); + addExpectedElement(8419); + addExpectedElement(8420); + addExpectedElement(8421); + addExpectedElement(8422); + addExpectedElement(8423); + addExpectedElement(8424); + addExpectedElement(8425); + addExpectedElement(8426); + addExpectedElement(8427); + addExpectedElement(8428); + addExpectedElement(8429); + addExpectedElement(8430); + addExpectedElement(8431); + addExpectedElement(8432); + addExpectedElement(8433); + addExpectedElement(8434); + addExpectedElement(8435); + addExpectedElement(8436); + addExpectedElement(8437); + } + + // Java.g:18571:2: ( (a1_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* + loop168: + do { + int alt168=2; + int LA168_0 = input.LA(1); + + if ( (LA168_0==49) ) { + alt168=1; + } + + + switch (alt168) { + case 1 : + // Java.g:18572:3: (a1_0= parse_org_emftext_language_java_arrays_ArraySelector ) + { + // Java.g:18572:3: (a1_0= parse_org_emftext_language_java_arrays_ArraySelector ) + // Java.g:18573:4: a1_0= parse_org_emftext_language_java_arrays_ArraySelector + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArraySelector_in_parse_org_emftext_language_java_references_PrimitiveTypeReference14731); + a1_0=parse_org_emftext_language_java_arrays_ArraySelector(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createPrimitiveTypeReference(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.references.ReferencesPackage.PRIMITIVE_TYPE_REFERENCE__ARRAY_SELECTORS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_44_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + } + break; + + default : + break loop168; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8438); + addExpectedElement(8439); + addExpectedElement(8440); + addExpectedElement(8441); + addExpectedElement(8442); + addExpectedElement(8443); + addExpectedElement(8444); + addExpectedElement(8445); + addExpectedElement(8446); + addExpectedElement(8447); + addExpectedElement(8448); + addExpectedElement(8449); + addExpectedElement(8450); + addExpectedElement(8451); + addExpectedElement(8452); + addExpectedElement(8453); + addExpectedElement(8454); + addExpectedElement(8455); + addExpectedElement(8456); + addExpectedElement(8457); + addExpectedElement(8458); + addExpectedElement(8459); + addExpectedElement(8460); + addExpectedElement(8461); + addExpectedElement(8462); + addExpectedElement(8463); + addExpectedElement(8464); + addExpectedElement(8465); + addExpectedElement(8466); + addExpectedElement(8467); + addExpectedElement(8468); + addExpectedElement(8469); + addExpectedElement(8470); + addExpectedElement(8471); + addExpectedElement(8472); + addExpectedElement(8473); + addExpectedElement(8474); + addExpectedElement(8475); + addExpectedElement(8476); + addExpectedElement(8477); + addExpectedElement(8478); + addExpectedElement(8479); + addExpectedElement(8480); + addExpectedElement(8481); + addExpectedElement(8482); + addExpectedElement(8483); + addExpectedElement(8484); + addExpectedElement(8485); + addExpectedElement(8486); + addExpectedElement(8487); + addExpectedElement(8488); + addExpectedElement(8489); + addExpectedElement(8490); + addExpectedElement(8491); + addExpectedElement(8492); + addExpectedElement(8493); + addExpectedElement(8494); + addExpectedElement(8495); + addExpectedElement(8496); + addExpectedElement(8497); + addExpectedElement(8498); + addExpectedElement(8499); + addExpectedElement(8500); + addExpectedElement(8501); + addExpectedElement(8502); + addExpectedElement(8503); + } + + // Java.g:18664:2: ( (a2= '.' (a3_0= parse_org_emftext_language_java_references_Reference ) ) )? + int alt169=2; + int LA169_0 = input.LA(1); + + if ( (LA169_0==37) ) { + alt169=1; + } + switch (alt169) { + case 1 : + // Java.g:18665:3: (a2= '.' (a3_0= parse_org_emftext_language_java_references_Reference ) ) + { + // Java.g:18665:3: (a2= '.' (a3_0= parse_org_emftext_language_java_references_Reference ) ) + // Java.g:18666:4: a2= '.' (a3_0= parse_org_emftext_language_java_references_Reference ) + { + a2=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_references_PrimitiveTypeReference14766); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createPrimitiveTypeReference(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_44_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8504); + addExpectedElement(8505); + addExpectedElement(8506); + addExpectedElement(8507); + addExpectedElement(8508); + addExpectedElement(8509); + addExpectedElement(8510); + addExpectedElement(8511); + addExpectedElement(8512); + addExpectedElement(8513); + addExpectedElement(8514); + addExpectedElement(8515); + addExpectedElement(8516); + addExpectedElement(8517); + addExpectedElement(8518); + addExpectedElement(8519); + addExpectedElement(8520); + addExpectedElement(8521); + addExpectedElement(8522); + addExpectedElement(8523); + addExpectedElement(8524); + addExpectedElement(8525); + addExpectedElement(8526); + } + + // Java.g:18702:4: (a3_0= parse_org_emftext_language_java_references_Reference ) + // Java.g:18703:5: a3_0= parse_org_emftext_language_java_references_Reference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_references_PrimitiveTypeReference14792); + a3_0=parse_org_emftext_language_java_references_Reference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createPrimitiveTypeReference(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.PRIMITIVE_TYPE_REFERENCE__NEXT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_44_0_0_2_0_0_1, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8527); + addExpectedElement(8528); + addExpectedElement(8529); + addExpectedElement(8530); + addExpectedElement(8531); + addExpectedElement(8532); + addExpectedElement(8533); + addExpectedElement(8534); + addExpectedElement(8535); + addExpectedElement(8536); + addExpectedElement(8537); + addExpectedElement(8538); + addExpectedElement(8539); + addExpectedElement(8540); + addExpectedElement(8541); + addExpectedElement(8542); + addExpectedElement(8543); + addExpectedElement(8544); + addExpectedElement(8545); + addExpectedElement(8546); + addExpectedElement(8547); + addExpectedElement(8548); + addExpectedElement(8549); + addExpectedElement(8550); + addExpectedElement(8551); + addExpectedElement(8552); + addExpectedElement(8553); + addExpectedElement(8554); + addExpectedElement(8555); + addExpectedElement(8556); + addExpectedElement(8557); + addExpectedElement(8558); + addExpectedElement(8559); + addExpectedElement(8560); + addExpectedElement(8561); + addExpectedElement(8562); + addExpectedElement(8563); + addExpectedElement(8564); + addExpectedElement(8565); + addExpectedElement(8566); + addExpectedElement(8567); + addExpectedElement(8568); + addExpectedElement(8569); + addExpectedElement(8570); + addExpectedElement(8571); + addExpectedElement(8572); + addExpectedElement(8573); + addExpectedElement(8574); + addExpectedElement(8575); + addExpectedElement(8576); + addExpectedElement(8577); + addExpectedElement(8578); + addExpectedElement(8579); + addExpectedElement(8580); + addExpectedElement(8581); + addExpectedElement(8582); + addExpectedElement(8583); + addExpectedElement(8584); + addExpectedElement(8585); + addExpectedElement(8586); + addExpectedElement(8587); + addExpectedElement(8588); + addExpectedElement(8589); + addExpectedElement(8590); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8591); + addExpectedElement(8592); + addExpectedElement(8593); + addExpectedElement(8594); + addExpectedElement(8595); + addExpectedElement(8596); + addExpectedElement(8597); + addExpectedElement(8598); + addExpectedElement(8599); + addExpectedElement(8600); + addExpectedElement(8601); + addExpectedElement(8602); + addExpectedElement(8603); + addExpectedElement(8604); + addExpectedElement(8605); + addExpectedElement(8606); + addExpectedElement(8607); + addExpectedElement(8608); + addExpectedElement(8609); + addExpectedElement(8610); + addExpectedElement(8611); + addExpectedElement(8612); + addExpectedElement(8613); + addExpectedElement(8614); + addExpectedElement(8615); + addExpectedElement(8616); + addExpectedElement(8617); + addExpectedElement(8618); + addExpectedElement(8619); + addExpectedElement(8620); + addExpectedElement(8621); + addExpectedElement(8622); + addExpectedElement(8623); + addExpectedElement(8624); + addExpectedElement(8625); + addExpectedElement(8626); + addExpectedElement(8627); + addExpectedElement(8628); + addExpectedElement(8629); + addExpectedElement(8630); + addExpectedElement(8631); + addExpectedElement(8632); + addExpectedElement(8633); + addExpectedElement(8634); + addExpectedElement(8635); + addExpectedElement(8636); + addExpectedElement(8637); + addExpectedElement(8638); + addExpectedElement(8639); + addExpectedElement(8640); + addExpectedElement(8641); + addExpectedElement(8642); + addExpectedElement(8643); + addExpectedElement(8644); + addExpectedElement(8645); + addExpectedElement(8646); + addExpectedElement(8647); + addExpectedElement(8648); + addExpectedElement(8649); + addExpectedElement(8650); + addExpectedElement(8651); + addExpectedElement(8652); + addExpectedElement(8653); + addExpectedElement(8654); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 46, parse_org_emftext_language_java_references_PrimitiveTypeReference_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_references_PrimitiveTypeReference" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_This" + // Java.g:18863:1: parse_org_emftext_language_java_literals_This returns [org.emftext.language.java.literals.This element = null] : a0= 'this' ; + public final org.emftext.language.java.literals.This parse_org_emftext_language_java_literals_This() throws RecognitionException { + org.emftext.language.java.literals.This element = null; + + int parse_org_emftext_language_java_literals_This_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 47) ) { return element; } + + // Java.g:18866:2: (a0= 'this' ) + // Java.g:18867:2: a0= 'this' + { + a0=(Token)match(input,97,FOLLOW_97_in_parse_org_emftext_language_java_literals_This14848); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createThis(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_45_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8655); + addExpectedElement(8656); + addExpectedElement(8657); + addExpectedElement(8658); + addExpectedElement(8659); + addExpectedElement(8660); + addExpectedElement(8661); + addExpectedElement(8662); + addExpectedElement(8663); + addExpectedElement(8664); + addExpectedElement(8665); + addExpectedElement(8666); + addExpectedElement(8667); + addExpectedElement(8668); + addExpectedElement(8669); + addExpectedElement(8670); + addExpectedElement(8671); + addExpectedElement(8672); + addExpectedElement(8673); + addExpectedElement(8674); + addExpectedElement(8675); + addExpectedElement(8676); + addExpectedElement(8677); + addExpectedElement(8678); + addExpectedElement(8679); + addExpectedElement(8680); + addExpectedElement(8681); + addExpectedElement(8682); + addExpectedElement(8683); + addExpectedElement(8684); + addExpectedElement(8685); + addExpectedElement(8686); + addExpectedElement(8687); + addExpectedElement(8688); + addExpectedElement(8689); + addExpectedElement(8690); + addExpectedElement(8691); + addExpectedElement(8692); + addExpectedElement(8693); + addExpectedElement(8694); + addExpectedElement(8695); + addExpectedElement(8696); + addExpectedElement(8697); + addExpectedElement(8698); + addExpectedElement(8699); + addExpectedElement(8700); + addExpectedElement(8701); + addExpectedElement(8702); + addExpectedElement(8703); + addExpectedElement(8704); + addExpectedElement(8705); + addExpectedElement(8706); + addExpectedElement(8707); + addExpectedElement(8708); + addExpectedElement(8709); + addExpectedElement(8710); + addExpectedElement(8711); + addExpectedElement(8712); + addExpectedElement(8713); + addExpectedElement(8714); + addExpectedElement(8715); + addExpectedElement(8716); + addExpectedElement(8717); + addExpectedElement(8718); + addExpectedElement(8719); + addExpectedElement(8720); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 47, parse_org_emftext_language_java_literals_This_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_This" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_Super" + // Java.g:18948:1: parse_org_emftext_language_java_literals_Super returns [org.emftext.language.java.literals.Super element = null] : a0= 'super' ; + public final org.emftext.language.java.literals.Super parse_org_emftext_language_java_literals_Super() throws RecognitionException { + org.emftext.language.java.literals.Super element = null; + + int parse_org_emftext_language_java_literals_Super_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 48) ) { return element; } + + // Java.g:18951:2: (a0= 'super' ) + // Java.g:18952:2: a0= 'super' + { + a0=(Token)match(input,94,FOLLOW_94_in_parse_org_emftext_language_java_literals_Super14877); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createSuper(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_46_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8721); + addExpectedElement(8722); + addExpectedElement(8723); + addExpectedElement(8724); + addExpectedElement(8725); + addExpectedElement(8726); + addExpectedElement(8727); + addExpectedElement(8728); + addExpectedElement(8729); + addExpectedElement(8730); + addExpectedElement(8731); + addExpectedElement(8732); + addExpectedElement(8733); + addExpectedElement(8734); + addExpectedElement(8735); + addExpectedElement(8736); + addExpectedElement(8737); + addExpectedElement(8738); + addExpectedElement(8739); + addExpectedElement(8740); + addExpectedElement(8741); + addExpectedElement(8742); + addExpectedElement(8743); + addExpectedElement(8744); + addExpectedElement(8745); + addExpectedElement(8746); + addExpectedElement(8747); + addExpectedElement(8748); + addExpectedElement(8749); + addExpectedElement(8750); + addExpectedElement(8751); + addExpectedElement(8752); + addExpectedElement(8753); + addExpectedElement(8754); + addExpectedElement(8755); + addExpectedElement(8756); + addExpectedElement(8757); + addExpectedElement(8758); + addExpectedElement(8759); + addExpectedElement(8760); + addExpectedElement(8761); + addExpectedElement(8762); + addExpectedElement(8763); + addExpectedElement(8764); + addExpectedElement(8765); + addExpectedElement(8766); + addExpectedElement(8767); + addExpectedElement(8768); + addExpectedElement(8769); + addExpectedElement(8770); + addExpectedElement(8771); + addExpectedElement(8772); + addExpectedElement(8773); + addExpectedElement(8774); + addExpectedElement(8775); + addExpectedElement(8776); + addExpectedElement(8777); + addExpectedElement(8778); + addExpectedElement(8779); + addExpectedElement(8780); + addExpectedElement(8781); + addExpectedElement(8782); + addExpectedElement(8783); + addExpectedElement(8784); + addExpectedElement(8785); + addExpectedElement(8786); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 48, parse_org_emftext_language_java_literals_Super_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_Super" + + + + // $ANTLR start "parse_org_emftext_language_java_references_StringReference" + // Java.g:19033:1: parse_org_emftext_language_java_references_StringReference returns [org.emftext.language.java.references.StringReference element = null] : (a0= STRING_LITERAL ) ( (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) )? ; + public final org.emftext.language.java.references.StringReference parse_org_emftext_language_java_references_StringReference() throws RecognitionException { + org.emftext.language.java.references.StringReference element = null; + + int parse_org_emftext_language_java_references_StringReference_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + org.emftext.language.java.references.Reference a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 49) ) { return element; } + + // Java.g:19036:2: ( (a0= STRING_LITERAL ) ( (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) )? ) + // Java.g:19037:2: (a0= STRING_LITERAL ) ( (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) )? + { + // Java.g:19037:2: (a0= STRING_LITERAL ) + // Java.g:19038:3: a0= STRING_LITERAL + { + a0=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_parse_org_emftext_language_java_references_StringReference14910); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createStringReference(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("STRING_LITERAL"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.STRING_REFERENCE__VALUE), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.STRING_REFERENCE__VALUE), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_47_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8787); + addExpectedElement(8788); + addExpectedElement(8789); + addExpectedElement(8790); + addExpectedElement(8791); + addExpectedElement(8792); + addExpectedElement(8793); + addExpectedElement(8794); + addExpectedElement(8795); + addExpectedElement(8796); + addExpectedElement(8797); + addExpectedElement(8798); + addExpectedElement(8799); + addExpectedElement(8800); + addExpectedElement(8801); + addExpectedElement(8802); + addExpectedElement(8803); + addExpectedElement(8804); + addExpectedElement(8805); + addExpectedElement(8806); + addExpectedElement(8807); + addExpectedElement(8808); + addExpectedElement(8809); + addExpectedElement(8810); + addExpectedElement(8811); + addExpectedElement(8812); + addExpectedElement(8813); + addExpectedElement(8814); + addExpectedElement(8815); + addExpectedElement(8816); + addExpectedElement(8817); + addExpectedElement(8818); + addExpectedElement(8819); + addExpectedElement(8820); + addExpectedElement(8821); + addExpectedElement(8822); + addExpectedElement(8823); + addExpectedElement(8824); + addExpectedElement(8825); + addExpectedElement(8826); + addExpectedElement(8827); + addExpectedElement(8828); + addExpectedElement(8829); + addExpectedElement(8830); + addExpectedElement(8831); + addExpectedElement(8832); + addExpectedElement(8833); + addExpectedElement(8834); + addExpectedElement(8835); + addExpectedElement(8836); + addExpectedElement(8837); + addExpectedElement(8838); + addExpectedElement(8839); + addExpectedElement(8840); + addExpectedElement(8841); + addExpectedElement(8842); + addExpectedElement(8843); + addExpectedElement(8844); + addExpectedElement(8845); + addExpectedElement(8846); + addExpectedElement(8847); + addExpectedElement(8848); + addExpectedElement(8849); + addExpectedElement(8850); + addExpectedElement(8851); + } + + // Java.g:19137:2: ( (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) )? + int alt170=2; + int LA170_0 = input.LA(1); + + if ( (LA170_0==37) ) { + alt170=1; + } + switch (alt170) { + case 1 : + // Java.g:19138:3: (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) + { + // Java.g:19138:3: (a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) ) + // Java.g:19139:4: a1= '.' (a2_0= parse_org_emftext_language_java_references_Reference ) + { + a1=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_references_StringReference14940); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createStringReference(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_47_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8852); + addExpectedElement(8853); + addExpectedElement(8854); + addExpectedElement(8855); + addExpectedElement(8856); + addExpectedElement(8857); + addExpectedElement(8858); + addExpectedElement(8859); + addExpectedElement(8860); + addExpectedElement(8861); + addExpectedElement(8862); + addExpectedElement(8863); + addExpectedElement(8864); + addExpectedElement(8865); + addExpectedElement(8866); + addExpectedElement(8867); + addExpectedElement(8868); + addExpectedElement(8869); + addExpectedElement(8870); + addExpectedElement(8871); + addExpectedElement(8872); + addExpectedElement(8873); + addExpectedElement(8874); + } + + // Java.g:19175:4: (a2_0= parse_org_emftext_language_java_references_Reference ) + // Java.g:19176:5: a2_0= parse_org_emftext_language_java_references_Reference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_references_StringReference14966); + a2_0=parse_org_emftext_language_java_references_Reference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.references.ReferencesFactory.eINSTANCE.createStringReference(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.references.ReferencesPackage.STRING_REFERENCE__NEXT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_47_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8875); + addExpectedElement(8876); + addExpectedElement(8877); + addExpectedElement(8878); + addExpectedElement(8879); + addExpectedElement(8880); + addExpectedElement(8881); + addExpectedElement(8882); + addExpectedElement(8883); + addExpectedElement(8884); + addExpectedElement(8885); + addExpectedElement(8886); + addExpectedElement(8887); + addExpectedElement(8888); + addExpectedElement(8889); + addExpectedElement(8890); + addExpectedElement(8891); + addExpectedElement(8892); + addExpectedElement(8893); + addExpectedElement(8894); + addExpectedElement(8895); + addExpectedElement(8896); + addExpectedElement(8897); + addExpectedElement(8898); + addExpectedElement(8899); + addExpectedElement(8900); + addExpectedElement(8901); + addExpectedElement(8902); + addExpectedElement(8903); + addExpectedElement(8904); + addExpectedElement(8905); + addExpectedElement(8906); + addExpectedElement(8907); + addExpectedElement(8908); + addExpectedElement(8909); + addExpectedElement(8910); + addExpectedElement(8911); + addExpectedElement(8912); + addExpectedElement(8913); + addExpectedElement(8914); + addExpectedElement(8915); + addExpectedElement(8916); + addExpectedElement(8917); + addExpectedElement(8918); + addExpectedElement(8919); + addExpectedElement(8920); + addExpectedElement(8921); + addExpectedElement(8922); + addExpectedElement(8923); + addExpectedElement(8924); + addExpectedElement(8925); + addExpectedElement(8926); + addExpectedElement(8927); + addExpectedElement(8928); + addExpectedElement(8929); + addExpectedElement(8930); + addExpectedElement(8931); + addExpectedElement(8932); + addExpectedElement(8933); + addExpectedElement(8934); + addExpectedElement(8935); + addExpectedElement(8936); + addExpectedElement(8937); + addExpectedElement(8938); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(8939); + addExpectedElement(8940); + addExpectedElement(8941); + addExpectedElement(8942); + addExpectedElement(8943); + addExpectedElement(8944); + addExpectedElement(8945); + addExpectedElement(8946); + addExpectedElement(8947); + addExpectedElement(8948); + addExpectedElement(8949); + addExpectedElement(8950); + addExpectedElement(8951); + addExpectedElement(8952); + addExpectedElement(8953); + addExpectedElement(8954); + addExpectedElement(8955); + addExpectedElement(8956); + addExpectedElement(8957); + addExpectedElement(8958); + addExpectedElement(8959); + addExpectedElement(8960); + addExpectedElement(8961); + addExpectedElement(8962); + addExpectedElement(8963); + addExpectedElement(8964); + addExpectedElement(8965); + addExpectedElement(8966); + addExpectedElement(8967); + addExpectedElement(8968); + addExpectedElement(8969); + addExpectedElement(8970); + addExpectedElement(8971); + addExpectedElement(8972); + addExpectedElement(8973); + addExpectedElement(8974); + addExpectedElement(8975); + addExpectedElement(8976); + addExpectedElement(8977); + addExpectedElement(8978); + addExpectedElement(8979); + addExpectedElement(8980); + addExpectedElement(8981); + addExpectedElement(8982); + addExpectedElement(8983); + addExpectedElement(8984); + addExpectedElement(8985); + addExpectedElement(8986); + addExpectedElement(8987); + addExpectedElement(8988); + addExpectedElement(8989); + addExpectedElement(8990); + addExpectedElement(8991); + addExpectedElement(8992); + addExpectedElement(8993); + addExpectedElement(8994); + addExpectedElement(8995); + addExpectedElement(8996); + addExpectedElement(8997); + addExpectedElement(8998); + addExpectedElement(8999); + addExpectedElement(9000); + addExpectedElement(9001); + addExpectedElement(9002); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 49, parse_org_emftext_language_java_references_StringReference_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_references_StringReference" + + + + // $ANTLR start "parse_org_emftext_language_java_generics_QualifiedTypeArgument" + // Java.g:19336:1: parse_org_emftext_language_java_generics_QualifiedTypeArgument returns [org.emftext.language.java.generics.QualifiedTypeArgument element = null] : (a0_0= parse_org_emftext_language_java_types_TypeReference ) ( (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ; + public final org.emftext.language.java.generics.QualifiedTypeArgument parse_org_emftext_language_java_generics_QualifiedTypeArgument() throws RecognitionException { + org.emftext.language.java.generics.QualifiedTypeArgument element = null; + + int parse_org_emftext_language_java_generics_QualifiedTypeArgument_StartIndex = input.index(); + + org.emftext.language.java.types.TypeReference a0_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a1_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 50) ) { return element; } + + // Java.g:19339:2: ( (a0_0= parse_org_emftext_language_java_types_TypeReference ) ( (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) + // Java.g:19340:2: (a0_0= parse_org_emftext_language_java_types_TypeReference ) ( (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + { + // Java.g:19340:2: (a0_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:19341:3: a0_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_generics_QualifiedTypeArgument15026); + a0_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createQualifiedTypeArgument(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.generics.GenericsPackage.QUALIFIED_TYPE_ARGUMENT__TYPE_REFERENCE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_48_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9003); + addExpectedElement(9004); + addExpectedElement(9005); + addExpectedElement(9006); + addExpectedElement(9007); + addExpectedElement(9008); + addExpectedElement(9009); + addExpectedElement(9010); + addExpectedElement(9011); + addExpectedElement(9012); + addExpectedElement(9013); + addExpectedElement(9014); + addExpectedElement(9015); + addExpectedElement(9016); + addExpectedElement(9017); + addExpectedElement(9018); + addExpectedElement(9019); + addExpectedElement(9020); + addExpectedElement(9021); + } + + // Java.g:19384:2: ( (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop171: + do { + int alt171=2; + int LA171_0 = input.LA(1); + + if ( (LA171_0==49) ) { + alt171=1; + } + + + switch (alt171) { + case 1 : + // Java.g:19385:3: (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:19385:3: (a1_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:19386:4: a1_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_generics_QualifiedTypeArgument15053); + a1_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createQualifiedTypeArgument(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.generics.GenericsPackage.QUALIFIED_TYPE_ARGUMENT__ARRAY_DIMENSIONS_BEFORE, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_48_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + } + break; + + default : + break loop171; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9022); + addExpectedElement(9023); + addExpectedElement(9024); + addExpectedElement(9025); + addExpectedElement(9026); + addExpectedElement(9027); + addExpectedElement(9028); + addExpectedElement(9029); + addExpectedElement(9030); + addExpectedElement(9031); + addExpectedElement(9032); + addExpectedElement(9033); + addExpectedElement(9034); + addExpectedElement(9035); + addExpectedElement(9036); + addExpectedElement(9037); + addExpectedElement(9038); + addExpectedElement(9039); + addExpectedElement(9040); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 50, parse_org_emftext_language_java_generics_QualifiedTypeArgument_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_generics_QualifiedTypeArgument" + + + + // $ANTLR start "parse_org_emftext_language_java_generics_UnknownTypeArgument" + // Java.g:19432:1: parse_org_emftext_language_java_generics_UnknownTypeArgument returns [org.emftext.language.java.generics.UnknownTypeArgument element = null] : a0= '?' ; + public final org.emftext.language.java.generics.UnknownTypeArgument parse_org_emftext_language_java_generics_UnknownTypeArgument() throws RecognitionException { + org.emftext.language.java.generics.UnknownTypeArgument element = null; + + int parse_org_emftext_language_java_generics_UnknownTypeArgument_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 51) ) { return element; } + + // Java.g:19435:2: (a0= '?' ) + // Java.g:19436:2: a0= '?' + { + a0=(Token)match(input,47,FOLLOW_47_in_parse_org_emftext_language_java_generics_UnknownTypeArgument15094); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createUnknownTypeArgument(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_49_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9041); + addExpectedElement(9042); + addExpectedElement(9043); + addExpectedElement(9044); + addExpectedElement(9045); + addExpectedElement(9046); + addExpectedElement(9047); + addExpectedElement(9048); + addExpectedElement(9049); + addExpectedElement(9050); + addExpectedElement(9051); + addExpectedElement(9052); + addExpectedElement(9053); + addExpectedElement(9054); + addExpectedElement(9055); + addExpectedElement(9056); + addExpectedElement(9057); + addExpectedElement(9058); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 51, parse_org_emftext_language_java_generics_UnknownTypeArgument_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_generics_UnknownTypeArgument" + + + + // $ANTLR start "parse_org_emftext_language_java_generics_ExtendsTypeArgument" + // Java.g:19469:1: parse_org_emftext_language_java_generics_ExtendsTypeArgument returns [org.emftext.language.java.generics.ExtendsTypeArgument element = null] : a0= '?' a1= 'extends' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ( (a5_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ; + public final org.emftext.language.java.generics.ExtendsTypeArgument parse_org_emftext_language_java_generics_ExtendsTypeArgument() throws RecognitionException { + org.emftext.language.java.generics.ExtendsTypeArgument element = null; + + int parse_org_emftext_language_java_generics_ExtendsTypeArgument_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a3=null; + org.emftext.language.java.types.TypeReference a2_0 =null; + + org.emftext.language.java.types.TypeReference a4_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a5_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 52) ) { return element; } + + // Java.g:19472:2: (a0= '?' a1= 'extends' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ( (a5_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) + // Java.g:19473:2: a0= '?' a1= 'extends' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) )* ( (a5_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + { + a0=(Token)match(input,47,FOLLOW_47_in_parse_org_emftext_language_java_generics_ExtendsTypeArgument15123); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createExtendsTypeArgument(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_50_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9059); + } + + a1=(Token)match(input,71,FOLLOW_71_in_parse_org_emftext_language_java_generics_ExtendsTypeArgument15137); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createExtendsTypeArgument(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_50_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9060); + addExpectedElement(9061); + addExpectedElement(9062); + addExpectedElement(9063); + addExpectedElement(9064); + addExpectedElement(9065); + addExpectedElement(9066); + addExpectedElement(9067); + addExpectedElement(9068); + addExpectedElement(9069); + addExpectedElement(9070); + } + + // Java.g:19511:2: (a2_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:19512:3: a2_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_generics_ExtendsTypeArgument15155); + a2_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createExtendsTypeArgument(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.generics.GenericsPackage.EXTENDS_TYPE_ARGUMENT__EXTEND_TYPES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_50_0_0_2, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9071); + addExpectedElement(9072); + addExpectedElement(9073); + addExpectedElement(9074); + addExpectedElement(9075); + addExpectedElement(9076); + addExpectedElement(9077); + addExpectedElement(9078); + addExpectedElement(9079); + addExpectedElement(9080); + addExpectedElement(9081); + addExpectedElement(9082); + addExpectedElement(9083); + addExpectedElement(9084); + addExpectedElement(9085); + addExpectedElement(9086); + addExpectedElement(9087); + addExpectedElement(9088); + addExpectedElement(9089); + addExpectedElement(9090); + } + + // Java.g:19556:2: ( (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) )* + loop172: + do { + int alt172=2; + int LA172_0 = input.LA(1); + + if ( (LA172_0==24) ) { + alt172=1; + } + + + switch (alt172) { + case 1 : + // Java.g:19557:3: (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) + { + // Java.g:19557:3: (a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) ) + // Java.g:19558:4: a3= '&' (a4_0= parse_org_emftext_language_java_types_TypeReference ) + { + a3=(Token)match(input,24,FOLLOW_24_in_parse_org_emftext_language_java_generics_ExtendsTypeArgument15182); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createExtendsTypeArgument(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_50_0_0_3_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9091); + addExpectedElement(9092); + addExpectedElement(9093); + addExpectedElement(9094); + addExpectedElement(9095); + addExpectedElement(9096); + addExpectedElement(9097); + addExpectedElement(9098); + addExpectedElement(9099); + addExpectedElement(9100); + addExpectedElement(9101); + } + + // Java.g:19582:4: (a4_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:19583:5: a4_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_generics_ExtendsTypeArgument15208); + a4_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createExtendsTypeArgument(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.generics.GenericsPackage.EXTENDS_TYPE_ARGUMENT__EXTEND_TYPES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_50_0_0_3_0_0_1, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9102); + addExpectedElement(9103); + addExpectedElement(9104); + addExpectedElement(9105); + addExpectedElement(9106); + addExpectedElement(9107); + addExpectedElement(9108); + addExpectedElement(9109); + addExpectedElement(9110); + addExpectedElement(9111); + addExpectedElement(9112); + addExpectedElement(9113); + addExpectedElement(9114); + addExpectedElement(9115); + addExpectedElement(9116); + addExpectedElement(9117); + addExpectedElement(9118); + addExpectedElement(9119); + addExpectedElement(9120); + addExpectedElement(9121); + } + + } + + + } + break; + + default : + break loop172; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9122); + addExpectedElement(9123); + addExpectedElement(9124); + addExpectedElement(9125); + addExpectedElement(9126); + addExpectedElement(9127); + addExpectedElement(9128); + addExpectedElement(9129); + addExpectedElement(9130); + addExpectedElement(9131); + addExpectedElement(9132); + addExpectedElement(9133); + addExpectedElement(9134); + addExpectedElement(9135); + addExpectedElement(9136); + addExpectedElement(9137); + addExpectedElement(9138); + addExpectedElement(9139); + addExpectedElement(9140); + addExpectedElement(9141); + } + + // Java.g:19653:2: ( (a5_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop173: + do { + int alt173=2; + int LA173_0 = input.LA(1); + + if ( (LA173_0==49) ) { + alt173=1; + } + + + switch (alt173) { + case 1 : + // Java.g:19654:3: (a5_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:19654:3: (a5_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:19655:4: a5_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_generics_ExtendsTypeArgument15258); + a5_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createExtendsTypeArgument(); + startIncompleteElement(element); + } + if (a5_0 != null) { + if (a5_0 != null) { + Object value = a5_0; + addObjectToList(element, org.emftext.language.java.generics.GenericsPackage.EXTENDS_TYPE_ARGUMENT__ARRAY_DIMENSIONS_BEFORE, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_50_0_0_4, a5_0, true); + copyLocalizationInfos(a5_0, element); + } + } + + } + + + } + break; + + default : + break loop173; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9142); + addExpectedElement(9143); + addExpectedElement(9144); + addExpectedElement(9145); + addExpectedElement(9146); + addExpectedElement(9147); + addExpectedElement(9148); + addExpectedElement(9149); + addExpectedElement(9150); + addExpectedElement(9151); + addExpectedElement(9152); + addExpectedElement(9153); + addExpectedElement(9154); + addExpectedElement(9155); + addExpectedElement(9156); + addExpectedElement(9157); + addExpectedElement(9158); + addExpectedElement(9159); + addExpectedElement(9160); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 52, parse_org_emftext_language_java_generics_ExtendsTypeArgument_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_generics_ExtendsTypeArgument" + + + + // $ANTLR start "parse_org_emftext_language_java_generics_SuperTypeArgument" + // Java.g:19701:1: parse_org_emftext_language_java_generics_SuperTypeArgument returns [org.emftext.language.java.generics.SuperTypeArgument element = null] : a0= '?' a1= 'super' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ; + public final org.emftext.language.java.generics.SuperTypeArgument parse_org_emftext_language_java_generics_SuperTypeArgument() throws RecognitionException { + org.emftext.language.java.generics.SuperTypeArgument element = null; + + int parse_org_emftext_language_java_generics_SuperTypeArgument_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + org.emftext.language.java.types.TypeReference a2_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a3_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 53) ) { return element; } + + // Java.g:19704:2: (a0= '?' a1= 'super' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) + // Java.g:19705:2: a0= '?' a1= 'super' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + { + a0=(Token)match(input,47,FOLLOW_47_in_parse_org_emftext_language_java_generics_SuperTypeArgument15299); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createSuperTypeArgument(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_51_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9161); + } + + a1=(Token)match(input,94,FOLLOW_94_in_parse_org_emftext_language_java_generics_SuperTypeArgument15313); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createSuperTypeArgument(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_51_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9162); + addExpectedElement(9163); + addExpectedElement(9164); + addExpectedElement(9165); + addExpectedElement(9166); + addExpectedElement(9167); + addExpectedElement(9168); + addExpectedElement(9169); + addExpectedElement(9170); + addExpectedElement(9171); + addExpectedElement(9172); + } + + // Java.g:19743:2: (a2_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:19744:3: a2_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_generics_SuperTypeArgument15331); + a2_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createSuperTypeArgument(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.generics.GenericsPackage.SUPER_TYPE_ARGUMENT__SUPER_TYPE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_51_0_0_2, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9173); + addExpectedElement(9174); + addExpectedElement(9175); + addExpectedElement(9176); + addExpectedElement(9177); + addExpectedElement(9178); + addExpectedElement(9179); + addExpectedElement(9180); + addExpectedElement(9181); + addExpectedElement(9182); + addExpectedElement(9183); + addExpectedElement(9184); + addExpectedElement(9185); + addExpectedElement(9186); + addExpectedElement(9187); + addExpectedElement(9188); + addExpectedElement(9189); + addExpectedElement(9190); + addExpectedElement(9191); + } + + // Java.g:19787:2: ( (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop174: + do { + int alt174=2; + int LA174_0 = input.LA(1); + + if ( (LA174_0==49) ) { + alt174=1; + } + + + switch (alt174) { + case 1 : + // Java.g:19788:3: (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:19788:3: (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:19789:4: a3_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_generics_SuperTypeArgument15358); + a3_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.generics.GenericsFactory.eINSTANCE.createSuperTypeArgument(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + addObjectToList(element, org.emftext.language.java.generics.GenericsPackage.SUPER_TYPE_ARGUMENT__ARRAY_DIMENSIONS_BEFORE, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_51_0_0_3, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + } + break; + + default : + break loop174; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9192); + addExpectedElement(9193); + addExpectedElement(9194); + addExpectedElement(9195); + addExpectedElement(9196); + addExpectedElement(9197); + addExpectedElement(9198); + addExpectedElement(9199); + addExpectedElement(9200); + addExpectedElement(9201); + addExpectedElement(9202); + addExpectedElement(9203); + addExpectedElement(9204); + addExpectedElement(9205); + addExpectedElement(9206); + addExpectedElement(9207); + addExpectedElement(9208); + addExpectedElement(9209); + addExpectedElement(9210); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 53, parse_org_emftext_language_java_generics_SuperTypeArgument_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_generics_SuperTypeArgument" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_Assert" + // Java.g:19835:1: parse_org_emftext_language_java_statements_Assert returns [org.emftext.language.java.statements.Assert element = null] : a0= 'assert' (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a2= ':' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? a4= ';' ; + public final org.emftext.language.java.statements.Assert parse_org_emftext_language_java_statements_Assert() throws RecognitionException { + org.emftext.language.java.statements.Assert element = null; + + int parse_org_emftext_language_java_statements_Assert_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + Token a4=null; + org.emftext.language.java.expressions.AssignmentExpression a1_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a3_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 54) ) { return element; } + + // Java.g:19838:2: (a0= 'assert' (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a2= ':' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? a4= ';' ) + // Java.g:19839:2: a0= 'assert' (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a2= ':' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? a4= ';' + { + a0=(Token)match(input,57,FOLLOW_57_in_parse_org_emftext_language_java_statements_Assert15399); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createAssert(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_52_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9211); + addExpectedElement(9212); + addExpectedElement(9213); + addExpectedElement(9214); + addExpectedElement(9215); + addExpectedElement(9216); + addExpectedElement(9217); + addExpectedElement(9218); + addExpectedElement(9219); + addExpectedElement(9220); + addExpectedElement(9221); + addExpectedElement(9222); + addExpectedElement(9223); + addExpectedElement(9224); + addExpectedElement(9225); + addExpectedElement(9226); + addExpectedElement(9227); + addExpectedElement(9228); + addExpectedElement(9229); + addExpectedElement(9230); + addExpectedElement(9231); + addExpectedElement(9232); + addExpectedElement(9233); + addExpectedElement(9234); + addExpectedElement(9235); + addExpectedElement(9236); + addExpectedElement(9237); + addExpectedElement(9238); + addExpectedElement(9239); + addExpectedElement(9240); + addExpectedElement(9241); + addExpectedElement(9242); + addExpectedElement(9243); + addExpectedElement(9244); + addExpectedElement(9245); + addExpectedElement(9246); + addExpectedElement(9247); + addExpectedElement(9248); + addExpectedElement(9249); + addExpectedElement(9250); + addExpectedElement(9251); + addExpectedElement(9252); + addExpectedElement(9253); + } + + // Java.g:19895:2: (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:19896:3: a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_Assert15417); + a1_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createAssert(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.ASSERT__CONDITION), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_52_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9254); + addExpectedElement(9255); + } + + // Java.g:19922:2: ( (a2= ':' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? + int alt175=2; + int LA175_0 = input.LA(1); + + if ( (LA175_0==41) ) { + alt175=1; + } + switch (alt175) { + case 1 : + // Java.g:19923:3: (a2= ':' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + { + // Java.g:19923:3: (a2= ':' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + // Java.g:19924:4: a2= ':' (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + a2=(Token)match(input,41,FOLLOW_41_in_parse_org_emftext_language_java_statements_Assert15444); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createAssert(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_52_0_0_2_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9256); + addExpectedElement(9257); + addExpectedElement(9258); + addExpectedElement(9259); + addExpectedElement(9260); + addExpectedElement(9261); + addExpectedElement(9262); + addExpectedElement(9263); + addExpectedElement(9264); + addExpectedElement(9265); + addExpectedElement(9266); + addExpectedElement(9267); + addExpectedElement(9268); + addExpectedElement(9269); + addExpectedElement(9270); + addExpectedElement(9271); + addExpectedElement(9272); + addExpectedElement(9273); + addExpectedElement(9274); + addExpectedElement(9275); + addExpectedElement(9276); + addExpectedElement(9277); + addExpectedElement(9278); + addExpectedElement(9279); + addExpectedElement(9280); + addExpectedElement(9281); + addExpectedElement(9282); + addExpectedElement(9283); + addExpectedElement(9284); + addExpectedElement(9285); + addExpectedElement(9286); + addExpectedElement(9287); + addExpectedElement(9288); + addExpectedElement(9289); + addExpectedElement(9290); + addExpectedElement(9291); + addExpectedElement(9292); + addExpectedElement(9293); + addExpectedElement(9294); + addExpectedElement(9295); + addExpectedElement(9296); + addExpectedElement(9297); + addExpectedElement(9298); + } + + // Java.g:19980:4: (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:19981:5: a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_Assert15470); + a3_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createAssert(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.ASSERT__ERROR_MESSAGE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_52_0_0_2_0_0_1, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9299); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9300); + } + + a4=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_statements_Assert15511); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createAssert(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_52_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9301); + addExpectedElement(9302); + addExpectedElement(9303); + addExpectedElement(9304); + addExpectedElement(9305); + addExpectedElement(9306); + addExpectedElement(9307); + addExpectedElement(9308); + addExpectedElement(9309); + addExpectedElement(9310); + addExpectedElement(9311); + addExpectedElement(9312); + addExpectedElement(9313); + addExpectedElement(9314); + addExpectedElement(9315); + addExpectedElement(9316); + addExpectedElement(9317); + addExpectedElement(9318); + addExpectedElement(9319); + addExpectedElement(9320); + addExpectedElement(9321); + addExpectedElement(9322); + addExpectedElement(9323); + addExpectedElement(9324); + addExpectedElement(9325); + addExpectedElement(9326); + addExpectedElement(9327); + addExpectedElement(9328); + addExpectedElement(9329); + addExpectedElement(9330); + addExpectedElement(9331); + addExpectedElement(9332); + addExpectedElement(9333); + addExpectedElement(9334); + addExpectedElement(9335); + addExpectedElement(9336); + addExpectedElement(9337); + addExpectedElement(9338); + addExpectedElement(9339); + addExpectedElement(9340); + addExpectedElement(9341); + addExpectedElement(9342); + addExpectedElement(9343); + addExpectedElement(9344); + addExpectedElement(9345); + addExpectedElement(9346); + addExpectedElement(9347); + addExpectedElement(9348); + addExpectedElement(9349); + addExpectedElement(9350); + addExpectedElement(9351); + addExpectedElement(9352); + addExpectedElement(9353); + addExpectedElement(9354); + addExpectedElement(9355); + addExpectedElement(9356); + addExpectedElement(9357); + addExpectedElement(9358); + addExpectedElement(9359); + addExpectedElement(9360); + addExpectedElement(9361); + addExpectedElement(9362); + addExpectedElement(9363); + addExpectedElement(9364); + addExpectedElement(9365); + addExpectedElement(9366); + addExpectedElement(9367); + addExpectedElement(9368); + addExpectedElement(9369); + addExpectedElement(9370); + addExpectedElement(9371); + addExpectedElement(9372); + addExpectedElement(9373); + addExpectedElement(9374); + addExpectedElement(9375); + addExpectedElement(9376); + addExpectedElement(9377); + addExpectedElement(9378); + addExpectedElement(9379); + addExpectedElement(9380); + addExpectedElement(9381); + addExpectedElement(9382); + addExpectedElement(9383); + addExpectedElement(9384); + addExpectedElement(9385); + addExpectedElement(9386); + addExpectedElement(9387); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 54, parse_org_emftext_language_java_statements_Assert_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_Assert" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_Condition" + // Java.g:20115:1: parse_org_emftext_language_java_statements_Condition returns [org.emftext.language.java.statements.Condition element = null] : a0= 'if' a1= '(' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ')' (a4_0= parse_org_emftext_language_java_statements_Statement ) ( (a5= 'else' (a6_0= parse_org_emftext_language_java_statements_Statement ) ) )? ; + public final org.emftext.language.java.statements.Condition parse_org_emftext_language_java_statements_Condition() throws RecognitionException { + org.emftext.language.java.statements.Condition element = null; + + int parse_org_emftext_language_java_statements_Condition_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a3=null; + Token a5=null; + org.emftext.language.java.expressions.AssignmentExpression a2_0 =null; + + org.emftext.language.java.statements.Statement a4_0 =null; + + org.emftext.language.java.statements.Statement a6_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 55) ) { return element; } + + // Java.g:20118:2: (a0= 'if' a1= '(' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ')' (a4_0= parse_org_emftext_language_java_statements_Statement ) ( (a5= 'else' (a6_0= parse_org_emftext_language_java_statements_Statement ) ) )? ) + // Java.g:20119:2: a0= 'if' a1= '(' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ')' (a4_0= parse_org_emftext_language_java_statements_Statement ) ( (a5= 'else' (a6_0= parse_org_emftext_language_java_statements_Statement ) ) )? + { + a0=(Token)match(input,76,FOLLOW_76_in_parse_org_emftext_language_java_statements_Condition15540); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createCondition(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_53_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9388); + } + + a1=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_statements_Condition15554); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createCondition(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_53_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9389); + addExpectedElement(9390); + addExpectedElement(9391); + addExpectedElement(9392); + addExpectedElement(9393); + addExpectedElement(9394); + addExpectedElement(9395); + addExpectedElement(9396); + addExpectedElement(9397); + addExpectedElement(9398); + addExpectedElement(9399); + addExpectedElement(9400); + addExpectedElement(9401); + addExpectedElement(9402); + addExpectedElement(9403); + addExpectedElement(9404); + addExpectedElement(9405); + addExpectedElement(9406); + addExpectedElement(9407); + addExpectedElement(9408); + addExpectedElement(9409); + addExpectedElement(9410); + addExpectedElement(9411); + addExpectedElement(9412); + addExpectedElement(9413); + addExpectedElement(9414); + addExpectedElement(9415); + addExpectedElement(9416); + addExpectedElement(9417); + addExpectedElement(9418); + addExpectedElement(9419); + addExpectedElement(9420); + addExpectedElement(9421); + addExpectedElement(9422); + addExpectedElement(9423); + addExpectedElement(9424); + addExpectedElement(9425); + addExpectedElement(9426); + addExpectedElement(9427); + addExpectedElement(9428); + addExpectedElement(9429); + addExpectedElement(9430); + addExpectedElement(9431); + } + + // Java.g:20189:2: (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:20190:3: a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_Condition15572); + a2_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createCondition(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.CONDITION__CONDITION), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_53_0_0_3, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9432); + } + + a3=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_statements_Condition15590); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createCondition(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_53_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9433); + addExpectedElement(9434); + addExpectedElement(9435); + addExpectedElement(9436); + addExpectedElement(9437); + addExpectedElement(9438); + addExpectedElement(9439); + addExpectedElement(9440); + addExpectedElement(9441); + addExpectedElement(9442); + addExpectedElement(9443); + addExpectedElement(9444); + addExpectedElement(9445); + addExpectedElement(9446); + addExpectedElement(9447); + addExpectedElement(9448); + addExpectedElement(9449); + addExpectedElement(9450); + addExpectedElement(9451); + addExpectedElement(9452); + addExpectedElement(9453); + addExpectedElement(9454); + addExpectedElement(9455); + addExpectedElement(9456); + addExpectedElement(9457); + addExpectedElement(9458); + addExpectedElement(9459); + addExpectedElement(9460); + addExpectedElement(9461); + addExpectedElement(9462); + addExpectedElement(9463); + addExpectedElement(9464); + addExpectedElement(9465); + addExpectedElement(9466); + addExpectedElement(9467); + addExpectedElement(9468); + addExpectedElement(9469); + addExpectedElement(9470); + addExpectedElement(9471); + addExpectedElement(9472); + addExpectedElement(9473); + addExpectedElement(9474); + addExpectedElement(9475); + addExpectedElement(9476); + addExpectedElement(9477); + addExpectedElement(9478); + addExpectedElement(9479); + addExpectedElement(9480); + addExpectedElement(9481); + addExpectedElement(9482); + addExpectedElement(9483); + addExpectedElement(9484); + addExpectedElement(9485); + addExpectedElement(9486); + addExpectedElement(9487); + addExpectedElement(9488); + addExpectedElement(9489); + addExpectedElement(9490); + addExpectedElement(9491); + addExpectedElement(9492); + addExpectedElement(9493); + addExpectedElement(9494); + addExpectedElement(9495); + addExpectedElement(9496); + addExpectedElement(9497); + addExpectedElement(9498); + addExpectedElement(9499); + addExpectedElement(9500); + addExpectedElement(9501); + addExpectedElement(9502); + addExpectedElement(9503); + addExpectedElement(9504); + addExpectedElement(9505); + addExpectedElement(9506); + addExpectedElement(9507); + addExpectedElement(9508); + } + + // Java.g:20304:2: (a4_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:20305:3: a4_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_Condition15608); + a4_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createCondition(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.CONDITION__STATEMENT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_53_0_0_5, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9509); + addExpectedElement(9510); + addExpectedElement(9511); + addExpectedElement(9512); + addExpectedElement(9513); + addExpectedElement(9514); + addExpectedElement(9515); + addExpectedElement(9516); + addExpectedElement(9517); + addExpectedElement(9518); + addExpectedElement(9519); + addExpectedElement(9520); + addExpectedElement(9521); + addExpectedElement(9522); + addExpectedElement(9523); + addExpectedElement(9524); + addExpectedElement(9525); + addExpectedElement(9526); + addExpectedElement(9527); + addExpectedElement(9528); + addExpectedElement(9529); + addExpectedElement(9530); + addExpectedElement(9531); + addExpectedElement(9532); + addExpectedElement(9533); + addExpectedElement(9534); + addExpectedElement(9535); + addExpectedElement(9536); + addExpectedElement(9537); + addExpectedElement(9538); + addExpectedElement(9539); + addExpectedElement(9540); + addExpectedElement(9541); + addExpectedElement(9542); + addExpectedElement(9543); + addExpectedElement(9544); + addExpectedElement(9545); + addExpectedElement(9546); + addExpectedElement(9547); + addExpectedElement(9548); + addExpectedElement(9549); + addExpectedElement(9550); + addExpectedElement(9551); + addExpectedElement(9552); + addExpectedElement(9553); + addExpectedElement(9554); + addExpectedElement(9555); + addExpectedElement(9556); + addExpectedElement(9557); + addExpectedElement(9558); + addExpectedElement(9559); + addExpectedElement(9560); + addExpectedElement(9561); + addExpectedElement(9562); + addExpectedElement(9563); + addExpectedElement(9564); + addExpectedElement(9565); + addExpectedElement(9566); + addExpectedElement(9567); + addExpectedElement(9568); + addExpectedElement(9569); + addExpectedElement(9570); + addExpectedElement(9571); + addExpectedElement(9572); + addExpectedElement(9573); + addExpectedElement(9574); + addExpectedElement(9575); + addExpectedElement(9576); + addExpectedElement(9577); + addExpectedElement(9578); + addExpectedElement(9579); + addExpectedElement(9580); + addExpectedElement(9581); + addExpectedElement(9582); + addExpectedElement(9583); + addExpectedElement(9584); + addExpectedElement(9585); + addExpectedElement(9586); + addExpectedElement(9587); + addExpectedElement(9588); + addExpectedElement(9589); + addExpectedElement(9590); + addExpectedElement(9591); + addExpectedElement(9592); + addExpectedElement(9593); + addExpectedElement(9594); + addExpectedElement(9595); + } + + // Java.g:20416:2: ( (a5= 'else' (a6_0= parse_org_emftext_language_java_statements_Statement ) ) )? + int alt176=2; + int LA176_0 = input.LA(1); + + if ( (LA176_0==69) ) { + int LA176_1 = input.LA(2); + + if ( (synpred177_Java()) ) { + alt176=1; + } + } + switch (alt176) { + case 1 : + // Java.g:20417:3: (a5= 'else' (a6_0= parse_org_emftext_language_java_statements_Statement ) ) + { + // Java.g:20417:3: (a5= 'else' (a6_0= parse_org_emftext_language_java_statements_Statement ) ) + // Java.g:20418:4: a5= 'else' (a6_0= parse_org_emftext_language_java_statements_Statement ) + { + a5=(Token)match(input,69,FOLLOW_69_in_parse_org_emftext_language_java_statements_Condition15635); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createCondition(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_53_0_0_6_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9596); + addExpectedElement(9597); + addExpectedElement(9598); + addExpectedElement(9599); + addExpectedElement(9600); + addExpectedElement(9601); + addExpectedElement(9602); + addExpectedElement(9603); + addExpectedElement(9604); + addExpectedElement(9605); + addExpectedElement(9606); + addExpectedElement(9607); + addExpectedElement(9608); + addExpectedElement(9609); + addExpectedElement(9610); + addExpectedElement(9611); + addExpectedElement(9612); + addExpectedElement(9613); + addExpectedElement(9614); + addExpectedElement(9615); + addExpectedElement(9616); + addExpectedElement(9617); + addExpectedElement(9618); + addExpectedElement(9619); + addExpectedElement(9620); + addExpectedElement(9621); + addExpectedElement(9622); + addExpectedElement(9623); + addExpectedElement(9624); + addExpectedElement(9625); + addExpectedElement(9626); + addExpectedElement(9627); + addExpectedElement(9628); + addExpectedElement(9629); + addExpectedElement(9630); + addExpectedElement(9631); + addExpectedElement(9632); + addExpectedElement(9633); + addExpectedElement(9634); + addExpectedElement(9635); + addExpectedElement(9636); + addExpectedElement(9637); + addExpectedElement(9638); + addExpectedElement(9639); + addExpectedElement(9640); + addExpectedElement(9641); + addExpectedElement(9642); + addExpectedElement(9643); + addExpectedElement(9644); + addExpectedElement(9645); + addExpectedElement(9646); + addExpectedElement(9647); + addExpectedElement(9648); + addExpectedElement(9649); + addExpectedElement(9650); + addExpectedElement(9651); + addExpectedElement(9652); + addExpectedElement(9653); + addExpectedElement(9654); + addExpectedElement(9655); + addExpectedElement(9656); + addExpectedElement(9657); + addExpectedElement(9658); + addExpectedElement(9659); + addExpectedElement(9660); + addExpectedElement(9661); + addExpectedElement(9662); + addExpectedElement(9663); + addExpectedElement(9664); + addExpectedElement(9665); + addExpectedElement(9666); + addExpectedElement(9667); + addExpectedElement(9668); + addExpectedElement(9669); + addExpectedElement(9670); + addExpectedElement(9671); + } + + // Java.g:20507:4: (a6_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:20508:5: a6_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_Condition15661); + a6_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createCondition(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.CONDITION__ELSE_STATEMENT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_53_0_0_6_0_0_1, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9672); + addExpectedElement(9673); + addExpectedElement(9674); + addExpectedElement(9675); + addExpectedElement(9676); + addExpectedElement(9677); + addExpectedElement(9678); + addExpectedElement(9679); + addExpectedElement(9680); + addExpectedElement(9681); + addExpectedElement(9682); + addExpectedElement(9683); + addExpectedElement(9684); + addExpectedElement(9685); + addExpectedElement(9686); + addExpectedElement(9687); + addExpectedElement(9688); + addExpectedElement(9689); + addExpectedElement(9690); + addExpectedElement(9691); + addExpectedElement(9692); + addExpectedElement(9693); + addExpectedElement(9694); + addExpectedElement(9695); + addExpectedElement(9696); + addExpectedElement(9697); + addExpectedElement(9698); + addExpectedElement(9699); + addExpectedElement(9700); + addExpectedElement(9701); + addExpectedElement(9702); + addExpectedElement(9703); + addExpectedElement(9704); + addExpectedElement(9705); + addExpectedElement(9706); + addExpectedElement(9707); + addExpectedElement(9708); + addExpectedElement(9709); + addExpectedElement(9710); + addExpectedElement(9711); + addExpectedElement(9712); + addExpectedElement(9713); + addExpectedElement(9714); + addExpectedElement(9715); + addExpectedElement(9716); + addExpectedElement(9717); + addExpectedElement(9718); + addExpectedElement(9719); + addExpectedElement(9720); + addExpectedElement(9721); + addExpectedElement(9722); + addExpectedElement(9723); + addExpectedElement(9724); + addExpectedElement(9725); + addExpectedElement(9726); + addExpectedElement(9727); + addExpectedElement(9728); + addExpectedElement(9729); + addExpectedElement(9730); + addExpectedElement(9731); + addExpectedElement(9732); + addExpectedElement(9733); + addExpectedElement(9734); + addExpectedElement(9735); + addExpectedElement(9736); + addExpectedElement(9737); + addExpectedElement(9738); + addExpectedElement(9739); + addExpectedElement(9740); + addExpectedElement(9741); + addExpectedElement(9742); + addExpectedElement(9743); + addExpectedElement(9744); + addExpectedElement(9745); + addExpectedElement(9746); + addExpectedElement(9747); + addExpectedElement(9748); + addExpectedElement(9749); + addExpectedElement(9750); + addExpectedElement(9751); + addExpectedElement(9752); + addExpectedElement(9753); + addExpectedElement(9754); + addExpectedElement(9755); + addExpectedElement(9756); + addExpectedElement(9757); + addExpectedElement(9758); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9759); + addExpectedElement(9760); + addExpectedElement(9761); + addExpectedElement(9762); + addExpectedElement(9763); + addExpectedElement(9764); + addExpectedElement(9765); + addExpectedElement(9766); + addExpectedElement(9767); + addExpectedElement(9768); + addExpectedElement(9769); + addExpectedElement(9770); + addExpectedElement(9771); + addExpectedElement(9772); + addExpectedElement(9773); + addExpectedElement(9774); + addExpectedElement(9775); + addExpectedElement(9776); + addExpectedElement(9777); + addExpectedElement(9778); + addExpectedElement(9779); + addExpectedElement(9780); + addExpectedElement(9781); + addExpectedElement(9782); + addExpectedElement(9783); + addExpectedElement(9784); + addExpectedElement(9785); + addExpectedElement(9786); + addExpectedElement(9787); + addExpectedElement(9788); + addExpectedElement(9789); + addExpectedElement(9790); + addExpectedElement(9791); + addExpectedElement(9792); + addExpectedElement(9793); + addExpectedElement(9794); + addExpectedElement(9795); + addExpectedElement(9796); + addExpectedElement(9797); + addExpectedElement(9798); + addExpectedElement(9799); + addExpectedElement(9800); + addExpectedElement(9801); + addExpectedElement(9802); + addExpectedElement(9803); + addExpectedElement(9804); + addExpectedElement(9805); + addExpectedElement(9806); + addExpectedElement(9807); + addExpectedElement(9808); + addExpectedElement(9809); + addExpectedElement(9810); + addExpectedElement(9811); + addExpectedElement(9812); + addExpectedElement(9813); + addExpectedElement(9814); + addExpectedElement(9815); + addExpectedElement(9816); + addExpectedElement(9817); + addExpectedElement(9818); + addExpectedElement(9819); + addExpectedElement(9820); + addExpectedElement(9821); + addExpectedElement(9822); + addExpectedElement(9823); + addExpectedElement(9824); + addExpectedElement(9825); + addExpectedElement(9826); + addExpectedElement(9827); + addExpectedElement(9828); + addExpectedElement(9829); + addExpectedElement(9830); + addExpectedElement(9831); + addExpectedElement(9832); + addExpectedElement(9833); + addExpectedElement(9834); + addExpectedElement(9835); + addExpectedElement(9836); + addExpectedElement(9837); + addExpectedElement(9838); + addExpectedElement(9839); + addExpectedElement(9840); + addExpectedElement(9841); + addExpectedElement(9842); + addExpectedElement(9843); + addExpectedElement(9844); + addExpectedElement(9845); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 55, parse_org_emftext_language_java_statements_Condition_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_Condition" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_ForLoop" + // Java.g:20714:1: parse_org_emftext_language_java_statements_ForLoop returns [org.emftext.language.java.statements.ForLoop element = null] : a0= 'for' a1= '(' ( (a2_0= parse_org_emftext_language_java_statements_ForLoopInitializer ) )? a3= ';' ( (a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) )? a5= ';' ( ( (a6_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a7= ',' (a8_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a9= ')' (a10_0= parse_org_emftext_language_java_statements_Statement ) ; + public final org.emftext.language.java.statements.ForLoop parse_org_emftext_language_java_statements_ForLoop() throws RecognitionException { + org.emftext.language.java.statements.ForLoop element = null; + + int parse_org_emftext_language_java_statements_ForLoop_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a3=null; + Token a5=null; + Token a7=null; + Token a9=null; + org.emftext.language.java.statements.ForLoopInitializer a2_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a4_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a6_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a8_0 =null; + + org.emftext.language.java.statements.Statement a10_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 56) ) { return element; } + + // Java.g:20717:2: (a0= 'for' a1= '(' ( (a2_0= parse_org_emftext_language_java_statements_ForLoopInitializer ) )? a3= ';' ( (a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) )? a5= ';' ( ( (a6_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a7= ',' (a8_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a9= ')' (a10_0= parse_org_emftext_language_java_statements_Statement ) ) + // Java.g:20718:2: a0= 'for' a1= '(' ( (a2_0= parse_org_emftext_language_java_statements_ForLoopInitializer ) )? a3= ';' ( (a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) )? a5= ';' ( ( (a6_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a7= ',' (a8_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? a9= ')' (a10_0= parse_org_emftext_language_java_statements_Statement ) + { + a0=(Token)match(input,75,FOLLOW_75_in_parse_org_emftext_language_java_statements_ForLoop15717); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_54_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9846); + } + + a1=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_statements_ForLoop15731); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_54_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9847); + addExpectedElement(9848); + addExpectedElement(9849); + addExpectedElement(9850); + addExpectedElement(9851); + addExpectedElement(9852); + addExpectedElement(9853); + addExpectedElement(9854); + addExpectedElement(9855); + addExpectedElement(9856); + addExpectedElement(9857); + addExpectedElement(9858); + addExpectedElement(9859); + addExpectedElement(9860); + addExpectedElement(9861); + addExpectedElement(9862); + addExpectedElement(9863); + addExpectedElement(9864); + addExpectedElement(9865); + addExpectedElement(9866); + addExpectedElement(9867); + addExpectedElement(9868); + addExpectedElement(9869); + addExpectedElement(9870); + addExpectedElement(9871); + addExpectedElement(9872); + addExpectedElement(9873); + addExpectedElement(9874); + addExpectedElement(9875); + addExpectedElement(9876); + addExpectedElement(9877); + addExpectedElement(9878); + addExpectedElement(9879); + addExpectedElement(9880); + addExpectedElement(9881); + addExpectedElement(9882); + addExpectedElement(9883); + addExpectedElement(9884); + addExpectedElement(9885); + addExpectedElement(9886); + addExpectedElement(9887); + addExpectedElement(9888); + addExpectedElement(9889); + addExpectedElement(9890); + addExpectedElement(9891); + addExpectedElement(9892); + addExpectedElement(9893); + addExpectedElement(9894); + addExpectedElement(9895); + addExpectedElement(9896); + addExpectedElement(9897); + addExpectedElement(9898); + addExpectedElement(9899); + addExpectedElement(9900); + addExpectedElement(9901); + addExpectedElement(9902); + addExpectedElement(9903); + } + + // Java.g:20802:2: ( (a2_0= parse_org_emftext_language_java_statements_ForLoopInitializer ) )? + int alt177=2; + int LA177_0 = input.LA(1); + + if ( ((LA177_0 >= BOOLEAN_LITERAL && LA177_0 <= IDENTIFIER)||(LA177_0 >= OCTAL_INTEGER_LITERAL && LA177_0 <= OCTAL_LONG_LITERAL)||LA177_0==STRING_LITERAL||LA177_0==21||LA177_0==26||(LA177_0 >= 30 && LA177_0 <= 31)||(LA177_0 >= 34 && LA177_0 <= 35)||LA177_0==43||LA177_0==48||LA177_0==56||LA177_0==58||LA177_0==60||(LA177_0 >= 63 && LA177_0 <= 64)||LA177_0==68||LA177_0==72||LA177_0==74||LA177_0==80||(LA177_0 >= 82 && LA177_0 <= 85)||(LA177_0 >= 87 && LA177_0 <= 89)||(LA177_0 >= 91 && LA177_0 <= 94)||(LA177_0 >= 96 && LA177_0 <= 97)||LA177_0==100||(LA177_0 >= 102 && LA177_0 <= 103)||LA177_0==105||LA177_0==110) ) { + alt177=1; + } + switch (alt177) { + case 1 : + // Java.g:20803:3: (a2_0= parse_org_emftext_language_java_statements_ForLoopInitializer ) + { + // Java.g:20803:3: (a2_0= parse_org_emftext_language_java_statements_ForLoopInitializer ) + // Java.g:20804:4: a2_0= parse_org_emftext_language_java_statements_ForLoopInitializer + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_ForLoopInitializer_in_parse_org_emftext_language_java_statements_ForLoop15754); + a2_0=parse_org_emftext_language_java_statements_ForLoopInitializer(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForLoop(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.FOR_LOOP__INIT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_54_0_0_3, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9904); + } + + a3=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_statements_ForLoop15780); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_54_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9905); + addExpectedElement(9906); + addExpectedElement(9907); + addExpectedElement(9908); + addExpectedElement(9909); + addExpectedElement(9910); + addExpectedElement(9911); + addExpectedElement(9912); + addExpectedElement(9913); + addExpectedElement(9914); + addExpectedElement(9915); + addExpectedElement(9916); + addExpectedElement(9917); + addExpectedElement(9918); + addExpectedElement(9919); + addExpectedElement(9920); + addExpectedElement(9921); + addExpectedElement(9922); + addExpectedElement(9923); + addExpectedElement(9924); + addExpectedElement(9925); + addExpectedElement(9926); + addExpectedElement(9927); + addExpectedElement(9928); + addExpectedElement(9929); + addExpectedElement(9930); + addExpectedElement(9931); + addExpectedElement(9932); + addExpectedElement(9933); + addExpectedElement(9934); + addExpectedElement(9935); + addExpectedElement(9936); + addExpectedElement(9937); + addExpectedElement(9938); + addExpectedElement(9939); + addExpectedElement(9940); + addExpectedElement(9941); + addExpectedElement(9942); + addExpectedElement(9943); + addExpectedElement(9944); + addExpectedElement(9945); + addExpectedElement(9946); + addExpectedElement(9947); + addExpectedElement(9948); + } + + // Java.g:20887:2: ( (a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) )? + int alt178=2; + int LA178_0 = input.LA(1); + + if ( ((LA178_0 >= BOOLEAN_LITERAL && LA178_0 <= IDENTIFIER)||(LA178_0 >= OCTAL_INTEGER_LITERAL && LA178_0 <= OCTAL_LONG_LITERAL)||LA178_0==STRING_LITERAL||LA178_0==21||LA178_0==26||(LA178_0 >= 30 && LA178_0 <= 31)||(LA178_0 >= 34 && LA178_0 <= 35)||LA178_0==43||LA178_0==48||LA178_0==58||LA178_0==60||(LA178_0 >= 63 && LA178_0 <= 64)||LA178_0==68||LA178_0==74||LA178_0==80||LA178_0==82||(LA178_0 >= 84 && LA178_0 <= 85)||LA178_0==91||LA178_0==94||LA178_0==97||LA178_0==102||LA178_0==105||LA178_0==110) ) { + alt178=1; + } + switch (alt178) { + case 1 : + // Java.g:20888:3: (a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + // Java.g:20888:3: (a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:20889:4: a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_ForLoop15803); + a4_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForLoop(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.FOR_LOOP__CONDITION), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_54_0_0_5, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9949); + } + + a5=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_statements_ForLoop15829); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_54_0_0_6, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9950); + addExpectedElement(9951); + addExpectedElement(9952); + addExpectedElement(9953); + addExpectedElement(9954); + addExpectedElement(9955); + addExpectedElement(9956); + addExpectedElement(9957); + addExpectedElement(9958); + addExpectedElement(9959); + addExpectedElement(9960); + addExpectedElement(9961); + addExpectedElement(9962); + addExpectedElement(9963); + addExpectedElement(9964); + addExpectedElement(9965); + addExpectedElement(9966); + addExpectedElement(9967); + addExpectedElement(9968); + addExpectedElement(9969); + addExpectedElement(9970); + addExpectedElement(9971); + addExpectedElement(9972); + addExpectedElement(9973); + addExpectedElement(9974); + addExpectedElement(9975); + addExpectedElement(9976); + addExpectedElement(9977); + addExpectedElement(9978); + addExpectedElement(9979); + addExpectedElement(9980); + addExpectedElement(9981); + addExpectedElement(9982); + addExpectedElement(9983); + addExpectedElement(9984); + addExpectedElement(9985); + addExpectedElement(9986); + addExpectedElement(9987); + addExpectedElement(9988); + addExpectedElement(9989); + addExpectedElement(9990); + addExpectedElement(9991); + addExpectedElement(9992); + addExpectedElement(9993); + } + + // Java.g:20972:2: ( ( (a6_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a7= ',' (a8_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) )? + int alt180=2; + int LA180_0 = input.LA(1); + + if ( ((LA180_0 >= BOOLEAN_LITERAL && LA180_0 <= IDENTIFIER)||(LA180_0 >= OCTAL_INTEGER_LITERAL && LA180_0 <= OCTAL_LONG_LITERAL)||LA180_0==STRING_LITERAL||LA180_0==21||LA180_0==26||(LA180_0 >= 30 && LA180_0 <= 31)||(LA180_0 >= 34 && LA180_0 <= 35)||LA180_0==43||LA180_0==48||LA180_0==58||LA180_0==60||(LA180_0 >= 63 && LA180_0 <= 64)||LA180_0==68||LA180_0==74||LA180_0==80||LA180_0==82||(LA180_0 >= 84 && LA180_0 <= 85)||LA180_0==91||LA180_0==94||LA180_0==97||LA180_0==102||LA180_0==105||LA180_0==110) ) { + alt180=1; + } + switch (alt180) { + case 1 : + // Java.g:20973:3: ( (a6_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a7= ',' (a8_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) + { + // Java.g:20973:3: ( (a6_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a7= ',' (a8_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) + // Java.g:20974:4: (a6_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a7= ',' (a8_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* + { + // Java.g:20974:4: (a6_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:20975:5: a6_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_ForLoop15858); + a6_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForLoop(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + addObjectToList(element, org.emftext.language.java.statements.StatementsPackage.FOR_LOOP__UPDATES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_54_0_0_7_0_0_0, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9994); + addExpectedElement(9995); + } + + // Java.g:21001:4: ( (a7= ',' (a8_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* + loop179: + do { + int alt179=2; + int LA179_0 = input.LA(1); + + if ( (LA179_0==33) ) { + alt179=1; + } + + + switch (alt179) { + case 1 : + // Java.g:21002:5: (a7= ',' (a8_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + { + // Java.g:21002:5: (a7= ',' (a8_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + // Java.g:21003:6: a7= ',' (a8_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + a7=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_statements_ForLoop15899); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_54_0_0_7_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a7, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(9996); + addExpectedElement(9997); + addExpectedElement(9998); + addExpectedElement(9999); + addExpectedElement(10000); + addExpectedElement(10001); + addExpectedElement(10002); + addExpectedElement(10003); + addExpectedElement(10004); + addExpectedElement(10005); + addExpectedElement(10006); + addExpectedElement(10007); + addExpectedElement(10008); + addExpectedElement(10009); + addExpectedElement(10010); + addExpectedElement(10011); + addExpectedElement(10012); + addExpectedElement(10013); + addExpectedElement(10014); + addExpectedElement(10015); + addExpectedElement(10016); + addExpectedElement(10017); + addExpectedElement(10018); + addExpectedElement(10019); + addExpectedElement(10020); + addExpectedElement(10021); + addExpectedElement(10022); + addExpectedElement(10023); + addExpectedElement(10024); + addExpectedElement(10025); + addExpectedElement(10026); + addExpectedElement(10027); + addExpectedElement(10028); + addExpectedElement(10029); + addExpectedElement(10030); + addExpectedElement(10031); + addExpectedElement(10032); + addExpectedElement(10033); + addExpectedElement(10034); + addExpectedElement(10035); + addExpectedElement(10036); + addExpectedElement(10037); + addExpectedElement(10038); + } + + // Java.g:21059:6: (a8_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:21060:7: a8_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_ForLoop15933); + a8_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForLoop(); + startIncompleteElement(element); + } + if (a8_0 != null) { + if (a8_0 != null) { + Object value = a8_0; + addObjectToList(element, org.emftext.language.java.statements.StatementsPackage.FOR_LOOP__UPDATES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_54_0_0_7_0_0_1_0_0_1, a8_0, true); + copyLocalizationInfos(a8_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10039); + addExpectedElement(10040); + } + + } + + + } + break; + + default : + break loop179; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10041); + addExpectedElement(10042); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10043); + } + + a9=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_statements_ForLoop16007); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_54_0_0_8, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a9, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10044); + addExpectedElement(10045); + addExpectedElement(10046); + addExpectedElement(10047); + addExpectedElement(10048); + addExpectedElement(10049); + addExpectedElement(10050); + addExpectedElement(10051); + addExpectedElement(10052); + addExpectedElement(10053); + addExpectedElement(10054); + addExpectedElement(10055); + addExpectedElement(10056); + addExpectedElement(10057); + addExpectedElement(10058); + addExpectedElement(10059); + addExpectedElement(10060); + addExpectedElement(10061); + addExpectedElement(10062); + addExpectedElement(10063); + addExpectedElement(10064); + addExpectedElement(10065); + addExpectedElement(10066); + addExpectedElement(10067); + addExpectedElement(10068); + addExpectedElement(10069); + addExpectedElement(10070); + addExpectedElement(10071); + addExpectedElement(10072); + addExpectedElement(10073); + addExpectedElement(10074); + addExpectedElement(10075); + addExpectedElement(10076); + addExpectedElement(10077); + addExpectedElement(10078); + addExpectedElement(10079); + addExpectedElement(10080); + addExpectedElement(10081); + addExpectedElement(10082); + addExpectedElement(10083); + addExpectedElement(10084); + addExpectedElement(10085); + addExpectedElement(10086); + addExpectedElement(10087); + addExpectedElement(10088); + addExpectedElement(10089); + addExpectedElement(10090); + addExpectedElement(10091); + addExpectedElement(10092); + addExpectedElement(10093); + addExpectedElement(10094); + addExpectedElement(10095); + addExpectedElement(10096); + addExpectedElement(10097); + addExpectedElement(10098); + addExpectedElement(10099); + addExpectedElement(10100); + addExpectedElement(10101); + addExpectedElement(10102); + addExpectedElement(10103); + addExpectedElement(10104); + addExpectedElement(10105); + addExpectedElement(10106); + addExpectedElement(10107); + addExpectedElement(10108); + addExpectedElement(10109); + addExpectedElement(10110); + addExpectedElement(10111); + addExpectedElement(10112); + addExpectedElement(10113); + addExpectedElement(10114); + addExpectedElement(10115); + addExpectedElement(10116); + addExpectedElement(10117); + addExpectedElement(10118); + addExpectedElement(10119); + } + + // Java.g:21190:2: (a10_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:21191:3: a10_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_ForLoop16025); + a10_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForLoop(); + startIncompleteElement(element); + } + if (a10_0 != null) { + if (a10_0 != null) { + Object value = a10_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.FOR_LOOP__STATEMENT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_54_0_0_9, a10_0, true); + copyLocalizationInfos(a10_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10120); + addExpectedElement(10121); + addExpectedElement(10122); + addExpectedElement(10123); + addExpectedElement(10124); + addExpectedElement(10125); + addExpectedElement(10126); + addExpectedElement(10127); + addExpectedElement(10128); + addExpectedElement(10129); + addExpectedElement(10130); + addExpectedElement(10131); + addExpectedElement(10132); + addExpectedElement(10133); + addExpectedElement(10134); + addExpectedElement(10135); + addExpectedElement(10136); + addExpectedElement(10137); + addExpectedElement(10138); + addExpectedElement(10139); + addExpectedElement(10140); + addExpectedElement(10141); + addExpectedElement(10142); + addExpectedElement(10143); + addExpectedElement(10144); + addExpectedElement(10145); + addExpectedElement(10146); + addExpectedElement(10147); + addExpectedElement(10148); + addExpectedElement(10149); + addExpectedElement(10150); + addExpectedElement(10151); + addExpectedElement(10152); + addExpectedElement(10153); + addExpectedElement(10154); + addExpectedElement(10155); + addExpectedElement(10156); + addExpectedElement(10157); + addExpectedElement(10158); + addExpectedElement(10159); + addExpectedElement(10160); + addExpectedElement(10161); + addExpectedElement(10162); + addExpectedElement(10163); + addExpectedElement(10164); + addExpectedElement(10165); + addExpectedElement(10166); + addExpectedElement(10167); + addExpectedElement(10168); + addExpectedElement(10169); + addExpectedElement(10170); + addExpectedElement(10171); + addExpectedElement(10172); + addExpectedElement(10173); + addExpectedElement(10174); + addExpectedElement(10175); + addExpectedElement(10176); + addExpectedElement(10177); + addExpectedElement(10178); + addExpectedElement(10179); + addExpectedElement(10180); + addExpectedElement(10181); + addExpectedElement(10182); + addExpectedElement(10183); + addExpectedElement(10184); + addExpectedElement(10185); + addExpectedElement(10186); + addExpectedElement(10187); + addExpectedElement(10188); + addExpectedElement(10189); + addExpectedElement(10190); + addExpectedElement(10191); + addExpectedElement(10192); + addExpectedElement(10193); + addExpectedElement(10194); + addExpectedElement(10195); + addExpectedElement(10196); + addExpectedElement(10197); + addExpectedElement(10198); + addExpectedElement(10199); + addExpectedElement(10200); + addExpectedElement(10201); + addExpectedElement(10202); + addExpectedElement(10203); + addExpectedElement(10204); + addExpectedElement(10205); + addExpectedElement(10206); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 56, parse_org_emftext_language_java_statements_ForLoop_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_ForLoop" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_ForEachLoop" + // Java.g:21304:1: parse_org_emftext_language_java_statements_ForEachLoop returns [org.emftext.language.java.statements.ForEachLoop element = null] : a0= 'for' a1= '(' (a2_0= parse_org_emftext_language_java_parameters_OrdinaryParameter ) a3= ':' (a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a5= ')' (a6_0= parse_org_emftext_language_java_statements_Statement ) ; + public final org.emftext.language.java.statements.ForEachLoop parse_org_emftext_language_java_statements_ForEachLoop() throws RecognitionException { + org.emftext.language.java.statements.ForEachLoop element = null; + + int parse_org_emftext_language_java_statements_ForEachLoop_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a3=null; + Token a5=null; + org.emftext.language.java.parameters.OrdinaryParameter a2_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a4_0 =null; + + org.emftext.language.java.statements.Statement a6_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 57) ) { return element; } + + // Java.g:21307:2: (a0= 'for' a1= '(' (a2_0= parse_org_emftext_language_java_parameters_OrdinaryParameter ) a3= ':' (a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a5= ')' (a6_0= parse_org_emftext_language_java_statements_Statement ) ) + // Java.g:21308:2: a0= 'for' a1= '(' (a2_0= parse_org_emftext_language_java_parameters_OrdinaryParameter ) a3= ':' (a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a5= ')' (a6_0= parse_org_emftext_language_java_statements_Statement ) + { + a0=(Token)match(input,75,FOLLOW_75_in_parse_org_emftext_language_java_statements_ForEachLoop16058); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForEachLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_55_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10207); + } + + a1=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_statements_ForEachLoop16072); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForEachLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_55_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10208); + addExpectedElement(10209); + addExpectedElement(10210); + addExpectedElement(10211); + addExpectedElement(10212); + addExpectedElement(10213); + addExpectedElement(10214); + addExpectedElement(10215); + addExpectedElement(10216); + addExpectedElement(10217); + addExpectedElement(10218); + addExpectedElement(10219); + addExpectedElement(10220); + addExpectedElement(10221); + addExpectedElement(10222); + addExpectedElement(10223); + addExpectedElement(10224); + addExpectedElement(10225); + addExpectedElement(10226); + addExpectedElement(10227); + addExpectedElement(10228); + addExpectedElement(10229); + addExpectedElement(10230); + } + + // Java.g:21358:2: (a2_0= parse_org_emftext_language_java_parameters_OrdinaryParameter ) + // Java.g:21359:3: a2_0= parse_org_emftext_language_java_parameters_OrdinaryParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_OrdinaryParameter_in_parse_org_emftext_language_java_statements_ForEachLoop16090); + a2_0=parse_org_emftext_language_java_parameters_OrdinaryParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForEachLoop(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.FOR_EACH_LOOP__NEXT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_55_0_0_3, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10231); + } + + a3=(Token)match(input,41,FOLLOW_41_in_parse_org_emftext_language_java_statements_ForEachLoop16108); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForEachLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_55_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10232); + addExpectedElement(10233); + addExpectedElement(10234); + addExpectedElement(10235); + addExpectedElement(10236); + addExpectedElement(10237); + addExpectedElement(10238); + addExpectedElement(10239); + addExpectedElement(10240); + addExpectedElement(10241); + addExpectedElement(10242); + addExpectedElement(10243); + addExpectedElement(10244); + addExpectedElement(10245); + addExpectedElement(10246); + addExpectedElement(10247); + addExpectedElement(10248); + addExpectedElement(10249); + addExpectedElement(10250); + addExpectedElement(10251); + addExpectedElement(10252); + addExpectedElement(10253); + addExpectedElement(10254); + addExpectedElement(10255); + addExpectedElement(10256); + addExpectedElement(10257); + addExpectedElement(10258); + addExpectedElement(10259); + addExpectedElement(10260); + addExpectedElement(10261); + addExpectedElement(10262); + addExpectedElement(10263); + addExpectedElement(10264); + addExpectedElement(10265); + addExpectedElement(10266); + addExpectedElement(10267); + addExpectedElement(10268); + addExpectedElement(10269); + addExpectedElement(10270); + addExpectedElement(10271); + addExpectedElement(10272); + addExpectedElement(10273); + addExpectedElement(10274); + } + + // Java.g:21440:2: (a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:21441:3: a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_ForEachLoop16126); + a4_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForEachLoop(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.FOR_EACH_LOOP__COLLECTION), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_55_0_0_5, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10275); + } + + a5=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_statements_ForEachLoop16144); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForEachLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_55_0_0_6, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10276); + addExpectedElement(10277); + addExpectedElement(10278); + addExpectedElement(10279); + addExpectedElement(10280); + addExpectedElement(10281); + addExpectedElement(10282); + addExpectedElement(10283); + addExpectedElement(10284); + addExpectedElement(10285); + addExpectedElement(10286); + addExpectedElement(10287); + addExpectedElement(10288); + addExpectedElement(10289); + addExpectedElement(10290); + addExpectedElement(10291); + addExpectedElement(10292); + addExpectedElement(10293); + addExpectedElement(10294); + addExpectedElement(10295); + addExpectedElement(10296); + addExpectedElement(10297); + addExpectedElement(10298); + addExpectedElement(10299); + addExpectedElement(10300); + addExpectedElement(10301); + addExpectedElement(10302); + addExpectedElement(10303); + addExpectedElement(10304); + addExpectedElement(10305); + addExpectedElement(10306); + addExpectedElement(10307); + addExpectedElement(10308); + addExpectedElement(10309); + addExpectedElement(10310); + addExpectedElement(10311); + addExpectedElement(10312); + addExpectedElement(10313); + addExpectedElement(10314); + addExpectedElement(10315); + addExpectedElement(10316); + addExpectedElement(10317); + addExpectedElement(10318); + addExpectedElement(10319); + addExpectedElement(10320); + addExpectedElement(10321); + addExpectedElement(10322); + addExpectedElement(10323); + addExpectedElement(10324); + addExpectedElement(10325); + addExpectedElement(10326); + addExpectedElement(10327); + addExpectedElement(10328); + addExpectedElement(10329); + addExpectedElement(10330); + addExpectedElement(10331); + addExpectedElement(10332); + addExpectedElement(10333); + addExpectedElement(10334); + addExpectedElement(10335); + addExpectedElement(10336); + addExpectedElement(10337); + addExpectedElement(10338); + addExpectedElement(10339); + addExpectedElement(10340); + addExpectedElement(10341); + addExpectedElement(10342); + addExpectedElement(10343); + addExpectedElement(10344); + addExpectedElement(10345); + addExpectedElement(10346); + addExpectedElement(10347); + addExpectedElement(10348); + addExpectedElement(10349); + addExpectedElement(10350); + addExpectedElement(10351); + } + + // Java.g:21555:2: (a6_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:21556:3: a6_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_ForEachLoop16162); + a6_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createForEachLoop(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.FOR_EACH_LOOP__STATEMENT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_55_0_0_7, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10352); + addExpectedElement(10353); + addExpectedElement(10354); + addExpectedElement(10355); + addExpectedElement(10356); + addExpectedElement(10357); + addExpectedElement(10358); + addExpectedElement(10359); + addExpectedElement(10360); + addExpectedElement(10361); + addExpectedElement(10362); + addExpectedElement(10363); + addExpectedElement(10364); + addExpectedElement(10365); + addExpectedElement(10366); + addExpectedElement(10367); + addExpectedElement(10368); + addExpectedElement(10369); + addExpectedElement(10370); + addExpectedElement(10371); + addExpectedElement(10372); + addExpectedElement(10373); + addExpectedElement(10374); + addExpectedElement(10375); + addExpectedElement(10376); + addExpectedElement(10377); + addExpectedElement(10378); + addExpectedElement(10379); + addExpectedElement(10380); + addExpectedElement(10381); + addExpectedElement(10382); + addExpectedElement(10383); + addExpectedElement(10384); + addExpectedElement(10385); + addExpectedElement(10386); + addExpectedElement(10387); + addExpectedElement(10388); + addExpectedElement(10389); + addExpectedElement(10390); + addExpectedElement(10391); + addExpectedElement(10392); + addExpectedElement(10393); + addExpectedElement(10394); + addExpectedElement(10395); + addExpectedElement(10396); + addExpectedElement(10397); + addExpectedElement(10398); + addExpectedElement(10399); + addExpectedElement(10400); + addExpectedElement(10401); + addExpectedElement(10402); + addExpectedElement(10403); + addExpectedElement(10404); + addExpectedElement(10405); + addExpectedElement(10406); + addExpectedElement(10407); + addExpectedElement(10408); + addExpectedElement(10409); + addExpectedElement(10410); + addExpectedElement(10411); + addExpectedElement(10412); + addExpectedElement(10413); + addExpectedElement(10414); + addExpectedElement(10415); + addExpectedElement(10416); + addExpectedElement(10417); + addExpectedElement(10418); + addExpectedElement(10419); + addExpectedElement(10420); + addExpectedElement(10421); + addExpectedElement(10422); + addExpectedElement(10423); + addExpectedElement(10424); + addExpectedElement(10425); + addExpectedElement(10426); + addExpectedElement(10427); + addExpectedElement(10428); + addExpectedElement(10429); + addExpectedElement(10430); + addExpectedElement(10431); + addExpectedElement(10432); + addExpectedElement(10433); + addExpectedElement(10434); + addExpectedElement(10435); + addExpectedElement(10436); + addExpectedElement(10437); + addExpectedElement(10438); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 57, parse_org_emftext_language_java_statements_ForEachLoop_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_ForEachLoop" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_WhileLoop" + // Java.g:21669:1: parse_org_emftext_language_java_statements_WhileLoop returns [org.emftext.language.java.statements.WhileLoop element = null] : (a0= 'while' a1= '(' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ')' (a4_0= parse_org_emftext_language_java_statements_Statement ) |c0= parse_org_emftext_language_java_statements_DoWhileLoop ); + public final org.emftext.language.java.statements.WhileLoop parse_org_emftext_language_java_statements_WhileLoop() throws RecognitionException { + org.emftext.language.java.statements.WhileLoop element = null; + + int parse_org_emftext_language_java_statements_WhileLoop_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a3=null; + org.emftext.language.java.expressions.AssignmentExpression a2_0 =null; + + org.emftext.language.java.statements.Statement a4_0 =null; + + org.emftext.language.java.statements.DoWhileLoop c0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 58) ) { return element; } + + // Java.g:21672:2: (a0= 'while' a1= '(' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ')' (a4_0= parse_org_emftext_language_java_statements_Statement ) |c0= parse_org_emftext_language_java_statements_DoWhileLoop ) + int alt181=2; + int LA181_0 = input.LA(1); + + if ( (LA181_0==104) ) { + alt181=1; + } + else if ( (LA181_0==67) ) { + alt181=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 181, 0, input); + + throw nvae; + + } + switch (alt181) { + case 1 : + // Java.g:21673:2: a0= 'while' a1= '(' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ')' (a4_0= parse_org_emftext_language_java_statements_Statement ) + { + a0=(Token)match(input,104,FOLLOW_104_in_parse_org_emftext_language_java_statements_WhileLoop16195); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createWhileLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_56_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10439); + } + + a1=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_statements_WhileLoop16209); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createWhileLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_56_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10440); + addExpectedElement(10441); + addExpectedElement(10442); + addExpectedElement(10443); + addExpectedElement(10444); + addExpectedElement(10445); + addExpectedElement(10446); + addExpectedElement(10447); + addExpectedElement(10448); + addExpectedElement(10449); + addExpectedElement(10450); + addExpectedElement(10451); + addExpectedElement(10452); + addExpectedElement(10453); + addExpectedElement(10454); + addExpectedElement(10455); + addExpectedElement(10456); + addExpectedElement(10457); + addExpectedElement(10458); + addExpectedElement(10459); + addExpectedElement(10460); + addExpectedElement(10461); + addExpectedElement(10462); + addExpectedElement(10463); + addExpectedElement(10464); + addExpectedElement(10465); + addExpectedElement(10466); + addExpectedElement(10467); + addExpectedElement(10468); + addExpectedElement(10469); + addExpectedElement(10470); + addExpectedElement(10471); + addExpectedElement(10472); + addExpectedElement(10473); + addExpectedElement(10474); + addExpectedElement(10475); + addExpectedElement(10476); + addExpectedElement(10477); + addExpectedElement(10478); + addExpectedElement(10479); + addExpectedElement(10480); + addExpectedElement(10481); + addExpectedElement(10482); + } + + // Java.g:21743:2: (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:21744:3: a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_WhileLoop16227); + a2_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createWhileLoop(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.WHILE_LOOP__CONDITION), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_56_0_0_3, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10483); + } + + a3=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_statements_WhileLoop16245); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createWhileLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_56_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10484); + addExpectedElement(10485); + addExpectedElement(10486); + addExpectedElement(10487); + addExpectedElement(10488); + addExpectedElement(10489); + addExpectedElement(10490); + addExpectedElement(10491); + addExpectedElement(10492); + addExpectedElement(10493); + addExpectedElement(10494); + addExpectedElement(10495); + addExpectedElement(10496); + addExpectedElement(10497); + addExpectedElement(10498); + addExpectedElement(10499); + addExpectedElement(10500); + addExpectedElement(10501); + addExpectedElement(10502); + addExpectedElement(10503); + addExpectedElement(10504); + addExpectedElement(10505); + addExpectedElement(10506); + addExpectedElement(10507); + addExpectedElement(10508); + addExpectedElement(10509); + addExpectedElement(10510); + addExpectedElement(10511); + addExpectedElement(10512); + addExpectedElement(10513); + addExpectedElement(10514); + addExpectedElement(10515); + addExpectedElement(10516); + addExpectedElement(10517); + addExpectedElement(10518); + addExpectedElement(10519); + addExpectedElement(10520); + addExpectedElement(10521); + addExpectedElement(10522); + addExpectedElement(10523); + addExpectedElement(10524); + addExpectedElement(10525); + addExpectedElement(10526); + addExpectedElement(10527); + addExpectedElement(10528); + addExpectedElement(10529); + addExpectedElement(10530); + addExpectedElement(10531); + addExpectedElement(10532); + addExpectedElement(10533); + addExpectedElement(10534); + addExpectedElement(10535); + addExpectedElement(10536); + addExpectedElement(10537); + addExpectedElement(10538); + addExpectedElement(10539); + addExpectedElement(10540); + addExpectedElement(10541); + addExpectedElement(10542); + addExpectedElement(10543); + addExpectedElement(10544); + addExpectedElement(10545); + addExpectedElement(10546); + addExpectedElement(10547); + addExpectedElement(10548); + addExpectedElement(10549); + addExpectedElement(10550); + addExpectedElement(10551); + addExpectedElement(10552); + addExpectedElement(10553); + addExpectedElement(10554); + addExpectedElement(10555); + addExpectedElement(10556); + addExpectedElement(10557); + addExpectedElement(10558); + addExpectedElement(10559); + } + + // Java.g:21858:2: (a4_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:21859:3: a4_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_WhileLoop16263); + a4_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createWhileLoop(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.WHILE_LOOP__STATEMENT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_56_0_0_5, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10560); + addExpectedElement(10561); + addExpectedElement(10562); + addExpectedElement(10563); + addExpectedElement(10564); + addExpectedElement(10565); + addExpectedElement(10566); + addExpectedElement(10567); + addExpectedElement(10568); + addExpectedElement(10569); + addExpectedElement(10570); + addExpectedElement(10571); + addExpectedElement(10572); + addExpectedElement(10573); + addExpectedElement(10574); + addExpectedElement(10575); + addExpectedElement(10576); + addExpectedElement(10577); + addExpectedElement(10578); + addExpectedElement(10579); + addExpectedElement(10580); + addExpectedElement(10581); + addExpectedElement(10582); + addExpectedElement(10583); + addExpectedElement(10584); + addExpectedElement(10585); + addExpectedElement(10586); + addExpectedElement(10587); + addExpectedElement(10588); + addExpectedElement(10589); + addExpectedElement(10590); + addExpectedElement(10591); + addExpectedElement(10592); + addExpectedElement(10593); + addExpectedElement(10594); + addExpectedElement(10595); + addExpectedElement(10596); + addExpectedElement(10597); + addExpectedElement(10598); + addExpectedElement(10599); + addExpectedElement(10600); + addExpectedElement(10601); + addExpectedElement(10602); + addExpectedElement(10603); + addExpectedElement(10604); + addExpectedElement(10605); + addExpectedElement(10606); + addExpectedElement(10607); + addExpectedElement(10608); + addExpectedElement(10609); + addExpectedElement(10610); + addExpectedElement(10611); + addExpectedElement(10612); + addExpectedElement(10613); + addExpectedElement(10614); + addExpectedElement(10615); + addExpectedElement(10616); + addExpectedElement(10617); + addExpectedElement(10618); + addExpectedElement(10619); + addExpectedElement(10620); + addExpectedElement(10621); + addExpectedElement(10622); + addExpectedElement(10623); + addExpectedElement(10624); + addExpectedElement(10625); + addExpectedElement(10626); + addExpectedElement(10627); + addExpectedElement(10628); + addExpectedElement(10629); + addExpectedElement(10630); + addExpectedElement(10631); + addExpectedElement(10632); + addExpectedElement(10633); + addExpectedElement(10634); + addExpectedElement(10635); + addExpectedElement(10636); + addExpectedElement(10637); + addExpectedElement(10638); + addExpectedElement(10639); + addExpectedElement(10640); + addExpectedElement(10641); + addExpectedElement(10642); + addExpectedElement(10643); + addExpectedElement(10644); + addExpectedElement(10645); + addExpectedElement(10646); + } + + } + break; + case 2 : + // Java.g:21972:2: c0= parse_org_emftext_language_java_statements_DoWhileLoop + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_DoWhileLoop_in_parse_org_emftext_language_java_statements_WhileLoop16286); + c0=parse_org_emftext_language_java_statements_DoWhileLoop(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 58, parse_org_emftext_language_java_statements_WhileLoop_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_WhileLoop" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_DoWhileLoop" + // Java.g:21976:1: parse_org_emftext_language_java_statements_DoWhileLoop returns [org.emftext.language.java.statements.DoWhileLoop element = null] : a0= 'do' (a1_0= parse_org_emftext_language_java_statements_Statement ) a2= 'while' a3= '(' (a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a5= ')' a6= ';' ; + public final org.emftext.language.java.statements.DoWhileLoop parse_org_emftext_language_java_statements_DoWhileLoop() throws RecognitionException { + org.emftext.language.java.statements.DoWhileLoop element = null; + + int parse_org_emftext_language_java_statements_DoWhileLoop_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + Token a3=null; + Token a5=null; + Token a6=null; + org.emftext.language.java.statements.Statement a1_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a4_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 59) ) { return element; } + + // Java.g:21979:2: (a0= 'do' (a1_0= parse_org_emftext_language_java_statements_Statement ) a2= 'while' a3= '(' (a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a5= ')' a6= ';' ) + // Java.g:21980:2: a0= 'do' (a1_0= parse_org_emftext_language_java_statements_Statement ) a2= 'while' a3= '(' (a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a5= ')' a6= ';' + { + a0=(Token)match(input,67,FOLLOW_67_in_parse_org_emftext_language_java_statements_DoWhileLoop16311); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createDoWhileLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_57_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10647); + addExpectedElement(10648); + addExpectedElement(10649); + addExpectedElement(10650); + addExpectedElement(10651); + addExpectedElement(10652); + addExpectedElement(10653); + addExpectedElement(10654); + addExpectedElement(10655); + addExpectedElement(10656); + addExpectedElement(10657); + addExpectedElement(10658); + addExpectedElement(10659); + addExpectedElement(10660); + addExpectedElement(10661); + addExpectedElement(10662); + addExpectedElement(10663); + addExpectedElement(10664); + addExpectedElement(10665); + addExpectedElement(10666); + addExpectedElement(10667); + addExpectedElement(10668); + addExpectedElement(10669); + addExpectedElement(10670); + addExpectedElement(10671); + addExpectedElement(10672); + addExpectedElement(10673); + addExpectedElement(10674); + addExpectedElement(10675); + addExpectedElement(10676); + addExpectedElement(10677); + addExpectedElement(10678); + addExpectedElement(10679); + addExpectedElement(10680); + addExpectedElement(10681); + addExpectedElement(10682); + addExpectedElement(10683); + addExpectedElement(10684); + addExpectedElement(10685); + addExpectedElement(10686); + addExpectedElement(10687); + addExpectedElement(10688); + addExpectedElement(10689); + addExpectedElement(10690); + addExpectedElement(10691); + addExpectedElement(10692); + addExpectedElement(10693); + addExpectedElement(10694); + addExpectedElement(10695); + addExpectedElement(10696); + addExpectedElement(10697); + addExpectedElement(10698); + addExpectedElement(10699); + addExpectedElement(10700); + addExpectedElement(10701); + addExpectedElement(10702); + addExpectedElement(10703); + addExpectedElement(10704); + addExpectedElement(10705); + addExpectedElement(10706); + addExpectedElement(10707); + addExpectedElement(10708); + addExpectedElement(10709); + addExpectedElement(10710); + addExpectedElement(10711); + addExpectedElement(10712); + addExpectedElement(10713); + addExpectedElement(10714); + addExpectedElement(10715); + addExpectedElement(10716); + addExpectedElement(10717); + addExpectedElement(10718); + addExpectedElement(10719); + addExpectedElement(10720); + addExpectedElement(10721); + addExpectedElement(10722); + } + + // Java.g:22069:2: (a1_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:22070:3: a1_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_DoWhileLoop16329); + a1_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createDoWhileLoop(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.DO_WHILE_LOOP__STATEMENT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_57_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10723); + } + + a2=(Token)match(input,104,FOLLOW_104_in_parse_org_emftext_language_java_statements_DoWhileLoop16347); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createDoWhileLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_57_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10724); + } + + a3=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_statements_DoWhileLoop16361); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createDoWhileLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_57_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10725); + addExpectedElement(10726); + addExpectedElement(10727); + addExpectedElement(10728); + addExpectedElement(10729); + addExpectedElement(10730); + addExpectedElement(10731); + addExpectedElement(10732); + addExpectedElement(10733); + addExpectedElement(10734); + addExpectedElement(10735); + addExpectedElement(10736); + addExpectedElement(10737); + addExpectedElement(10738); + addExpectedElement(10739); + addExpectedElement(10740); + addExpectedElement(10741); + addExpectedElement(10742); + addExpectedElement(10743); + addExpectedElement(10744); + addExpectedElement(10745); + addExpectedElement(10746); + addExpectedElement(10747); + addExpectedElement(10748); + addExpectedElement(10749); + addExpectedElement(10750); + addExpectedElement(10751); + addExpectedElement(10752); + addExpectedElement(10753); + addExpectedElement(10754); + addExpectedElement(10755); + addExpectedElement(10756); + addExpectedElement(10757); + addExpectedElement(10758); + addExpectedElement(10759); + addExpectedElement(10760); + addExpectedElement(10761); + addExpectedElement(10762); + addExpectedElement(10763); + addExpectedElement(10764); + addExpectedElement(10765); + addExpectedElement(10766); + addExpectedElement(10767); + } + + // Java.g:22165:2: (a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:22166:3: a4_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_DoWhileLoop16379); + a4_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createDoWhileLoop(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.DO_WHILE_LOOP__CONDITION), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_57_0_0_5, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10768); + } + + a5=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_statements_DoWhileLoop16397); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createDoWhileLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_57_0_0_6, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10769); + } + + a6=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_statements_DoWhileLoop16411); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createDoWhileLoop(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_57_0_0_7, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a6, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10770); + addExpectedElement(10771); + addExpectedElement(10772); + addExpectedElement(10773); + addExpectedElement(10774); + addExpectedElement(10775); + addExpectedElement(10776); + addExpectedElement(10777); + addExpectedElement(10778); + addExpectedElement(10779); + addExpectedElement(10780); + addExpectedElement(10781); + addExpectedElement(10782); + addExpectedElement(10783); + addExpectedElement(10784); + addExpectedElement(10785); + addExpectedElement(10786); + addExpectedElement(10787); + addExpectedElement(10788); + addExpectedElement(10789); + addExpectedElement(10790); + addExpectedElement(10791); + addExpectedElement(10792); + addExpectedElement(10793); + addExpectedElement(10794); + addExpectedElement(10795); + addExpectedElement(10796); + addExpectedElement(10797); + addExpectedElement(10798); + addExpectedElement(10799); + addExpectedElement(10800); + addExpectedElement(10801); + addExpectedElement(10802); + addExpectedElement(10803); + addExpectedElement(10804); + addExpectedElement(10805); + addExpectedElement(10806); + addExpectedElement(10807); + addExpectedElement(10808); + addExpectedElement(10809); + addExpectedElement(10810); + addExpectedElement(10811); + addExpectedElement(10812); + addExpectedElement(10813); + addExpectedElement(10814); + addExpectedElement(10815); + addExpectedElement(10816); + addExpectedElement(10817); + addExpectedElement(10818); + addExpectedElement(10819); + addExpectedElement(10820); + addExpectedElement(10821); + addExpectedElement(10822); + addExpectedElement(10823); + addExpectedElement(10824); + addExpectedElement(10825); + addExpectedElement(10826); + addExpectedElement(10827); + addExpectedElement(10828); + addExpectedElement(10829); + addExpectedElement(10830); + addExpectedElement(10831); + addExpectedElement(10832); + addExpectedElement(10833); + addExpectedElement(10834); + addExpectedElement(10835); + addExpectedElement(10836); + addExpectedElement(10837); + addExpectedElement(10838); + addExpectedElement(10839); + addExpectedElement(10840); + addExpectedElement(10841); + addExpectedElement(10842); + addExpectedElement(10843); + addExpectedElement(10844); + addExpectedElement(10845); + addExpectedElement(10846); + addExpectedElement(10847); + addExpectedElement(10848); + addExpectedElement(10849); + addExpectedElement(10850); + addExpectedElement(10851); + addExpectedElement(10852); + addExpectedElement(10853); + addExpectedElement(10854); + addExpectedElement(10855); + addExpectedElement(10856); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 59, parse_org_emftext_language_java_statements_DoWhileLoop_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_DoWhileLoop" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_EmptyStatement" + // Java.g:22307:1: parse_org_emftext_language_java_statements_EmptyStatement returns [org.emftext.language.java.statements.EmptyStatement element = null] : a0= ';' ; + public final org.emftext.language.java.statements.EmptyStatement parse_org_emftext_language_java_statements_EmptyStatement() throws RecognitionException { + org.emftext.language.java.statements.EmptyStatement element = null; + + int parse_org_emftext_language_java_statements_EmptyStatement_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 60) ) { return element; } + + // Java.g:22310:2: (a0= ';' ) + // Java.g:22311:2: a0= ';' + { + a0=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_statements_EmptyStatement16440); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createEmptyStatement(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_58_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10857); + addExpectedElement(10858); + addExpectedElement(10859); + addExpectedElement(10860); + addExpectedElement(10861); + addExpectedElement(10862); + addExpectedElement(10863); + addExpectedElement(10864); + addExpectedElement(10865); + addExpectedElement(10866); + addExpectedElement(10867); + addExpectedElement(10868); + addExpectedElement(10869); + addExpectedElement(10870); + addExpectedElement(10871); + addExpectedElement(10872); + addExpectedElement(10873); + addExpectedElement(10874); + addExpectedElement(10875); + addExpectedElement(10876); + addExpectedElement(10877); + addExpectedElement(10878); + addExpectedElement(10879); + addExpectedElement(10880); + addExpectedElement(10881); + addExpectedElement(10882); + addExpectedElement(10883); + addExpectedElement(10884); + addExpectedElement(10885); + addExpectedElement(10886); + addExpectedElement(10887); + addExpectedElement(10888); + addExpectedElement(10889); + addExpectedElement(10890); + addExpectedElement(10891); + addExpectedElement(10892); + addExpectedElement(10893); + addExpectedElement(10894); + addExpectedElement(10895); + addExpectedElement(10896); + addExpectedElement(10897); + addExpectedElement(10898); + addExpectedElement(10899); + addExpectedElement(10900); + addExpectedElement(10901); + addExpectedElement(10902); + addExpectedElement(10903); + addExpectedElement(10904); + addExpectedElement(10905); + addExpectedElement(10906); + addExpectedElement(10907); + addExpectedElement(10908); + addExpectedElement(10909); + addExpectedElement(10910); + addExpectedElement(10911); + addExpectedElement(10912); + addExpectedElement(10913); + addExpectedElement(10914); + addExpectedElement(10915); + addExpectedElement(10916); + addExpectedElement(10917); + addExpectedElement(10918); + addExpectedElement(10919); + addExpectedElement(10920); + addExpectedElement(10921); + addExpectedElement(10922); + addExpectedElement(10923); + addExpectedElement(10924); + addExpectedElement(10925); + addExpectedElement(10926); + addExpectedElement(10927); + addExpectedElement(10928); + addExpectedElement(10929); + addExpectedElement(10930); + addExpectedElement(10931); + addExpectedElement(10932); + addExpectedElement(10933); + addExpectedElement(10934); + addExpectedElement(10935); + addExpectedElement(10936); + addExpectedElement(10937); + addExpectedElement(10938); + addExpectedElement(10939); + addExpectedElement(10940); + addExpectedElement(10941); + addExpectedElement(10942); + addExpectedElement(10943); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 60, parse_org_emftext_language_java_statements_EmptyStatement_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_EmptyStatement" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_SynchronizedBlock" + // Java.g:22413:1: parse_org_emftext_language_java_statements_SynchronizedBlock returns [org.emftext.language.java.statements.SynchronizedBlock element = null] : a0= 'synchronized' a1= '(' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ')' a4= '{' ( ( (a5_0= parse_org_emftext_language_java_statements_Statement ) ) )* a6= '}' ; + public final org.emftext.language.java.statements.SynchronizedBlock parse_org_emftext_language_java_statements_SynchronizedBlock() throws RecognitionException { + org.emftext.language.java.statements.SynchronizedBlock element = null; + + int parse_org_emftext_language_java_statements_SynchronizedBlock_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a3=null; + Token a4=null; + Token a6=null; + org.emftext.language.java.expressions.AssignmentExpression a2_0 =null; + + org.emftext.language.java.statements.Statement a5_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 61) ) { return element; } + + // Java.g:22416:2: (a0= 'synchronized' a1= '(' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ')' a4= '{' ( ( (a5_0= parse_org_emftext_language_java_statements_Statement ) ) )* a6= '}' ) + // Java.g:22417:2: a0= 'synchronized' a1= '(' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ')' a4= '{' ( ( (a5_0= parse_org_emftext_language_java_statements_Statement ) ) )* a6= '}' + { + a0=(Token)match(input,96,FOLLOW_96_in_parse_org_emftext_language_java_statements_SynchronizedBlock16469); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createSynchronizedBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_59_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10944); + } + + a1=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_statements_SynchronizedBlock16483); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createSynchronizedBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_59_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10945); + addExpectedElement(10946); + addExpectedElement(10947); + addExpectedElement(10948); + addExpectedElement(10949); + addExpectedElement(10950); + addExpectedElement(10951); + addExpectedElement(10952); + addExpectedElement(10953); + addExpectedElement(10954); + addExpectedElement(10955); + addExpectedElement(10956); + addExpectedElement(10957); + addExpectedElement(10958); + addExpectedElement(10959); + addExpectedElement(10960); + addExpectedElement(10961); + addExpectedElement(10962); + addExpectedElement(10963); + addExpectedElement(10964); + addExpectedElement(10965); + addExpectedElement(10966); + addExpectedElement(10967); + addExpectedElement(10968); + addExpectedElement(10969); + addExpectedElement(10970); + addExpectedElement(10971); + addExpectedElement(10972); + addExpectedElement(10973); + addExpectedElement(10974); + addExpectedElement(10975); + addExpectedElement(10976); + addExpectedElement(10977); + addExpectedElement(10978); + addExpectedElement(10979); + addExpectedElement(10980); + addExpectedElement(10981); + addExpectedElement(10982); + addExpectedElement(10983); + addExpectedElement(10984); + addExpectedElement(10985); + addExpectedElement(10986); + addExpectedElement(10987); + } + + // Java.g:22487:2: (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:22488:3: a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_SynchronizedBlock16501); + a2_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createSynchronizedBlock(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.SYNCHRONIZED_BLOCK__LOCK_PROVIDER), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_59_0_0_3, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10988); + } + + a3=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_statements_SynchronizedBlock16519); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createSynchronizedBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_59_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10989); + } + + a4=(Token)match(input,105,FOLLOW_105_in_parse_org_emftext_language_java_statements_SynchronizedBlock16533); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createSynchronizedBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_59_0_0_6, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(10990); + addExpectedElement(10991); + addExpectedElement(10992); + addExpectedElement(10993); + addExpectedElement(10994); + addExpectedElement(10995); + addExpectedElement(10996); + addExpectedElement(10997); + addExpectedElement(10998); + addExpectedElement(10999); + addExpectedElement(11000); + addExpectedElement(11001); + addExpectedElement(11002); + addExpectedElement(11003); + addExpectedElement(11004); + addExpectedElement(11005); + addExpectedElement(11006); + addExpectedElement(11007); + addExpectedElement(11008); + addExpectedElement(11009); + addExpectedElement(11010); + addExpectedElement(11011); + addExpectedElement(11012); + addExpectedElement(11013); + addExpectedElement(11014); + addExpectedElement(11015); + addExpectedElement(11016); + addExpectedElement(11017); + addExpectedElement(11018); + addExpectedElement(11019); + addExpectedElement(11020); + addExpectedElement(11021); + addExpectedElement(11022); + addExpectedElement(11023); + addExpectedElement(11024); + addExpectedElement(11025); + addExpectedElement(11026); + addExpectedElement(11027); + addExpectedElement(11028); + addExpectedElement(11029); + addExpectedElement(11030); + addExpectedElement(11031); + addExpectedElement(11032); + addExpectedElement(11033); + addExpectedElement(11034); + addExpectedElement(11035); + addExpectedElement(11036); + addExpectedElement(11037); + addExpectedElement(11038); + addExpectedElement(11039); + addExpectedElement(11040); + addExpectedElement(11041); + addExpectedElement(11042); + addExpectedElement(11043); + addExpectedElement(11044); + addExpectedElement(11045); + addExpectedElement(11046); + addExpectedElement(11047); + addExpectedElement(11048); + addExpectedElement(11049); + addExpectedElement(11050); + addExpectedElement(11051); + addExpectedElement(11052); + addExpectedElement(11053); + addExpectedElement(11054); + addExpectedElement(11055); + addExpectedElement(11056); + addExpectedElement(11057); + addExpectedElement(11058); + addExpectedElement(11059); + addExpectedElement(11060); + addExpectedElement(11061); + addExpectedElement(11062); + addExpectedElement(11063); + addExpectedElement(11064); + addExpectedElement(11065); + addExpectedElement(11066); + } + + // Java.g:22617:2: ( ( (a5_0= parse_org_emftext_language_java_statements_Statement ) ) )* + loop182: + do { + int alt182=2; + int LA182_0 = input.LA(1); + + if ( ((LA182_0 >= BOOLEAN_LITERAL && LA182_0 <= IDENTIFIER)||(LA182_0 >= OCTAL_INTEGER_LITERAL && LA182_0 <= OCTAL_LONG_LITERAL)||LA182_0==STRING_LITERAL||LA182_0==21||LA182_0==26||(LA182_0 >= 30 && LA182_0 <= 31)||(LA182_0 >= 34 && LA182_0 <= 35)||(LA182_0 >= 42 && LA182_0 <= 43)||LA182_0==48||(LA182_0 >= 56 && LA182_0 <= 60)||(LA182_0 >= 63 && LA182_0 <= 65)||(LA182_0 >= 67 && LA182_0 <= 68)||LA182_0==70||LA182_0==72||(LA182_0 >= 74 && LA182_0 <= 76)||(LA182_0 >= 80 && LA182_0 <= 85)||(LA182_0 >= 87 && LA182_0 <= 98)||(LA182_0 >= 100 && LA182_0 <= 105)||LA182_0==110) ) { + alt182=1; + } + + + switch (alt182) { + case 1 : + // Java.g:22618:3: ( (a5_0= parse_org_emftext_language_java_statements_Statement ) ) + { + // Java.g:22618:3: ( (a5_0= parse_org_emftext_language_java_statements_Statement ) ) + // Java.g:22619:4: (a5_0= parse_org_emftext_language_java_statements_Statement ) + { + // Java.g:22619:4: (a5_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:22620:5: a5_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_SynchronizedBlock16562); + a5_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createSynchronizedBlock(); + startIncompleteElement(element); + } + if (a5_0 != null) { + if (a5_0 != null) { + Object value = a5_0; + addObjectToList(element, org.emftext.language.java.statements.StatementsPackage.SYNCHRONIZED_BLOCK__STATEMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_59_0_0_7_0_0_1, a5_0, true); + copyLocalizationInfos(a5_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11067); + addExpectedElement(11068); + addExpectedElement(11069); + addExpectedElement(11070); + addExpectedElement(11071); + addExpectedElement(11072); + addExpectedElement(11073); + addExpectedElement(11074); + addExpectedElement(11075); + addExpectedElement(11076); + addExpectedElement(11077); + addExpectedElement(11078); + addExpectedElement(11079); + addExpectedElement(11080); + addExpectedElement(11081); + addExpectedElement(11082); + addExpectedElement(11083); + addExpectedElement(11084); + addExpectedElement(11085); + addExpectedElement(11086); + addExpectedElement(11087); + addExpectedElement(11088); + addExpectedElement(11089); + addExpectedElement(11090); + addExpectedElement(11091); + addExpectedElement(11092); + addExpectedElement(11093); + addExpectedElement(11094); + addExpectedElement(11095); + addExpectedElement(11096); + addExpectedElement(11097); + addExpectedElement(11098); + addExpectedElement(11099); + addExpectedElement(11100); + addExpectedElement(11101); + addExpectedElement(11102); + addExpectedElement(11103); + addExpectedElement(11104); + addExpectedElement(11105); + addExpectedElement(11106); + addExpectedElement(11107); + addExpectedElement(11108); + addExpectedElement(11109); + addExpectedElement(11110); + addExpectedElement(11111); + addExpectedElement(11112); + addExpectedElement(11113); + addExpectedElement(11114); + addExpectedElement(11115); + addExpectedElement(11116); + addExpectedElement(11117); + addExpectedElement(11118); + addExpectedElement(11119); + addExpectedElement(11120); + addExpectedElement(11121); + addExpectedElement(11122); + addExpectedElement(11123); + addExpectedElement(11124); + addExpectedElement(11125); + addExpectedElement(11126); + addExpectedElement(11127); + addExpectedElement(11128); + addExpectedElement(11129); + addExpectedElement(11130); + addExpectedElement(11131); + addExpectedElement(11132); + addExpectedElement(11133); + addExpectedElement(11134); + addExpectedElement(11135); + addExpectedElement(11136); + addExpectedElement(11137); + addExpectedElement(11138); + addExpectedElement(11139); + addExpectedElement(11140); + addExpectedElement(11141); + addExpectedElement(11142); + addExpectedElement(11143); + } + + } + + + } + break; + + default : + break loop182; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11144); + addExpectedElement(11145); + addExpectedElement(11146); + addExpectedElement(11147); + addExpectedElement(11148); + addExpectedElement(11149); + addExpectedElement(11150); + addExpectedElement(11151); + addExpectedElement(11152); + addExpectedElement(11153); + addExpectedElement(11154); + addExpectedElement(11155); + addExpectedElement(11156); + addExpectedElement(11157); + addExpectedElement(11158); + addExpectedElement(11159); + addExpectedElement(11160); + addExpectedElement(11161); + addExpectedElement(11162); + addExpectedElement(11163); + addExpectedElement(11164); + addExpectedElement(11165); + addExpectedElement(11166); + addExpectedElement(11167); + addExpectedElement(11168); + addExpectedElement(11169); + addExpectedElement(11170); + addExpectedElement(11171); + addExpectedElement(11172); + addExpectedElement(11173); + addExpectedElement(11174); + addExpectedElement(11175); + addExpectedElement(11176); + addExpectedElement(11177); + addExpectedElement(11178); + addExpectedElement(11179); + addExpectedElement(11180); + addExpectedElement(11181); + addExpectedElement(11182); + addExpectedElement(11183); + addExpectedElement(11184); + addExpectedElement(11185); + addExpectedElement(11186); + addExpectedElement(11187); + addExpectedElement(11188); + addExpectedElement(11189); + addExpectedElement(11190); + addExpectedElement(11191); + addExpectedElement(11192); + addExpectedElement(11193); + addExpectedElement(11194); + addExpectedElement(11195); + addExpectedElement(11196); + addExpectedElement(11197); + addExpectedElement(11198); + addExpectedElement(11199); + addExpectedElement(11200); + addExpectedElement(11201); + addExpectedElement(11202); + addExpectedElement(11203); + addExpectedElement(11204); + addExpectedElement(11205); + addExpectedElement(11206); + addExpectedElement(11207); + addExpectedElement(11208); + addExpectedElement(11209); + addExpectedElement(11210); + addExpectedElement(11211); + addExpectedElement(11212); + addExpectedElement(11213); + addExpectedElement(11214); + addExpectedElement(11215); + addExpectedElement(11216); + addExpectedElement(11217); + addExpectedElement(11218); + addExpectedElement(11219); + addExpectedElement(11220); + } + + a6=(Token)match(input,109,FOLLOW_109_in_parse_org_emftext_language_java_statements_SynchronizedBlock16603); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createSynchronizedBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_59_0_0_9, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a6, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11221); + addExpectedElement(11222); + addExpectedElement(11223); + addExpectedElement(11224); + addExpectedElement(11225); + addExpectedElement(11226); + addExpectedElement(11227); + addExpectedElement(11228); + addExpectedElement(11229); + addExpectedElement(11230); + addExpectedElement(11231); + addExpectedElement(11232); + addExpectedElement(11233); + addExpectedElement(11234); + addExpectedElement(11235); + addExpectedElement(11236); + addExpectedElement(11237); + addExpectedElement(11238); + addExpectedElement(11239); + addExpectedElement(11240); + addExpectedElement(11241); + addExpectedElement(11242); + addExpectedElement(11243); + addExpectedElement(11244); + addExpectedElement(11245); + addExpectedElement(11246); + addExpectedElement(11247); + addExpectedElement(11248); + addExpectedElement(11249); + addExpectedElement(11250); + addExpectedElement(11251); + addExpectedElement(11252); + addExpectedElement(11253); + addExpectedElement(11254); + addExpectedElement(11255); + addExpectedElement(11256); + addExpectedElement(11257); + addExpectedElement(11258); + addExpectedElement(11259); + addExpectedElement(11260); + addExpectedElement(11261); + addExpectedElement(11262); + addExpectedElement(11263); + addExpectedElement(11264); + addExpectedElement(11265); + addExpectedElement(11266); + addExpectedElement(11267); + addExpectedElement(11268); + addExpectedElement(11269); + addExpectedElement(11270); + addExpectedElement(11271); + addExpectedElement(11272); + addExpectedElement(11273); + addExpectedElement(11274); + addExpectedElement(11275); + addExpectedElement(11276); + addExpectedElement(11277); + addExpectedElement(11278); + addExpectedElement(11279); + addExpectedElement(11280); + addExpectedElement(11281); + addExpectedElement(11282); + addExpectedElement(11283); + addExpectedElement(11284); + addExpectedElement(11285); + addExpectedElement(11286); + addExpectedElement(11287); + addExpectedElement(11288); + addExpectedElement(11289); + addExpectedElement(11290); + addExpectedElement(11291); + addExpectedElement(11292); + addExpectedElement(11293); + addExpectedElement(11294); + addExpectedElement(11295); + addExpectedElement(11296); + addExpectedElement(11297); + addExpectedElement(11298); + addExpectedElement(11299); + addExpectedElement(11300); + addExpectedElement(11301); + addExpectedElement(11302); + addExpectedElement(11303); + addExpectedElement(11304); + addExpectedElement(11305); + addExpectedElement(11306); + addExpectedElement(11307); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 61, parse_org_emftext_language_java_statements_SynchronizedBlock_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_SynchronizedBlock" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_TryBlock" + // Java.g:22906:1: parse_org_emftext_language_java_statements_TryBlock returns [org.emftext.language.java.statements.TryBlock element = null] : a0= 'try' a1= '{' ( ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) )* a3= '}' ( (a4_0= parse_org_emftext_language_java_statements_CatchBlock ) )* ( (a5= 'finally' (a6_0= parse_org_emftext_language_java_statements_Block ) ) )? ; + public final org.emftext.language.java.statements.TryBlock parse_org_emftext_language_java_statements_TryBlock() throws RecognitionException { + org.emftext.language.java.statements.TryBlock element = null; + + int parse_org_emftext_language_java_statements_TryBlock_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a3=null; + Token a5=null; + org.emftext.language.java.statements.Statement a2_0 =null; + + org.emftext.language.java.statements.CatchBlock a4_0 =null; + + org.emftext.language.java.statements.Block a6_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 62) ) { return element; } + + // Java.g:22909:2: (a0= 'try' a1= '{' ( ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) )* a3= '}' ( (a4_0= parse_org_emftext_language_java_statements_CatchBlock ) )* ( (a5= 'finally' (a6_0= parse_org_emftext_language_java_statements_Block ) ) )? ) + // Java.g:22910:2: a0= 'try' a1= '{' ( ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) )* a3= '}' ( (a4_0= parse_org_emftext_language_java_statements_CatchBlock ) )* ( (a5= 'finally' (a6_0= parse_org_emftext_language_java_statements_Block ) ) )? + { + a0=(Token)match(input,101,FOLLOW_101_in_parse_org_emftext_language_java_statements_TryBlock16632); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createTryBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_60_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11308); + } + + a1=(Token)match(input,105,FOLLOW_105_in_parse_org_emftext_language_java_statements_TryBlock16646); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createTryBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_60_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11309); + addExpectedElement(11310); + addExpectedElement(11311); + addExpectedElement(11312); + addExpectedElement(11313); + addExpectedElement(11314); + addExpectedElement(11315); + addExpectedElement(11316); + addExpectedElement(11317); + addExpectedElement(11318); + addExpectedElement(11319); + addExpectedElement(11320); + addExpectedElement(11321); + addExpectedElement(11322); + addExpectedElement(11323); + addExpectedElement(11324); + addExpectedElement(11325); + addExpectedElement(11326); + addExpectedElement(11327); + addExpectedElement(11328); + addExpectedElement(11329); + addExpectedElement(11330); + addExpectedElement(11331); + addExpectedElement(11332); + addExpectedElement(11333); + addExpectedElement(11334); + addExpectedElement(11335); + addExpectedElement(11336); + addExpectedElement(11337); + addExpectedElement(11338); + addExpectedElement(11339); + addExpectedElement(11340); + addExpectedElement(11341); + addExpectedElement(11342); + addExpectedElement(11343); + addExpectedElement(11344); + addExpectedElement(11345); + addExpectedElement(11346); + addExpectedElement(11347); + addExpectedElement(11348); + addExpectedElement(11349); + addExpectedElement(11350); + addExpectedElement(11351); + addExpectedElement(11352); + addExpectedElement(11353); + addExpectedElement(11354); + addExpectedElement(11355); + addExpectedElement(11356); + addExpectedElement(11357); + addExpectedElement(11358); + addExpectedElement(11359); + addExpectedElement(11360); + addExpectedElement(11361); + addExpectedElement(11362); + addExpectedElement(11363); + addExpectedElement(11364); + addExpectedElement(11365); + addExpectedElement(11366); + addExpectedElement(11367); + addExpectedElement(11368); + addExpectedElement(11369); + addExpectedElement(11370); + addExpectedElement(11371); + addExpectedElement(11372); + addExpectedElement(11373); + addExpectedElement(11374); + addExpectedElement(11375); + addExpectedElement(11376); + addExpectedElement(11377); + addExpectedElement(11378); + addExpectedElement(11379); + addExpectedElement(11380); + addExpectedElement(11381); + addExpectedElement(11382); + addExpectedElement(11383); + addExpectedElement(11384); + addExpectedElement(11385); + } + + // Java.g:23014:2: ( ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) )* + loop183: + do { + int alt183=2; + int LA183_0 = input.LA(1); + + if ( ((LA183_0 >= BOOLEAN_LITERAL && LA183_0 <= IDENTIFIER)||(LA183_0 >= OCTAL_INTEGER_LITERAL && LA183_0 <= OCTAL_LONG_LITERAL)||LA183_0==STRING_LITERAL||LA183_0==21||LA183_0==26||(LA183_0 >= 30 && LA183_0 <= 31)||(LA183_0 >= 34 && LA183_0 <= 35)||(LA183_0 >= 42 && LA183_0 <= 43)||LA183_0==48||(LA183_0 >= 56 && LA183_0 <= 60)||(LA183_0 >= 63 && LA183_0 <= 65)||(LA183_0 >= 67 && LA183_0 <= 68)||LA183_0==70||LA183_0==72||(LA183_0 >= 74 && LA183_0 <= 76)||(LA183_0 >= 80 && LA183_0 <= 85)||(LA183_0 >= 87 && LA183_0 <= 98)||(LA183_0 >= 100 && LA183_0 <= 105)||LA183_0==110) ) { + alt183=1; + } + + + switch (alt183) { + case 1 : + // Java.g:23015:3: ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) + { + // Java.g:23015:3: ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) + // Java.g:23016:4: (a2_0= parse_org_emftext_language_java_statements_Statement ) + { + // Java.g:23016:4: (a2_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:23017:5: a2_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_TryBlock16675); + a2_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createTryBlock(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.statements.StatementsPackage.TRY_BLOCK__STATEMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_60_0_0_3_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11386); + addExpectedElement(11387); + addExpectedElement(11388); + addExpectedElement(11389); + addExpectedElement(11390); + addExpectedElement(11391); + addExpectedElement(11392); + addExpectedElement(11393); + addExpectedElement(11394); + addExpectedElement(11395); + addExpectedElement(11396); + addExpectedElement(11397); + addExpectedElement(11398); + addExpectedElement(11399); + addExpectedElement(11400); + addExpectedElement(11401); + addExpectedElement(11402); + addExpectedElement(11403); + addExpectedElement(11404); + addExpectedElement(11405); + addExpectedElement(11406); + addExpectedElement(11407); + addExpectedElement(11408); + addExpectedElement(11409); + addExpectedElement(11410); + addExpectedElement(11411); + addExpectedElement(11412); + addExpectedElement(11413); + addExpectedElement(11414); + addExpectedElement(11415); + addExpectedElement(11416); + addExpectedElement(11417); + addExpectedElement(11418); + addExpectedElement(11419); + addExpectedElement(11420); + addExpectedElement(11421); + addExpectedElement(11422); + addExpectedElement(11423); + addExpectedElement(11424); + addExpectedElement(11425); + addExpectedElement(11426); + addExpectedElement(11427); + addExpectedElement(11428); + addExpectedElement(11429); + addExpectedElement(11430); + addExpectedElement(11431); + addExpectedElement(11432); + addExpectedElement(11433); + addExpectedElement(11434); + addExpectedElement(11435); + addExpectedElement(11436); + addExpectedElement(11437); + addExpectedElement(11438); + addExpectedElement(11439); + addExpectedElement(11440); + addExpectedElement(11441); + addExpectedElement(11442); + addExpectedElement(11443); + addExpectedElement(11444); + addExpectedElement(11445); + addExpectedElement(11446); + addExpectedElement(11447); + addExpectedElement(11448); + addExpectedElement(11449); + addExpectedElement(11450); + addExpectedElement(11451); + addExpectedElement(11452); + addExpectedElement(11453); + addExpectedElement(11454); + addExpectedElement(11455); + addExpectedElement(11456); + addExpectedElement(11457); + addExpectedElement(11458); + addExpectedElement(11459); + addExpectedElement(11460); + addExpectedElement(11461); + addExpectedElement(11462); + } + + } + + + } + break; + + default : + break loop183; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11463); + addExpectedElement(11464); + addExpectedElement(11465); + addExpectedElement(11466); + addExpectedElement(11467); + addExpectedElement(11468); + addExpectedElement(11469); + addExpectedElement(11470); + addExpectedElement(11471); + addExpectedElement(11472); + addExpectedElement(11473); + addExpectedElement(11474); + addExpectedElement(11475); + addExpectedElement(11476); + addExpectedElement(11477); + addExpectedElement(11478); + addExpectedElement(11479); + addExpectedElement(11480); + addExpectedElement(11481); + addExpectedElement(11482); + addExpectedElement(11483); + addExpectedElement(11484); + addExpectedElement(11485); + addExpectedElement(11486); + addExpectedElement(11487); + addExpectedElement(11488); + addExpectedElement(11489); + addExpectedElement(11490); + addExpectedElement(11491); + addExpectedElement(11492); + addExpectedElement(11493); + addExpectedElement(11494); + addExpectedElement(11495); + addExpectedElement(11496); + addExpectedElement(11497); + addExpectedElement(11498); + addExpectedElement(11499); + addExpectedElement(11500); + addExpectedElement(11501); + addExpectedElement(11502); + addExpectedElement(11503); + addExpectedElement(11504); + addExpectedElement(11505); + addExpectedElement(11506); + addExpectedElement(11507); + addExpectedElement(11508); + addExpectedElement(11509); + addExpectedElement(11510); + addExpectedElement(11511); + addExpectedElement(11512); + addExpectedElement(11513); + addExpectedElement(11514); + addExpectedElement(11515); + addExpectedElement(11516); + addExpectedElement(11517); + addExpectedElement(11518); + addExpectedElement(11519); + addExpectedElement(11520); + addExpectedElement(11521); + addExpectedElement(11522); + addExpectedElement(11523); + addExpectedElement(11524); + addExpectedElement(11525); + addExpectedElement(11526); + addExpectedElement(11527); + addExpectedElement(11528); + addExpectedElement(11529); + addExpectedElement(11530); + addExpectedElement(11531); + addExpectedElement(11532); + addExpectedElement(11533); + addExpectedElement(11534); + addExpectedElement(11535); + addExpectedElement(11536); + addExpectedElement(11537); + addExpectedElement(11538); + addExpectedElement(11539); + } + + a3=(Token)match(input,109,FOLLOW_109_in_parse_org_emftext_language_java_statements_TryBlock16716); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createTryBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_60_0_0_5, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11540); + addExpectedElement(11541); + addExpectedElement(11542); + addExpectedElement(11543); + addExpectedElement(11544); + addExpectedElement(11545); + addExpectedElement(11546); + addExpectedElement(11547); + addExpectedElement(11548); + addExpectedElement(11549); + addExpectedElement(11550); + addExpectedElement(11551); + addExpectedElement(11552); + addExpectedElement(11553); + addExpectedElement(11554); + addExpectedElement(11555); + addExpectedElement(11556); + addExpectedElement(11557); + addExpectedElement(11558); + addExpectedElement(11559); + addExpectedElement(11560); + addExpectedElement(11561); + addExpectedElement(11562); + addExpectedElement(11563); + addExpectedElement(11564); + addExpectedElement(11565); + addExpectedElement(11566); + addExpectedElement(11567); + addExpectedElement(11568); + addExpectedElement(11569); + addExpectedElement(11570); + addExpectedElement(11571); + addExpectedElement(11572); + addExpectedElement(11573); + addExpectedElement(11574); + addExpectedElement(11575); + addExpectedElement(11576); + addExpectedElement(11577); + addExpectedElement(11578); + addExpectedElement(11579); + addExpectedElement(11580); + addExpectedElement(11581); + addExpectedElement(11582); + addExpectedElement(11583); + addExpectedElement(11584); + addExpectedElement(11585); + addExpectedElement(11586); + addExpectedElement(11587); + addExpectedElement(11588); + addExpectedElement(11589); + addExpectedElement(11590); + addExpectedElement(11591); + addExpectedElement(11592); + addExpectedElement(11593); + addExpectedElement(11594); + addExpectedElement(11595); + addExpectedElement(11596); + addExpectedElement(11597); + addExpectedElement(11598); + addExpectedElement(11599); + addExpectedElement(11600); + addExpectedElement(11601); + addExpectedElement(11602); + addExpectedElement(11603); + addExpectedElement(11604); + addExpectedElement(11605); + addExpectedElement(11606); + addExpectedElement(11607); + addExpectedElement(11608); + addExpectedElement(11609); + addExpectedElement(11610); + addExpectedElement(11611); + addExpectedElement(11612); + addExpectedElement(11613); + addExpectedElement(11614); + addExpectedElement(11615); + addExpectedElement(11616); + addExpectedElement(11617); + addExpectedElement(11618); + addExpectedElement(11619); + addExpectedElement(11620); + addExpectedElement(11621); + addExpectedElement(11622); + addExpectedElement(11623); + addExpectedElement(11624); + addExpectedElement(11625); + addExpectedElement(11626); + addExpectedElement(11627); + addExpectedElement(11628); + } + + // Java.g:23303:2: ( (a4_0= parse_org_emftext_language_java_statements_CatchBlock ) )* + loop184: + do { + int alt184=2; + int LA184_0 = input.LA(1); + + if ( (LA184_0==62) ) { + alt184=1; + } + + + switch (alt184) { + case 1 : + // Java.g:23304:3: (a4_0= parse_org_emftext_language_java_statements_CatchBlock ) + { + // Java.g:23304:3: (a4_0= parse_org_emftext_language_java_statements_CatchBlock ) + // Java.g:23305:4: a4_0= parse_org_emftext_language_java_statements_CatchBlock + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_CatchBlock_in_parse_org_emftext_language_java_statements_TryBlock16739); + a4_0=parse_org_emftext_language_java_statements_CatchBlock(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createTryBlock(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + addObjectToList(element, org.emftext.language.java.statements.StatementsPackage.TRY_BLOCK__CATCHE_BLOCKS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_60_0_0_6, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + } + break; + + default : + break loop184; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11629); + addExpectedElement(11630); + addExpectedElement(11631); + addExpectedElement(11632); + addExpectedElement(11633); + addExpectedElement(11634); + addExpectedElement(11635); + addExpectedElement(11636); + addExpectedElement(11637); + addExpectedElement(11638); + addExpectedElement(11639); + addExpectedElement(11640); + addExpectedElement(11641); + addExpectedElement(11642); + addExpectedElement(11643); + addExpectedElement(11644); + addExpectedElement(11645); + addExpectedElement(11646); + addExpectedElement(11647); + addExpectedElement(11648); + addExpectedElement(11649); + addExpectedElement(11650); + addExpectedElement(11651); + addExpectedElement(11652); + addExpectedElement(11653); + addExpectedElement(11654); + addExpectedElement(11655); + addExpectedElement(11656); + addExpectedElement(11657); + addExpectedElement(11658); + addExpectedElement(11659); + addExpectedElement(11660); + addExpectedElement(11661); + addExpectedElement(11662); + addExpectedElement(11663); + addExpectedElement(11664); + addExpectedElement(11665); + addExpectedElement(11666); + addExpectedElement(11667); + addExpectedElement(11668); + addExpectedElement(11669); + addExpectedElement(11670); + addExpectedElement(11671); + addExpectedElement(11672); + addExpectedElement(11673); + addExpectedElement(11674); + addExpectedElement(11675); + addExpectedElement(11676); + addExpectedElement(11677); + addExpectedElement(11678); + addExpectedElement(11679); + addExpectedElement(11680); + addExpectedElement(11681); + addExpectedElement(11682); + addExpectedElement(11683); + addExpectedElement(11684); + addExpectedElement(11685); + addExpectedElement(11686); + addExpectedElement(11687); + addExpectedElement(11688); + addExpectedElement(11689); + addExpectedElement(11690); + addExpectedElement(11691); + addExpectedElement(11692); + addExpectedElement(11693); + addExpectedElement(11694); + addExpectedElement(11695); + addExpectedElement(11696); + addExpectedElement(11697); + addExpectedElement(11698); + addExpectedElement(11699); + addExpectedElement(11700); + addExpectedElement(11701); + addExpectedElement(11702); + addExpectedElement(11703); + addExpectedElement(11704); + addExpectedElement(11705); + addExpectedElement(11706); + addExpectedElement(11707); + addExpectedElement(11708); + addExpectedElement(11709); + addExpectedElement(11710); + addExpectedElement(11711); + addExpectedElement(11712); + addExpectedElement(11713); + addExpectedElement(11714); + addExpectedElement(11715); + addExpectedElement(11716); + addExpectedElement(11717); + } + + // Java.g:23419:2: ( (a5= 'finally' (a6_0= parse_org_emftext_language_java_statements_Block ) ) )? + int alt185=2; + int LA185_0 = input.LA(1); + + if ( (LA185_0==73) ) { + alt185=1; + } + switch (alt185) { + case 1 : + // Java.g:23420:3: (a5= 'finally' (a6_0= parse_org_emftext_language_java_statements_Block ) ) + { + // Java.g:23420:3: (a5= 'finally' (a6_0= parse_org_emftext_language_java_statements_Block ) ) + // Java.g:23421:4: a5= 'finally' (a6_0= parse_org_emftext_language_java_statements_Block ) + { + a5=(Token)match(input,73,FOLLOW_73_in_parse_org_emftext_language_java_statements_TryBlock16774); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createTryBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_60_0_0_7_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a5, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11718); + addExpectedElement(11719); + addExpectedElement(11720); + addExpectedElement(11721); + addExpectedElement(11722); + addExpectedElement(11723); + addExpectedElement(11724); + addExpectedElement(11725); + addExpectedElement(11726); + addExpectedElement(11727); + addExpectedElement(11728); + addExpectedElement(11729); + } + + // Java.g:23446:4: (a6_0= parse_org_emftext_language_java_statements_Block ) + // Java.g:23447:5: a6_0= parse_org_emftext_language_java_statements_Block + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Block_in_parse_org_emftext_language_java_statements_TryBlock16800); + a6_0=parse_org_emftext_language_java_statements_Block(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createTryBlock(); + startIncompleteElement(element); + } + if (a6_0 != null) { + if (a6_0 != null) { + Object value = a6_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.TRY_BLOCK__FINALLY_BLOCK), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_60_0_0_7_0_0_1, a6_0, true); + copyLocalizationInfos(a6_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11730); + addExpectedElement(11731); + addExpectedElement(11732); + addExpectedElement(11733); + addExpectedElement(11734); + addExpectedElement(11735); + addExpectedElement(11736); + addExpectedElement(11737); + addExpectedElement(11738); + addExpectedElement(11739); + addExpectedElement(11740); + addExpectedElement(11741); + addExpectedElement(11742); + addExpectedElement(11743); + addExpectedElement(11744); + addExpectedElement(11745); + addExpectedElement(11746); + addExpectedElement(11747); + addExpectedElement(11748); + addExpectedElement(11749); + addExpectedElement(11750); + addExpectedElement(11751); + addExpectedElement(11752); + addExpectedElement(11753); + addExpectedElement(11754); + addExpectedElement(11755); + addExpectedElement(11756); + addExpectedElement(11757); + addExpectedElement(11758); + addExpectedElement(11759); + addExpectedElement(11760); + addExpectedElement(11761); + addExpectedElement(11762); + addExpectedElement(11763); + addExpectedElement(11764); + addExpectedElement(11765); + addExpectedElement(11766); + addExpectedElement(11767); + addExpectedElement(11768); + addExpectedElement(11769); + addExpectedElement(11770); + addExpectedElement(11771); + addExpectedElement(11772); + addExpectedElement(11773); + addExpectedElement(11774); + addExpectedElement(11775); + addExpectedElement(11776); + addExpectedElement(11777); + addExpectedElement(11778); + addExpectedElement(11779); + addExpectedElement(11780); + addExpectedElement(11781); + addExpectedElement(11782); + addExpectedElement(11783); + addExpectedElement(11784); + addExpectedElement(11785); + addExpectedElement(11786); + addExpectedElement(11787); + addExpectedElement(11788); + addExpectedElement(11789); + addExpectedElement(11790); + addExpectedElement(11791); + addExpectedElement(11792); + addExpectedElement(11793); + addExpectedElement(11794); + addExpectedElement(11795); + addExpectedElement(11796); + addExpectedElement(11797); + addExpectedElement(11798); + addExpectedElement(11799); + addExpectedElement(11800); + addExpectedElement(11801); + addExpectedElement(11802); + addExpectedElement(11803); + addExpectedElement(11804); + addExpectedElement(11805); + addExpectedElement(11806); + addExpectedElement(11807); + addExpectedElement(11808); + addExpectedElement(11809); + addExpectedElement(11810); + addExpectedElement(11811); + addExpectedElement(11812); + addExpectedElement(11813); + addExpectedElement(11814); + addExpectedElement(11815); + addExpectedElement(11816); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11817); + addExpectedElement(11818); + addExpectedElement(11819); + addExpectedElement(11820); + addExpectedElement(11821); + addExpectedElement(11822); + addExpectedElement(11823); + addExpectedElement(11824); + addExpectedElement(11825); + addExpectedElement(11826); + addExpectedElement(11827); + addExpectedElement(11828); + addExpectedElement(11829); + addExpectedElement(11830); + addExpectedElement(11831); + addExpectedElement(11832); + addExpectedElement(11833); + addExpectedElement(11834); + addExpectedElement(11835); + addExpectedElement(11836); + addExpectedElement(11837); + addExpectedElement(11838); + addExpectedElement(11839); + addExpectedElement(11840); + addExpectedElement(11841); + addExpectedElement(11842); + addExpectedElement(11843); + addExpectedElement(11844); + addExpectedElement(11845); + addExpectedElement(11846); + addExpectedElement(11847); + addExpectedElement(11848); + addExpectedElement(11849); + addExpectedElement(11850); + addExpectedElement(11851); + addExpectedElement(11852); + addExpectedElement(11853); + addExpectedElement(11854); + addExpectedElement(11855); + addExpectedElement(11856); + addExpectedElement(11857); + addExpectedElement(11858); + addExpectedElement(11859); + addExpectedElement(11860); + addExpectedElement(11861); + addExpectedElement(11862); + addExpectedElement(11863); + addExpectedElement(11864); + addExpectedElement(11865); + addExpectedElement(11866); + addExpectedElement(11867); + addExpectedElement(11868); + addExpectedElement(11869); + addExpectedElement(11870); + addExpectedElement(11871); + addExpectedElement(11872); + addExpectedElement(11873); + addExpectedElement(11874); + addExpectedElement(11875); + addExpectedElement(11876); + addExpectedElement(11877); + addExpectedElement(11878); + addExpectedElement(11879); + addExpectedElement(11880); + addExpectedElement(11881); + addExpectedElement(11882); + addExpectedElement(11883); + addExpectedElement(11884); + addExpectedElement(11885); + addExpectedElement(11886); + addExpectedElement(11887); + addExpectedElement(11888); + addExpectedElement(11889); + addExpectedElement(11890); + addExpectedElement(11891); + addExpectedElement(11892); + addExpectedElement(11893); + addExpectedElement(11894); + addExpectedElement(11895); + addExpectedElement(11896); + addExpectedElement(11897); + addExpectedElement(11898); + addExpectedElement(11899); + addExpectedElement(11900); + addExpectedElement(11901); + addExpectedElement(11902); + addExpectedElement(11903); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 62, parse_org_emftext_language_java_statements_TryBlock_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_TryBlock" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_CatchBlock" + // Java.g:23653:1: parse_org_emftext_language_java_statements_CatchBlock returns [org.emftext.language.java.statements.CatchBlock element = null] : a0= 'catch' a1= '(' (a2_0= parse_org_emftext_language_java_parameters_OrdinaryParameter ) a3= ')' a4= '{' ( ( (a5_0= parse_org_emftext_language_java_statements_Statement ) ) )* a6= '}' ; + public final org.emftext.language.java.statements.CatchBlock parse_org_emftext_language_java_statements_CatchBlock() throws RecognitionException { + org.emftext.language.java.statements.CatchBlock element = null; + + int parse_org_emftext_language_java_statements_CatchBlock_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a3=null; + Token a4=null; + Token a6=null; + org.emftext.language.java.parameters.OrdinaryParameter a2_0 =null; + + org.emftext.language.java.statements.Statement a5_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 63) ) { return element; } + + // Java.g:23656:2: (a0= 'catch' a1= '(' (a2_0= parse_org_emftext_language_java_parameters_OrdinaryParameter ) a3= ')' a4= '{' ( ( (a5_0= parse_org_emftext_language_java_statements_Statement ) ) )* a6= '}' ) + // Java.g:23657:2: a0= 'catch' a1= '(' (a2_0= parse_org_emftext_language_java_parameters_OrdinaryParameter ) a3= ')' a4= '{' ( ( (a5_0= parse_org_emftext_language_java_statements_Statement ) ) )* a6= '}' + { + a0=(Token)match(input,62,FOLLOW_62_in_parse_org_emftext_language_java_statements_CatchBlock16856); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createCatchBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_61_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11904); + } + + a1=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_statements_CatchBlock16870); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createCatchBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_61_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11905); + addExpectedElement(11906); + addExpectedElement(11907); + addExpectedElement(11908); + addExpectedElement(11909); + addExpectedElement(11910); + addExpectedElement(11911); + addExpectedElement(11912); + addExpectedElement(11913); + addExpectedElement(11914); + addExpectedElement(11915); + addExpectedElement(11916); + addExpectedElement(11917); + addExpectedElement(11918); + addExpectedElement(11919); + addExpectedElement(11920); + addExpectedElement(11921); + addExpectedElement(11922); + addExpectedElement(11923); + addExpectedElement(11924); + addExpectedElement(11925); + addExpectedElement(11926); + addExpectedElement(11927); + } + + // Java.g:23707:2: (a2_0= parse_org_emftext_language_java_parameters_OrdinaryParameter ) + // Java.g:23708:3: a2_0= parse_org_emftext_language_java_parameters_OrdinaryParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_OrdinaryParameter_in_parse_org_emftext_language_java_statements_CatchBlock16888); + a2_0=parse_org_emftext_language_java_parameters_OrdinaryParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createCatchBlock(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.CATCH_BLOCK__PARAMETER), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_61_0_0_3, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11928); + } + + a3=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_statements_CatchBlock16906); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createCatchBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_61_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11929); + } + + a4=(Token)match(input,105,FOLLOW_105_in_parse_org_emftext_language_java_statements_CatchBlock16920); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createCatchBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_61_0_0_6, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(11930); + addExpectedElement(11931); + addExpectedElement(11932); + addExpectedElement(11933); + addExpectedElement(11934); + addExpectedElement(11935); + addExpectedElement(11936); + addExpectedElement(11937); + addExpectedElement(11938); + addExpectedElement(11939); + addExpectedElement(11940); + addExpectedElement(11941); + addExpectedElement(11942); + addExpectedElement(11943); + addExpectedElement(11944); + addExpectedElement(11945); + addExpectedElement(11946); + addExpectedElement(11947); + addExpectedElement(11948); + addExpectedElement(11949); + addExpectedElement(11950); + addExpectedElement(11951); + addExpectedElement(11952); + addExpectedElement(11953); + addExpectedElement(11954); + addExpectedElement(11955); + addExpectedElement(11956); + addExpectedElement(11957); + addExpectedElement(11958); + addExpectedElement(11959); + addExpectedElement(11960); + addExpectedElement(11961); + addExpectedElement(11962); + addExpectedElement(11963); + addExpectedElement(11964); + addExpectedElement(11965); + addExpectedElement(11966); + addExpectedElement(11967); + addExpectedElement(11968); + addExpectedElement(11969); + addExpectedElement(11970); + addExpectedElement(11971); + addExpectedElement(11972); + addExpectedElement(11973); + addExpectedElement(11974); + addExpectedElement(11975); + addExpectedElement(11976); + addExpectedElement(11977); + addExpectedElement(11978); + addExpectedElement(11979); + addExpectedElement(11980); + addExpectedElement(11981); + addExpectedElement(11982); + addExpectedElement(11983); + addExpectedElement(11984); + addExpectedElement(11985); + addExpectedElement(11986); + addExpectedElement(11987); + addExpectedElement(11988); + addExpectedElement(11989); + addExpectedElement(11990); + addExpectedElement(11991); + addExpectedElement(11992); + addExpectedElement(11993); + addExpectedElement(11994); + addExpectedElement(11995); + addExpectedElement(11996); + addExpectedElement(11997); + addExpectedElement(11998); + addExpectedElement(11999); + addExpectedElement(12000); + addExpectedElement(12001); + addExpectedElement(12002); + addExpectedElement(12003); + addExpectedElement(12004); + addExpectedElement(12005); + addExpectedElement(12006); + } + + // Java.g:23837:2: ( ( (a5_0= parse_org_emftext_language_java_statements_Statement ) ) )* + loop186: + do { + int alt186=2; + int LA186_0 = input.LA(1); + + if ( ((LA186_0 >= BOOLEAN_LITERAL && LA186_0 <= IDENTIFIER)||(LA186_0 >= OCTAL_INTEGER_LITERAL && LA186_0 <= OCTAL_LONG_LITERAL)||LA186_0==STRING_LITERAL||LA186_0==21||LA186_0==26||(LA186_0 >= 30 && LA186_0 <= 31)||(LA186_0 >= 34 && LA186_0 <= 35)||(LA186_0 >= 42 && LA186_0 <= 43)||LA186_0==48||(LA186_0 >= 56 && LA186_0 <= 60)||(LA186_0 >= 63 && LA186_0 <= 65)||(LA186_0 >= 67 && LA186_0 <= 68)||LA186_0==70||LA186_0==72||(LA186_0 >= 74 && LA186_0 <= 76)||(LA186_0 >= 80 && LA186_0 <= 85)||(LA186_0 >= 87 && LA186_0 <= 98)||(LA186_0 >= 100 && LA186_0 <= 105)||LA186_0==110) ) { + alt186=1; + } + + + switch (alt186) { + case 1 : + // Java.g:23838:3: ( (a5_0= parse_org_emftext_language_java_statements_Statement ) ) + { + // Java.g:23838:3: ( (a5_0= parse_org_emftext_language_java_statements_Statement ) ) + // Java.g:23839:4: (a5_0= parse_org_emftext_language_java_statements_Statement ) + { + // Java.g:23839:4: (a5_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:23840:5: a5_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_CatchBlock16949); + a5_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createCatchBlock(); + startIncompleteElement(element); + } + if (a5_0 != null) { + if (a5_0 != null) { + Object value = a5_0; + addObjectToList(element, org.emftext.language.java.statements.StatementsPackage.CATCH_BLOCK__STATEMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_61_0_0_7_0_0_1, a5_0, true); + copyLocalizationInfos(a5_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12007); + addExpectedElement(12008); + addExpectedElement(12009); + addExpectedElement(12010); + addExpectedElement(12011); + addExpectedElement(12012); + addExpectedElement(12013); + addExpectedElement(12014); + addExpectedElement(12015); + addExpectedElement(12016); + addExpectedElement(12017); + addExpectedElement(12018); + addExpectedElement(12019); + addExpectedElement(12020); + addExpectedElement(12021); + addExpectedElement(12022); + addExpectedElement(12023); + addExpectedElement(12024); + addExpectedElement(12025); + addExpectedElement(12026); + addExpectedElement(12027); + addExpectedElement(12028); + addExpectedElement(12029); + addExpectedElement(12030); + addExpectedElement(12031); + addExpectedElement(12032); + addExpectedElement(12033); + addExpectedElement(12034); + addExpectedElement(12035); + addExpectedElement(12036); + addExpectedElement(12037); + addExpectedElement(12038); + addExpectedElement(12039); + addExpectedElement(12040); + addExpectedElement(12041); + addExpectedElement(12042); + addExpectedElement(12043); + addExpectedElement(12044); + addExpectedElement(12045); + addExpectedElement(12046); + addExpectedElement(12047); + addExpectedElement(12048); + addExpectedElement(12049); + addExpectedElement(12050); + addExpectedElement(12051); + addExpectedElement(12052); + addExpectedElement(12053); + addExpectedElement(12054); + addExpectedElement(12055); + addExpectedElement(12056); + addExpectedElement(12057); + addExpectedElement(12058); + addExpectedElement(12059); + addExpectedElement(12060); + addExpectedElement(12061); + addExpectedElement(12062); + addExpectedElement(12063); + addExpectedElement(12064); + addExpectedElement(12065); + addExpectedElement(12066); + addExpectedElement(12067); + addExpectedElement(12068); + addExpectedElement(12069); + addExpectedElement(12070); + addExpectedElement(12071); + addExpectedElement(12072); + addExpectedElement(12073); + addExpectedElement(12074); + addExpectedElement(12075); + addExpectedElement(12076); + addExpectedElement(12077); + addExpectedElement(12078); + addExpectedElement(12079); + addExpectedElement(12080); + addExpectedElement(12081); + addExpectedElement(12082); + addExpectedElement(12083); + } + + } + + + } + break; + + default : + break loop186; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12084); + addExpectedElement(12085); + addExpectedElement(12086); + addExpectedElement(12087); + addExpectedElement(12088); + addExpectedElement(12089); + addExpectedElement(12090); + addExpectedElement(12091); + addExpectedElement(12092); + addExpectedElement(12093); + addExpectedElement(12094); + addExpectedElement(12095); + addExpectedElement(12096); + addExpectedElement(12097); + addExpectedElement(12098); + addExpectedElement(12099); + addExpectedElement(12100); + addExpectedElement(12101); + addExpectedElement(12102); + addExpectedElement(12103); + addExpectedElement(12104); + addExpectedElement(12105); + addExpectedElement(12106); + addExpectedElement(12107); + addExpectedElement(12108); + addExpectedElement(12109); + addExpectedElement(12110); + addExpectedElement(12111); + addExpectedElement(12112); + addExpectedElement(12113); + addExpectedElement(12114); + addExpectedElement(12115); + addExpectedElement(12116); + addExpectedElement(12117); + addExpectedElement(12118); + addExpectedElement(12119); + addExpectedElement(12120); + addExpectedElement(12121); + addExpectedElement(12122); + addExpectedElement(12123); + addExpectedElement(12124); + addExpectedElement(12125); + addExpectedElement(12126); + addExpectedElement(12127); + addExpectedElement(12128); + addExpectedElement(12129); + addExpectedElement(12130); + addExpectedElement(12131); + addExpectedElement(12132); + addExpectedElement(12133); + addExpectedElement(12134); + addExpectedElement(12135); + addExpectedElement(12136); + addExpectedElement(12137); + addExpectedElement(12138); + addExpectedElement(12139); + addExpectedElement(12140); + addExpectedElement(12141); + addExpectedElement(12142); + addExpectedElement(12143); + addExpectedElement(12144); + addExpectedElement(12145); + addExpectedElement(12146); + addExpectedElement(12147); + addExpectedElement(12148); + addExpectedElement(12149); + addExpectedElement(12150); + addExpectedElement(12151); + addExpectedElement(12152); + addExpectedElement(12153); + addExpectedElement(12154); + addExpectedElement(12155); + addExpectedElement(12156); + addExpectedElement(12157); + addExpectedElement(12158); + addExpectedElement(12159); + addExpectedElement(12160); + } + + a6=(Token)match(input,109,FOLLOW_109_in_parse_org_emftext_language_java_statements_CatchBlock16990); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createCatchBlock(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_61_0_0_9, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a6, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12161); + addExpectedElement(12162); + addExpectedElement(12163); + addExpectedElement(12164); + addExpectedElement(12165); + addExpectedElement(12166); + addExpectedElement(12167); + addExpectedElement(12168); + addExpectedElement(12169); + addExpectedElement(12170); + addExpectedElement(12171); + addExpectedElement(12172); + addExpectedElement(12173); + addExpectedElement(12174); + addExpectedElement(12175); + addExpectedElement(12176); + addExpectedElement(12177); + addExpectedElement(12178); + addExpectedElement(12179); + addExpectedElement(12180); + addExpectedElement(12181); + addExpectedElement(12182); + addExpectedElement(12183); + addExpectedElement(12184); + addExpectedElement(12185); + addExpectedElement(12186); + addExpectedElement(12187); + addExpectedElement(12188); + addExpectedElement(12189); + addExpectedElement(12190); + addExpectedElement(12191); + addExpectedElement(12192); + addExpectedElement(12193); + addExpectedElement(12194); + addExpectedElement(12195); + addExpectedElement(12196); + addExpectedElement(12197); + addExpectedElement(12198); + addExpectedElement(12199); + addExpectedElement(12200); + addExpectedElement(12201); + addExpectedElement(12202); + addExpectedElement(12203); + addExpectedElement(12204); + addExpectedElement(12205); + addExpectedElement(12206); + addExpectedElement(12207); + addExpectedElement(12208); + addExpectedElement(12209); + addExpectedElement(12210); + addExpectedElement(12211); + addExpectedElement(12212); + addExpectedElement(12213); + addExpectedElement(12214); + addExpectedElement(12215); + addExpectedElement(12216); + addExpectedElement(12217); + addExpectedElement(12218); + addExpectedElement(12219); + addExpectedElement(12220); + addExpectedElement(12221); + addExpectedElement(12222); + addExpectedElement(12223); + addExpectedElement(12224); + addExpectedElement(12225); + addExpectedElement(12226); + addExpectedElement(12227); + addExpectedElement(12228); + addExpectedElement(12229); + addExpectedElement(12230); + addExpectedElement(12231); + addExpectedElement(12232); + addExpectedElement(12233); + addExpectedElement(12234); + addExpectedElement(12235); + addExpectedElement(12236); + addExpectedElement(12237); + addExpectedElement(12238); + addExpectedElement(12239); + addExpectedElement(12240); + addExpectedElement(12241); + addExpectedElement(12242); + addExpectedElement(12243); + addExpectedElement(12244); + addExpectedElement(12245); + addExpectedElement(12246); + addExpectedElement(12247); + addExpectedElement(12248); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 63, parse_org_emftext_language_java_statements_CatchBlock_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_CatchBlock" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_Switch" + // Java.g:24127:1: parse_org_emftext_language_java_statements_Switch returns [org.emftext.language.java.statements.Switch element = null] : a0= 'switch' a1= '(' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ')' a4= '{' ( ( (a5_0= parse_org_emftext_language_java_statements_SwitchCase ) )* ) a6= '}' ; + public final org.emftext.language.java.statements.Switch parse_org_emftext_language_java_statements_Switch() throws RecognitionException { + org.emftext.language.java.statements.Switch element = null; + + int parse_org_emftext_language_java_statements_Switch_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a3=null; + Token a4=null; + Token a6=null; + org.emftext.language.java.expressions.AssignmentExpression a2_0 =null; + + org.emftext.language.java.statements.SwitchCase a5_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 64) ) { return element; } + + // Java.g:24130:2: (a0= 'switch' a1= '(' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ')' a4= '{' ( ( (a5_0= parse_org_emftext_language_java_statements_SwitchCase ) )* ) a6= '}' ) + // Java.g:24131:2: a0= 'switch' a1= '(' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ')' a4= '{' ( ( (a5_0= parse_org_emftext_language_java_statements_SwitchCase ) )* ) a6= '}' + { + a0=(Token)match(input,95,FOLLOW_95_in_parse_org_emftext_language_java_statements_Switch17019); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createSwitch(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_62_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12249); + } + + a1=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_statements_Switch17033); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createSwitch(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_62_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12250); + addExpectedElement(12251); + addExpectedElement(12252); + addExpectedElement(12253); + addExpectedElement(12254); + addExpectedElement(12255); + addExpectedElement(12256); + addExpectedElement(12257); + addExpectedElement(12258); + addExpectedElement(12259); + addExpectedElement(12260); + addExpectedElement(12261); + addExpectedElement(12262); + addExpectedElement(12263); + addExpectedElement(12264); + addExpectedElement(12265); + addExpectedElement(12266); + addExpectedElement(12267); + addExpectedElement(12268); + addExpectedElement(12269); + addExpectedElement(12270); + addExpectedElement(12271); + addExpectedElement(12272); + addExpectedElement(12273); + addExpectedElement(12274); + addExpectedElement(12275); + addExpectedElement(12276); + addExpectedElement(12277); + addExpectedElement(12278); + addExpectedElement(12279); + addExpectedElement(12280); + addExpectedElement(12281); + addExpectedElement(12282); + addExpectedElement(12283); + addExpectedElement(12284); + addExpectedElement(12285); + addExpectedElement(12286); + addExpectedElement(12287); + addExpectedElement(12288); + addExpectedElement(12289); + addExpectedElement(12290); + addExpectedElement(12291); + addExpectedElement(12292); + } + + // Java.g:24201:2: (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:24202:3: a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_Switch17051); + a2_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createSwitch(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.SWITCH__VARIABLE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_62_0_0_3, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12293); + } + + a3=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_statements_Switch17069); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createSwitch(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_62_0_0_4, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12294); + } + + a4=(Token)match(input,105,FOLLOW_105_in_parse_org_emftext_language_java_statements_Switch17083); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createSwitch(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_62_0_0_6, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12295); + addExpectedElement(12296); + addExpectedElement(12297); + } + + // Java.g:24257:2: ( ( (a5_0= parse_org_emftext_language_java_statements_SwitchCase ) )* ) + // Java.g:24258:3: ( (a5_0= parse_org_emftext_language_java_statements_SwitchCase ) )* + { + // Java.g:24258:3: ( (a5_0= parse_org_emftext_language_java_statements_SwitchCase ) )* + loop187: + do { + int alt187=2; + int LA187_0 = input.LA(1); + + if ( (LA187_0==61||LA187_0==66) ) { + alt187=1; + } + + + switch (alt187) { + case 1 : + // Java.g:24259:4: (a5_0= parse_org_emftext_language_java_statements_SwitchCase ) + { + // Java.g:24259:4: (a5_0= parse_org_emftext_language_java_statements_SwitchCase ) + // Java.g:24260:5: a5_0= parse_org_emftext_language_java_statements_SwitchCase + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_SwitchCase_in_parse_org_emftext_language_java_statements_Switch17112); + a5_0=parse_org_emftext_language_java_statements_SwitchCase(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createSwitch(); + startIncompleteElement(element); + } + if (a5_0 != null) { + if (a5_0 != null) { + Object value = a5_0; + addObjectToList(element, org.emftext.language.java.statements.StatementsPackage.SWITCH__CASES, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_62_0_0_7_0_0_0, a5_0, true); + copyLocalizationInfos(a5_0, element); + } + } + + } + + + } + break; + + default : + break loop187; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12298); + addExpectedElement(12299); + addExpectedElement(12300); + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12301); + } + + a6=(Token)match(input,109,FOLLOW_109_in_parse_org_emftext_language_java_statements_Switch17152); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createSwitch(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_62_0_0_8, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a6, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12302); + addExpectedElement(12303); + addExpectedElement(12304); + addExpectedElement(12305); + addExpectedElement(12306); + addExpectedElement(12307); + addExpectedElement(12308); + addExpectedElement(12309); + addExpectedElement(12310); + addExpectedElement(12311); + addExpectedElement(12312); + addExpectedElement(12313); + addExpectedElement(12314); + addExpectedElement(12315); + addExpectedElement(12316); + addExpectedElement(12317); + addExpectedElement(12318); + addExpectedElement(12319); + addExpectedElement(12320); + addExpectedElement(12321); + addExpectedElement(12322); + addExpectedElement(12323); + addExpectedElement(12324); + addExpectedElement(12325); + addExpectedElement(12326); + addExpectedElement(12327); + addExpectedElement(12328); + addExpectedElement(12329); + addExpectedElement(12330); + addExpectedElement(12331); + addExpectedElement(12332); + addExpectedElement(12333); + addExpectedElement(12334); + addExpectedElement(12335); + addExpectedElement(12336); + addExpectedElement(12337); + addExpectedElement(12338); + addExpectedElement(12339); + addExpectedElement(12340); + addExpectedElement(12341); + addExpectedElement(12342); + addExpectedElement(12343); + addExpectedElement(12344); + addExpectedElement(12345); + addExpectedElement(12346); + addExpectedElement(12347); + addExpectedElement(12348); + addExpectedElement(12349); + addExpectedElement(12350); + addExpectedElement(12351); + addExpectedElement(12352); + addExpectedElement(12353); + addExpectedElement(12354); + addExpectedElement(12355); + addExpectedElement(12356); + addExpectedElement(12357); + addExpectedElement(12358); + addExpectedElement(12359); + addExpectedElement(12360); + addExpectedElement(12361); + addExpectedElement(12362); + addExpectedElement(12363); + addExpectedElement(12364); + addExpectedElement(12365); + addExpectedElement(12366); + addExpectedElement(12367); + addExpectedElement(12368); + addExpectedElement(12369); + addExpectedElement(12370); + addExpectedElement(12371); + addExpectedElement(12372); + addExpectedElement(12373); + addExpectedElement(12374); + addExpectedElement(12375); + addExpectedElement(12376); + addExpectedElement(12377); + addExpectedElement(12378); + addExpectedElement(12379); + addExpectedElement(12380); + addExpectedElement(12381); + addExpectedElement(12382); + addExpectedElement(12383); + addExpectedElement(12384); + addExpectedElement(12385); + addExpectedElement(12386); + addExpectedElement(12387); + addExpectedElement(12388); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 64, parse_org_emftext_language_java_statements_Switch_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_Switch" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_NormalSwitchCase" + // Java.g:24396:1: parse_org_emftext_language_java_statements_NormalSwitchCase returns [org.emftext.language.java.statements.NormalSwitchCase element = null] : a0= 'case' (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a2= ':' ( ( (a3_0= parse_org_emftext_language_java_statements_Statement ) ) )* ; + public final org.emftext.language.java.statements.NormalSwitchCase parse_org_emftext_language_java_statements_NormalSwitchCase() throws RecognitionException { + org.emftext.language.java.statements.NormalSwitchCase element = null; + + int parse_org_emftext_language_java_statements_NormalSwitchCase_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + org.emftext.language.java.expressions.AssignmentExpression a1_0 =null; + + org.emftext.language.java.statements.Statement a3_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 65) ) { return element; } + + // Java.g:24399:2: (a0= 'case' (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a2= ':' ( ( (a3_0= parse_org_emftext_language_java_statements_Statement ) ) )* ) + // Java.g:24400:2: a0= 'case' (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a2= ':' ( ( (a3_0= parse_org_emftext_language_java_statements_Statement ) ) )* + { + a0=(Token)match(input,61,FOLLOW_61_in_parse_org_emftext_language_java_statements_NormalSwitchCase17181); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createNormalSwitchCase(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_63_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12389); + addExpectedElement(12390); + addExpectedElement(12391); + addExpectedElement(12392); + addExpectedElement(12393); + addExpectedElement(12394); + addExpectedElement(12395); + addExpectedElement(12396); + addExpectedElement(12397); + addExpectedElement(12398); + addExpectedElement(12399); + addExpectedElement(12400); + addExpectedElement(12401); + addExpectedElement(12402); + addExpectedElement(12403); + addExpectedElement(12404); + addExpectedElement(12405); + addExpectedElement(12406); + addExpectedElement(12407); + addExpectedElement(12408); + addExpectedElement(12409); + addExpectedElement(12410); + addExpectedElement(12411); + addExpectedElement(12412); + addExpectedElement(12413); + addExpectedElement(12414); + addExpectedElement(12415); + addExpectedElement(12416); + addExpectedElement(12417); + addExpectedElement(12418); + addExpectedElement(12419); + addExpectedElement(12420); + addExpectedElement(12421); + addExpectedElement(12422); + addExpectedElement(12423); + addExpectedElement(12424); + addExpectedElement(12425); + addExpectedElement(12426); + addExpectedElement(12427); + addExpectedElement(12428); + addExpectedElement(12429); + addExpectedElement(12430); + addExpectedElement(12431); + } + + // Java.g:24456:2: (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:24457:3: a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_NormalSwitchCase17199); + a1_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createNormalSwitchCase(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.NORMAL_SWITCH_CASE__CONDITION), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_63_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12432); + } + + a2=(Token)match(input,41,FOLLOW_41_in_parse_org_emftext_language_java_statements_NormalSwitchCase17217); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createNormalSwitchCase(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_63_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12433); + addExpectedElement(12434); + addExpectedElement(12435); + addExpectedElement(12436); + addExpectedElement(12437); + addExpectedElement(12438); + addExpectedElement(12439); + addExpectedElement(12440); + addExpectedElement(12441); + addExpectedElement(12442); + addExpectedElement(12443); + addExpectedElement(12444); + addExpectedElement(12445); + addExpectedElement(12446); + addExpectedElement(12447); + addExpectedElement(12448); + addExpectedElement(12449); + addExpectedElement(12450); + addExpectedElement(12451); + addExpectedElement(12452); + addExpectedElement(12453); + addExpectedElement(12454); + addExpectedElement(12455); + addExpectedElement(12456); + addExpectedElement(12457); + addExpectedElement(12458); + addExpectedElement(12459); + addExpectedElement(12460); + addExpectedElement(12461); + addExpectedElement(12462); + addExpectedElement(12463); + addExpectedElement(12464); + addExpectedElement(12465); + addExpectedElement(12466); + addExpectedElement(12467); + addExpectedElement(12468); + addExpectedElement(12469); + addExpectedElement(12470); + addExpectedElement(12471); + addExpectedElement(12472); + addExpectedElement(12473); + addExpectedElement(12474); + addExpectedElement(12475); + addExpectedElement(12476); + addExpectedElement(12477); + addExpectedElement(12478); + addExpectedElement(12479); + addExpectedElement(12480); + addExpectedElement(12481); + addExpectedElement(12482); + addExpectedElement(12483); + addExpectedElement(12484); + addExpectedElement(12485); + addExpectedElement(12486); + addExpectedElement(12487); + addExpectedElement(12488); + addExpectedElement(12489); + addExpectedElement(12490); + addExpectedElement(12491); + addExpectedElement(12492); + addExpectedElement(12493); + addExpectedElement(12494); + addExpectedElement(12495); + addExpectedElement(12496); + addExpectedElement(12497); + addExpectedElement(12498); + addExpectedElement(12499); + addExpectedElement(12500); + addExpectedElement(12501); + addExpectedElement(12502); + addExpectedElement(12503); + addExpectedElement(12504); + addExpectedElement(12505); + addExpectedElement(12506); + addExpectedElement(12507); + addExpectedElement(12508); + addExpectedElement(12509); + addExpectedElement(12510); + addExpectedElement(12511); + } + + // Java.g:24574:2: ( ( (a3_0= parse_org_emftext_language_java_statements_Statement ) ) )* + loop188: + do { + int alt188=2; + int LA188_0 = input.LA(1); + + if ( ((LA188_0 >= BOOLEAN_LITERAL && LA188_0 <= IDENTIFIER)||(LA188_0 >= OCTAL_INTEGER_LITERAL && LA188_0 <= OCTAL_LONG_LITERAL)||LA188_0==STRING_LITERAL||LA188_0==21||LA188_0==26||(LA188_0 >= 30 && LA188_0 <= 31)||(LA188_0 >= 34 && LA188_0 <= 35)||(LA188_0 >= 42 && LA188_0 <= 43)||LA188_0==48||(LA188_0 >= 56 && LA188_0 <= 60)||(LA188_0 >= 63 && LA188_0 <= 65)||(LA188_0 >= 67 && LA188_0 <= 68)||LA188_0==70||LA188_0==72||(LA188_0 >= 74 && LA188_0 <= 76)||(LA188_0 >= 80 && LA188_0 <= 85)||(LA188_0 >= 87 && LA188_0 <= 98)||(LA188_0 >= 100 && LA188_0 <= 105)||LA188_0==110) ) { + alt188=1; + } + + + switch (alt188) { + case 1 : + // Java.g:24575:3: ( (a3_0= parse_org_emftext_language_java_statements_Statement ) ) + { + // Java.g:24575:3: ( (a3_0= parse_org_emftext_language_java_statements_Statement ) ) + // Java.g:24576:4: (a3_0= parse_org_emftext_language_java_statements_Statement ) + { + // Java.g:24576:4: (a3_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:24577:5: a3_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_NormalSwitchCase17246); + a3_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createNormalSwitchCase(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + addObjectToList(element, org.emftext.language.java.statements.StatementsPackage.NORMAL_SWITCH_CASE__STATEMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_63_0_0_3_0_0_1, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12512); + addExpectedElement(12513); + addExpectedElement(12514); + addExpectedElement(12515); + addExpectedElement(12516); + addExpectedElement(12517); + addExpectedElement(12518); + addExpectedElement(12519); + addExpectedElement(12520); + addExpectedElement(12521); + addExpectedElement(12522); + addExpectedElement(12523); + addExpectedElement(12524); + addExpectedElement(12525); + addExpectedElement(12526); + addExpectedElement(12527); + addExpectedElement(12528); + addExpectedElement(12529); + addExpectedElement(12530); + addExpectedElement(12531); + addExpectedElement(12532); + addExpectedElement(12533); + addExpectedElement(12534); + addExpectedElement(12535); + addExpectedElement(12536); + addExpectedElement(12537); + addExpectedElement(12538); + addExpectedElement(12539); + addExpectedElement(12540); + addExpectedElement(12541); + addExpectedElement(12542); + addExpectedElement(12543); + addExpectedElement(12544); + addExpectedElement(12545); + addExpectedElement(12546); + addExpectedElement(12547); + addExpectedElement(12548); + addExpectedElement(12549); + addExpectedElement(12550); + addExpectedElement(12551); + addExpectedElement(12552); + addExpectedElement(12553); + addExpectedElement(12554); + addExpectedElement(12555); + addExpectedElement(12556); + addExpectedElement(12557); + addExpectedElement(12558); + addExpectedElement(12559); + addExpectedElement(12560); + addExpectedElement(12561); + addExpectedElement(12562); + addExpectedElement(12563); + addExpectedElement(12564); + addExpectedElement(12565); + addExpectedElement(12566); + addExpectedElement(12567); + addExpectedElement(12568); + addExpectedElement(12569); + addExpectedElement(12570); + addExpectedElement(12571); + addExpectedElement(12572); + addExpectedElement(12573); + addExpectedElement(12574); + addExpectedElement(12575); + addExpectedElement(12576); + addExpectedElement(12577); + addExpectedElement(12578); + addExpectedElement(12579); + addExpectedElement(12580); + addExpectedElement(12581); + addExpectedElement(12582); + addExpectedElement(12583); + addExpectedElement(12584); + addExpectedElement(12585); + addExpectedElement(12586); + addExpectedElement(12587); + addExpectedElement(12588); + addExpectedElement(12589); + addExpectedElement(12590); + } + + } + + + } + break; + + default : + break loop188; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12591); + addExpectedElement(12592); + addExpectedElement(12593); + addExpectedElement(12594); + addExpectedElement(12595); + addExpectedElement(12596); + addExpectedElement(12597); + addExpectedElement(12598); + addExpectedElement(12599); + addExpectedElement(12600); + addExpectedElement(12601); + addExpectedElement(12602); + addExpectedElement(12603); + addExpectedElement(12604); + addExpectedElement(12605); + addExpectedElement(12606); + addExpectedElement(12607); + addExpectedElement(12608); + addExpectedElement(12609); + addExpectedElement(12610); + addExpectedElement(12611); + addExpectedElement(12612); + addExpectedElement(12613); + addExpectedElement(12614); + addExpectedElement(12615); + addExpectedElement(12616); + addExpectedElement(12617); + addExpectedElement(12618); + addExpectedElement(12619); + addExpectedElement(12620); + addExpectedElement(12621); + addExpectedElement(12622); + addExpectedElement(12623); + addExpectedElement(12624); + addExpectedElement(12625); + addExpectedElement(12626); + addExpectedElement(12627); + addExpectedElement(12628); + addExpectedElement(12629); + addExpectedElement(12630); + addExpectedElement(12631); + addExpectedElement(12632); + addExpectedElement(12633); + addExpectedElement(12634); + addExpectedElement(12635); + addExpectedElement(12636); + addExpectedElement(12637); + addExpectedElement(12638); + addExpectedElement(12639); + addExpectedElement(12640); + addExpectedElement(12641); + addExpectedElement(12642); + addExpectedElement(12643); + addExpectedElement(12644); + addExpectedElement(12645); + addExpectedElement(12646); + addExpectedElement(12647); + addExpectedElement(12648); + addExpectedElement(12649); + addExpectedElement(12650); + addExpectedElement(12651); + addExpectedElement(12652); + addExpectedElement(12653); + addExpectedElement(12654); + addExpectedElement(12655); + addExpectedElement(12656); + addExpectedElement(12657); + addExpectedElement(12658); + addExpectedElement(12659); + addExpectedElement(12660); + addExpectedElement(12661); + addExpectedElement(12662); + addExpectedElement(12663); + addExpectedElement(12664); + addExpectedElement(12665); + addExpectedElement(12666); + addExpectedElement(12667); + addExpectedElement(12668); + addExpectedElement(12669); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 65, parse_org_emftext_language_java_statements_NormalSwitchCase_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_NormalSwitchCase" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_DefaultSwitchCase" + // Java.g:24767:1: parse_org_emftext_language_java_statements_DefaultSwitchCase returns [org.emftext.language.java.statements.DefaultSwitchCase element = null] : a0= 'default' a1= ':' ( ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) )* ; + public final org.emftext.language.java.statements.DefaultSwitchCase parse_org_emftext_language_java_statements_DefaultSwitchCase() throws RecognitionException { + org.emftext.language.java.statements.DefaultSwitchCase element = null; + + int parse_org_emftext_language_java_statements_DefaultSwitchCase_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + org.emftext.language.java.statements.Statement a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 66) ) { return element; } + + // Java.g:24770:2: (a0= 'default' a1= ':' ( ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) )* ) + // Java.g:24771:2: a0= 'default' a1= ':' ( ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) )* + { + a0=(Token)match(input,66,FOLLOW_66_in_parse_org_emftext_language_java_statements_DefaultSwitchCase17302); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createDefaultSwitchCase(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_64_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12670); + } + + a1=(Token)match(input,41,FOLLOW_41_in_parse_org_emftext_language_java_statements_DefaultSwitchCase17316); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createDefaultSwitchCase(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_64_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12671); + addExpectedElement(12672); + addExpectedElement(12673); + addExpectedElement(12674); + addExpectedElement(12675); + addExpectedElement(12676); + addExpectedElement(12677); + addExpectedElement(12678); + addExpectedElement(12679); + addExpectedElement(12680); + addExpectedElement(12681); + addExpectedElement(12682); + addExpectedElement(12683); + addExpectedElement(12684); + addExpectedElement(12685); + addExpectedElement(12686); + addExpectedElement(12687); + addExpectedElement(12688); + addExpectedElement(12689); + addExpectedElement(12690); + addExpectedElement(12691); + addExpectedElement(12692); + addExpectedElement(12693); + addExpectedElement(12694); + addExpectedElement(12695); + addExpectedElement(12696); + addExpectedElement(12697); + addExpectedElement(12698); + addExpectedElement(12699); + addExpectedElement(12700); + addExpectedElement(12701); + addExpectedElement(12702); + addExpectedElement(12703); + addExpectedElement(12704); + addExpectedElement(12705); + addExpectedElement(12706); + addExpectedElement(12707); + addExpectedElement(12708); + addExpectedElement(12709); + addExpectedElement(12710); + addExpectedElement(12711); + addExpectedElement(12712); + addExpectedElement(12713); + addExpectedElement(12714); + addExpectedElement(12715); + addExpectedElement(12716); + addExpectedElement(12717); + addExpectedElement(12718); + addExpectedElement(12719); + addExpectedElement(12720); + addExpectedElement(12721); + addExpectedElement(12722); + addExpectedElement(12723); + addExpectedElement(12724); + addExpectedElement(12725); + addExpectedElement(12726); + addExpectedElement(12727); + addExpectedElement(12728); + addExpectedElement(12729); + addExpectedElement(12730); + addExpectedElement(12731); + addExpectedElement(12732); + addExpectedElement(12733); + addExpectedElement(12734); + addExpectedElement(12735); + addExpectedElement(12736); + addExpectedElement(12737); + addExpectedElement(12738); + addExpectedElement(12739); + addExpectedElement(12740); + addExpectedElement(12741); + addExpectedElement(12742); + addExpectedElement(12743); + addExpectedElement(12744); + addExpectedElement(12745); + addExpectedElement(12746); + addExpectedElement(12747); + addExpectedElement(12748); + addExpectedElement(12749); + } + + // Java.g:24877:2: ( ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) )* + loop189: + do { + int alt189=2; + int LA189_0 = input.LA(1); + + if ( ((LA189_0 >= BOOLEAN_LITERAL && LA189_0 <= IDENTIFIER)||(LA189_0 >= OCTAL_INTEGER_LITERAL && LA189_0 <= OCTAL_LONG_LITERAL)||LA189_0==STRING_LITERAL||LA189_0==21||LA189_0==26||(LA189_0 >= 30 && LA189_0 <= 31)||(LA189_0 >= 34 && LA189_0 <= 35)||(LA189_0 >= 42 && LA189_0 <= 43)||LA189_0==48||(LA189_0 >= 56 && LA189_0 <= 60)||(LA189_0 >= 63 && LA189_0 <= 65)||(LA189_0 >= 67 && LA189_0 <= 68)||LA189_0==70||LA189_0==72||(LA189_0 >= 74 && LA189_0 <= 76)||(LA189_0 >= 80 && LA189_0 <= 85)||(LA189_0 >= 87 && LA189_0 <= 98)||(LA189_0 >= 100 && LA189_0 <= 105)||LA189_0==110) ) { + alt189=1; + } + + + switch (alt189) { + case 1 : + // Java.g:24878:3: ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) + { + // Java.g:24878:3: ( (a2_0= parse_org_emftext_language_java_statements_Statement ) ) + // Java.g:24879:4: (a2_0= parse_org_emftext_language_java_statements_Statement ) + { + // Java.g:24879:4: (a2_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:24880:5: a2_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_DefaultSwitchCase17345); + a2_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createDefaultSwitchCase(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.statements.StatementsPackage.DEFAULT_SWITCH_CASE__STATEMENTS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_64_0_0_2_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12750); + addExpectedElement(12751); + addExpectedElement(12752); + addExpectedElement(12753); + addExpectedElement(12754); + addExpectedElement(12755); + addExpectedElement(12756); + addExpectedElement(12757); + addExpectedElement(12758); + addExpectedElement(12759); + addExpectedElement(12760); + addExpectedElement(12761); + addExpectedElement(12762); + addExpectedElement(12763); + addExpectedElement(12764); + addExpectedElement(12765); + addExpectedElement(12766); + addExpectedElement(12767); + addExpectedElement(12768); + addExpectedElement(12769); + addExpectedElement(12770); + addExpectedElement(12771); + addExpectedElement(12772); + addExpectedElement(12773); + addExpectedElement(12774); + addExpectedElement(12775); + addExpectedElement(12776); + addExpectedElement(12777); + addExpectedElement(12778); + addExpectedElement(12779); + addExpectedElement(12780); + addExpectedElement(12781); + addExpectedElement(12782); + addExpectedElement(12783); + addExpectedElement(12784); + addExpectedElement(12785); + addExpectedElement(12786); + addExpectedElement(12787); + addExpectedElement(12788); + addExpectedElement(12789); + addExpectedElement(12790); + addExpectedElement(12791); + addExpectedElement(12792); + addExpectedElement(12793); + addExpectedElement(12794); + addExpectedElement(12795); + addExpectedElement(12796); + addExpectedElement(12797); + addExpectedElement(12798); + addExpectedElement(12799); + addExpectedElement(12800); + addExpectedElement(12801); + addExpectedElement(12802); + addExpectedElement(12803); + addExpectedElement(12804); + addExpectedElement(12805); + addExpectedElement(12806); + addExpectedElement(12807); + addExpectedElement(12808); + addExpectedElement(12809); + addExpectedElement(12810); + addExpectedElement(12811); + addExpectedElement(12812); + addExpectedElement(12813); + addExpectedElement(12814); + addExpectedElement(12815); + addExpectedElement(12816); + addExpectedElement(12817); + addExpectedElement(12818); + addExpectedElement(12819); + addExpectedElement(12820); + addExpectedElement(12821); + addExpectedElement(12822); + addExpectedElement(12823); + addExpectedElement(12824); + addExpectedElement(12825); + addExpectedElement(12826); + addExpectedElement(12827); + addExpectedElement(12828); + } + + } + + + } + break; + + default : + break loop189; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12829); + addExpectedElement(12830); + addExpectedElement(12831); + addExpectedElement(12832); + addExpectedElement(12833); + addExpectedElement(12834); + addExpectedElement(12835); + addExpectedElement(12836); + addExpectedElement(12837); + addExpectedElement(12838); + addExpectedElement(12839); + addExpectedElement(12840); + addExpectedElement(12841); + addExpectedElement(12842); + addExpectedElement(12843); + addExpectedElement(12844); + addExpectedElement(12845); + addExpectedElement(12846); + addExpectedElement(12847); + addExpectedElement(12848); + addExpectedElement(12849); + addExpectedElement(12850); + addExpectedElement(12851); + addExpectedElement(12852); + addExpectedElement(12853); + addExpectedElement(12854); + addExpectedElement(12855); + addExpectedElement(12856); + addExpectedElement(12857); + addExpectedElement(12858); + addExpectedElement(12859); + addExpectedElement(12860); + addExpectedElement(12861); + addExpectedElement(12862); + addExpectedElement(12863); + addExpectedElement(12864); + addExpectedElement(12865); + addExpectedElement(12866); + addExpectedElement(12867); + addExpectedElement(12868); + addExpectedElement(12869); + addExpectedElement(12870); + addExpectedElement(12871); + addExpectedElement(12872); + addExpectedElement(12873); + addExpectedElement(12874); + addExpectedElement(12875); + addExpectedElement(12876); + addExpectedElement(12877); + addExpectedElement(12878); + addExpectedElement(12879); + addExpectedElement(12880); + addExpectedElement(12881); + addExpectedElement(12882); + addExpectedElement(12883); + addExpectedElement(12884); + addExpectedElement(12885); + addExpectedElement(12886); + addExpectedElement(12887); + addExpectedElement(12888); + addExpectedElement(12889); + addExpectedElement(12890); + addExpectedElement(12891); + addExpectedElement(12892); + addExpectedElement(12893); + addExpectedElement(12894); + addExpectedElement(12895); + addExpectedElement(12896); + addExpectedElement(12897); + addExpectedElement(12898); + addExpectedElement(12899); + addExpectedElement(12900); + addExpectedElement(12901); + addExpectedElement(12902); + addExpectedElement(12903); + addExpectedElement(12904); + addExpectedElement(12905); + addExpectedElement(12906); + addExpectedElement(12907); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 66, parse_org_emftext_language_java_statements_DefaultSwitchCase_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_DefaultSwitchCase" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_Return" + // Java.g:25070:1: parse_org_emftext_language_java_statements_Return returns [org.emftext.language.java.statements.Return element = null] : a0= 'return' ( (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) )? a2= ';' ; + public final org.emftext.language.java.statements.Return parse_org_emftext_language_java_statements_Return() throws RecognitionException { + org.emftext.language.java.statements.Return element = null; + + int parse_org_emftext_language_java_statements_Return_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + org.emftext.language.java.expressions.AssignmentExpression a1_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 67) ) { return element; } + + // Java.g:25073:2: (a0= 'return' ( (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) )? a2= ';' ) + // Java.g:25074:2: a0= 'return' ( (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) )? a2= ';' + { + a0=(Token)match(input,90,FOLLOW_90_in_parse_org_emftext_language_java_statements_Return17401); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createReturn(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_65_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12908); + addExpectedElement(12909); + addExpectedElement(12910); + addExpectedElement(12911); + addExpectedElement(12912); + addExpectedElement(12913); + addExpectedElement(12914); + addExpectedElement(12915); + addExpectedElement(12916); + addExpectedElement(12917); + addExpectedElement(12918); + addExpectedElement(12919); + addExpectedElement(12920); + addExpectedElement(12921); + addExpectedElement(12922); + addExpectedElement(12923); + addExpectedElement(12924); + addExpectedElement(12925); + addExpectedElement(12926); + addExpectedElement(12927); + addExpectedElement(12928); + addExpectedElement(12929); + addExpectedElement(12930); + addExpectedElement(12931); + addExpectedElement(12932); + addExpectedElement(12933); + addExpectedElement(12934); + addExpectedElement(12935); + addExpectedElement(12936); + addExpectedElement(12937); + addExpectedElement(12938); + addExpectedElement(12939); + addExpectedElement(12940); + addExpectedElement(12941); + addExpectedElement(12942); + addExpectedElement(12943); + addExpectedElement(12944); + addExpectedElement(12945); + addExpectedElement(12946); + addExpectedElement(12947); + addExpectedElement(12948); + addExpectedElement(12949); + addExpectedElement(12950); + addExpectedElement(12951); + } + + // Java.g:25131:2: ( (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) )? + int alt190=2; + int LA190_0 = input.LA(1); + + if ( ((LA190_0 >= BOOLEAN_LITERAL && LA190_0 <= IDENTIFIER)||(LA190_0 >= OCTAL_INTEGER_LITERAL && LA190_0 <= OCTAL_LONG_LITERAL)||LA190_0==STRING_LITERAL||LA190_0==21||LA190_0==26||(LA190_0 >= 30 && LA190_0 <= 31)||(LA190_0 >= 34 && LA190_0 <= 35)||LA190_0==43||LA190_0==48||LA190_0==58||LA190_0==60||(LA190_0 >= 63 && LA190_0 <= 64)||LA190_0==68||LA190_0==74||LA190_0==80||LA190_0==82||(LA190_0 >= 84 && LA190_0 <= 85)||LA190_0==91||LA190_0==94||LA190_0==97||LA190_0==102||LA190_0==105||LA190_0==110) ) { + alt190=1; + } + switch (alt190) { + case 1 : + // Java.g:25132:3: (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + // Java.g:25132:3: (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:25133:4: a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_Return17424); + a1_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createReturn(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.RETURN__RETURN_VALUE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_65_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12952); + } + + a2=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_statements_Return17450); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createReturn(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_65_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(12953); + addExpectedElement(12954); + addExpectedElement(12955); + addExpectedElement(12956); + addExpectedElement(12957); + addExpectedElement(12958); + addExpectedElement(12959); + addExpectedElement(12960); + addExpectedElement(12961); + addExpectedElement(12962); + addExpectedElement(12963); + addExpectedElement(12964); + addExpectedElement(12965); + addExpectedElement(12966); + addExpectedElement(12967); + addExpectedElement(12968); + addExpectedElement(12969); + addExpectedElement(12970); + addExpectedElement(12971); + addExpectedElement(12972); + addExpectedElement(12973); + addExpectedElement(12974); + addExpectedElement(12975); + addExpectedElement(12976); + addExpectedElement(12977); + addExpectedElement(12978); + addExpectedElement(12979); + addExpectedElement(12980); + addExpectedElement(12981); + addExpectedElement(12982); + addExpectedElement(12983); + addExpectedElement(12984); + addExpectedElement(12985); + addExpectedElement(12986); + addExpectedElement(12987); + addExpectedElement(12988); + addExpectedElement(12989); + addExpectedElement(12990); + addExpectedElement(12991); + addExpectedElement(12992); + addExpectedElement(12993); + addExpectedElement(12994); + addExpectedElement(12995); + addExpectedElement(12996); + addExpectedElement(12997); + addExpectedElement(12998); + addExpectedElement(12999); + addExpectedElement(13000); + addExpectedElement(13001); + addExpectedElement(13002); + addExpectedElement(13003); + addExpectedElement(13004); + addExpectedElement(13005); + addExpectedElement(13006); + addExpectedElement(13007); + addExpectedElement(13008); + addExpectedElement(13009); + addExpectedElement(13010); + addExpectedElement(13011); + addExpectedElement(13012); + addExpectedElement(13013); + addExpectedElement(13014); + addExpectedElement(13015); + addExpectedElement(13016); + addExpectedElement(13017); + addExpectedElement(13018); + addExpectedElement(13019); + addExpectedElement(13020); + addExpectedElement(13021); + addExpectedElement(13022); + addExpectedElement(13023); + addExpectedElement(13024); + addExpectedElement(13025); + addExpectedElement(13026); + addExpectedElement(13027); + addExpectedElement(13028); + addExpectedElement(13029); + addExpectedElement(13030); + addExpectedElement(13031); + addExpectedElement(13032); + addExpectedElement(13033); + addExpectedElement(13034); + addExpectedElement(13035); + addExpectedElement(13036); + addExpectedElement(13037); + addExpectedElement(13038); + addExpectedElement(13039); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 67, parse_org_emftext_language_java_statements_Return_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_Return" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_Throw" + // Java.g:25261:1: parse_org_emftext_language_java_statements_Throw returns [org.emftext.language.java.statements.Throw element = null] : a0= 'throw' (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a2= ';' ; + public final org.emftext.language.java.statements.Throw parse_org_emftext_language_java_statements_Throw() throws RecognitionException { + org.emftext.language.java.statements.Throw element = null; + + int parse_org_emftext_language_java_statements_Throw_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + org.emftext.language.java.expressions.AssignmentExpression a1_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 68) ) { return element; } + + // Java.g:25264:2: (a0= 'throw' (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a2= ';' ) + // Java.g:25265:2: a0= 'throw' (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a2= ';' + { + a0=(Token)match(input,98,FOLLOW_98_in_parse_org_emftext_language_java_statements_Throw17479); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createThrow(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_66_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13040); + addExpectedElement(13041); + addExpectedElement(13042); + addExpectedElement(13043); + addExpectedElement(13044); + addExpectedElement(13045); + addExpectedElement(13046); + addExpectedElement(13047); + addExpectedElement(13048); + addExpectedElement(13049); + addExpectedElement(13050); + addExpectedElement(13051); + addExpectedElement(13052); + addExpectedElement(13053); + addExpectedElement(13054); + addExpectedElement(13055); + addExpectedElement(13056); + addExpectedElement(13057); + addExpectedElement(13058); + addExpectedElement(13059); + addExpectedElement(13060); + addExpectedElement(13061); + addExpectedElement(13062); + addExpectedElement(13063); + addExpectedElement(13064); + addExpectedElement(13065); + addExpectedElement(13066); + addExpectedElement(13067); + addExpectedElement(13068); + addExpectedElement(13069); + addExpectedElement(13070); + addExpectedElement(13071); + addExpectedElement(13072); + addExpectedElement(13073); + addExpectedElement(13074); + addExpectedElement(13075); + addExpectedElement(13076); + addExpectedElement(13077); + addExpectedElement(13078); + addExpectedElement(13079); + addExpectedElement(13080); + addExpectedElement(13081); + addExpectedElement(13082); + } + + // Java.g:25321:2: (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:25322:3: a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_Throw17497); + a1_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createThrow(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.THROW__THROWABLE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_66_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13083); + } + + a2=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_statements_Throw17515); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createThrow(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_66_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13084); + addExpectedElement(13085); + addExpectedElement(13086); + addExpectedElement(13087); + addExpectedElement(13088); + addExpectedElement(13089); + addExpectedElement(13090); + addExpectedElement(13091); + addExpectedElement(13092); + addExpectedElement(13093); + addExpectedElement(13094); + addExpectedElement(13095); + addExpectedElement(13096); + addExpectedElement(13097); + addExpectedElement(13098); + addExpectedElement(13099); + addExpectedElement(13100); + addExpectedElement(13101); + addExpectedElement(13102); + addExpectedElement(13103); + addExpectedElement(13104); + addExpectedElement(13105); + addExpectedElement(13106); + addExpectedElement(13107); + addExpectedElement(13108); + addExpectedElement(13109); + addExpectedElement(13110); + addExpectedElement(13111); + addExpectedElement(13112); + addExpectedElement(13113); + addExpectedElement(13114); + addExpectedElement(13115); + addExpectedElement(13116); + addExpectedElement(13117); + addExpectedElement(13118); + addExpectedElement(13119); + addExpectedElement(13120); + addExpectedElement(13121); + addExpectedElement(13122); + addExpectedElement(13123); + addExpectedElement(13124); + addExpectedElement(13125); + addExpectedElement(13126); + addExpectedElement(13127); + addExpectedElement(13128); + addExpectedElement(13129); + addExpectedElement(13130); + addExpectedElement(13131); + addExpectedElement(13132); + addExpectedElement(13133); + addExpectedElement(13134); + addExpectedElement(13135); + addExpectedElement(13136); + addExpectedElement(13137); + addExpectedElement(13138); + addExpectedElement(13139); + addExpectedElement(13140); + addExpectedElement(13141); + addExpectedElement(13142); + addExpectedElement(13143); + addExpectedElement(13144); + addExpectedElement(13145); + addExpectedElement(13146); + addExpectedElement(13147); + addExpectedElement(13148); + addExpectedElement(13149); + addExpectedElement(13150); + addExpectedElement(13151); + addExpectedElement(13152); + addExpectedElement(13153); + addExpectedElement(13154); + addExpectedElement(13155); + addExpectedElement(13156); + addExpectedElement(13157); + addExpectedElement(13158); + addExpectedElement(13159); + addExpectedElement(13160); + addExpectedElement(13161); + addExpectedElement(13162); + addExpectedElement(13163); + addExpectedElement(13164); + addExpectedElement(13165); + addExpectedElement(13166); + addExpectedElement(13167); + addExpectedElement(13168); + addExpectedElement(13169); + addExpectedElement(13170); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 68, parse_org_emftext_language_java_statements_Throw_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_Throw" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_Break" + // Java.g:25449:1: parse_org_emftext_language_java_statements_Break returns [org.emftext.language.java.statements.Break element = null] : a0= 'break' ( ( (a1= IDENTIFIER ) ) )? a2= ';' ; + private JavaContextDependentURIFragmentFactory breakURIFragmentFactory = new JavaContextDependentURIFragmentFactory(getReferenceResolverSwitch().getJumpTargetReferenceResolver()); + public final org.emftext.language.java.statements.Break parse_org_emftext_language_java_statements_Break() throws RecognitionException { + org.emftext.language.java.statements.Break element = null; + + int parse_org_emftext_language_java_statements_Break_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a2=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 69) ) { return element; } + + // Java.g:25452:2: (a0= 'break' ( ( (a1= IDENTIFIER ) ) )? a2= ';' ) + // Java.g:25453:2: a0= 'break' ( ( (a1= IDENTIFIER ) ) )? a2= ';' + { + a0=(Token)match(input,59,FOLLOW_59_in_parse_org_emftext_language_java_statements_Break17544); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createBreak(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_67_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13171); + addExpectedElement(13172); + } + + // Java.g:25468:2: ( ( (a1= IDENTIFIER ) ) )? + int alt191=2; + int LA191_0 = input.LA(1); + + if ( (LA191_0==IDENTIFIER) ) { + alt191=1; + } + switch (alt191) { + case 1 : + // Java.g:25469:3: ( (a1= IDENTIFIER ) ) + { + // Java.g:25469:3: ( (a1= IDENTIFIER ) ) + // Java.g:25470:4: (a1= IDENTIFIER ) + { + // Java.g:25470:4: (a1= IDENTIFIER ) + // Java.g:25471:5: a1= IDENTIFIER + { + a1=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_statements_Break17573); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createBreak(); + startIncompleteElement(element); + } + if (a1 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a1.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.BREAK__TARGET), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a1).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a1).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a1).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a1).getStopIndex()); + } + String resolved = (String) resolvedObject; + org.emftext.language.java.statements.JumpLabel proxy = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createJumpLabel(); + collectHiddenTokens(element); + + registerContextDependentProxy(breakURIFragmentFactory, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.BREAK__TARGET), resolved, proxy); + if (proxy != null) { + Object value = proxy; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.BREAK__TARGET), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_67_0_0_1_0_0_0, proxy, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a1, element); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a1, proxy); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13173); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13174); + } + + a2=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_statements_Break17619); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createBreak(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_67_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13175); + addExpectedElement(13176); + addExpectedElement(13177); + addExpectedElement(13178); + addExpectedElement(13179); + addExpectedElement(13180); + addExpectedElement(13181); + addExpectedElement(13182); + addExpectedElement(13183); + addExpectedElement(13184); + addExpectedElement(13185); + addExpectedElement(13186); + addExpectedElement(13187); + addExpectedElement(13188); + addExpectedElement(13189); + addExpectedElement(13190); + addExpectedElement(13191); + addExpectedElement(13192); + addExpectedElement(13193); + addExpectedElement(13194); + addExpectedElement(13195); + addExpectedElement(13196); + addExpectedElement(13197); + addExpectedElement(13198); + addExpectedElement(13199); + addExpectedElement(13200); + addExpectedElement(13201); + addExpectedElement(13202); + addExpectedElement(13203); + addExpectedElement(13204); + addExpectedElement(13205); + addExpectedElement(13206); + addExpectedElement(13207); + addExpectedElement(13208); + addExpectedElement(13209); + addExpectedElement(13210); + addExpectedElement(13211); + addExpectedElement(13212); + addExpectedElement(13213); + addExpectedElement(13214); + addExpectedElement(13215); + addExpectedElement(13216); + addExpectedElement(13217); + addExpectedElement(13218); + addExpectedElement(13219); + addExpectedElement(13220); + addExpectedElement(13221); + addExpectedElement(13222); + addExpectedElement(13223); + addExpectedElement(13224); + addExpectedElement(13225); + addExpectedElement(13226); + addExpectedElement(13227); + addExpectedElement(13228); + addExpectedElement(13229); + addExpectedElement(13230); + addExpectedElement(13231); + addExpectedElement(13232); + addExpectedElement(13233); + addExpectedElement(13234); + addExpectedElement(13235); + addExpectedElement(13236); + addExpectedElement(13237); + addExpectedElement(13238); + addExpectedElement(13239); + addExpectedElement(13240); + addExpectedElement(13241); + addExpectedElement(13242); + addExpectedElement(13243); + addExpectedElement(13244); + addExpectedElement(13245); + addExpectedElement(13246); + addExpectedElement(13247); + addExpectedElement(13248); + addExpectedElement(13249); + addExpectedElement(13250); + addExpectedElement(13251); + addExpectedElement(13252); + addExpectedElement(13253); + addExpectedElement(13254); + addExpectedElement(13255); + addExpectedElement(13256); + addExpectedElement(13257); + addExpectedElement(13258); + addExpectedElement(13259); + addExpectedElement(13260); + addExpectedElement(13261); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 69, parse_org_emftext_language_java_statements_Break_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_Break" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_Continue" + // Java.g:25619:1: parse_org_emftext_language_java_statements_Continue returns [org.emftext.language.java.statements.Continue element = null] : a0= 'continue' ( ( (a1= IDENTIFIER ) ) )? a2= ';' ; + private JavaContextDependentURIFragmentFactory continueURIFragmentFactory = new JavaContextDependentURIFragmentFactory(getReferenceResolverSwitch().getJumpTargetReferenceResolver()); + public final org.emftext.language.java.statements.Continue parse_org_emftext_language_java_statements_Continue() throws RecognitionException { + org.emftext.language.java.statements.Continue element = null; + + int parse_org_emftext_language_java_statements_Continue_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a2=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 70) ) { return element; } + + // Java.g:25622:2: (a0= 'continue' ( ( (a1= IDENTIFIER ) ) )? a2= ';' ) + // Java.g:25623:2: a0= 'continue' ( ( (a1= IDENTIFIER ) ) )? a2= ';' + { + a0=(Token)match(input,65,FOLLOW_65_in_parse_org_emftext_language_java_statements_Continue17648); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createContinue(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_68_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13262); + addExpectedElement(13263); + } + + // Java.g:25638:2: ( ( (a1= IDENTIFIER ) ) )? + int alt192=2; + int LA192_0 = input.LA(1); + + if ( (LA192_0==IDENTIFIER) ) { + alt192=1; + } + switch (alt192) { + case 1 : + // Java.g:25639:3: ( (a1= IDENTIFIER ) ) + { + // Java.g:25639:3: ( (a1= IDENTIFIER ) ) + // Java.g:25640:4: (a1= IDENTIFIER ) + { + // Java.g:25640:4: (a1= IDENTIFIER ) + // Java.g:25641:5: a1= IDENTIFIER + { + a1=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_statements_Continue17677); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createContinue(); + startIncompleteElement(element); + } + if (a1 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a1.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.CONTINUE__TARGET), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a1).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a1).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a1).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a1).getStopIndex()); + } + String resolved = (String) resolvedObject; + org.emftext.language.java.statements.JumpLabel proxy = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createJumpLabel(); + collectHiddenTokens(element); + + registerContextDependentProxy(continueURIFragmentFactory, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.CONTINUE__TARGET), resolved, proxy); + if (proxy != null) { + Object value = proxy; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.CONTINUE__TARGET), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_68_0_0_1_0_0_0, proxy, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a1, element); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a1, proxy); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13264); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13265); + } + + a2=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_statements_Continue17723); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createContinue(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_68_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13266); + addExpectedElement(13267); + addExpectedElement(13268); + addExpectedElement(13269); + addExpectedElement(13270); + addExpectedElement(13271); + addExpectedElement(13272); + addExpectedElement(13273); + addExpectedElement(13274); + addExpectedElement(13275); + addExpectedElement(13276); + addExpectedElement(13277); + addExpectedElement(13278); + addExpectedElement(13279); + addExpectedElement(13280); + addExpectedElement(13281); + addExpectedElement(13282); + addExpectedElement(13283); + addExpectedElement(13284); + addExpectedElement(13285); + addExpectedElement(13286); + addExpectedElement(13287); + addExpectedElement(13288); + addExpectedElement(13289); + addExpectedElement(13290); + addExpectedElement(13291); + addExpectedElement(13292); + addExpectedElement(13293); + addExpectedElement(13294); + addExpectedElement(13295); + addExpectedElement(13296); + addExpectedElement(13297); + addExpectedElement(13298); + addExpectedElement(13299); + addExpectedElement(13300); + addExpectedElement(13301); + addExpectedElement(13302); + addExpectedElement(13303); + addExpectedElement(13304); + addExpectedElement(13305); + addExpectedElement(13306); + addExpectedElement(13307); + addExpectedElement(13308); + addExpectedElement(13309); + addExpectedElement(13310); + addExpectedElement(13311); + addExpectedElement(13312); + addExpectedElement(13313); + addExpectedElement(13314); + addExpectedElement(13315); + addExpectedElement(13316); + addExpectedElement(13317); + addExpectedElement(13318); + addExpectedElement(13319); + addExpectedElement(13320); + addExpectedElement(13321); + addExpectedElement(13322); + addExpectedElement(13323); + addExpectedElement(13324); + addExpectedElement(13325); + addExpectedElement(13326); + addExpectedElement(13327); + addExpectedElement(13328); + addExpectedElement(13329); + addExpectedElement(13330); + addExpectedElement(13331); + addExpectedElement(13332); + addExpectedElement(13333); + addExpectedElement(13334); + addExpectedElement(13335); + addExpectedElement(13336); + addExpectedElement(13337); + addExpectedElement(13338); + addExpectedElement(13339); + addExpectedElement(13340); + addExpectedElement(13341); + addExpectedElement(13342); + addExpectedElement(13343); + addExpectedElement(13344); + addExpectedElement(13345); + addExpectedElement(13346); + addExpectedElement(13347); + addExpectedElement(13348); + addExpectedElement(13349); + addExpectedElement(13350); + addExpectedElement(13351); + addExpectedElement(13352); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 70, parse_org_emftext_language_java_statements_Continue_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_Continue" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_JumpLabel" + // Java.g:25789:1: parse_org_emftext_language_java_statements_JumpLabel returns [org.emftext.language.java.statements.JumpLabel element = null] : (a0= IDENTIFIER ) a1= ':' (a2_0= parse_org_emftext_language_java_statements_Statement ) ; + public final org.emftext.language.java.statements.JumpLabel parse_org_emftext_language_java_statements_JumpLabel() throws RecognitionException { + org.emftext.language.java.statements.JumpLabel element = null; + + int parse_org_emftext_language_java_statements_JumpLabel_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + org.emftext.language.java.statements.Statement a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 71) ) { return element; } + + // Java.g:25792:2: ( (a0= IDENTIFIER ) a1= ':' (a2_0= parse_org_emftext_language_java_statements_Statement ) ) + // Java.g:25793:2: (a0= IDENTIFIER ) a1= ':' (a2_0= parse_org_emftext_language_java_statements_Statement ) + { + // Java.g:25793:2: (a0= IDENTIFIER ) + // Java.g:25794:3: a0= IDENTIFIER + { + a0=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_statements_JumpLabel17756); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createJumpLabel(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("IDENTIFIER"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.JUMP_LABEL__NAME), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.lang.String resolved = (java.lang.String) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.JUMP_LABEL__NAME), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_69_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13353); + } + + a1=(Token)match(input,41,FOLLOW_41_in_parse_org_emftext_language_java_statements_JumpLabel17777); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createJumpLabel(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_69_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13354); + addExpectedElement(13355); + addExpectedElement(13356); + addExpectedElement(13357); + addExpectedElement(13358); + addExpectedElement(13359); + addExpectedElement(13360); + addExpectedElement(13361); + addExpectedElement(13362); + addExpectedElement(13363); + addExpectedElement(13364); + addExpectedElement(13365); + addExpectedElement(13366); + addExpectedElement(13367); + addExpectedElement(13368); + addExpectedElement(13369); + addExpectedElement(13370); + addExpectedElement(13371); + addExpectedElement(13372); + addExpectedElement(13373); + addExpectedElement(13374); + addExpectedElement(13375); + addExpectedElement(13376); + addExpectedElement(13377); + addExpectedElement(13378); + addExpectedElement(13379); + addExpectedElement(13380); + addExpectedElement(13381); + addExpectedElement(13382); + addExpectedElement(13383); + addExpectedElement(13384); + addExpectedElement(13385); + addExpectedElement(13386); + addExpectedElement(13387); + addExpectedElement(13388); + addExpectedElement(13389); + addExpectedElement(13390); + addExpectedElement(13391); + addExpectedElement(13392); + addExpectedElement(13393); + addExpectedElement(13394); + addExpectedElement(13395); + addExpectedElement(13396); + addExpectedElement(13397); + addExpectedElement(13398); + addExpectedElement(13399); + addExpectedElement(13400); + addExpectedElement(13401); + addExpectedElement(13402); + addExpectedElement(13403); + addExpectedElement(13404); + addExpectedElement(13405); + addExpectedElement(13406); + addExpectedElement(13407); + addExpectedElement(13408); + addExpectedElement(13409); + addExpectedElement(13410); + addExpectedElement(13411); + addExpectedElement(13412); + addExpectedElement(13413); + addExpectedElement(13414); + addExpectedElement(13415); + addExpectedElement(13416); + addExpectedElement(13417); + addExpectedElement(13418); + addExpectedElement(13419); + addExpectedElement(13420); + addExpectedElement(13421); + addExpectedElement(13422); + addExpectedElement(13423); + addExpectedElement(13424); + addExpectedElement(13425); + addExpectedElement(13426); + addExpectedElement(13427); + addExpectedElement(13428); + addExpectedElement(13429); + } + + // Java.g:25918:2: (a2_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:25919:3: a2_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_JumpLabel17795); + a2_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createJumpLabel(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.JUMP_LABEL__STATEMENT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_69_0_0_2, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13430); + addExpectedElement(13431); + addExpectedElement(13432); + addExpectedElement(13433); + addExpectedElement(13434); + addExpectedElement(13435); + addExpectedElement(13436); + addExpectedElement(13437); + addExpectedElement(13438); + addExpectedElement(13439); + addExpectedElement(13440); + addExpectedElement(13441); + addExpectedElement(13442); + addExpectedElement(13443); + addExpectedElement(13444); + addExpectedElement(13445); + addExpectedElement(13446); + addExpectedElement(13447); + addExpectedElement(13448); + addExpectedElement(13449); + addExpectedElement(13450); + addExpectedElement(13451); + addExpectedElement(13452); + addExpectedElement(13453); + addExpectedElement(13454); + addExpectedElement(13455); + addExpectedElement(13456); + addExpectedElement(13457); + addExpectedElement(13458); + addExpectedElement(13459); + addExpectedElement(13460); + addExpectedElement(13461); + addExpectedElement(13462); + addExpectedElement(13463); + addExpectedElement(13464); + addExpectedElement(13465); + addExpectedElement(13466); + addExpectedElement(13467); + addExpectedElement(13468); + addExpectedElement(13469); + addExpectedElement(13470); + addExpectedElement(13471); + addExpectedElement(13472); + addExpectedElement(13473); + addExpectedElement(13474); + addExpectedElement(13475); + addExpectedElement(13476); + addExpectedElement(13477); + addExpectedElement(13478); + addExpectedElement(13479); + addExpectedElement(13480); + addExpectedElement(13481); + addExpectedElement(13482); + addExpectedElement(13483); + addExpectedElement(13484); + addExpectedElement(13485); + addExpectedElement(13486); + addExpectedElement(13487); + addExpectedElement(13488); + addExpectedElement(13489); + addExpectedElement(13490); + addExpectedElement(13491); + addExpectedElement(13492); + addExpectedElement(13493); + addExpectedElement(13494); + addExpectedElement(13495); + addExpectedElement(13496); + addExpectedElement(13497); + addExpectedElement(13498); + addExpectedElement(13499); + addExpectedElement(13500); + addExpectedElement(13501); + addExpectedElement(13502); + addExpectedElement(13503); + addExpectedElement(13504); + addExpectedElement(13505); + addExpectedElement(13506); + addExpectedElement(13507); + addExpectedElement(13508); + addExpectedElement(13509); + addExpectedElement(13510); + addExpectedElement(13511); + addExpectedElement(13512); + addExpectedElement(13513); + addExpectedElement(13514); + addExpectedElement(13515); + addExpectedElement(13516); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 71, parse_org_emftext_language_java_statements_JumpLabel_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_JumpLabel" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_ExpressionStatement" + // Java.g:26032:1: parse_org_emftext_language_java_statements_ExpressionStatement returns [org.emftext.language.java.statements.ExpressionStatement element = null] : (a0_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a1= ';' ; + public final org.emftext.language.java.statements.ExpressionStatement parse_org_emftext_language_java_statements_ExpressionStatement() throws RecognitionException { + org.emftext.language.java.statements.ExpressionStatement element = null; + + int parse_org_emftext_language_java_statements_ExpressionStatement_StartIndex = input.index(); + + Token a1=null; + org.emftext.language.java.expressions.AssignmentExpression a0_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 72) ) { return element; } + + // Java.g:26035:2: ( (a0_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a1= ';' ) + // Java.g:26036:2: (a0_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a1= ';' + { + // Java.g:26036:2: (a0_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:26037:3: a0_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_ExpressionStatement17832); + a0_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createExpressionStatement(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.statements.StatementsPackage.EXPRESSION_STATEMENT__EXPRESSION), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_70_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13517); + } + + a1=(Token)match(input,42,FOLLOW_42_in_parse_org_emftext_language_java_statements_ExpressionStatement17850); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.statements.StatementsFactory.eINSTANCE.createExpressionStatement(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_70_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13518); + addExpectedElement(13519); + addExpectedElement(13520); + addExpectedElement(13521); + addExpectedElement(13522); + addExpectedElement(13523); + addExpectedElement(13524); + addExpectedElement(13525); + addExpectedElement(13526); + addExpectedElement(13527); + addExpectedElement(13528); + addExpectedElement(13529); + addExpectedElement(13530); + addExpectedElement(13531); + addExpectedElement(13532); + addExpectedElement(13533); + addExpectedElement(13534); + addExpectedElement(13535); + addExpectedElement(13536); + addExpectedElement(13537); + addExpectedElement(13538); + addExpectedElement(13539); + addExpectedElement(13540); + addExpectedElement(13541); + addExpectedElement(13542); + addExpectedElement(13543); + addExpectedElement(13544); + addExpectedElement(13545); + addExpectedElement(13546); + addExpectedElement(13547); + addExpectedElement(13548); + addExpectedElement(13549); + addExpectedElement(13550); + addExpectedElement(13551); + addExpectedElement(13552); + addExpectedElement(13553); + addExpectedElement(13554); + addExpectedElement(13555); + addExpectedElement(13556); + addExpectedElement(13557); + addExpectedElement(13558); + addExpectedElement(13559); + addExpectedElement(13560); + addExpectedElement(13561); + addExpectedElement(13562); + addExpectedElement(13563); + addExpectedElement(13564); + addExpectedElement(13565); + addExpectedElement(13566); + addExpectedElement(13567); + addExpectedElement(13568); + addExpectedElement(13569); + addExpectedElement(13570); + addExpectedElement(13571); + addExpectedElement(13572); + addExpectedElement(13573); + addExpectedElement(13574); + addExpectedElement(13575); + addExpectedElement(13576); + addExpectedElement(13577); + addExpectedElement(13578); + addExpectedElement(13579); + addExpectedElement(13580); + addExpectedElement(13581); + addExpectedElement(13582); + addExpectedElement(13583); + addExpectedElement(13584); + addExpectedElement(13585); + addExpectedElement(13586); + addExpectedElement(13587); + addExpectedElement(13588); + addExpectedElement(13589); + addExpectedElement(13590); + addExpectedElement(13591); + addExpectedElement(13592); + addExpectedElement(13593); + addExpectedElement(13594); + addExpectedElement(13595); + addExpectedElement(13596); + addExpectedElement(13597); + addExpectedElement(13598); + addExpectedElement(13599); + addExpectedElement(13600); + addExpectedElement(13601); + addExpectedElement(13602); + addExpectedElement(13603); + addExpectedElement(13604); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 72, parse_org_emftext_language_java_statements_ExpressionStatement_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_ExpressionStatement" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_ExpressionList" + // Java.g:26164:1: parse_org_emftext_language_java_expressions_ExpressionList returns [org.emftext.language.java.expressions.ExpressionList element = null] : (a0_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a1= ',' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ; + public final org.emftext.language.java.expressions.ExpressionList parse_org_emftext_language_java_expressions_ExpressionList() throws RecognitionException { + org.emftext.language.java.expressions.ExpressionList element = null; + + int parse_org_emftext_language_java_expressions_ExpressionList_StartIndex = input.index(); + + Token a1=null; + org.emftext.language.java.expressions.AssignmentExpression a0_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 73) ) { return element; } + + // Java.g:26167:2: ( (a0_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a1= ',' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* ) + // Java.g:26168:2: (a0_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ( (a1= ',' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* + { + // Java.g:26168:2: (a0_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:26169:3: a0_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_expressions_ExpressionList17883); + a0_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createExpressionList(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.EXPRESSION_LIST__EXPRESSIONS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_71_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13605); + addExpectedElement(13606); + } + + // Java.g:26195:2: ( (a1= ',' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )* + loop193: + do { + int alt193=2; + int LA193_0 = input.LA(1); + + if ( (LA193_0==33) ) { + alt193=1; + } + + + switch (alt193) { + case 1 : + // Java.g:26196:3: (a1= ',' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + { + // Java.g:26196:3: (a1= ',' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + // Java.g:26197:4: a1= ',' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + a1=(Token)match(input,33,FOLLOW_33_in_parse_org_emftext_language_java_expressions_ExpressionList17910); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createExpressionList(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_71_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13607); + addExpectedElement(13608); + addExpectedElement(13609); + addExpectedElement(13610); + addExpectedElement(13611); + addExpectedElement(13612); + addExpectedElement(13613); + addExpectedElement(13614); + addExpectedElement(13615); + addExpectedElement(13616); + addExpectedElement(13617); + addExpectedElement(13618); + addExpectedElement(13619); + addExpectedElement(13620); + addExpectedElement(13621); + addExpectedElement(13622); + addExpectedElement(13623); + addExpectedElement(13624); + addExpectedElement(13625); + addExpectedElement(13626); + addExpectedElement(13627); + addExpectedElement(13628); + addExpectedElement(13629); + addExpectedElement(13630); + addExpectedElement(13631); + addExpectedElement(13632); + addExpectedElement(13633); + addExpectedElement(13634); + addExpectedElement(13635); + addExpectedElement(13636); + addExpectedElement(13637); + addExpectedElement(13638); + addExpectedElement(13639); + addExpectedElement(13640); + addExpectedElement(13641); + addExpectedElement(13642); + addExpectedElement(13643); + addExpectedElement(13644); + addExpectedElement(13645); + addExpectedElement(13646); + addExpectedElement(13647); + addExpectedElement(13648); + addExpectedElement(13649); + } + + // Java.g:26253:4: (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:26254:5: a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_expressions_ExpressionList17936); + a2_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createExpressionList(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.EXPRESSION_LIST__EXPRESSIONS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_71_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13650); + addExpectedElement(13651); + } + + } + + + } + break; + + default : + break loop193; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13652); + addExpectedElement(13653); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 73, parse_org_emftext_language_java_expressions_ExpressionList_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_ExpressionList" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_AssignmentExpression" + // Java.g:26290:1: parse_org_emftext_language_java_expressions_AssignmentExpression returns [org.emftext.language.java.expressions.AssignmentExpression element = null] : (a0_0= parse_org_emftext_language_java_expressions_ConditionalExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_AssignmentOperator ) (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? ; + public final org.emftext.language.java.expressions.AssignmentExpression parse_org_emftext_language_java_expressions_AssignmentExpression() throws RecognitionException { + org.emftext.language.java.expressions.AssignmentExpression element = null; + + int parse_org_emftext_language_java_expressions_AssignmentExpression_StartIndex = input.index(); + + org.emftext.language.java.expressions.ConditionalExpression a0_0 =null; + + org.emftext.language.java.operators.AssignmentOperator a1_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 74) ) { return element; } + + // Java.g:26293:2: ( (a0_0= parse_org_emftext_language_java_expressions_ConditionalExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_AssignmentOperator ) (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? ) + // Java.g:26294:2: (a0_0= parse_org_emftext_language_java_expressions_ConditionalExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_AssignmentOperator ) (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? + { + // Java.g:26294:2: (a0_0= parse_org_emftext_language_java_expressions_ConditionalExpression ) + // Java.g:26295:3: a0_0= parse_org_emftext_language_java_expressions_ConditionalExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_ConditionalExpression_in_parse_org_emftext_language_java_expressions_AssignmentExpression17996); + a0_0=parse_org_emftext_language_java_expressions_ConditionalExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createAssignmentExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.ASSIGNMENT_EXPRESSION__CHILD), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_72_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13654); + addExpectedElement(13655); + addExpectedElement(13656); + addExpectedElement(13657); + addExpectedElement(13658); + addExpectedElement(13659); + addExpectedElement(13660); + addExpectedElement(13661); + addExpectedElement(13662); + addExpectedElement(13663); + addExpectedElement(13664); + addExpectedElement(13665); + addExpectedElement(13666); + addExpectedElement(13667); + addExpectedElement(13668); + addExpectedElement(13669); + addExpectedElement(13670); + addExpectedElement(13671); + addExpectedElement(13672); + addExpectedElement(13673); + addExpectedElement(13674); + addExpectedElement(13675); + addExpectedElement(13676); + addExpectedElement(13677); + addExpectedElement(13678); + addExpectedElement(13679); + addExpectedElement(13680); + addExpectedElement(13681); + addExpectedElement(13682); + addExpectedElement(13683); + addExpectedElement(13684); + addExpectedElement(13685); + addExpectedElement(13686); + addExpectedElement(13687); + addExpectedElement(13688); + addExpectedElement(13689); + addExpectedElement(13690); + addExpectedElement(13691); + addExpectedElement(13692); + addExpectedElement(13693); + addExpectedElement(13694); + addExpectedElement(13695); + addExpectedElement(13696); + addExpectedElement(13697); + addExpectedElement(13698); + addExpectedElement(13699); + } + + // Java.g:26365:2: ( ( (a1_0= parse_org_emftext_language_java_operators_AssignmentOperator ) (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) )? + int alt194=2; + int LA194_0 = input.LA(1); + + if ( (LA194_0==25||LA194_0==29||LA194_0==32||LA194_0==36||LA194_0==40||(LA194_0 >= 43 && LA194_0 <= 44)||LA194_0==46||LA194_0==52||LA194_0==55||LA194_0==107) ) { + alt194=1; + } + switch (alt194) { + case 1 : + // Java.g:26366:3: ( (a1_0= parse_org_emftext_language_java_operators_AssignmentOperator ) (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + { + // Java.g:26366:3: ( (a1_0= parse_org_emftext_language_java_operators_AssignmentOperator ) (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) ) + // Java.g:26367:4: (a1_0= parse_org_emftext_language_java_operators_AssignmentOperator ) (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + { + // Java.g:26367:4: (a1_0= parse_org_emftext_language_java_operators_AssignmentOperator ) + // Java.g:26368:5: a1_0= parse_org_emftext_language_java_operators_AssignmentOperator + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_AssignmentOperator_in_parse_org_emftext_language_java_expressions_AssignmentExpression18029); + a1_0=parse_org_emftext_language_java_operators_AssignmentOperator(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createAssignmentExpression(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.ASSIGNMENT_EXPRESSION__ASSIGNMENT_OPERATOR), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_72_0_0_1_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13700); + addExpectedElement(13701); + addExpectedElement(13702); + addExpectedElement(13703); + addExpectedElement(13704); + addExpectedElement(13705); + addExpectedElement(13706); + addExpectedElement(13707); + addExpectedElement(13708); + addExpectedElement(13709); + addExpectedElement(13710); + addExpectedElement(13711); + addExpectedElement(13712); + addExpectedElement(13713); + addExpectedElement(13714); + addExpectedElement(13715); + addExpectedElement(13716); + addExpectedElement(13717); + addExpectedElement(13718); + addExpectedElement(13719); + addExpectedElement(13720); + addExpectedElement(13721); + addExpectedElement(13722); + addExpectedElement(13723); + addExpectedElement(13724); + addExpectedElement(13725); + addExpectedElement(13726); + addExpectedElement(13727); + addExpectedElement(13728); + addExpectedElement(13729); + addExpectedElement(13730); + addExpectedElement(13731); + addExpectedElement(13732); + addExpectedElement(13733); + addExpectedElement(13734); + addExpectedElement(13735); + addExpectedElement(13736); + addExpectedElement(13737); + addExpectedElement(13738); + addExpectedElement(13739); + addExpectedElement(13740); + addExpectedElement(13741); + addExpectedElement(13742); + } + + // Java.g:26435:4: (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:26436:5: a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_expressions_AssignmentExpression18063); + a2_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createAssignmentExpression(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.ASSIGNMENT_EXPRESSION__VALUE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_72_0_0_1_0_0_3, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13743); + addExpectedElement(13744); + addExpectedElement(13745); + addExpectedElement(13746); + addExpectedElement(13747); + addExpectedElement(13748); + addExpectedElement(13749); + addExpectedElement(13750); + addExpectedElement(13751); + addExpectedElement(13752); + addExpectedElement(13753); + addExpectedElement(13754); + addExpectedElement(13755); + addExpectedElement(13756); + addExpectedElement(13757); + addExpectedElement(13758); + addExpectedElement(13759); + addExpectedElement(13760); + addExpectedElement(13761); + addExpectedElement(13762); + addExpectedElement(13763); + addExpectedElement(13764); + addExpectedElement(13765); + addExpectedElement(13766); + addExpectedElement(13767); + addExpectedElement(13768); + addExpectedElement(13769); + addExpectedElement(13770); + addExpectedElement(13771); + addExpectedElement(13772); + addExpectedElement(13773); + addExpectedElement(13774); + addExpectedElement(13775); + addExpectedElement(13776); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13777); + addExpectedElement(13778); + addExpectedElement(13779); + addExpectedElement(13780); + addExpectedElement(13781); + addExpectedElement(13782); + addExpectedElement(13783); + addExpectedElement(13784); + addExpectedElement(13785); + addExpectedElement(13786); + addExpectedElement(13787); + addExpectedElement(13788); + addExpectedElement(13789); + addExpectedElement(13790); + addExpectedElement(13791); + addExpectedElement(13792); + addExpectedElement(13793); + addExpectedElement(13794); + addExpectedElement(13795); + addExpectedElement(13796); + addExpectedElement(13797); + addExpectedElement(13798); + addExpectedElement(13799); + addExpectedElement(13800); + addExpectedElement(13801); + addExpectedElement(13802); + addExpectedElement(13803); + addExpectedElement(13804); + addExpectedElement(13805); + addExpectedElement(13806); + addExpectedElement(13807); + addExpectedElement(13808); + addExpectedElement(13809); + addExpectedElement(13810); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 74, parse_org_emftext_language_java_expressions_AssignmentExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_AssignmentExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_ConditionalExpression" + // Java.g:26536:1: parse_org_emftext_language_java_expressions_ConditionalExpression returns [org.emftext.language.java.expressions.ConditionalExpression element = null] : (a0_0= parse_org_emftext_language_java_expressions_ConditionalOrExpression ) ( (a1= '?' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ':' (a4_0= parse_org_emftext_language_java_expressions_ConditionalExpression ) ) )? ; + public final org.emftext.language.java.expressions.ConditionalExpression parse_org_emftext_language_java_expressions_ConditionalExpression() throws RecognitionException { + org.emftext.language.java.expressions.ConditionalExpression element = null; + + int parse_org_emftext_language_java_expressions_ConditionalExpression_StartIndex = input.index(); + + Token a1=null; + Token a3=null; + org.emftext.language.java.expressions.ConditionalOrExpression a0_0 =null; + + org.emftext.language.java.expressions.AssignmentExpression a2_0 =null; + + org.emftext.language.java.expressions.ConditionalExpression a4_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 75) ) { return element; } + + // Java.g:26539:2: ( (a0_0= parse_org_emftext_language_java_expressions_ConditionalOrExpression ) ( (a1= '?' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ':' (a4_0= parse_org_emftext_language_java_expressions_ConditionalExpression ) ) )? ) + // Java.g:26540:2: (a0_0= parse_org_emftext_language_java_expressions_ConditionalOrExpression ) ( (a1= '?' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ':' (a4_0= parse_org_emftext_language_java_expressions_ConditionalExpression ) ) )? + { + // Java.g:26540:2: (a0_0= parse_org_emftext_language_java_expressions_ConditionalOrExpression ) + // Java.g:26541:3: a0_0= parse_org_emftext_language_java_expressions_ConditionalOrExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_ConditionalOrExpression_in_parse_org_emftext_language_java_expressions_ConditionalExpression18123); + a0_0=parse_org_emftext_language_java_expressions_ConditionalOrExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createConditionalExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CONDITIONAL_EXPRESSION__CHILD), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_73_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13811); + addExpectedElement(13812); + addExpectedElement(13813); + addExpectedElement(13814); + addExpectedElement(13815); + addExpectedElement(13816); + addExpectedElement(13817); + addExpectedElement(13818); + addExpectedElement(13819); + addExpectedElement(13820); + addExpectedElement(13821); + addExpectedElement(13822); + addExpectedElement(13823); + addExpectedElement(13824); + addExpectedElement(13825); + addExpectedElement(13826); + addExpectedElement(13827); + addExpectedElement(13828); + addExpectedElement(13829); + addExpectedElement(13830); + addExpectedElement(13831); + addExpectedElement(13832); + addExpectedElement(13833); + addExpectedElement(13834); + addExpectedElement(13835); + addExpectedElement(13836); + addExpectedElement(13837); + addExpectedElement(13838); + addExpectedElement(13839); + addExpectedElement(13840); + addExpectedElement(13841); + addExpectedElement(13842); + addExpectedElement(13843); + addExpectedElement(13844); + addExpectedElement(13845); + addExpectedElement(13846); + addExpectedElement(13847); + addExpectedElement(13848); + addExpectedElement(13849); + addExpectedElement(13850); + addExpectedElement(13851); + addExpectedElement(13852); + addExpectedElement(13853); + addExpectedElement(13854); + addExpectedElement(13855); + addExpectedElement(13856); + addExpectedElement(13857); + addExpectedElement(13858); + addExpectedElement(13859); + addExpectedElement(13860); + } + + // Java.g:26615:2: ( (a1= '?' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ':' (a4_0= parse_org_emftext_language_java_expressions_ConditionalExpression ) ) )? + int alt195=2; + int LA195_0 = input.LA(1); + + if ( (LA195_0==47) ) { + alt195=1; + } + switch (alt195) { + case 1 : + // Java.g:26616:3: (a1= '?' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ':' (a4_0= parse_org_emftext_language_java_expressions_ConditionalExpression ) ) + { + // Java.g:26616:3: (a1= '?' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ':' (a4_0= parse_org_emftext_language_java_expressions_ConditionalExpression ) ) + // Java.g:26617:4: a1= '?' (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a3= ':' (a4_0= parse_org_emftext_language_java_expressions_ConditionalExpression ) + { + a1=(Token)match(input,47,FOLLOW_47_in_parse_org_emftext_language_java_expressions_ConditionalExpression18150); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createConditionalExpression(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_73_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13861); + addExpectedElement(13862); + addExpectedElement(13863); + addExpectedElement(13864); + addExpectedElement(13865); + addExpectedElement(13866); + addExpectedElement(13867); + addExpectedElement(13868); + addExpectedElement(13869); + addExpectedElement(13870); + addExpectedElement(13871); + addExpectedElement(13872); + addExpectedElement(13873); + addExpectedElement(13874); + addExpectedElement(13875); + addExpectedElement(13876); + addExpectedElement(13877); + addExpectedElement(13878); + addExpectedElement(13879); + addExpectedElement(13880); + addExpectedElement(13881); + addExpectedElement(13882); + addExpectedElement(13883); + addExpectedElement(13884); + addExpectedElement(13885); + addExpectedElement(13886); + addExpectedElement(13887); + addExpectedElement(13888); + addExpectedElement(13889); + addExpectedElement(13890); + addExpectedElement(13891); + addExpectedElement(13892); + addExpectedElement(13893); + addExpectedElement(13894); + addExpectedElement(13895); + addExpectedElement(13896); + addExpectedElement(13897); + addExpectedElement(13898); + addExpectedElement(13899); + addExpectedElement(13900); + addExpectedElement(13901); + addExpectedElement(13902); + addExpectedElement(13903); + } + + // Java.g:26673:4: (a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:26674:5: a2_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_expressions_ConditionalExpression18176); + a2_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createConditionalExpression(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CONDITIONAL_EXPRESSION__EXPRESSION_IF), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_73_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13904); + } + + a3=(Token)match(input,41,FOLLOW_41_in_parse_org_emftext_language_java_expressions_ConditionalExpression18204); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createConditionalExpression(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_73_0_0_1_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13905); + addExpectedElement(13906); + addExpectedElement(13907); + addExpectedElement(13908); + addExpectedElement(13909); + addExpectedElement(13910); + addExpectedElement(13911); + addExpectedElement(13912); + addExpectedElement(13913); + addExpectedElement(13914); + addExpectedElement(13915); + addExpectedElement(13916); + addExpectedElement(13917); + addExpectedElement(13918); + addExpectedElement(13919); + addExpectedElement(13920); + addExpectedElement(13921); + addExpectedElement(13922); + addExpectedElement(13923); + addExpectedElement(13924); + addExpectedElement(13925); + addExpectedElement(13926); + addExpectedElement(13927); + addExpectedElement(13928); + addExpectedElement(13929); + addExpectedElement(13930); + addExpectedElement(13931); + addExpectedElement(13932); + addExpectedElement(13933); + addExpectedElement(13934); + addExpectedElement(13935); + addExpectedElement(13936); + addExpectedElement(13937); + addExpectedElement(13938); + addExpectedElement(13939); + addExpectedElement(13940); + addExpectedElement(13941); + addExpectedElement(13942); + addExpectedElement(13943); + addExpectedElement(13944); + addExpectedElement(13945); + addExpectedElement(13946); + addExpectedElement(13947); + } + + // Java.g:26755:4: (a4_0= parse_org_emftext_language_java_expressions_ConditionalExpression ) + // Java.g:26756:5: a4_0= parse_org_emftext_language_java_expressions_ConditionalExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_ConditionalExpression_in_parse_org_emftext_language_java_expressions_ConditionalExpression18230); + a4_0=parse_org_emftext_language_java_expressions_ConditionalExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createConditionalExpression(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CONDITIONAL_EXPRESSION__EXPRESSION_ELSE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_73_0_0_1_0_0_3, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13948); + addExpectedElement(13949); + addExpectedElement(13950); + addExpectedElement(13951); + addExpectedElement(13952); + addExpectedElement(13953); + addExpectedElement(13954); + addExpectedElement(13955); + addExpectedElement(13956); + addExpectedElement(13957); + addExpectedElement(13958); + addExpectedElement(13959); + addExpectedElement(13960); + addExpectedElement(13961); + addExpectedElement(13962); + addExpectedElement(13963); + addExpectedElement(13964); + addExpectedElement(13965); + addExpectedElement(13966); + addExpectedElement(13967); + addExpectedElement(13968); + addExpectedElement(13969); + addExpectedElement(13970); + addExpectedElement(13971); + addExpectedElement(13972); + addExpectedElement(13973); + addExpectedElement(13974); + addExpectedElement(13975); + addExpectedElement(13976); + addExpectedElement(13977); + addExpectedElement(13978); + addExpectedElement(13979); + addExpectedElement(13980); + addExpectedElement(13981); + addExpectedElement(13982); + addExpectedElement(13983); + addExpectedElement(13984); + addExpectedElement(13985); + addExpectedElement(13986); + addExpectedElement(13987); + addExpectedElement(13988); + addExpectedElement(13989); + addExpectedElement(13990); + addExpectedElement(13991); + addExpectedElement(13992); + addExpectedElement(13993); + addExpectedElement(13994); + addExpectedElement(13995); + addExpectedElement(13996); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(13997); + addExpectedElement(13998); + addExpectedElement(13999); + addExpectedElement(14000); + addExpectedElement(14001); + addExpectedElement(14002); + addExpectedElement(14003); + addExpectedElement(14004); + addExpectedElement(14005); + addExpectedElement(14006); + addExpectedElement(14007); + addExpectedElement(14008); + addExpectedElement(14009); + addExpectedElement(14010); + addExpectedElement(14011); + addExpectedElement(14012); + addExpectedElement(14013); + addExpectedElement(14014); + addExpectedElement(14015); + addExpectedElement(14016); + addExpectedElement(14017); + addExpectedElement(14018); + addExpectedElement(14019); + addExpectedElement(14020); + addExpectedElement(14021); + addExpectedElement(14022); + addExpectedElement(14023); + addExpectedElement(14024); + addExpectedElement(14025); + addExpectedElement(14026); + addExpectedElement(14027); + addExpectedElement(14028); + addExpectedElement(14029); + addExpectedElement(14030); + addExpectedElement(14031); + addExpectedElement(14032); + addExpectedElement(14033); + addExpectedElement(14034); + addExpectedElement(14035); + addExpectedElement(14036); + addExpectedElement(14037); + addExpectedElement(14038); + addExpectedElement(14039); + addExpectedElement(14040); + addExpectedElement(14041); + addExpectedElement(14042); + addExpectedElement(14043); + addExpectedElement(14044); + addExpectedElement(14045); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 75, parse_org_emftext_language_java_expressions_ConditionalExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_ConditionalExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_ConditionalOrExpression" + // Java.g:26886:1: parse_org_emftext_language_java_expressions_ConditionalOrExpression returns [org.emftext.language.java.expressions.ConditionalOrExpression element = null] : (a0_0= parse_org_emftext_language_java_expressions_ConditionalAndExpression ) ( (a1= '||' (a2_0= parse_org_emftext_language_java_expressions_ConditionalAndExpression ) ) )* ; + public final org.emftext.language.java.expressions.ConditionalOrExpression parse_org_emftext_language_java_expressions_ConditionalOrExpression() throws RecognitionException { + org.emftext.language.java.expressions.ConditionalOrExpression element = null; + + int parse_org_emftext_language_java_expressions_ConditionalOrExpression_StartIndex = input.index(); + + Token a1=null; + org.emftext.language.java.expressions.ConditionalAndExpression a0_0 =null; + + org.emftext.language.java.expressions.ConditionalAndExpression a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 76) ) { return element; } + + // Java.g:26889:2: ( (a0_0= parse_org_emftext_language_java_expressions_ConditionalAndExpression ) ( (a1= '||' (a2_0= parse_org_emftext_language_java_expressions_ConditionalAndExpression ) ) )* ) + // Java.g:26890:2: (a0_0= parse_org_emftext_language_java_expressions_ConditionalAndExpression ) ( (a1= '||' (a2_0= parse_org_emftext_language_java_expressions_ConditionalAndExpression ) ) )* + { + // Java.g:26890:2: (a0_0= parse_org_emftext_language_java_expressions_ConditionalAndExpression ) + // Java.g:26891:3: a0_0= parse_org_emftext_language_java_expressions_ConditionalAndExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_ConditionalAndExpression_in_parse_org_emftext_language_java_expressions_ConditionalOrExpression18290); + a0_0=parse_org_emftext_language_java_expressions_ConditionalAndExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createConditionalOrExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.CONDITIONAL_OR_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_74_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14046); + addExpectedElement(14047); + addExpectedElement(14048); + addExpectedElement(14049); + addExpectedElement(14050); + addExpectedElement(14051); + addExpectedElement(14052); + addExpectedElement(14053); + addExpectedElement(14054); + addExpectedElement(14055); + addExpectedElement(14056); + addExpectedElement(14057); + addExpectedElement(14058); + addExpectedElement(14059); + addExpectedElement(14060); + addExpectedElement(14061); + addExpectedElement(14062); + addExpectedElement(14063); + addExpectedElement(14064); + addExpectedElement(14065); + addExpectedElement(14066); + addExpectedElement(14067); + addExpectedElement(14068); + addExpectedElement(14069); + addExpectedElement(14070); + addExpectedElement(14071); + addExpectedElement(14072); + addExpectedElement(14073); + addExpectedElement(14074); + addExpectedElement(14075); + addExpectedElement(14076); + addExpectedElement(14077); + addExpectedElement(14078); + addExpectedElement(14079); + addExpectedElement(14080); + addExpectedElement(14081); + addExpectedElement(14082); + addExpectedElement(14083); + addExpectedElement(14084); + addExpectedElement(14085); + addExpectedElement(14086); + addExpectedElement(14087); + addExpectedElement(14088); + addExpectedElement(14089); + addExpectedElement(14090); + addExpectedElement(14091); + addExpectedElement(14092); + addExpectedElement(14093); + addExpectedElement(14094); + addExpectedElement(14095); + } + + // Java.g:26965:2: ( (a1= '||' (a2_0= parse_org_emftext_language_java_expressions_ConditionalAndExpression ) ) )* + loop196: + do { + int alt196=2; + int LA196_0 = input.LA(1); + + if ( (LA196_0==108) ) { + alt196=1; + } + + + switch (alt196) { + case 1 : + // Java.g:26966:3: (a1= '||' (a2_0= parse_org_emftext_language_java_expressions_ConditionalAndExpression ) ) + { + // Java.g:26966:3: (a1= '||' (a2_0= parse_org_emftext_language_java_expressions_ConditionalAndExpression ) ) + // Java.g:26967:4: a1= '||' (a2_0= parse_org_emftext_language_java_expressions_ConditionalAndExpression ) + { + a1=(Token)match(input,108,FOLLOW_108_in_parse_org_emftext_language_java_expressions_ConditionalOrExpression18317); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createConditionalOrExpression(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_74_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14096); + addExpectedElement(14097); + addExpectedElement(14098); + addExpectedElement(14099); + addExpectedElement(14100); + addExpectedElement(14101); + addExpectedElement(14102); + addExpectedElement(14103); + addExpectedElement(14104); + addExpectedElement(14105); + addExpectedElement(14106); + addExpectedElement(14107); + addExpectedElement(14108); + addExpectedElement(14109); + addExpectedElement(14110); + addExpectedElement(14111); + addExpectedElement(14112); + addExpectedElement(14113); + addExpectedElement(14114); + addExpectedElement(14115); + addExpectedElement(14116); + addExpectedElement(14117); + addExpectedElement(14118); + addExpectedElement(14119); + addExpectedElement(14120); + addExpectedElement(14121); + addExpectedElement(14122); + addExpectedElement(14123); + addExpectedElement(14124); + addExpectedElement(14125); + addExpectedElement(14126); + addExpectedElement(14127); + addExpectedElement(14128); + addExpectedElement(14129); + addExpectedElement(14130); + addExpectedElement(14131); + addExpectedElement(14132); + addExpectedElement(14133); + addExpectedElement(14134); + addExpectedElement(14135); + addExpectedElement(14136); + addExpectedElement(14137); + addExpectedElement(14138); + } + + // Java.g:27023:4: (a2_0= parse_org_emftext_language_java_expressions_ConditionalAndExpression ) + // Java.g:27024:5: a2_0= parse_org_emftext_language_java_expressions_ConditionalAndExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_ConditionalAndExpression_in_parse_org_emftext_language_java_expressions_ConditionalOrExpression18343); + a2_0=parse_org_emftext_language_java_expressions_ConditionalAndExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createConditionalOrExpression(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.CONDITIONAL_OR_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_74_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14139); + addExpectedElement(14140); + addExpectedElement(14141); + addExpectedElement(14142); + addExpectedElement(14143); + addExpectedElement(14144); + addExpectedElement(14145); + addExpectedElement(14146); + addExpectedElement(14147); + addExpectedElement(14148); + addExpectedElement(14149); + addExpectedElement(14150); + addExpectedElement(14151); + addExpectedElement(14152); + addExpectedElement(14153); + addExpectedElement(14154); + addExpectedElement(14155); + addExpectedElement(14156); + addExpectedElement(14157); + addExpectedElement(14158); + addExpectedElement(14159); + addExpectedElement(14160); + addExpectedElement(14161); + addExpectedElement(14162); + addExpectedElement(14163); + addExpectedElement(14164); + addExpectedElement(14165); + addExpectedElement(14166); + addExpectedElement(14167); + addExpectedElement(14168); + addExpectedElement(14169); + addExpectedElement(14170); + addExpectedElement(14171); + addExpectedElement(14172); + addExpectedElement(14173); + addExpectedElement(14174); + addExpectedElement(14175); + addExpectedElement(14176); + addExpectedElement(14177); + addExpectedElement(14178); + addExpectedElement(14179); + addExpectedElement(14180); + addExpectedElement(14181); + addExpectedElement(14182); + addExpectedElement(14183); + addExpectedElement(14184); + addExpectedElement(14185); + addExpectedElement(14186); + addExpectedElement(14187); + addExpectedElement(14188); + } + + } + + + } + break; + + default : + break loop196; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14189); + addExpectedElement(14190); + addExpectedElement(14191); + addExpectedElement(14192); + addExpectedElement(14193); + addExpectedElement(14194); + addExpectedElement(14195); + addExpectedElement(14196); + addExpectedElement(14197); + addExpectedElement(14198); + addExpectedElement(14199); + addExpectedElement(14200); + addExpectedElement(14201); + addExpectedElement(14202); + addExpectedElement(14203); + addExpectedElement(14204); + addExpectedElement(14205); + addExpectedElement(14206); + addExpectedElement(14207); + addExpectedElement(14208); + addExpectedElement(14209); + addExpectedElement(14210); + addExpectedElement(14211); + addExpectedElement(14212); + addExpectedElement(14213); + addExpectedElement(14214); + addExpectedElement(14215); + addExpectedElement(14216); + addExpectedElement(14217); + addExpectedElement(14218); + addExpectedElement(14219); + addExpectedElement(14220); + addExpectedElement(14221); + addExpectedElement(14222); + addExpectedElement(14223); + addExpectedElement(14224); + addExpectedElement(14225); + addExpectedElement(14226); + addExpectedElement(14227); + addExpectedElement(14228); + addExpectedElement(14229); + addExpectedElement(14230); + addExpectedElement(14231); + addExpectedElement(14232); + addExpectedElement(14233); + addExpectedElement(14234); + addExpectedElement(14235); + addExpectedElement(14236); + addExpectedElement(14237); + addExpectedElement(14238); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 76, parse_org_emftext_language_java_expressions_ConditionalOrExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_ConditionalOrExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_ConditionalAndExpression" + // Java.g:27156:1: parse_org_emftext_language_java_expressions_ConditionalAndExpression returns [org.emftext.language.java.expressions.ConditionalAndExpression element = null] : (a0_0= parse_org_emftext_language_java_expressions_InclusiveOrExpression ) ( (a1= '&&' (a2_0= parse_org_emftext_language_java_expressions_InclusiveOrExpression ) ) )* ; + public final org.emftext.language.java.expressions.ConditionalAndExpression parse_org_emftext_language_java_expressions_ConditionalAndExpression() throws RecognitionException { + org.emftext.language.java.expressions.ConditionalAndExpression element = null; + + int parse_org_emftext_language_java_expressions_ConditionalAndExpression_StartIndex = input.index(); + + Token a1=null; + org.emftext.language.java.expressions.InclusiveOrExpression a0_0 =null; + + org.emftext.language.java.expressions.InclusiveOrExpression a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 77) ) { return element; } + + // Java.g:27159:2: ( (a0_0= parse_org_emftext_language_java_expressions_InclusiveOrExpression ) ( (a1= '&&' (a2_0= parse_org_emftext_language_java_expressions_InclusiveOrExpression ) ) )* ) + // Java.g:27160:2: (a0_0= parse_org_emftext_language_java_expressions_InclusiveOrExpression ) ( (a1= '&&' (a2_0= parse_org_emftext_language_java_expressions_InclusiveOrExpression ) ) )* + { + // Java.g:27160:2: (a0_0= parse_org_emftext_language_java_expressions_InclusiveOrExpression ) + // Java.g:27161:3: a0_0= parse_org_emftext_language_java_expressions_InclusiveOrExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_InclusiveOrExpression_in_parse_org_emftext_language_java_expressions_ConditionalAndExpression18403); + a0_0=parse_org_emftext_language_java_expressions_InclusiveOrExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createConditionalAndExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.CONDITIONAL_AND_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_75_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14239); + addExpectedElement(14240); + addExpectedElement(14241); + addExpectedElement(14242); + addExpectedElement(14243); + addExpectedElement(14244); + addExpectedElement(14245); + addExpectedElement(14246); + addExpectedElement(14247); + addExpectedElement(14248); + addExpectedElement(14249); + addExpectedElement(14250); + addExpectedElement(14251); + addExpectedElement(14252); + addExpectedElement(14253); + addExpectedElement(14254); + addExpectedElement(14255); + addExpectedElement(14256); + addExpectedElement(14257); + addExpectedElement(14258); + addExpectedElement(14259); + addExpectedElement(14260); + addExpectedElement(14261); + addExpectedElement(14262); + addExpectedElement(14263); + addExpectedElement(14264); + addExpectedElement(14265); + addExpectedElement(14266); + addExpectedElement(14267); + addExpectedElement(14268); + addExpectedElement(14269); + addExpectedElement(14270); + addExpectedElement(14271); + addExpectedElement(14272); + addExpectedElement(14273); + addExpectedElement(14274); + addExpectedElement(14275); + addExpectedElement(14276); + addExpectedElement(14277); + addExpectedElement(14278); + addExpectedElement(14279); + addExpectedElement(14280); + addExpectedElement(14281); + addExpectedElement(14282); + addExpectedElement(14283); + addExpectedElement(14284); + addExpectedElement(14285); + addExpectedElement(14286); + addExpectedElement(14287); + addExpectedElement(14288); + addExpectedElement(14289); + } + + // Java.g:27236:2: ( (a1= '&&' (a2_0= parse_org_emftext_language_java_expressions_InclusiveOrExpression ) ) )* + loop197: + do { + int alt197=2; + int LA197_0 = input.LA(1); + + if ( (LA197_0==23) ) { + alt197=1; + } + + + switch (alt197) { + case 1 : + // Java.g:27237:3: (a1= '&&' (a2_0= parse_org_emftext_language_java_expressions_InclusiveOrExpression ) ) + { + // Java.g:27237:3: (a1= '&&' (a2_0= parse_org_emftext_language_java_expressions_InclusiveOrExpression ) ) + // Java.g:27238:4: a1= '&&' (a2_0= parse_org_emftext_language_java_expressions_InclusiveOrExpression ) + { + a1=(Token)match(input,23,FOLLOW_23_in_parse_org_emftext_language_java_expressions_ConditionalAndExpression18430); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createConditionalAndExpression(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_75_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14290); + addExpectedElement(14291); + addExpectedElement(14292); + addExpectedElement(14293); + addExpectedElement(14294); + addExpectedElement(14295); + addExpectedElement(14296); + addExpectedElement(14297); + addExpectedElement(14298); + addExpectedElement(14299); + addExpectedElement(14300); + addExpectedElement(14301); + addExpectedElement(14302); + addExpectedElement(14303); + addExpectedElement(14304); + addExpectedElement(14305); + addExpectedElement(14306); + addExpectedElement(14307); + addExpectedElement(14308); + addExpectedElement(14309); + addExpectedElement(14310); + addExpectedElement(14311); + addExpectedElement(14312); + addExpectedElement(14313); + addExpectedElement(14314); + addExpectedElement(14315); + addExpectedElement(14316); + addExpectedElement(14317); + addExpectedElement(14318); + addExpectedElement(14319); + addExpectedElement(14320); + addExpectedElement(14321); + addExpectedElement(14322); + addExpectedElement(14323); + addExpectedElement(14324); + addExpectedElement(14325); + addExpectedElement(14326); + addExpectedElement(14327); + addExpectedElement(14328); + addExpectedElement(14329); + addExpectedElement(14330); + addExpectedElement(14331); + addExpectedElement(14332); + } + + // Java.g:27294:4: (a2_0= parse_org_emftext_language_java_expressions_InclusiveOrExpression ) + // Java.g:27295:5: a2_0= parse_org_emftext_language_java_expressions_InclusiveOrExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_InclusiveOrExpression_in_parse_org_emftext_language_java_expressions_ConditionalAndExpression18456); + a2_0=parse_org_emftext_language_java_expressions_InclusiveOrExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createConditionalAndExpression(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.CONDITIONAL_AND_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_75_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14333); + addExpectedElement(14334); + addExpectedElement(14335); + addExpectedElement(14336); + addExpectedElement(14337); + addExpectedElement(14338); + addExpectedElement(14339); + addExpectedElement(14340); + addExpectedElement(14341); + addExpectedElement(14342); + addExpectedElement(14343); + addExpectedElement(14344); + addExpectedElement(14345); + addExpectedElement(14346); + addExpectedElement(14347); + addExpectedElement(14348); + addExpectedElement(14349); + addExpectedElement(14350); + addExpectedElement(14351); + addExpectedElement(14352); + addExpectedElement(14353); + addExpectedElement(14354); + addExpectedElement(14355); + addExpectedElement(14356); + addExpectedElement(14357); + addExpectedElement(14358); + addExpectedElement(14359); + addExpectedElement(14360); + addExpectedElement(14361); + addExpectedElement(14362); + addExpectedElement(14363); + addExpectedElement(14364); + addExpectedElement(14365); + addExpectedElement(14366); + addExpectedElement(14367); + addExpectedElement(14368); + addExpectedElement(14369); + addExpectedElement(14370); + addExpectedElement(14371); + addExpectedElement(14372); + addExpectedElement(14373); + addExpectedElement(14374); + addExpectedElement(14375); + addExpectedElement(14376); + addExpectedElement(14377); + addExpectedElement(14378); + addExpectedElement(14379); + addExpectedElement(14380); + addExpectedElement(14381); + addExpectedElement(14382); + addExpectedElement(14383); + } + + } + + + } + break; + + default : + break loop197; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14384); + addExpectedElement(14385); + addExpectedElement(14386); + addExpectedElement(14387); + addExpectedElement(14388); + addExpectedElement(14389); + addExpectedElement(14390); + addExpectedElement(14391); + addExpectedElement(14392); + addExpectedElement(14393); + addExpectedElement(14394); + addExpectedElement(14395); + addExpectedElement(14396); + addExpectedElement(14397); + addExpectedElement(14398); + addExpectedElement(14399); + addExpectedElement(14400); + addExpectedElement(14401); + addExpectedElement(14402); + addExpectedElement(14403); + addExpectedElement(14404); + addExpectedElement(14405); + addExpectedElement(14406); + addExpectedElement(14407); + addExpectedElement(14408); + addExpectedElement(14409); + addExpectedElement(14410); + addExpectedElement(14411); + addExpectedElement(14412); + addExpectedElement(14413); + addExpectedElement(14414); + addExpectedElement(14415); + addExpectedElement(14416); + addExpectedElement(14417); + addExpectedElement(14418); + addExpectedElement(14419); + addExpectedElement(14420); + addExpectedElement(14421); + addExpectedElement(14422); + addExpectedElement(14423); + addExpectedElement(14424); + addExpectedElement(14425); + addExpectedElement(14426); + addExpectedElement(14427); + addExpectedElement(14428); + addExpectedElement(14429); + addExpectedElement(14430); + addExpectedElement(14431); + addExpectedElement(14432); + addExpectedElement(14433); + addExpectedElement(14434); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 77, parse_org_emftext_language_java_expressions_ConditionalAndExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_ConditionalAndExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_InclusiveOrExpression" + // Java.g:27429:1: parse_org_emftext_language_java_expressions_InclusiveOrExpression returns [org.emftext.language.java.expressions.InclusiveOrExpression element = null] : (a0_0= parse_org_emftext_language_java_expressions_ExclusiveOrExpression ) ( (a1= '|' (a2_0= parse_org_emftext_language_java_expressions_ExclusiveOrExpression ) ) )* ; + public final org.emftext.language.java.expressions.InclusiveOrExpression parse_org_emftext_language_java_expressions_InclusiveOrExpression() throws RecognitionException { + org.emftext.language.java.expressions.InclusiveOrExpression element = null; + + int parse_org_emftext_language_java_expressions_InclusiveOrExpression_StartIndex = input.index(); + + Token a1=null; + org.emftext.language.java.expressions.ExclusiveOrExpression a0_0 =null; + + org.emftext.language.java.expressions.ExclusiveOrExpression a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 78) ) { return element; } + + // Java.g:27432:2: ( (a0_0= parse_org_emftext_language_java_expressions_ExclusiveOrExpression ) ( (a1= '|' (a2_0= parse_org_emftext_language_java_expressions_ExclusiveOrExpression ) ) )* ) + // Java.g:27433:2: (a0_0= parse_org_emftext_language_java_expressions_ExclusiveOrExpression ) ( (a1= '|' (a2_0= parse_org_emftext_language_java_expressions_ExclusiveOrExpression ) ) )* + { + // Java.g:27433:2: (a0_0= parse_org_emftext_language_java_expressions_ExclusiveOrExpression ) + // Java.g:27434:3: a0_0= parse_org_emftext_language_java_expressions_ExclusiveOrExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_ExclusiveOrExpression_in_parse_org_emftext_language_java_expressions_InclusiveOrExpression18516); + a0_0=parse_org_emftext_language_java_expressions_ExclusiveOrExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createInclusiveOrExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.INCLUSIVE_OR_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_76_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14435); + addExpectedElement(14436); + addExpectedElement(14437); + addExpectedElement(14438); + addExpectedElement(14439); + addExpectedElement(14440); + addExpectedElement(14441); + addExpectedElement(14442); + addExpectedElement(14443); + addExpectedElement(14444); + addExpectedElement(14445); + addExpectedElement(14446); + addExpectedElement(14447); + addExpectedElement(14448); + addExpectedElement(14449); + addExpectedElement(14450); + addExpectedElement(14451); + addExpectedElement(14452); + addExpectedElement(14453); + addExpectedElement(14454); + addExpectedElement(14455); + addExpectedElement(14456); + addExpectedElement(14457); + addExpectedElement(14458); + addExpectedElement(14459); + addExpectedElement(14460); + addExpectedElement(14461); + addExpectedElement(14462); + addExpectedElement(14463); + addExpectedElement(14464); + addExpectedElement(14465); + addExpectedElement(14466); + addExpectedElement(14467); + addExpectedElement(14468); + addExpectedElement(14469); + addExpectedElement(14470); + addExpectedElement(14471); + addExpectedElement(14472); + addExpectedElement(14473); + addExpectedElement(14474); + addExpectedElement(14475); + addExpectedElement(14476); + addExpectedElement(14477); + addExpectedElement(14478); + addExpectedElement(14479); + addExpectedElement(14480); + addExpectedElement(14481); + addExpectedElement(14482); + addExpectedElement(14483); + addExpectedElement(14484); + addExpectedElement(14485); + addExpectedElement(14486); + } + + // Java.g:27510:2: ( (a1= '|' (a2_0= parse_org_emftext_language_java_expressions_ExclusiveOrExpression ) ) )* + loop198: + do { + int alt198=2; + int LA198_0 = input.LA(1); + + if ( (LA198_0==106) ) { + alt198=1; + } + + + switch (alt198) { + case 1 : + // Java.g:27511:3: (a1= '|' (a2_0= parse_org_emftext_language_java_expressions_ExclusiveOrExpression ) ) + { + // Java.g:27511:3: (a1= '|' (a2_0= parse_org_emftext_language_java_expressions_ExclusiveOrExpression ) ) + // Java.g:27512:4: a1= '|' (a2_0= parse_org_emftext_language_java_expressions_ExclusiveOrExpression ) + { + a1=(Token)match(input,106,FOLLOW_106_in_parse_org_emftext_language_java_expressions_InclusiveOrExpression18543); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createInclusiveOrExpression(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_76_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14487); + addExpectedElement(14488); + addExpectedElement(14489); + addExpectedElement(14490); + addExpectedElement(14491); + addExpectedElement(14492); + addExpectedElement(14493); + addExpectedElement(14494); + addExpectedElement(14495); + addExpectedElement(14496); + addExpectedElement(14497); + addExpectedElement(14498); + addExpectedElement(14499); + addExpectedElement(14500); + addExpectedElement(14501); + addExpectedElement(14502); + addExpectedElement(14503); + addExpectedElement(14504); + addExpectedElement(14505); + addExpectedElement(14506); + addExpectedElement(14507); + addExpectedElement(14508); + addExpectedElement(14509); + addExpectedElement(14510); + addExpectedElement(14511); + addExpectedElement(14512); + addExpectedElement(14513); + addExpectedElement(14514); + addExpectedElement(14515); + addExpectedElement(14516); + addExpectedElement(14517); + addExpectedElement(14518); + addExpectedElement(14519); + addExpectedElement(14520); + addExpectedElement(14521); + addExpectedElement(14522); + addExpectedElement(14523); + addExpectedElement(14524); + addExpectedElement(14525); + addExpectedElement(14526); + addExpectedElement(14527); + addExpectedElement(14528); + addExpectedElement(14529); + } + + // Java.g:27568:4: (a2_0= parse_org_emftext_language_java_expressions_ExclusiveOrExpression ) + // Java.g:27569:5: a2_0= parse_org_emftext_language_java_expressions_ExclusiveOrExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_ExclusiveOrExpression_in_parse_org_emftext_language_java_expressions_InclusiveOrExpression18569); + a2_0=parse_org_emftext_language_java_expressions_ExclusiveOrExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createInclusiveOrExpression(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.INCLUSIVE_OR_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_76_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14530); + addExpectedElement(14531); + addExpectedElement(14532); + addExpectedElement(14533); + addExpectedElement(14534); + addExpectedElement(14535); + addExpectedElement(14536); + addExpectedElement(14537); + addExpectedElement(14538); + addExpectedElement(14539); + addExpectedElement(14540); + addExpectedElement(14541); + addExpectedElement(14542); + addExpectedElement(14543); + addExpectedElement(14544); + addExpectedElement(14545); + addExpectedElement(14546); + addExpectedElement(14547); + addExpectedElement(14548); + addExpectedElement(14549); + addExpectedElement(14550); + addExpectedElement(14551); + addExpectedElement(14552); + addExpectedElement(14553); + addExpectedElement(14554); + addExpectedElement(14555); + addExpectedElement(14556); + addExpectedElement(14557); + addExpectedElement(14558); + addExpectedElement(14559); + addExpectedElement(14560); + addExpectedElement(14561); + addExpectedElement(14562); + addExpectedElement(14563); + addExpectedElement(14564); + addExpectedElement(14565); + addExpectedElement(14566); + addExpectedElement(14567); + addExpectedElement(14568); + addExpectedElement(14569); + addExpectedElement(14570); + addExpectedElement(14571); + addExpectedElement(14572); + addExpectedElement(14573); + addExpectedElement(14574); + addExpectedElement(14575); + addExpectedElement(14576); + addExpectedElement(14577); + addExpectedElement(14578); + addExpectedElement(14579); + addExpectedElement(14580); + addExpectedElement(14581); + } + + } + + + } + break; + + default : + break loop198; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14582); + addExpectedElement(14583); + addExpectedElement(14584); + addExpectedElement(14585); + addExpectedElement(14586); + addExpectedElement(14587); + addExpectedElement(14588); + addExpectedElement(14589); + addExpectedElement(14590); + addExpectedElement(14591); + addExpectedElement(14592); + addExpectedElement(14593); + addExpectedElement(14594); + addExpectedElement(14595); + addExpectedElement(14596); + addExpectedElement(14597); + addExpectedElement(14598); + addExpectedElement(14599); + addExpectedElement(14600); + addExpectedElement(14601); + addExpectedElement(14602); + addExpectedElement(14603); + addExpectedElement(14604); + addExpectedElement(14605); + addExpectedElement(14606); + addExpectedElement(14607); + addExpectedElement(14608); + addExpectedElement(14609); + addExpectedElement(14610); + addExpectedElement(14611); + addExpectedElement(14612); + addExpectedElement(14613); + addExpectedElement(14614); + addExpectedElement(14615); + addExpectedElement(14616); + addExpectedElement(14617); + addExpectedElement(14618); + addExpectedElement(14619); + addExpectedElement(14620); + addExpectedElement(14621); + addExpectedElement(14622); + addExpectedElement(14623); + addExpectedElement(14624); + addExpectedElement(14625); + addExpectedElement(14626); + addExpectedElement(14627); + addExpectedElement(14628); + addExpectedElement(14629); + addExpectedElement(14630); + addExpectedElement(14631); + addExpectedElement(14632); + addExpectedElement(14633); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 78, parse_org_emftext_language_java_expressions_InclusiveOrExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_InclusiveOrExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_ExclusiveOrExpression" + // Java.g:27705:1: parse_org_emftext_language_java_expressions_ExclusiveOrExpression returns [org.emftext.language.java.expressions.ExclusiveOrExpression element = null] : (a0_0= parse_org_emftext_language_java_expressions_AndExpression ) ( (a1= '^' (a2_0= parse_org_emftext_language_java_expressions_AndExpression ) ) )* ; + public final org.emftext.language.java.expressions.ExclusiveOrExpression parse_org_emftext_language_java_expressions_ExclusiveOrExpression() throws RecognitionException { + org.emftext.language.java.expressions.ExclusiveOrExpression element = null; + + int parse_org_emftext_language_java_expressions_ExclusiveOrExpression_StartIndex = input.index(); + + Token a1=null; + org.emftext.language.java.expressions.AndExpression a0_0 =null; + + org.emftext.language.java.expressions.AndExpression a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 79) ) { return element; } + + // Java.g:27708:2: ( (a0_0= parse_org_emftext_language_java_expressions_AndExpression ) ( (a1= '^' (a2_0= parse_org_emftext_language_java_expressions_AndExpression ) ) )* ) + // Java.g:27709:2: (a0_0= parse_org_emftext_language_java_expressions_AndExpression ) ( (a1= '^' (a2_0= parse_org_emftext_language_java_expressions_AndExpression ) ) )* + { + // Java.g:27709:2: (a0_0= parse_org_emftext_language_java_expressions_AndExpression ) + // Java.g:27710:3: a0_0= parse_org_emftext_language_java_expressions_AndExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AndExpression_in_parse_org_emftext_language_java_expressions_ExclusiveOrExpression18629); + a0_0=parse_org_emftext_language_java_expressions_AndExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createExclusiveOrExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.EXCLUSIVE_OR_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_77_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14634); + addExpectedElement(14635); + addExpectedElement(14636); + addExpectedElement(14637); + addExpectedElement(14638); + addExpectedElement(14639); + addExpectedElement(14640); + addExpectedElement(14641); + addExpectedElement(14642); + addExpectedElement(14643); + addExpectedElement(14644); + addExpectedElement(14645); + addExpectedElement(14646); + addExpectedElement(14647); + addExpectedElement(14648); + addExpectedElement(14649); + addExpectedElement(14650); + addExpectedElement(14651); + addExpectedElement(14652); + addExpectedElement(14653); + addExpectedElement(14654); + addExpectedElement(14655); + addExpectedElement(14656); + addExpectedElement(14657); + addExpectedElement(14658); + addExpectedElement(14659); + addExpectedElement(14660); + addExpectedElement(14661); + addExpectedElement(14662); + addExpectedElement(14663); + addExpectedElement(14664); + addExpectedElement(14665); + addExpectedElement(14666); + addExpectedElement(14667); + addExpectedElement(14668); + addExpectedElement(14669); + addExpectedElement(14670); + addExpectedElement(14671); + addExpectedElement(14672); + addExpectedElement(14673); + addExpectedElement(14674); + addExpectedElement(14675); + addExpectedElement(14676); + addExpectedElement(14677); + addExpectedElement(14678); + addExpectedElement(14679); + addExpectedElement(14680); + addExpectedElement(14681); + addExpectedElement(14682); + addExpectedElement(14683); + addExpectedElement(14684); + addExpectedElement(14685); + addExpectedElement(14686); + } + + // Java.g:27787:2: ( (a1= '^' (a2_0= parse_org_emftext_language_java_expressions_AndExpression ) ) )* + loop199: + do { + int alt199=2; + int LA199_0 = input.LA(1); + + if ( (LA199_0==54) ) { + alt199=1; + } + + + switch (alt199) { + case 1 : + // Java.g:27788:3: (a1= '^' (a2_0= parse_org_emftext_language_java_expressions_AndExpression ) ) + { + // Java.g:27788:3: (a1= '^' (a2_0= parse_org_emftext_language_java_expressions_AndExpression ) ) + // Java.g:27789:4: a1= '^' (a2_0= parse_org_emftext_language_java_expressions_AndExpression ) + { + a1=(Token)match(input,54,FOLLOW_54_in_parse_org_emftext_language_java_expressions_ExclusiveOrExpression18656); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createExclusiveOrExpression(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_77_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14687); + addExpectedElement(14688); + addExpectedElement(14689); + addExpectedElement(14690); + addExpectedElement(14691); + addExpectedElement(14692); + addExpectedElement(14693); + addExpectedElement(14694); + addExpectedElement(14695); + addExpectedElement(14696); + addExpectedElement(14697); + addExpectedElement(14698); + addExpectedElement(14699); + addExpectedElement(14700); + addExpectedElement(14701); + addExpectedElement(14702); + addExpectedElement(14703); + addExpectedElement(14704); + addExpectedElement(14705); + addExpectedElement(14706); + addExpectedElement(14707); + addExpectedElement(14708); + addExpectedElement(14709); + addExpectedElement(14710); + addExpectedElement(14711); + addExpectedElement(14712); + addExpectedElement(14713); + addExpectedElement(14714); + addExpectedElement(14715); + addExpectedElement(14716); + addExpectedElement(14717); + addExpectedElement(14718); + addExpectedElement(14719); + addExpectedElement(14720); + addExpectedElement(14721); + addExpectedElement(14722); + addExpectedElement(14723); + addExpectedElement(14724); + addExpectedElement(14725); + addExpectedElement(14726); + addExpectedElement(14727); + addExpectedElement(14728); + addExpectedElement(14729); + } + + // Java.g:27845:4: (a2_0= parse_org_emftext_language_java_expressions_AndExpression ) + // Java.g:27846:5: a2_0= parse_org_emftext_language_java_expressions_AndExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AndExpression_in_parse_org_emftext_language_java_expressions_ExclusiveOrExpression18682); + a2_0=parse_org_emftext_language_java_expressions_AndExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createExclusiveOrExpression(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.EXCLUSIVE_OR_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_77_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14730); + addExpectedElement(14731); + addExpectedElement(14732); + addExpectedElement(14733); + addExpectedElement(14734); + addExpectedElement(14735); + addExpectedElement(14736); + addExpectedElement(14737); + addExpectedElement(14738); + addExpectedElement(14739); + addExpectedElement(14740); + addExpectedElement(14741); + addExpectedElement(14742); + addExpectedElement(14743); + addExpectedElement(14744); + addExpectedElement(14745); + addExpectedElement(14746); + addExpectedElement(14747); + addExpectedElement(14748); + addExpectedElement(14749); + addExpectedElement(14750); + addExpectedElement(14751); + addExpectedElement(14752); + addExpectedElement(14753); + addExpectedElement(14754); + addExpectedElement(14755); + addExpectedElement(14756); + addExpectedElement(14757); + addExpectedElement(14758); + addExpectedElement(14759); + addExpectedElement(14760); + addExpectedElement(14761); + addExpectedElement(14762); + addExpectedElement(14763); + addExpectedElement(14764); + addExpectedElement(14765); + addExpectedElement(14766); + addExpectedElement(14767); + addExpectedElement(14768); + addExpectedElement(14769); + addExpectedElement(14770); + addExpectedElement(14771); + addExpectedElement(14772); + addExpectedElement(14773); + addExpectedElement(14774); + addExpectedElement(14775); + addExpectedElement(14776); + addExpectedElement(14777); + addExpectedElement(14778); + addExpectedElement(14779); + addExpectedElement(14780); + addExpectedElement(14781); + addExpectedElement(14782); + } + + } + + + } + break; + + default : + break loop199; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14783); + addExpectedElement(14784); + addExpectedElement(14785); + addExpectedElement(14786); + addExpectedElement(14787); + addExpectedElement(14788); + addExpectedElement(14789); + addExpectedElement(14790); + addExpectedElement(14791); + addExpectedElement(14792); + addExpectedElement(14793); + addExpectedElement(14794); + addExpectedElement(14795); + addExpectedElement(14796); + addExpectedElement(14797); + addExpectedElement(14798); + addExpectedElement(14799); + addExpectedElement(14800); + addExpectedElement(14801); + addExpectedElement(14802); + addExpectedElement(14803); + addExpectedElement(14804); + addExpectedElement(14805); + addExpectedElement(14806); + addExpectedElement(14807); + addExpectedElement(14808); + addExpectedElement(14809); + addExpectedElement(14810); + addExpectedElement(14811); + addExpectedElement(14812); + addExpectedElement(14813); + addExpectedElement(14814); + addExpectedElement(14815); + addExpectedElement(14816); + addExpectedElement(14817); + addExpectedElement(14818); + addExpectedElement(14819); + addExpectedElement(14820); + addExpectedElement(14821); + addExpectedElement(14822); + addExpectedElement(14823); + addExpectedElement(14824); + addExpectedElement(14825); + addExpectedElement(14826); + addExpectedElement(14827); + addExpectedElement(14828); + addExpectedElement(14829); + addExpectedElement(14830); + addExpectedElement(14831); + addExpectedElement(14832); + addExpectedElement(14833); + addExpectedElement(14834); + addExpectedElement(14835); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 79, parse_org_emftext_language_java_expressions_ExclusiveOrExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_ExclusiveOrExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_AndExpression" + // Java.g:27984:1: parse_org_emftext_language_java_expressions_AndExpression returns [org.emftext.language.java.expressions.AndExpression element = null] : (a0_0= parse_org_emftext_language_java_expressions_EqualityExpression ) ( (a1= '&' (a2_0= parse_org_emftext_language_java_expressions_EqualityExpression ) ) )* ; + public final org.emftext.language.java.expressions.AndExpression parse_org_emftext_language_java_expressions_AndExpression() throws RecognitionException { + org.emftext.language.java.expressions.AndExpression element = null; + + int parse_org_emftext_language_java_expressions_AndExpression_StartIndex = input.index(); + + Token a1=null; + org.emftext.language.java.expressions.EqualityExpression a0_0 =null; + + org.emftext.language.java.expressions.EqualityExpression a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 80) ) { return element; } + + // Java.g:27987:2: ( (a0_0= parse_org_emftext_language_java_expressions_EqualityExpression ) ( (a1= '&' (a2_0= parse_org_emftext_language_java_expressions_EqualityExpression ) ) )* ) + // Java.g:27988:2: (a0_0= parse_org_emftext_language_java_expressions_EqualityExpression ) ( (a1= '&' (a2_0= parse_org_emftext_language_java_expressions_EqualityExpression ) ) )* + { + // Java.g:27988:2: (a0_0= parse_org_emftext_language_java_expressions_EqualityExpression ) + // Java.g:27989:3: a0_0= parse_org_emftext_language_java_expressions_EqualityExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_EqualityExpression_in_parse_org_emftext_language_java_expressions_AndExpression18742); + a0_0=parse_org_emftext_language_java_expressions_EqualityExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createAndExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.AND_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_78_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14836); + addExpectedElement(14837); + addExpectedElement(14838); + addExpectedElement(14839); + addExpectedElement(14840); + addExpectedElement(14841); + addExpectedElement(14842); + addExpectedElement(14843); + addExpectedElement(14844); + addExpectedElement(14845); + addExpectedElement(14846); + addExpectedElement(14847); + addExpectedElement(14848); + addExpectedElement(14849); + addExpectedElement(14850); + addExpectedElement(14851); + addExpectedElement(14852); + addExpectedElement(14853); + addExpectedElement(14854); + addExpectedElement(14855); + addExpectedElement(14856); + addExpectedElement(14857); + addExpectedElement(14858); + addExpectedElement(14859); + addExpectedElement(14860); + addExpectedElement(14861); + addExpectedElement(14862); + addExpectedElement(14863); + addExpectedElement(14864); + addExpectedElement(14865); + addExpectedElement(14866); + addExpectedElement(14867); + addExpectedElement(14868); + addExpectedElement(14869); + addExpectedElement(14870); + addExpectedElement(14871); + addExpectedElement(14872); + addExpectedElement(14873); + addExpectedElement(14874); + addExpectedElement(14875); + addExpectedElement(14876); + addExpectedElement(14877); + addExpectedElement(14878); + addExpectedElement(14879); + addExpectedElement(14880); + addExpectedElement(14881); + addExpectedElement(14882); + addExpectedElement(14883); + addExpectedElement(14884); + addExpectedElement(14885); + addExpectedElement(14886); + addExpectedElement(14887); + addExpectedElement(14888); + addExpectedElement(14889); + } + + // Java.g:28067:2: ( (a1= '&' (a2_0= parse_org_emftext_language_java_expressions_EqualityExpression ) ) )* + loop200: + do { + int alt200=2; + int LA200_0 = input.LA(1); + + if ( (LA200_0==24) ) { + alt200=1; + } + + + switch (alt200) { + case 1 : + // Java.g:28068:3: (a1= '&' (a2_0= parse_org_emftext_language_java_expressions_EqualityExpression ) ) + { + // Java.g:28068:3: (a1= '&' (a2_0= parse_org_emftext_language_java_expressions_EqualityExpression ) ) + // Java.g:28069:4: a1= '&' (a2_0= parse_org_emftext_language_java_expressions_EqualityExpression ) + { + a1=(Token)match(input,24,FOLLOW_24_in_parse_org_emftext_language_java_expressions_AndExpression18769); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createAndExpression(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_78_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14890); + addExpectedElement(14891); + addExpectedElement(14892); + addExpectedElement(14893); + addExpectedElement(14894); + addExpectedElement(14895); + addExpectedElement(14896); + addExpectedElement(14897); + addExpectedElement(14898); + addExpectedElement(14899); + addExpectedElement(14900); + addExpectedElement(14901); + addExpectedElement(14902); + addExpectedElement(14903); + addExpectedElement(14904); + addExpectedElement(14905); + addExpectedElement(14906); + addExpectedElement(14907); + addExpectedElement(14908); + addExpectedElement(14909); + addExpectedElement(14910); + addExpectedElement(14911); + addExpectedElement(14912); + addExpectedElement(14913); + addExpectedElement(14914); + addExpectedElement(14915); + addExpectedElement(14916); + addExpectedElement(14917); + addExpectedElement(14918); + addExpectedElement(14919); + addExpectedElement(14920); + addExpectedElement(14921); + addExpectedElement(14922); + addExpectedElement(14923); + addExpectedElement(14924); + addExpectedElement(14925); + addExpectedElement(14926); + addExpectedElement(14927); + addExpectedElement(14928); + addExpectedElement(14929); + addExpectedElement(14930); + addExpectedElement(14931); + addExpectedElement(14932); + } + + // Java.g:28125:4: (a2_0= parse_org_emftext_language_java_expressions_EqualityExpression ) + // Java.g:28126:5: a2_0= parse_org_emftext_language_java_expressions_EqualityExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_EqualityExpression_in_parse_org_emftext_language_java_expressions_AndExpression18795); + a2_0=parse_org_emftext_language_java_expressions_EqualityExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createAndExpression(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.AND_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_78_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14933); + addExpectedElement(14934); + addExpectedElement(14935); + addExpectedElement(14936); + addExpectedElement(14937); + addExpectedElement(14938); + addExpectedElement(14939); + addExpectedElement(14940); + addExpectedElement(14941); + addExpectedElement(14942); + addExpectedElement(14943); + addExpectedElement(14944); + addExpectedElement(14945); + addExpectedElement(14946); + addExpectedElement(14947); + addExpectedElement(14948); + addExpectedElement(14949); + addExpectedElement(14950); + addExpectedElement(14951); + addExpectedElement(14952); + addExpectedElement(14953); + addExpectedElement(14954); + addExpectedElement(14955); + addExpectedElement(14956); + addExpectedElement(14957); + addExpectedElement(14958); + addExpectedElement(14959); + addExpectedElement(14960); + addExpectedElement(14961); + addExpectedElement(14962); + addExpectedElement(14963); + addExpectedElement(14964); + addExpectedElement(14965); + addExpectedElement(14966); + addExpectedElement(14967); + addExpectedElement(14968); + addExpectedElement(14969); + addExpectedElement(14970); + addExpectedElement(14971); + addExpectedElement(14972); + addExpectedElement(14973); + addExpectedElement(14974); + addExpectedElement(14975); + addExpectedElement(14976); + addExpectedElement(14977); + addExpectedElement(14978); + addExpectedElement(14979); + addExpectedElement(14980); + addExpectedElement(14981); + addExpectedElement(14982); + addExpectedElement(14983); + addExpectedElement(14984); + addExpectedElement(14985); + addExpectedElement(14986); + } + + } + + + } + break; + + default : + break loop200; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(14987); + addExpectedElement(14988); + addExpectedElement(14989); + addExpectedElement(14990); + addExpectedElement(14991); + addExpectedElement(14992); + addExpectedElement(14993); + addExpectedElement(14994); + addExpectedElement(14995); + addExpectedElement(14996); + addExpectedElement(14997); + addExpectedElement(14998); + addExpectedElement(14999); + addExpectedElement(15000); + addExpectedElement(15001); + addExpectedElement(15002); + addExpectedElement(15003); + addExpectedElement(15004); + addExpectedElement(15005); + addExpectedElement(15006); + addExpectedElement(15007); + addExpectedElement(15008); + addExpectedElement(15009); + addExpectedElement(15010); + addExpectedElement(15011); + addExpectedElement(15012); + addExpectedElement(15013); + addExpectedElement(15014); + addExpectedElement(15015); + addExpectedElement(15016); + addExpectedElement(15017); + addExpectedElement(15018); + addExpectedElement(15019); + addExpectedElement(15020); + addExpectedElement(15021); + addExpectedElement(15022); + addExpectedElement(15023); + addExpectedElement(15024); + addExpectedElement(15025); + addExpectedElement(15026); + addExpectedElement(15027); + addExpectedElement(15028); + addExpectedElement(15029); + addExpectedElement(15030); + addExpectedElement(15031); + addExpectedElement(15032); + addExpectedElement(15033); + addExpectedElement(15034); + addExpectedElement(15035); + addExpectedElement(15036); + addExpectedElement(15037); + addExpectedElement(15038); + addExpectedElement(15039); + addExpectedElement(15040); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 80, parse_org_emftext_language_java_expressions_AndExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_AndExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_EqualityExpression" + // Java.g:28266:1: parse_org_emftext_language_java_expressions_EqualityExpression returns [org.emftext.language.java.expressions.EqualityExpression element = null] : (a0_0= parse_org_emftext_language_java_expressions_InstanceOfExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_EqualityOperator ) (a2_0= parse_org_emftext_language_java_expressions_InstanceOfExpression ) ) )* ; + public final org.emftext.language.java.expressions.EqualityExpression parse_org_emftext_language_java_expressions_EqualityExpression() throws RecognitionException { + org.emftext.language.java.expressions.EqualityExpression element = null; + + int parse_org_emftext_language_java_expressions_EqualityExpression_StartIndex = input.index(); + + org.emftext.language.java.expressions.InstanceOfExpression a0_0 =null; + + org.emftext.language.java.operators.EqualityOperator a1_0 =null; + + org.emftext.language.java.expressions.InstanceOfExpression a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 81) ) { return element; } + + // Java.g:28269:2: ( (a0_0= parse_org_emftext_language_java_expressions_InstanceOfExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_EqualityOperator ) (a2_0= parse_org_emftext_language_java_expressions_InstanceOfExpression ) ) )* ) + // Java.g:28270:2: (a0_0= parse_org_emftext_language_java_expressions_InstanceOfExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_EqualityOperator ) (a2_0= parse_org_emftext_language_java_expressions_InstanceOfExpression ) ) )* + { + // Java.g:28270:2: (a0_0= parse_org_emftext_language_java_expressions_InstanceOfExpression ) + // Java.g:28271:3: a0_0= parse_org_emftext_language_java_expressions_InstanceOfExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_InstanceOfExpression_in_parse_org_emftext_language_java_expressions_EqualityExpression18855); + a0_0=parse_org_emftext_language_java_expressions_InstanceOfExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createEqualityExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.EQUALITY_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_79_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15041); + addExpectedElement(15042); + addExpectedElement(15043); + addExpectedElement(15044); + addExpectedElement(15045); + addExpectedElement(15046); + addExpectedElement(15047); + addExpectedElement(15048); + addExpectedElement(15049); + addExpectedElement(15050); + addExpectedElement(15051); + addExpectedElement(15052); + addExpectedElement(15053); + addExpectedElement(15054); + addExpectedElement(15055); + addExpectedElement(15056); + addExpectedElement(15057); + addExpectedElement(15058); + addExpectedElement(15059); + addExpectedElement(15060); + addExpectedElement(15061); + addExpectedElement(15062); + addExpectedElement(15063); + addExpectedElement(15064); + addExpectedElement(15065); + addExpectedElement(15066); + addExpectedElement(15067); + addExpectedElement(15068); + addExpectedElement(15069); + addExpectedElement(15070); + addExpectedElement(15071); + addExpectedElement(15072); + addExpectedElement(15073); + addExpectedElement(15074); + addExpectedElement(15075); + addExpectedElement(15076); + addExpectedElement(15077); + addExpectedElement(15078); + addExpectedElement(15079); + addExpectedElement(15080); + addExpectedElement(15081); + addExpectedElement(15082); + addExpectedElement(15083); + addExpectedElement(15084); + addExpectedElement(15085); + addExpectedElement(15086); + addExpectedElement(15087); + addExpectedElement(15088); + addExpectedElement(15089); + addExpectedElement(15090); + addExpectedElement(15091); + addExpectedElement(15092); + addExpectedElement(15093); + addExpectedElement(15094); + addExpectedElement(15095); + addExpectedElement(15096); + } + + // Java.g:28351:2: ( ( (a1_0= parse_org_emftext_language_java_operators_EqualityOperator ) (a2_0= parse_org_emftext_language_java_expressions_InstanceOfExpression ) ) )* + loop201: + do { + int alt201=2; + int LA201_0 = input.LA(1); + + if ( (LA201_0==22||LA201_0==45) ) { + alt201=1; + } + + + switch (alt201) { + case 1 : + // Java.g:28352:3: ( (a1_0= parse_org_emftext_language_java_operators_EqualityOperator ) (a2_0= parse_org_emftext_language_java_expressions_InstanceOfExpression ) ) + { + // Java.g:28352:3: ( (a1_0= parse_org_emftext_language_java_operators_EqualityOperator ) (a2_0= parse_org_emftext_language_java_expressions_InstanceOfExpression ) ) + // Java.g:28353:4: (a1_0= parse_org_emftext_language_java_operators_EqualityOperator ) (a2_0= parse_org_emftext_language_java_expressions_InstanceOfExpression ) + { + // Java.g:28353:4: (a1_0= parse_org_emftext_language_java_operators_EqualityOperator ) + // Java.g:28354:5: a1_0= parse_org_emftext_language_java_operators_EqualityOperator + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_EqualityOperator_in_parse_org_emftext_language_java_expressions_EqualityExpression18888); + a1_0=parse_org_emftext_language_java_operators_EqualityOperator(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createEqualityExpression(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.EQUALITY_EXPRESSION__EQUALITY_OPERATORS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_79_0_0_1_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15097); + addExpectedElement(15098); + addExpectedElement(15099); + addExpectedElement(15100); + addExpectedElement(15101); + addExpectedElement(15102); + addExpectedElement(15103); + addExpectedElement(15104); + addExpectedElement(15105); + addExpectedElement(15106); + addExpectedElement(15107); + addExpectedElement(15108); + addExpectedElement(15109); + addExpectedElement(15110); + addExpectedElement(15111); + addExpectedElement(15112); + addExpectedElement(15113); + addExpectedElement(15114); + addExpectedElement(15115); + addExpectedElement(15116); + addExpectedElement(15117); + addExpectedElement(15118); + addExpectedElement(15119); + addExpectedElement(15120); + addExpectedElement(15121); + addExpectedElement(15122); + addExpectedElement(15123); + addExpectedElement(15124); + addExpectedElement(15125); + addExpectedElement(15126); + addExpectedElement(15127); + addExpectedElement(15128); + addExpectedElement(15129); + addExpectedElement(15130); + addExpectedElement(15131); + addExpectedElement(15132); + addExpectedElement(15133); + addExpectedElement(15134); + addExpectedElement(15135); + addExpectedElement(15136); + addExpectedElement(15137); + addExpectedElement(15138); + addExpectedElement(15139); + } + + // Java.g:28421:4: (a2_0= parse_org_emftext_language_java_expressions_InstanceOfExpression ) + // Java.g:28422:5: a2_0= parse_org_emftext_language_java_expressions_InstanceOfExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_InstanceOfExpression_in_parse_org_emftext_language_java_expressions_EqualityExpression18922); + a2_0=parse_org_emftext_language_java_expressions_InstanceOfExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createEqualityExpression(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.EQUALITY_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_79_0_0_1_0_0_3, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15140); + addExpectedElement(15141); + addExpectedElement(15142); + addExpectedElement(15143); + addExpectedElement(15144); + addExpectedElement(15145); + addExpectedElement(15146); + addExpectedElement(15147); + addExpectedElement(15148); + addExpectedElement(15149); + addExpectedElement(15150); + addExpectedElement(15151); + addExpectedElement(15152); + addExpectedElement(15153); + addExpectedElement(15154); + addExpectedElement(15155); + addExpectedElement(15156); + addExpectedElement(15157); + addExpectedElement(15158); + addExpectedElement(15159); + addExpectedElement(15160); + addExpectedElement(15161); + addExpectedElement(15162); + addExpectedElement(15163); + addExpectedElement(15164); + addExpectedElement(15165); + addExpectedElement(15166); + addExpectedElement(15167); + addExpectedElement(15168); + addExpectedElement(15169); + addExpectedElement(15170); + addExpectedElement(15171); + addExpectedElement(15172); + addExpectedElement(15173); + addExpectedElement(15174); + addExpectedElement(15175); + addExpectedElement(15176); + addExpectedElement(15177); + addExpectedElement(15178); + addExpectedElement(15179); + addExpectedElement(15180); + addExpectedElement(15181); + addExpectedElement(15182); + addExpectedElement(15183); + addExpectedElement(15184); + addExpectedElement(15185); + addExpectedElement(15186); + addExpectedElement(15187); + addExpectedElement(15188); + addExpectedElement(15189); + addExpectedElement(15190); + addExpectedElement(15191); + addExpectedElement(15192); + addExpectedElement(15193); + addExpectedElement(15194); + addExpectedElement(15195); + } + + } + + + } + break; + + default : + break loop201; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15196); + addExpectedElement(15197); + addExpectedElement(15198); + addExpectedElement(15199); + addExpectedElement(15200); + addExpectedElement(15201); + addExpectedElement(15202); + addExpectedElement(15203); + addExpectedElement(15204); + addExpectedElement(15205); + addExpectedElement(15206); + addExpectedElement(15207); + addExpectedElement(15208); + addExpectedElement(15209); + addExpectedElement(15210); + addExpectedElement(15211); + addExpectedElement(15212); + addExpectedElement(15213); + addExpectedElement(15214); + addExpectedElement(15215); + addExpectedElement(15216); + addExpectedElement(15217); + addExpectedElement(15218); + addExpectedElement(15219); + addExpectedElement(15220); + addExpectedElement(15221); + addExpectedElement(15222); + addExpectedElement(15223); + addExpectedElement(15224); + addExpectedElement(15225); + addExpectedElement(15226); + addExpectedElement(15227); + addExpectedElement(15228); + addExpectedElement(15229); + addExpectedElement(15230); + addExpectedElement(15231); + addExpectedElement(15232); + addExpectedElement(15233); + addExpectedElement(15234); + addExpectedElement(15235); + addExpectedElement(15236); + addExpectedElement(15237); + addExpectedElement(15238); + addExpectedElement(15239); + addExpectedElement(15240); + addExpectedElement(15241); + addExpectedElement(15242); + addExpectedElement(15243); + addExpectedElement(15244); + addExpectedElement(15245); + addExpectedElement(15246); + addExpectedElement(15247); + addExpectedElement(15248); + addExpectedElement(15249); + addExpectedElement(15250); + addExpectedElement(15251); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 81, parse_org_emftext_language_java_expressions_EqualityExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_EqualityExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_InstanceOfExpression" + // Java.g:28566:1: parse_org_emftext_language_java_expressions_InstanceOfExpression returns [org.emftext.language.java.expressions.InstanceOfExpression element = null] : (a0_0= parse_org_emftext_language_java_expressions_RelationExpression ) ( (a1= 'instanceof' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) )? ; + public final org.emftext.language.java.expressions.InstanceOfExpression parse_org_emftext_language_java_expressions_InstanceOfExpression() throws RecognitionException { + org.emftext.language.java.expressions.InstanceOfExpression element = null; + + int parse_org_emftext_language_java_expressions_InstanceOfExpression_StartIndex = input.index(); + + Token a1=null; + org.emftext.language.java.expressions.RelationExpression a0_0 =null; + + org.emftext.language.java.types.TypeReference a2_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a3_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 82) ) { return element; } + + // Java.g:28569:2: ( (a0_0= parse_org_emftext_language_java_expressions_RelationExpression ) ( (a1= 'instanceof' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) )? ) + // Java.g:28570:2: (a0_0= parse_org_emftext_language_java_expressions_RelationExpression ) ( (a1= 'instanceof' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) )? + { + // Java.g:28570:2: (a0_0= parse_org_emftext_language_java_expressions_RelationExpression ) + // Java.g:28571:3: a0_0= parse_org_emftext_language_java_expressions_RelationExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_RelationExpression_in_parse_org_emftext_language_java_expressions_InstanceOfExpression18982); + a0_0=parse_org_emftext_language_java_expressions_RelationExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createInstanceOfExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.INSTANCE_OF_EXPRESSION__CHILD), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_80_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15252); + addExpectedElement(15253); + addExpectedElement(15254); + addExpectedElement(15255); + addExpectedElement(15256); + addExpectedElement(15257); + addExpectedElement(15258); + addExpectedElement(15259); + addExpectedElement(15260); + addExpectedElement(15261); + addExpectedElement(15262); + addExpectedElement(15263); + addExpectedElement(15264); + addExpectedElement(15265); + addExpectedElement(15266); + addExpectedElement(15267); + addExpectedElement(15268); + addExpectedElement(15269); + addExpectedElement(15270); + addExpectedElement(15271); + addExpectedElement(15272); + addExpectedElement(15273); + addExpectedElement(15274); + addExpectedElement(15275); + addExpectedElement(15276); + addExpectedElement(15277); + addExpectedElement(15278); + addExpectedElement(15279); + addExpectedElement(15280); + addExpectedElement(15281); + addExpectedElement(15282); + addExpectedElement(15283); + addExpectedElement(15284); + addExpectedElement(15285); + addExpectedElement(15286); + addExpectedElement(15287); + addExpectedElement(15288); + addExpectedElement(15289); + addExpectedElement(15290); + addExpectedElement(15291); + addExpectedElement(15292); + addExpectedElement(15293); + addExpectedElement(15294); + addExpectedElement(15295); + addExpectedElement(15296); + addExpectedElement(15297); + addExpectedElement(15298); + addExpectedElement(15299); + addExpectedElement(15300); + addExpectedElement(15301); + addExpectedElement(15302); + addExpectedElement(15303); + addExpectedElement(15304); + addExpectedElement(15305); + addExpectedElement(15306); + addExpectedElement(15307); + addExpectedElement(15308); + } + + // Java.g:28652:2: ( (a1= 'instanceof' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) )? + int alt203=2; + int LA203_0 = input.LA(1); + + if ( (LA203_0==79) ) { + alt203=1; + } + switch (alt203) { + case 1 : + // Java.g:28653:3: (a1= 'instanceof' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) + { + // Java.g:28653:3: (a1= 'instanceof' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) + // Java.g:28654:4: a1= 'instanceof' (a2_0= parse_org_emftext_language_java_types_TypeReference ) ( (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + { + a1=(Token)match(input,79,FOLLOW_79_in_parse_org_emftext_language_java_expressions_InstanceOfExpression19009); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createInstanceOfExpression(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_80_0_0_1_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15309); + addExpectedElement(15310); + addExpectedElement(15311); + addExpectedElement(15312); + addExpectedElement(15313); + addExpectedElement(15314); + addExpectedElement(15315); + addExpectedElement(15316); + addExpectedElement(15317); + addExpectedElement(15318); + addExpectedElement(15319); + } + + // Java.g:28678:4: (a2_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:28679:5: a2_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_expressions_InstanceOfExpression19035); + a2_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createInstanceOfExpression(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.INSTANCE_OF_EXPRESSION__TYPE_REFERENCE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_80_0_0_1_0_0_1, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15320); + addExpectedElement(15321); + addExpectedElement(15322); + addExpectedElement(15323); + addExpectedElement(15324); + addExpectedElement(15325); + addExpectedElement(15326); + addExpectedElement(15327); + addExpectedElement(15328); + addExpectedElement(15329); + addExpectedElement(15330); + addExpectedElement(15331); + addExpectedElement(15332); + addExpectedElement(15333); + addExpectedElement(15334); + addExpectedElement(15335); + addExpectedElement(15336); + addExpectedElement(15337); + addExpectedElement(15338); + addExpectedElement(15339); + addExpectedElement(15340); + addExpectedElement(15341); + addExpectedElement(15342); + addExpectedElement(15343); + addExpectedElement(15344); + addExpectedElement(15345); + addExpectedElement(15346); + addExpectedElement(15347); + addExpectedElement(15348); + addExpectedElement(15349); + addExpectedElement(15350); + addExpectedElement(15351); + addExpectedElement(15352); + addExpectedElement(15353); + addExpectedElement(15354); + addExpectedElement(15355); + addExpectedElement(15356); + addExpectedElement(15357); + addExpectedElement(15358); + addExpectedElement(15359); + addExpectedElement(15360); + addExpectedElement(15361); + addExpectedElement(15362); + addExpectedElement(15363); + addExpectedElement(15364); + addExpectedElement(15365); + addExpectedElement(15366); + addExpectedElement(15367); + addExpectedElement(15368); + addExpectedElement(15369); + addExpectedElement(15370); + addExpectedElement(15371); + addExpectedElement(15372); + addExpectedElement(15373); + addExpectedElement(15374); + addExpectedElement(15375); + addExpectedElement(15376); + } + + // Java.g:28760:4: ( (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop202: + do { + int alt202=2; + int LA202_0 = input.LA(1); + + if ( (LA202_0==49) ) { + alt202=1; + } + + + switch (alt202) { + case 1 : + // Java.g:28761:5: (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:28761:5: (a3_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:28762:6: a3_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_expressions_InstanceOfExpression19076); + a3_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createInstanceOfExpression(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.INSTANCE_OF_EXPRESSION__ARRAY_DIMENSIONS_BEFORE, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_80_0_0_1_0_0_2, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + } + break; + + default : + break loop202; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15377); + addExpectedElement(15378); + addExpectedElement(15379); + addExpectedElement(15380); + addExpectedElement(15381); + addExpectedElement(15382); + addExpectedElement(15383); + addExpectedElement(15384); + addExpectedElement(15385); + addExpectedElement(15386); + addExpectedElement(15387); + addExpectedElement(15388); + addExpectedElement(15389); + addExpectedElement(15390); + addExpectedElement(15391); + addExpectedElement(15392); + addExpectedElement(15393); + addExpectedElement(15394); + addExpectedElement(15395); + addExpectedElement(15396); + addExpectedElement(15397); + addExpectedElement(15398); + addExpectedElement(15399); + addExpectedElement(15400); + addExpectedElement(15401); + addExpectedElement(15402); + addExpectedElement(15403); + addExpectedElement(15404); + addExpectedElement(15405); + addExpectedElement(15406); + addExpectedElement(15407); + addExpectedElement(15408); + addExpectedElement(15409); + addExpectedElement(15410); + addExpectedElement(15411); + addExpectedElement(15412); + addExpectedElement(15413); + addExpectedElement(15414); + addExpectedElement(15415); + addExpectedElement(15416); + addExpectedElement(15417); + addExpectedElement(15418); + addExpectedElement(15419); + addExpectedElement(15420); + addExpectedElement(15421); + addExpectedElement(15422); + addExpectedElement(15423); + addExpectedElement(15424); + addExpectedElement(15425); + addExpectedElement(15426); + addExpectedElement(15427); + addExpectedElement(15428); + addExpectedElement(15429); + addExpectedElement(15430); + addExpectedElement(15431); + addExpectedElement(15432); + addExpectedElement(15433); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15434); + addExpectedElement(15435); + addExpectedElement(15436); + addExpectedElement(15437); + addExpectedElement(15438); + addExpectedElement(15439); + addExpectedElement(15440); + addExpectedElement(15441); + addExpectedElement(15442); + addExpectedElement(15443); + addExpectedElement(15444); + addExpectedElement(15445); + addExpectedElement(15446); + addExpectedElement(15447); + addExpectedElement(15448); + addExpectedElement(15449); + addExpectedElement(15450); + addExpectedElement(15451); + addExpectedElement(15452); + addExpectedElement(15453); + addExpectedElement(15454); + addExpectedElement(15455); + addExpectedElement(15456); + addExpectedElement(15457); + addExpectedElement(15458); + addExpectedElement(15459); + addExpectedElement(15460); + addExpectedElement(15461); + addExpectedElement(15462); + addExpectedElement(15463); + addExpectedElement(15464); + addExpectedElement(15465); + addExpectedElement(15466); + addExpectedElement(15467); + addExpectedElement(15468); + addExpectedElement(15469); + addExpectedElement(15470); + addExpectedElement(15471); + addExpectedElement(15472); + addExpectedElement(15473); + addExpectedElement(15474); + addExpectedElement(15475); + addExpectedElement(15476); + addExpectedElement(15477); + addExpectedElement(15478); + addExpectedElement(15479); + addExpectedElement(15480); + addExpectedElement(15481); + addExpectedElement(15482); + addExpectedElement(15483); + addExpectedElement(15484); + addExpectedElement(15485); + addExpectedElement(15486); + addExpectedElement(15487); + addExpectedElement(15488); + addExpectedElement(15489); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 82, parse_org_emftext_language_java_expressions_InstanceOfExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_InstanceOfExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_RelationExpression" + // Java.g:28908:1: parse_org_emftext_language_java_expressions_RelationExpression returns [org.emftext.language.java.expressions.RelationExpression element = null] : (a0_0= parse_org_emftext_language_java_expressions_ShiftExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_RelationOperator ) (a2_0= parse_org_emftext_language_java_expressions_ShiftExpression ) ) )* ; + public final org.emftext.language.java.expressions.RelationExpression parse_org_emftext_language_java_expressions_RelationExpression() throws RecognitionException { + org.emftext.language.java.expressions.RelationExpression element = null; + + int parse_org_emftext_language_java_expressions_RelationExpression_StartIndex = input.index(); + + org.emftext.language.java.expressions.ShiftExpression a0_0 =null; + + org.emftext.language.java.operators.RelationOperator a1_0 =null; + + org.emftext.language.java.expressions.ShiftExpression a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 83) ) { return element; } + + // Java.g:28911:2: ( (a0_0= parse_org_emftext_language_java_expressions_ShiftExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_RelationOperator ) (a2_0= parse_org_emftext_language_java_expressions_ShiftExpression ) ) )* ) + // Java.g:28912:2: (a0_0= parse_org_emftext_language_java_expressions_ShiftExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_RelationOperator ) (a2_0= parse_org_emftext_language_java_expressions_ShiftExpression ) ) )* + { + // Java.g:28912:2: (a0_0= parse_org_emftext_language_java_expressions_ShiftExpression ) + // Java.g:28913:3: a0_0= parse_org_emftext_language_java_expressions_ShiftExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_ShiftExpression_in_parse_org_emftext_language_java_expressions_RelationExpression19148); + a0_0=parse_org_emftext_language_java_expressions_ShiftExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createRelationExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.RELATION_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_81_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15490); + addExpectedElement(15491); + addExpectedElement(15492); + addExpectedElement(15493); + addExpectedElement(15494); + addExpectedElement(15495); + addExpectedElement(15496); + addExpectedElement(15497); + addExpectedElement(15498); + addExpectedElement(15499); + addExpectedElement(15500); + addExpectedElement(15501); + addExpectedElement(15502); + addExpectedElement(15503); + addExpectedElement(15504); + addExpectedElement(15505); + addExpectedElement(15506); + addExpectedElement(15507); + addExpectedElement(15508); + addExpectedElement(15509); + addExpectedElement(15510); + addExpectedElement(15511); + addExpectedElement(15512); + addExpectedElement(15513); + addExpectedElement(15514); + addExpectedElement(15515); + addExpectedElement(15516); + addExpectedElement(15517); + addExpectedElement(15518); + addExpectedElement(15519); + addExpectedElement(15520); + addExpectedElement(15521); + addExpectedElement(15522); + addExpectedElement(15523); + addExpectedElement(15524); + addExpectedElement(15525); + addExpectedElement(15526); + addExpectedElement(15527); + addExpectedElement(15528); + addExpectedElement(15529); + addExpectedElement(15530); + addExpectedElement(15531); + addExpectedElement(15532); + addExpectedElement(15533); + addExpectedElement(15534); + addExpectedElement(15535); + addExpectedElement(15536); + addExpectedElement(15537); + addExpectedElement(15538); + addExpectedElement(15539); + addExpectedElement(15540); + addExpectedElement(15541); + addExpectedElement(15542); + addExpectedElement(15543); + addExpectedElement(15544); + addExpectedElement(15545); + addExpectedElement(15546); + addExpectedElement(15547); + addExpectedElement(15548); + addExpectedElement(15549); + addExpectedElement(15550); + } + + // Java.g:28998:2: ( ( (a1_0= parse_org_emftext_language_java_operators_RelationOperator ) (a2_0= parse_org_emftext_language_java_expressions_ShiftExpression ) ) )* + loop204: + do { + int alt204=2; + int LA204_0 = input.LA(1); + + if ( (LA204_0==43) ) { + int LA204_2 = input.LA(2); + + if ( (LA204_2==43) ) { + int LA204_4 = input.LA(3); + + if ( (LA204_4==IDENTIFIER||LA204_4==47||LA204_4==58||LA204_4==60||LA204_4==63||LA204_4==68||LA204_4==74||LA204_4==80||LA204_4==82||LA204_4==91||LA204_4==102) ) { + alt204=1; + } + + + } + else if ( ((LA204_2 >= BOOLEAN_LITERAL && LA204_2 <= IDENTIFIER)||(LA204_2 >= OCTAL_INTEGER_LITERAL && LA204_2 <= OCTAL_LONG_LITERAL)||LA204_2==STRING_LITERAL||LA204_2==21||LA204_2==26||(LA204_2 >= 30 && LA204_2 <= 31)||(LA204_2 >= 34 && LA204_2 <= 35)||LA204_2==44||LA204_2==48||LA204_2==58||LA204_2==60||(LA204_2 >= 63 && LA204_2 <= 64)||LA204_2==68||LA204_2==74||LA204_2==80||LA204_2==82||(LA204_2 >= 84 && LA204_2 <= 85)||LA204_2==91||LA204_2==94||LA204_2==97||LA204_2==102||LA204_2==105||LA204_2==110) ) { + alt204=1; + } + + + } + else if ( (LA204_0==46) ) { + int LA204_3 = input.LA(2); + + if ( ((LA204_3 >= BOOLEAN_LITERAL && LA204_3 <= IDENTIFIER)||(LA204_3 >= OCTAL_INTEGER_LITERAL && LA204_3 <= OCTAL_LONG_LITERAL)||LA204_3==STRING_LITERAL||LA204_3==21||LA204_3==26||(LA204_3 >= 30 && LA204_3 <= 31)||(LA204_3 >= 34 && LA204_3 <= 35)||(LA204_3 >= 43 && LA204_3 <= 44)||LA204_3==48||LA204_3==58||LA204_3==60||(LA204_3 >= 63 && LA204_3 <= 64)||LA204_3==68||LA204_3==74||LA204_3==80||LA204_3==82||(LA204_3 >= 84 && LA204_3 <= 85)||LA204_3==91||LA204_3==94||LA204_3==97||LA204_3==102||LA204_3==105||LA204_3==110) ) { + alt204=1; + } + + + } + + + switch (alt204) { + case 1 : + // Java.g:28999:3: ( (a1_0= parse_org_emftext_language_java_operators_RelationOperator ) (a2_0= parse_org_emftext_language_java_expressions_ShiftExpression ) ) + { + // Java.g:28999:3: ( (a1_0= parse_org_emftext_language_java_operators_RelationOperator ) (a2_0= parse_org_emftext_language_java_expressions_ShiftExpression ) ) + // Java.g:29000:4: (a1_0= parse_org_emftext_language_java_operators_RelationOperator ) (a2_0= parse_org_emftext_language_java_expressions_ShiftExpression ) + { + // Java.g:29000:4: (a1_0= parse_org_emftext_language_java_operators_RelationOperator ) + // Java.g:29001:5: a1_0= parse_org_emftext_language_java_operators_RelationOperator + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_RelationOperator_in_parse_org_emftext_language_java_expressions_RelationExpression19181); + a1_0=parse_org_emftext_language_java_operators_RelationOperator(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createRelationExpression(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.RELATION_EXPRESSION__RELATION_OPERATORS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_81_0_0_1_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15551); + addExpectedElement(15552); + addExpectedElement(15553); + addExpectedElement(15554); + addExpectedElement(15555); + addExpectedElement(15556); + addExpectedElement(15557); + addExpectedElement(15558); + addExpectedElement(15559); + addExpectedElement(15560); + addExpectedElement(15561); + addExpectedElement(15562); + addExpectedElement(15563); + addExpectedElement(15564); + addExpectedElement(15565); + addExpectedElement(15566); + addExpectedElement(15567); + addExpectedElement(15568); + addExpectedElement(15569); + addExpectedElement(15570); + addExpectedElement(15571); + addExpectedElement(15572); + addExpectedElement(15573); + addExpectedElement(15574); + addExpectedElement(15575); + addExpectedElement(15576); + addExpectedElement(15577); + addExpectedElement(15578); + addExpectedElement(15579); + addExpectedElement(15580); + addExpectedElement(15581); + addExpectedElement(15582); + addExpectedElement(15583); + addExpectedElement(15584); + addExpectedElement(15585); + addExpectedElement(15586); + addExpectedElement(15587); + addExpectedElement(15588); + addExpectedElement(15589); + addExpectedElement(15590); + addExpectedElement(15591); + addExpectedElement(15592); + addExpectedElement(15593); + } + + // Java.g:29068:4: (a2_0= parse_org_emftext_language_java_expressions_ShiftExpression ) + // Java.g:29069:5: a2_0= parse_org_emftext_language_java_expressions_ShiftExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_ShiftExpression_in_parse_org_emftext_language_java_expressions_RelationExpression19215); + a2_0=parse_org_emftext_language_java_expressions_ShiftExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createRelationExpression(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.RELATION_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_81_0_0_1_0_0_3, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15594); + addExpectedElement(15595); + addExpectedElement(15596); + addExpectedElement(15597); + addExpectedElement(15598); + addExpectedElement(15599); + addExpectedElement(15600); + addExpectedElement(15601); + addExpectedElement(15602); + addExpectedElement(15603); + addExpectedElement(15604); + addExpectedElement(15605); + addExpectedElement(15606); + addExpectedElement(15607); + addExpectedElement(15608); + addExpectedElement(15609); + addExpectedElement(15610); + addExpectedElement(15611); + addExpectedElement(15612); + addExpectedElement(15613); + addExpectedElement(15614); + addExpectedElement(15615); + addExpectedElement(15616); + addExpectedElement(15617); + addExpectedElement(15618); + addExpectedElement(15619); + addExpectedElement(15620); + addExpectedElement(15621); + addExpectedElement(15622); + addExpectedElement(15623); + addExpectedElement(15624); + addExpectedElement(15625); + addExpectedElement(15626); + addExpectedElement(15627); + addExpectedElement(15628); + addExpectedElement(15629); + addExpectedElement(15630); + addExpectedElement(15631); + addExpectedElement(15632); + addExpectedElement(15633); + addExpectedElement(15634); + addExpectedElement(15635); + addExpectedElement(15636); + addExpectedElement(15637); + addExpectedElement(15638); + addExpectedElement(15639); + addExpectedElement(15640); + addExpectedElement(15641); + addExpectedElement(15642); + addExpectedElement(15643); + addExpectedElement(15644); + addExpectedElement(15645); + addExpectedElement(15646); + addExpectedElement(15647); + addExpectedElement(15648); + addExpectedElement(15649); + addExpectedElement(15650); + addExpectedElement(15651); + addExpectedElement(15652); + addExpectedElement(15653); + addExpectedElement(15654); + } + + } + + + } + break; + + default : + break loop204; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15655); + addExpectedElement(15656); + addExpectedElement(15657); + addExpectedElement(15658); + addExpectedElement(15659); + addExpectedElement(15660); + addExpectedElement(15661); + addExpectedElement(15662); + addExpectedElement(15663); + addExpectedElement(15664); + addExpectedElement(15665); + addExpectedElement(15666); + addExpectedElement(15667); + addExpectedElement(15668); + addExpectedElement(15669); + addExpectedElement(15670); + addExpectedElement(15671); + addExpectedElement(15672); + addExpectedElement(15673); + addExpectedElement(15674); + addExpectedElement(15675); + addExpectedElement(15676); + addExpectedElement(15677); + addExpectedElement(15678); + addExpectedElement(15679); + addExpectedElement(15680); + addExpectedElement(15681); + addExpectedElement(15682); + addExpectedElement(15683); + addExpectedElement(15684); + addExpectedElement(15685); + addExpectedElement(15686); + addExpectedElement(15687); + addExpectedElement(15688); + addExpectedElement(15689); + addExpectedElement(15690); + addExpectedElement(15691); + addExpectedElement(15692); + addExpectedElement(15693); + addExpectedElement(15694); + addExpectedElement(15695); + addExpectedElement(15696); + addExpectedElement(15697); + addExpectedElement(15698); + addExpectedElement(15699); + addExpectedElement(15700); + addExpectedElement(15701); + addExpectedElement(15702); + addExpectedElement(15703); + addExpectedElement(15704); + addExpectedElement(15705); + addExpectedElement(15706); + addExpectedElement(15707); + addExpectedElement(15708); + addExpectedElement(15709); + addExpectedElement(15710); + addExpectedElement(15711); + addExpectedElement(15712); + addExpectedElement(15713); + addExpectedElement(15714); + addExpectedElement(15715); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 83, parse_org_emftext_language_java_expressions_RelationExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_RelationExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_ShiftExpression" + // Java.g:29223:1: parse_org_emftext_language_java_expressions_ShiftExpression returns [org.emftext.language.java.expressions.ShiftExpression element = null] : (a0_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_ShiftOperator ) (a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) ) )* ; + public final org.emftext.language.java.expressions.ShiftExpression parse_org_emftext_language_java_expressions_ShiftExpression() throws RecognitionException { + org.emftext.language.java.expressions.ShiftExpression element = null; + + int parse_org_emftext_language_java_expressions_ShiftExpression_StartIndex = input.index(); + + org.emftext.language.java.expressions.AdditiveExpression a0_0 =null; + + org.emftext.language.java.operators.ShiftOperator a1_0 =null; + + org.emftext.language.java.expressions.AdditiveExpression a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 84) ) { return element; } + + // Java.g:29226:2: ( (a0_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_ShiftOperator ) (a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) ) )* ) + // Java.g:29227:2: (a0_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_ShiftOperator ) (a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) ) )* + { + // Java.g:29227:2: (a0_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) + // Java.g:29228:3: a0_0= parse_org_emftext_language_java_expressions_AdditiveExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AdditiveExpression_in_parse_org_emftext_language_java_expressions_ShiftExpression19275); + a0_0=parse_org_emftext_language_java_expressions_AdditiveExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createShiftExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.SHIFT_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_82_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15716); + addExpectedElement(15717); + addExpectedElement(15718); + addExpectedElement(15719); + addExpectedElement(15720); + addExpectedElement(15721); + addExpectedElement(15722); + addExpectedElement(15723); + addExpectedElement(15724); + addExpectedElement(15725); + addExpectedElement(15726); + addExpectedElement(15727); + addExpectedElement(15728); + addExpectedElement(15729); + addExpectedElement(15730); + addExpectedElement(15731); + addExpectedElement(15732); + addExpectedElement(15733); + addExpectedElement(15734); + addExpectedElement(15735); + addExpectedElement(15736); + addExpectedElement(15737); + addExpectedElement(15738); + addExpectedElement(15739); + addExpectedElement(15740); + addExpectedElement(15741); + addExpectedElement(15742); + addExpectedElement(15743); + addExpectedElement(15744); + addExpectedElement(15745); + addExpectedElement(15746); + addExpectedElement(15747); + addExpectedElement(15748); + addExpectedElement(15749); + addExpectedElement(15750); + addExpectedElement(15751); + addExpectedElement(15752); + addExpectedElement(15753); + addExpectedElement(15754); + addExpectedElement(15755); + addExpectedElement(15756); + addExpectedElement(15757); + addExpectedElement(15758); + addExpectedElement(15759); + addExpectedElement(15760); + addExpectedElement(15761); + addExpectedElement(15762); + addExpectedElement(15763); + addExpectedElement(15764); + addExpectedElement(15765); + addExpectedElement(15766); + addExpectedElement(15767); + addExpectedElement(15768); + addExpectedElement(15769); + addExpectedElement(15770); + addExpectedElement(15771); + addExpectedElement(15772); + addExpectedElement(15773); + addExpectedElement(15774); + addExpectedElement(15775); + addExpectedElement(15776); + addExpectedElement(15777); + addExpectedElement(15778); + addExpectedElement(15779); + } + + // Java.g:29316:2: ( ( (a1_0= parse_org_emftext_language_java_operators_ShiftOperator ) (a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) ) )* + loop205: + do { + int alt205=2; + int LA205_0 = input.LA(1); + + if ( (LA205_0==43) ) { + int LA205_1 = input.LA(2); + + if ( (synpred206_Java()) ) { + alt205=1; + } + + + } + else if ( (LA205_0==46) ) { + int LA205_2 = input.LA(2); + + if ( (synpred206_Java()) ) { + alt205=1; + } + + + } + + + switch (alt205) { + case 1 : + // Java.g:29317:3: ( (a1_0= parse_org_emftext_language_java_operators_ShiftOperator ) (a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) ) + { + // Java.g:29317:3: ( (a1_0= parse_org_emftext_language_java_operators_ShiftOperator ) (a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) ) + // Java.g:29318:4: (a1_0= parse_org_emftext_language_java_operators_ShiftOperator ) (a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) + { + // Java.g:29318:4: (a1_0= parse_org_emftext_language_java_operators_ShiftOperator ) + // Java.g:29319:5: a1_0= parse_org_emftext_language_java_operators_ShiftOperator + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_ShiftOperator_in_parse_org_emftext_language_java_expressions_ShiftExpression19308); + a1_0=parse_org_emftext_language_java_operators_ShiftOperator(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createShiftExpression(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.SHIFT_EXPRESSION__SHIFT_OPERATORS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_82_0_0_1_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15780); + addExpectedElement(15781); + addExpectedElement(15782); + addExpectedElement(15783); + addExpectedElement(15784); + addExpectedElement(15785); + addExpectedElement(15786); + addExpectedElement(15787); + addExpectedElement(15788); + addExpectedElement(15789); + addExpectedElement(15790); + addExpectedElement(15791); + addExpectedElement(15792); + addExpectedElement(15793); + addExpectedElement(15794); + addExpectedElement(15795); + addExpectedElement(15796); + addExpectedElement(15797); + addExpectedElement(15798); + addExpectedElement(15799); + addExpectedElement(15800); + addExpectedElement(15801); + addExpectedElement(15802); + addExpectedElement(15803); + addExpectedElement(15804); + addExpectedElement(15805); + addExpectedElement(15806); + addExpectedElement(15807); + addExpectedElement(15808); + addExpectedElement(15809); + addExpectedElement(15810); + addExpectedElement(15811); + addExpectedElement(15812); + addExpectedElement(15813); + addExpectedElement(15814); + addExpectedElement(15815); + addExpectedElement(15816); + addExpectedElement(15817); + addExpectedElement(15818); + addExpectedElement(15819); + addExpectedElement(15820); + addExpectedElement(15821); + addExpectedElement(15822); + } + + // Java.g:29386:4: (a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) + // Java.g:29387:5: a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AdditiveExpression_in_parse_org_emftext_language_java_expressions_ShiftExpression19342); + a2_0=parse_org_emftext_language_java_expressions_AdditiveExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createShiftExpression(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.SHIFT_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_82_0_0_1_0_0_3, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15823); + addExpectedElement(15824); + addExpectedElement(15825); + addExpectedElement(15826); + addExpectedElement(15827); + addExpectedElement(15828); + addExpectedElement(15829); + addExpectedElement(15830); + addExpectedElement(15831); + addExpectedElement(15832); + addExpectedElement(15833); + addExpectedElement(15834); + addExpectedElement(15835); + addExpectedElement(15836); + addExpectedElement(15837); + addExpectedElement(15838); + addExpectedElement(15839); + addExpectedElement(15840); + addExpectedElement(15841); + addExpectedElement(15842); + addExpectedElement(15843); + addExpectedElement(15844); + addExpectedElement(15845); + addExpectedElement(15846); + addExpectedElement(15847); + addExpectedElement(15848); + addExpectedElement(15849); + addExpectedElement(15850); + addExpectedElement(15851); + addExpectedElement(15852); + addExpectedElement(15853); + addExpectedElement(15854); + addExpectedElement(15855); + addExpectedElement(15856); + addExpectedElement(15857); + addExpectedElement(15858); + addExpectedElement(15859); + addExpectedElement(15860); + addExpectedElement(15861); + addExpectedElement(15862); + addExpectedElement(15863); + addExpectedElement(15864); + addExpectedElement(15865); + addExpectedElement(15866); + addExpectedElement(15867); + addExpectedElement(15868); + addExpectedElement(15869); + addExpectedElement(15870); + addExpectedElement(15871); + addExpectedElement(15872); + addExpectedElement(15873); + addExpectedElement(15874); + addExpectedElement(15875); + addExpectedElement(15876); + addExpectedElement(15877); + addExpectedElement(15878); + addExpectedElement(15879); + addExpectedElement(15880); + addExpectedElement(15881); + addExpectedElement(15882); + addExpectedElement(15883); + addExpectedElement(15884); + addExpectedElement(15885); + addExpectedElement(15886); + } + + } + + + } + break; + + default : + break loop205; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15887); + addExpectedElement(15888); + addExpectedElement(15889); + addExpectedElement(15890); + addExpectedElement(15891); + addExpectedElement(15892); + addExpectedElement(15893); + addExpectedElement(15894); + addExpectedElement(15895); + addExpectedElement(15896); + addExpectedElement(15897); + addExpectedElement(15898); + addExpectedElement(15899); + addExpectedElement(15900); + addExpectedElement(15901); + addExpectedElement(15902); + addExpectedElement(15903); + addExpectedElement(15904); + addExpectedElement(15905); + addExpectedElement(15906); + addExpectedElement(15907); + addExpectedElement(15908); + addExpectedElement(15909); + addExpectedElement(15910); + addExpectedElement(15911); + addExpectedElement(15912); + addExpectedElement(15913); + addExpectedElement(15914); + addExpectedElement(15915); + addExpectedElement(15916); + addExpectedElement(15917); + addExpectedElement(15918); + addExpectedElement(15919); + addExpectedElement(15920); + addExpectedElement(15921); + addExpectedElement(15922); + addExpectedElement(15923); + addExpectedElement(15924); + addExpectedElement(15925); + addExpectedElement(15926); + addExpectedElement(15927); + addExpectedElement(15928); + addExpectedElement(15929); + addExpectedElement(15930); + addExpectedElement(15931); + addExpectedElement(15932); + addExpectedElement(15933); + addExpectedElement(15934); + addExpectedElement(15935); + addExpectedElement(15936); + addExpectedElement(15937); + addExpectedElement(15938); + addExpectedElement(15939); + addExpectedElement(15940); + addExpectedElement(15941); + addExpectedElement(15942); + addExpectedElement(15943); + addExpectedElement(15944); + addExpectedElement(15945); + addExpectedElement(15946); + addExpectedElement(15947); + addExpectedElement(15948); + addExpectedElement(15949); + addExpectedElement(15950); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 84, parse_org_emftext_language_java_expressions_ShiftExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_ShiftExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_AdditiveExpression" + // Java.g:29547:1: parse_org_emftext_language_java_expressions_AdditiveExpression returns [org.emftext.language.java.expressions.AdditiveExpression element = null] : (a0_0= parse_org_emftext_language_java_expressions_MultiplicativeExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_AdditiveOperator ) (a2_0= parse_org_emftext_language_java_expressions_MultiplicativeExpression ) ) )* ; + public final org.emftext.language.java.expressions.AdditiveExpression parse_org_emftext_language_java_expressions_AdditiveExpression() throws RecognitionException { + org.emftext.language.java.expressions.AdditiveExpression element = null; + + int parse_org_emftext_language_java_expressions_AdditiveExpression_StartIndex = input.index(); + + org.emftext.language.java.expressions.MultiplicativeExpression a0_0 =null; + + org.emftext.language.java.operators.AdditiveOperator a1_0 =null; + + org.emftext.language.java.expressions.MultiplicativeExpression a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 85) ) { return element; } + + // Java.g:29550:2: ( (a0_0= parse_org_emftext_language_java_expressions_MultiplicativeExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_AdditiveOperator ) (a2_0= parse_org_emftext_language_java_expressions_MultiplicativeExpression ) ) )* ) + // Java.g:29551:2: (a0_0= parse_org_emftext_language_java_expressions_MultiplicativeExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_AdditiveOperator ) (a2_0= parse_org_emftext_language_java_expressions_MultiplicativeExpression ) ) )* + { + // Java.g:29551:2: (a0_0= parse_org_emftext_language_java_expressions_MultiplicativeExpression ) + // Java.g:29552:3: a0_0= parse_org_emftext_language_java_expressions_MultiplicativeExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_MultiplicativeExpression_in_parse_org_emftext_language_java_expressions_AdditiveExpression19402); + a0_0=parse_org_emftext_language_java_expressions_MultiplicativeExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createAdditiveExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.ADDITIVE_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_83_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(15951); + addExpectedElement(15952); + addExpectedElement(15953); + addExpectedElement(15954); + addExpectedElement(15955); + addExpectedElement(15956); + addExpectedElement(15957); + addExpectedElement(15958); + addExpectedElement(15959); + addExpectedElement(15960); + addExpectedElement(15961); + addExpectedElement(15962); + addExpectedElement(15963); + addExpectedElement(15964); + addExpectedElement(15965); + addExpectedElement(15966); + addExpectedElement(15967); + addExpectedElement(15968); + addExpectedElement(15969); + addExpectedElement(15970); + addExpectedElement(15971); + addExpectedElement(15972); + addExpectedElement(15973); + addExpectedElement(15974); + addExpectedElement(15975); + addExpectedElement(15976); + addExpectedElement(15977); + addExpectedElement(15978); + addExpectedElement(15979); + addExpectedElement(15980); + addExpectedElement(15981); + addExpectedElement(15982); + addExpectedElement(15983); + addExpectedElement(15984); + addExpectedElement(15985); + addExpectedElement(15986); + addExpectedElement(15987); + addExpectedElement(15988); + addExpectedElement(15989); + addExpectedElement(15990); + addExpectedElement(15991); + addExpectedElement(15992); + addExpectedElement(15993); + addExpectedElement(15994); + addExpectedElement(15995); + addExpectedElement(15996); + addExpectedElement(15997); + addExpectedElement(15998); + addExpectedElement(15999); + addExpectedElement(16000); + addExpectedElement(16001); + addExpectedElement(16002); + addExpectedElement(16003); + addExpectedElement(16004); + addExpectedElement(16005); + addExpectedElement(16006); + addExpectedElement(16007); + addExpectedElement(16008); + addExpectedElement(16009); + addExpectedElement(16010); + addExpectedElement(16011); + addExpectedElement(16012); + addExpectedElement(16013); + addExpectedElement(16014); + addExpectedElement(16015); + addExpectedElement(16016); + } + + // Java.g:29642:2: ( ( (a1_0= parse_org_emftext_language_java_operators_AdditiveOperator ) (a2_0= parse_org_emftext_language_java_expressions_MultiplicativeExpression ) ) )* + loop206: + do { + int alt206=2; + int LA206_0 = input.LA(1); + + if ( (LA206_0==30||LA206_0==34) ) { + alt206=1; + } + + + switch (alt206) { + case 1 : + // Java.g:29643:3: ( (a1_0= parse_org_emftext_language_java_operators_AdditiveOperator ) (a2_0= parse_org_emftext_language_java_expressions_MultiplicativeExpression ) ) + { + // Java.g:29643:3: ( (a1_0= parse_org_emftext_language_java_operators_AdditiveOperator ) (a2_0= parse_org_emftext_language_java_expressions_MultiplicativeExpression ) ) + // Java.g:29644:4: (a1_0= parse_org_emftext_language_java_operators_AdditiveOperator ) (a2_0= parse_org_emftext_language_java_expressions_MultiplicativeExpression ) + { + // Java.g:29644:4: (a1_0= parse_org_emftext_language_java_operators_AdditiveOperator ) + // Java.g:29645:5: a1_0= parse_org_emftext_language_java_operators_AdditiveOperator + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_AdditiveOperator_in_parse_org_emftext_language_java_expressions_AdditiveExpression19435); + a1_0=parse_org_emftext_language_java_operators_AdditiveOperator(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createAdditiveExpression(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.ADDITIVE_EXPRESSION__ADDITIVE_OPERATORS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_83_0_0_1_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16017); + addExpectedElement(16018); + addExpectedElement(16019); + addExpectedElement(16020); + addExpectedElement(16021); + addExpectedElement(16022); + addExpectedElement(16023); + addExpectedElement(16024); + addExpectedElement(16025); + addExpectedElement(16026); + addExpectedElement(16027); + addExpectedElement(16028); + addExpectedElement(16029); + addExpectedElement(16030); + addExpectedElement(16031); + addExpectedElement(16032); + addExpectedElement(16033); + addExpectedElement(16034); + addExpectedElement(16035); + addExpectedElement(16036); + addExpectedElement(16037); + addExpectedElement(16038); + addExpectedElement(16039); + addExpectedElement(16040); + addExpectedElement(16041); + addExpectedElement(16042); + addExpectedElement(16043); + addExpectedElement(16044); + addExpectedElement(16045); + addExpectedElement(16046); + addExpectedElement(16047); + addExpectedElement(16048); + addExpectedElement(16049); + addExpectedElement(16050); + addExpectedElement(16051); + addExpectedElement(16052); + addExpectedElement(16053); + addExpectedElement(16054); + addExpectedElement(16055); + addExpectedElement(16056); + addExpectedElement(16057); + addExpectedElement(16058); + addExpectedElement(16059); + } + + // Java.g:29712:4: (a2_0= parse_org_emftext_language_java_expressions_MultiplicativeExpression ) + // Java.g:29713:5: a2_0= parse_org_emftext_language_java_expressions_MultiplicativeExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_MultiplicativeExpression_in_parse_org_emftext_language_java_expressions_AdditiveExpression19469); + a2_0=parse_org_emftext_language_java_expressions_MultiplicativeExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createAdditiveExpression(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.ADDITIVE_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_83_0_0_1_0_0_3, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16060); + addExpectedElement(16061); + addExpectedElement(16062); + addExpectedElement(16063); + addExpectedElement(16064); + addExpectedElement(16065); + addExpectedElement(16066); + addExpectedElement(16067); + addExpectedElement(16068); + addExpectedElement(16069); + addExpectedElement(16070); + addExpectedElement(16071); + addExpectedElement(16072); + addExpectedElement(16073); + addExpectedElement(16074); + addExpectedElement(16075); + addExpectedElement(16076); + addExpectedElement(16077); + addExpectedElement(16078); + addExpectedElement(16079); + addExpectedElement(16080); + addExpectedElement(16081); + addExpectedElement(16082); + addExpectedElement(16083); + addExpectedElement(16084); + addExpectedElement(16085); + addExpectedElement(16086); + addExpectedElement(16087); + addExpectedElement(16088); + addExpectedElement(16089); + addExpectedElement(16090); + addExpectedElement(16091); + addExpectedElement(16092); + addExpectedElement(16093); + addExpectedElement(16094); + addExpectedElement(16095); + addExpectedElement(16096); + addExpectedElement(16097); + addExpectedElement(16098); + addExpectedElement(16099); + addExpectedElement(16100); + addExpectedElement(16101); + addExpectedElement(16102); + addExpectedElement(16103); + addExpectedElement(16104); + addExpectedElement(16105); + addExpectedElement(16106); + addExpectedElement(16107); + addExpectedElement(16108); + addExpectedElement(16109); + addExpectedElement(16110); + addExpectedElement(16111); + addExpectedElement(16112); + addExpectedElement(16113); + addExpectedElement(16114); + addExpectedElement(16115); + addExpectedElement(16116); + addExpectedElement(16117); + addExpectedElement(16118); + addExpectedElement(16119); + addExpectedElement(16120); + addExpectedElement(16121); + addExpectedElement(16122); + addExpectedElement(16123); + addExpectedElement(16124); + addExpectedElement(16125); + } + + } + + + } + break; + + default : + break loop206; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16126); + addExpectedElement(16127); + addExpectedElement(16128); + addExpectedElement(16129); + addExpectedElement(16130); + addExpectedElement(16131); + addExpectedElement(16132); + addExpectedElement(16133); + addExpectedElement(16134); + addExpectedElement(16135); + addExpectedElement(16136); + addExpectedElement(16137); + addExpectedElement(16138); + addExpectedElement(16139); + addExpectedElement(16140); + addExpectedElement(16141); + addExpectedElement(16142); + addExpectedElement(16143); + addExpectedElement(16144); + addExpectedElement(16145); + addExpectedElement(16146); + addExpectedElement(16147); + addExpectedElement(16148); + addExpectedElement(16149); + addExpectedElement(16150); + addExpectedElement(16151); + addExpectedElement(16152); + addExpectedElement(16153); + addExpectedElement(16154); + addExpectedElement(16155); + addExpectedElement(16156); + addExpectedElement(16157); + addExpectedElement(16158); + addExpectedElement(16159); + addExpectedElement(16160); + addExpectedElement(16161); + addExpectedElement(16162); + addExpectedElement(16163); + addExpectedElement(16164); + addExpectedElement(16165); + addExpectedElement(16166); + addExpectedElement(16167); + addExpectedElement(16168); + addExpectedElement(16169); + addExpectedElement(16170); + addExpectedElement(16171); + addExpectedElement(16172); + addExpectedElement(16173); + addExpectedElement(16174); + addExpectedElement(16175); + addExpectedElement(16176); + addExpectedElement(16177); + addExpectedElement(16178); + addExpectedElement(16179); + addExpectedElement(16180); + addExpectedElement(16181); + addExpectedElement(16182); + addExpectedElement(16183); + addExpectedElement(16184); + addExpectedElement(16185); + addExpectedElement(16186); + addExpectedElement(16187); + addExpectedElement(16188); + addExpectedElement(16189); + addExpectedElement(16190); + addExpectedElement(16191); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 85, parse_org_emftext_language_java_expressions_AdditiveExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_AdditiveExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_MultiplicativeExpression" + // Java.g:29877:1: parse_org_emftext_language_java_expressions_MultiplicativeExpression returns [org.emftext.language.java.expressions.MultiplicativeExpression element = null] : (a0_0= parse_org_emftext_language_java_expressions_UnaryExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_MultiplicativeOperator ) (a2_0= parse_org_emftext_language_java_expressions_UnaryExpression ) ) )* ; + public final org.emftext.language.java.expressions.MultiplicativeExpression parse_org_emftext_language_java_expressions_MultiplicativeExpression() throws RecognitionException { + org.emftext.language.java.expressions.MultiplicativeExpression element = null; + + int parse_org_emftext_language_java_expressions_MultiplicativeExpression_StartIndex = input.index(); + + org.emftext.language.java.expressions.UnaryExpression a0_0 =null; + + org.emftext.language.java.operators.MultiplicativeOperator a1_0 =null; + + org.emftext.language.java.expressions.UnaryExpression a2_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 86) ) { return element; } + + // Java.g:29880:2: ( (a0_0= parse_org_emftext_language_java_expressions_UnaryExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_MultiplicativeOperator ) (a2_0= parse_org_emftext_language_java_expressions_UnaryExpression ) ) )* ) + // Java.g:29881:2: (a0_0= parse_org_emftext_language_java_expressions_UnaryExpression ) ( ( (a1_0= parse_org_emftext_language_java_operators_MultiplicativeOperator ) (a2_0= parse_org_emftext_language_java_expressions_UnaryExpression ) ) )* + { + // Java.g:29881:2: (a0_0= parse_org_emftext_language_java_expressions_UnaryExpression ) + // Java.g:29882:3: a0_0= parse_org_emftext_language_java_expressions_UnaryExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_UnaryExpression_in_parse_org_emftext_language_java_expressions_MultiplicativeExpression19529); + a0_0=parse_org_emftext_language_java_expressions_UnaryExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createMultiplicativeExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.MULTIPLICATIVE_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_84_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16192); + addExpectedElement(16193); + addExpectedElement(16194); + addExpectedElement(16195); + addExpectedElement(16196); + addExpectedElement(16197); + addExpectedElement(16198); + addExpectedElement(16199); + addExpectedElement(16200); + addExpectedElement(16201); + addExpectedElement(16202); + addExpectedElement(16203); + addExpectedElement(16204); + addExpectedElement(16205); + addExpectedElement(16206); + addExpectedElement(16207); + addExpectedElement(16208); + addExpectedElement(16209); + addExpectedElement(16210); + addExpectedElement(16211); + addExpectedElement(16212); + addExpectedElement(16213); + addExpectedElement(16214); + addExpectedElement(16215); + addExpectedElement(16216); + addExpectedElement(16217); + addExpectedElement(16218); + addExpectedElement(16219); + addExpectedElement(16220); + addExpectedElement(16221); + addExpectedElement(16222); + addExpectedElement(16223); + addExpectedElement(16224); + addExpectedElement(16225); + addExpectedElement(16226); + addExpectedElement(16227); + addExpectedElement(16228); + addExpectedElement(16229); + addExpectedElement(16230); + addExpectedElement(16231); + addExpectedElement(16232); + addExpectedElement(16233); + addExpectedElement(16234); + addExpectedElement(16235); + addExpectedElement(16236); + addExpectedElement(16237); + addExpectedElement(16238); + addExpectedElement(16239); + addExpectedElement(16240); + addExpectedElement(16241); + addExpectedElement(16242); + addExpectedElement(16243); + addExpectedElement(16244); + addExpectedElement(16245); + addExpectedElement(16246); + addExpectedElement(16247); + addExpectedElement(16248); + addExpectedElement(16249); + addExpectedElement(16250); + addExpectedElement(16251); + addExpectedElement(16252); + addExpectedElement(16253); + addExpectedElement(16254); + addExpectedElement(16255); + addExpectedElement(16256); + addExpectedElement(16257); + addExpectedElement(16258); + addExpectedElement(16259); + addExpectedElement(16260); + } + + // Java.g:29975:2: ( ( (a1_0= parse_org_emftext_language_java_operators_MultiplicativeOperator ) (a2_0= parse_org_emftext_language_java_expressions_UnaryExpression ) ) )* + loop207: + do { + int alt207=2; + int LA207_0 = input.LA(1); + + if ( (LA207_0==28||LA207_0==39||LA207_0==51) ) { + alt207=1; + } + + + switch (alt207) { + case 1 : + // Java.g:29976:3: ( (a1_0= parse_org_emftext_language_java_operators_MultiplicativeOperator ) (a2_0= parse_org_emftext_language_java_expressions_UnaryExpression ) ) + { + // Java.g:29976:3: ( (a1_0= parse_org_emftext_language_java_operators_MultiplicativeOperator ) (a2_0= parse_org_emftext_language_java_expressions_UnaryExpression ) ) + // Java.g:29977:4: (a1_0= parse_org_emftext_language_java_operators_MultiplicativeOperator ) (a2_0= parse_org_emftext_language_java_expressions_UnaryExpression ) + { + // Java.g:29977:4: (a1_0= parse_org_emftext_language_java_operators_MultiplicativeOperator ) + // Java.g:29978:5: a1_0= parse_org_emftext_language_java_operators_MultiplicativeOperator + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_MultiplicativeOperator_in_parse_org_emftext_language_java_expressions_MultiplicativeExpression19562); + a1_0=parse_org_emftext_language_java_operators_MultiplicativeOperator(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createMultiplicativeExpression(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.MULTIPLICATIVE_EXPRESSION__MULTIPLICATIVE_OPERATORS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_84_0_0_1_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16261); + addExpectedElement(16262); + addExpectedElement(16263); + addExpectedElement(16264); + addExpectedElement(16265); + addExpectedElement(16266); + addExpectedElement(16267); + addExpectedElement(16268); + addExpectedElement(16269); + addExpectedElement(16270); + addExpectedElement(16271); + addExpectedElement(16272); + addExpectedElement(16273); + addExpectedElement(16274); + addExpectedElement(16275); + addExpectedElement(16276); + addExpectedElement(16277); + addExpectedElement(16278); + addExpectedElement(16279); + addExpectedElement(16280); + addExpectedElement(16281); + addExpectedElement(16282); + addExpectedElement(16283); + addExpectedElement(16284); + addExpectedElement(16285); + addExpectedElement(16286); + addExpectedElement(16287); + addExpectedElement(16288); + addExpectedElement(16289); + addExpectedElement(16290); + addExpectedElement(16291); + addExpectedElement(16292); + addExpectedElement(16293); + addExpectedElement(16294); + addExpectedElement(16295); + addExpectedElement(16296); + addExpectedElement(16297); + addExpectedElement(16298); + addExpectedElement(16299); + addExpectedElement(16300); + addExpectedElement(16301); + addExpectedElement(16302); + addExpectedElement(16303); + } + + // Java.g:30045:4: (a2_0= parse_org_emftext_language_java_expressions_UnaryExpression ) + // Java.g:30046:5: a2_0= parse_org_emftext_language_java_expressions_UnaryExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_UnaryExpression_in_parse_org_emftext_language_java_expressions_MultiplicativeExpression19596); + a2_0=parse_org_emftext_language_java_expressions_UnaryExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createMultiplicativeExpression(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.MULTIPLICATIVE_EXPRESSION__CHILDREN, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_84_0_0_1_0_0_3, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16304); + addExpectedElement(16305); + addExpectedElement(16306); + addExpectedElement(16307); + addExpectedElement(16308); + addExpectedElement(16309); + addExpectedElement(16310); + addExpectedElement(16311); + addExpectedElement(16312); + addExpectedElement(16313); + addExpectedElement(16314); + addExpectedElement(16315); + addExpectedElement(16316); + addExpectedElement(16317); + addExpectedElement(16318); + addExpectedElement(16319); + addExpectedElement(16320); + addExpectedElement(16321); + addExpectedElement(16322); + addExpectedElement(16323); + addExpectedElement(16324); + addExpectedElement(16325); + addExpectedElement(16326); + addExpectedElement(16327); + addExpectedElement(16328); + addExpectedElement(16329); + addExpectedElement(16330); + addExpectedElement(16331); + addExpectedElement(16332); + addExpectedElement(16333); + addExpectedElement(16334); + addExpectedElement(16335); + addExpectedElement(16336); + addExpectedElement(16337); + addExpectedElement(16338); + addExpectedElement(16339); + addExpectedElement(16340); + addExpectedElement(16341); + addExpectedElement(16342); + addExpectedElement(16343); + addExpectedElement(16344); + addExpectedElement(16345); + addExpectedElement(16346); + addExpectedElement(16347); + addExpectedElement(16348); + addExpectedElement(16349); + addExpectedElement(16350); + addExpectedElement(16351); + addExpectedElement(16352); + addExpectedElement(16353); + addExpectedElement(16354); + addExpectedElement(16355); + addExpectedElement(16356); + addExpectedElement(16357); + addExpectedElement(16358); + addExpectedElement(16359); + addExpectedElement(16360); + addExpectedElement(16361); + addExpectedElement(16362); + addExpectedElement(16363); + addExpectedElement(16364); + addExpectedElement(16365); + addExpectedElement(16366); + addExpectedElement(16367); + addExpectedElement(16368); + addExpectedElement(16369); + addExpectedElement(16370); + addExpectedElement(16371); + addExpectedElement(16372); + } + + } + + + } + break; + + default : + break loop207; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16373); + addExpectedElement(16374); + addExpectedElement(16375); + addExpectedElement(16376); + addExpectedElement(16377); + addExpectedElement(16378); + addExpectedElement(16379); + addExpectedElement(16380); + addExpectedElement(16381); + addExpectedElement(16382); + addExpectedElement(16383); + addExpectedElement(16384); + addExpectedElement(16385); + addExpectedElement(16386); + addExpectedElement(16387); + addExpectedElement(16388); + addExpectedElement(16389); + addExpectedElement(16390); + addExpectedElement(16391); + addExpectedElement(16392); + addExpectedElement(16393); + addExpectedElement(16394); + addExpectedElement(16395); + addExpectedElement(16396); + addExpectedElement(16397); + addExpectedElement(16398); + addExpectedElement(16399); + addExpectedElement(16400); + addExpectedElement(16401); + addExpectedElement(16402); + addExpectedElement(16403); + addExpectedElement(16404); + addExpectedElement(16405); + addExpectedElement(16406); + addExpectedElement(16407); + addExpectedElement(16408); + addExpectedElement(16409); + addExpectedElement(16410); + addExpectedElement(16411); + addExpectedElement(16412); + addExpectedElement(16413); + addExpectedElement(16414); + addExpectedElement(16415); + addExpectedElement(16416); + addExpectedElement(16417); + addExpectedElement(16418); + addExpectedElement(16419); + addExpectedElement(16420); + addExpectedElement(16421); + addExpectedElement(16422); + addExpectedElement(16423); + addExpectedElement(16424); + addExpectedElement(16425); + addExpectedElement(16426); + addExpectedElement(16427); + addExpectedElement(16428); + addExpectedElement(16429); + addExpectedElement(16430); + addExpectedElement(16431); + addExpectedElement(16432); + addExpectedElement(16433); + addExpectedElement(16434); + addExpectedElement(16435); + addExpectedElement(16436); + addExpectedElement(16437); + addExpectedElement(16438); + addExpectedElement(16439); + addExpectedElement(16440); + addExpectedElement(16441); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 86, parse_org_emftext_language_java_expressions_MultiplicativeExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_MultiplicativeExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_UnaryExpression" + // Java.g:30216:1: parse_org_emftext_language_java_expressions_UnaryExpression returns [org.emftext.language.java.expressions.UnaryExpression element = null] : ( (a0_0= parse_org_emftext_language_java_operators_UnaryOperator ) )* (a1_0= parse_org_emftext_language_java_expressions_UnaryModificationExpression ) ; + public final org.emftext.language.java.expressions.UnaryExpression parse_org_emftext_language_java_expressions_UnaryExpression() throws RecognitionException { + org.emftext.language.java.expressions.UnaryExpression element = null; + + int parse_org_emftext_language_java_expressions_UnaryExpression_StartIndex = input.index(); + + org.emftext.language.java.operators.UnaryOperator a0_0 =null; + + org.emftext.language.java.expressions.UnaryModificationExpression a1_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 87) ) { return element; } + + // Java.g:30219:2: ( ( (a0_0= parse_org_emftext_language_java_operators_UnaryOperator ) )* (a1_0= parse_org_emftext_language_java_expressions_UnaryModificationExpression ) ) + // Java.g:30220:2: ( (a0_0= parse_org_emftext_language_java_operators_UnaryOperator ) )* (a1_0= parse_org_emftext_language_java_expressions_UnaryModificationExpression ) + { + // Java.g:30220:2: ( (a0_0= parse_org_emftext_language_java_operators_UnaryOperator ) )* + loop208: + do { + int alt208=2; + int LA208_0 = input.LA(1); + + if ( (LA208_0==21||LA208_0==30||LA208_0==34||LA208_0==110) ) { + alt208=1; + } + + + switch (alt208) { + case 1 : + // Java.g:30221:3: (a0_0= parse_org_emftext_language_java_operators_UnaryOperator ) + { + // Java.g:30221:3: (a0_0= parse_org_emftext_language_java_operators_UnaryOperator ) + // Java.g:30222:4: a0_0= parse_org_emftext_language_java_operators_UnaryOperator + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_UnaryOperator_in_parse_org_emftext_language_java_expressions_UnaryExpression19661); + a0_0=parse_org_emftext_language_java_operators_UnaryOperator(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createUnaryExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.UNARY_EXPRESSION__OPERATORS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_85_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + } + break; + + default : + break loop208; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16442); + addExpectedElement(16443); + addExpectedElement(16444); + addExpectedElement(16445); + addExpectedElement(16446); + addExpectedElement(16447); + addExpectedElement(16448); + addExpectedElement(16449); + addExpectedElement(16450); + addExpectedElement(16451); + addExpectedElement(16452); + addExpectedElement(16453); + addExpectedElement(16454); + addExpectedElement(16455); + addExpectedElement(16456); + addExpectedElement(16457); + addExpectedElement(16458); + addExpectedElement(16459); + addExpectedElement(16460); + addExpectedElement(16461); + addExpectedElement(16462); + addExpectedElement(16463); + addExpectedElement(16464); + addExpectedElement(16465); + addExpectedElement(16466); + addExpectedElement(16467); + addExpectedElement(16468); + addExpectedElement(16469); + addExpectedElement(16470); + addExpectedElement(16471); + addExpectedElement(16472); + addExpectedElement(16473); + addExpectedElement(16474); + addExpectedElement(16475); + addExpectedElement(16476); + addExpectedElement(16477); + addExpectedElement(16478); + addExpectedElement(16479); + addExpectedElement(16480); + addExpectedElement(16481); + addExpectedElement(16482); + addExpectedElement(16483); + addExpectedElement(16484); + } + + // Java.g:30290:2: (a1_0= parse_org_emftext_language_java_expressions_UnaryModificationExpression ) + // Java.g:30291:3: a1_0= parse_org_emftext_language_java_expressions_UnaryModificationExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_UnaryModificationExpression_in_parse_org_emftext_language_java_expressions_UnaryExpression19691); + a1_0=parse_org_emftext_language_java_expressions_UnaryModificationExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createUnaryExpression(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.UNARY_EXPRESSION__CHILD), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_85_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16485); + addExpectedElement(16486); + addExpectedElement(16487); + addExpectedElement(16488); + addExpectedElement(16489); + addExpectedElement(16490); + addExpectedElement(16491); + addExpectedElement(16492); + addExpectedElement(16493); + addExpectedElement(16494); + addExpectedElement(16495); + addExpectedElement(16496); + addExpectedElement(16497); + addExpectedElement(16498); + addExpectedElement(16499); + addExpectedElement(16500); + addExpectedElement(16501); + addExpectedElement(16502); + addExpectedElement(16503); + addExpectedElement(16504); + addExpectedElement(16505); + addExpectedElement(16506); + addExpectedElement(16507); + addExpectedElement(16508); + addExpectedElement(16509); + addExpectedElement(16510); + addExpectedElement(16511); + addExpectedElement(16512); + addExpectedElement(16513); + addExpectedElement(16514); + addExpectedElement(16515); + addExpectedElement(16516); + addExpectedElement(16517); + addExpectedElement(16518); + addExpectedElement(16519); + addExpectedElement(16520); + addExpectedElement(16521); + addExpectedElement(16522); + addExpectedElement(16523); + addExpectedElement(16524); + addExpectedElement(16525); + addExpectedElement(16526); + addExpectedElement(16527); + addExpectedElement(16528); + addExpectedElement(16529); + addExpectedElement(16530); + addExpectedElement(16531); + addExpectedElement(16532); + addExpectedElement(16533); + addExpectedElement(16534); + addExpectedElement(16535); + addExpectedElement(16536); + addExpectedElement(16537); + addExpectedElement(16538); + addExpectedElement(16539); + addExpectedElement(16540); + addExpectedElement(16541); + addExpectedElement(16542); + addExpectedElement(16543); + addExpectedElement(16544); + addExpectedElement(16545); + addExpectedElement(16546); + addExpectedElement(16547); + addExpectedElement(16548); + addExpectedElement(16549); + addExpectedElement(16550); + addExpectedElement(16551); + addExpectedElement(16552); + addExpectedElement(16553); + addExpectedElement(16554); + addExpectedElement(16555); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 87, parse_org_emftext_language_java_expressions_UnaryExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_UnaryExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression" + // Java.g:30388:1: parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression returns [org.emftext.language.java.expressions.SuffixUnaryModificationExpression element = null] : (a0_0= parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild ) ( ( (a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) )? ; + public final org.emftext.language.java.expressions.SuffixUnaryModificationExpression parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression() throws RecognitionException { + org.emftext.language.java.expressions.SuffixUnaryModificationExpression element = null; + + int parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression_StartIndex = input.index(); + + org.emftext.language.java.expressions.UnaryModificationExpressionChild a0_0 =null; + + org.emftext.language.java.operators.UnaryModificationOperator a1_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 88) ) { return element; } + + // Java.g:30391:2: ( (a0_0= parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild ) ( ( (a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) )? ) + // Java.g:30392:2: (a0_0= parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild ) ( ( (a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) )? + { + // Java.g:30392:2: (a0_0= parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild ) + // Java.g:30393:3: a0_0= parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild_in_parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression19728); + a0_0=parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createSuffixUnaryModificationExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.SUFFIX_UNARY_MODIFICATION_EXPRESSION__CHILD), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_86_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16556); + addExpectedElement(16557); + addExpectedElement(16558); + addExpectedElement(16559); + addExpectedElement(16560); + addExpectedElement(16561); + addExpectedElement(16562); + addExpectedElement(16563); + addExpectedElement(16564); + addExpectedElement(16565); + addExpectedElement(16566); + addExpectedElement(16567); + addExpectedElement(16568); + addExpectedElement(16569); + addExpectedElement(16570); + addExpectedElement(16571); + addExpectedElement(16572); + addExpectedElement(16573); + addExpectedElement(16574); + addExpectedElement(16575); + addExpectedElement(16576); + addExpectedElement(16577); + addExpectedElement(16578); + addExpectedElement(16579); + addExpectedElement(16580); + addExpectedElement(16581); + addExpectedElement(16582); + addExpectedElement(16583); + addExpectedElement(16584); + addExpectedElement(16585); + addExpectedElement(16586); + addExpectedElement(16587); + addExpectedElement(16588); + addExpectedElement(16589); + addExpectedElement(16590); + addExpectedElement(16591); + addExpectedElement(16592); + addExpectedElement(16593); + addExpectedElement(16594); + addExpectedElement(16595); + addExpectedElement(16596); + addExpectedElement(16597); + addExpectedElement(16598); + addExpectedElement(16599); + addExpectedElement(16600); + addExpectedElement(16601); + addExpectedElement(16602); + addExpectedElement(16603); + addExpectedElement(16604); + addExpectedElement(16605); + addExpectedElement(16606); + addExpectedElement(16607); + addExpectedElement(16608); + addExpectedElement(16609); + addExpectedElement(16610); + addExpectedElement(16611); + addExpectedElement(16612); + addExpectedElement(16613); + addExpectedElement(16614); + addExpectedElement(16615); + addExpectedElement(16616); + addExpectedElement(16617); + addExpectedElement(16618); + addExpectedElement(16619); + addExpectedElement(16620); + addExpectedElement(16621); + addExpectedElement(16622); + addExpectedElement(16623); + addExpectedElement(16624); + addExpectedElement(16625); + addExpectedElement(16626); + } + + // Java.g:30488:2: ( ( (a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) )? + int alt209=2; + int LA209_0 = input.LA(1); + + if ( (LA209_0==31) ) { + int LA209_1 = input.LA(2); + + if ( (synpred210_Java()) ) { + alt209=1; + } + } + else if ( (LA209_0==35) ) { + int LA209_2 = input.LA(2); + + if ( (synpred210_Java()) ) { + alt209=1; + } + } + switch (alt209) { + case 1 : + // Java.g:30489:3: ( (a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) + { + // Java.g:30489:3: ( (a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) + // Java.g:30490:4: (a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) + { + // Java.g:30490:4: (a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) + // Java.g:30491:5: a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_UnaryModificationOperator_in_parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression19761); + a1_0=parse_org_emftext_language_java_operators_UnaryModificationOperator(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createSuffixUnaryModificationExpression(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.SUFFIX_UNARY_MODIFICATION_EXPRESSION__OPERATOR), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_86_0_0_1_0_0_0, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16627); + addExpectedElement(16628); + addExpectedElement(16629); + addExpectedElement(16630); + addExpectedElement(16631); + addExpectedElement(16632); + addExpectedElement(16633); + addExpectedElement(16634); + addExpectedElement(16635); + addExpectedElement(16636); + addExpectedElement(16637); + addExpectedElement(16638); + addExpectedElement(16639); + addExpectedElement(16640); + addExpectedElement(16641); + addExpectedElement(16642); + addExpectedElement(16643); + addExpectedElement(16644); + addExpectedElement(16645); + addExpectedElement(16646); + addExpectedElement(16647); + addExpectedElement(16648); + addExpectedElement(16649); + addExpectedElement(16650); + addExpectedElement(16651); + addExpectedElement(16652); + addExpectedElement(16653); + addExpectedElement(16654); + addExpectedElement(16655); + addExpectedElement(16656); + addExpectedElement(16657); + addExpectedElement(16658); + addExpectedElement(16659); + addExpectedElement(16660); + addExpectedElement(16661); + addExpectedElement(16662); + addExpectedElement(16663); + addExpectedElement(16664); + addExpectedElement(16665); + addExpectedElement(16666); + addExpectedElement(16667); + addExpectedElement(16668); + addExpectedElement(16669); + addExpectedElement(16670); + addExpectedElement(16671); + addExpectedElement(16672); + addExpectedElement(16673); + addExpectedElement(16674); + addExpectedElement(16675); + addExpectedElement(16676); + addExpectedElement(16677); + addExpectedElement(16678); + addExpectedElement(16679); + addExpectedElement(16680); + addExpectedElement(16681); + addExpectedElement(16682); + addExpectedElement(16683); + addExpectedElement(16684); + addExpectedElement(16685); + addExpectedElement(16686); + addExpectedElement(16687); + addExpectedElement(16688); + addExpectedElement(16689); + addExpectedElement(16690); + addExpectedElement(16691); + addExpectedElement(16692); + addExpectedElement(16693); + addExpectedElement(16694); + addExpectedElement(16695); + addExpectedElement(16696); + addExpectedElement(16697); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16698); + addExpectedElement(16699); + addExpectedElement(16700); + addExpectedElement(16701); + addExpectedElement(16702); + addExpectedElement(16703); + addExpectedElement(16704); + addExpectedElement(16705); + addExpectedElement(16706); + addExpectedElement(16707); + addExpectedElement(16708); + addExpectedElement(16709); + addExpectedElement(16710); + addExpectedElement(16711); + addExpectedElement(16712); + addExpectedElement(16713); + addExpectedElement(16714); + addExpectedElement(16715); + addExpectedElement(16716); + addExpectedElement(16717); + addExpectedElement(16718); + addExpectedElement(16719); + addExpectedElement(16720); + addExpectedElement(16721); + addExpectedElement(16722); + addExpectedElement(16723); + addExpectedElement(16724); + addExpectedElement(16725); + addExpectedElement(16726); + addExpectedElement(16727); + addExpectedElement(16728); + addExpectedElement(16729); + addExpectedElement(16730); + addExpectedElement(16731); + addExpectedElement(16732); + addExpectedElement(16733); + addExpectedElement(16734); + addExpectedElement(16735); + addExpectedElement(16736); + addExpectedElement(16737); + addExpectedElement(16738); + addExpectedElement(16739); + addExpectedElement(16740); + addExpectedElement(16741); + addExpectedElement(16742); + addExpectedElement(16743); + addExpectedElement(16744); + addExpectedElement(16745); + addExpectedElement(16746); + addExpectedElement(16747); + addExpectedElement(16748); + addExpectedElement(16749); + addExpectedElement(16750); + addExpectedElement(16751); + addExpectedElement(16752); + addExpectedElement(16753); + addExpectedElement(16754); + addExpectedElement(16755); + addExpectedElement(16756); + addExpectedElement(16757); + addExpectedElement(16758); + addExpectedElement(16759); + addExpectedElement(16760); + addExpectedElement(16761); + addExpectedElement(16762); + addExpectedElement(16763); + addExpectedElement(16764); + addExpectedElement(16765); + addExpectedElement(16766); + addExpectedElement(16767); + addExpectedElement(16768); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 88, parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression" + // Java.g:30665:1: parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression returns [org.emftext.language.java.expressions.PrefixUnaryModificationExpression element = null] : ( ( (a0_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) )? (a1_0= parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild ) ; + public final org.emftext.language.java.expressions.PrefixUnaryModificationExpression parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression() throws RecognitionException { + org.emftext.language.java.expressions.PrefixUnaryModificationExpression element = null; + + int parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression_StartIndex = input.index(); + + org.emftext.language.java.operators.UnaryModificationOperator a0_0 =null; + + org.emftext.language.java.expressions.UnaryModificationExpressionChild a1_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 89) ) { return element; } + + // Java.g:30668:2: ( ( ( (a0_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) )? (a1_0= parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild ) ) + // Java.g:30669:2: ( ( (a0_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) )? (a1_0= parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild ) + { + // Java.g:30669:2: ( ( (a0_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) )? + int alt210=2; + int LA210_0 = input.LA(1); + + if ( (LA210_0==31||LA210_0==35) ) { + alt210=1; + } + switch (alt210) { + case 1 : + // Java.g:30670:3: ( (a0_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) + { + // Java.g:30670:3: ( (a0_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) + // Java.g:30671:4: (a0_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) + { + // Java.g:30671:4: (a0_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) + // Java.g:30672:5: a0_0= parse_org_emftext_language_java_operators_UnaryModificationOperator + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_UnaryModificationOperator_in_parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression19832); + a0_0=parse_org_emftext_language_java_operators_UnaryModificationOperator(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createPrefixUnaryModificationExpression(); + startIncompleteElement(element); + } + if (a0_0 != null) { + if (a0_0 != null) { + Object value = a0_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.PREFIX_UNARY_MODIFICATION_EXPRESSION__OPERATOR), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_87_0_0_0_0_0_0, a0_0, true); + copyLocalizationInfos(a0_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16769); + addExpectedElement(16770); + addExpectedElement(16771); + addExpectedElement(16772); + addExpectedElement(16773); + addExpectedElement(16774); + addExpectedElement(16775); + addExpectedElement(16776); + addExpectedElement(16777); + addExpectedElement(16778); + addExpectedElement(16779); + addExpectedElement(16780); + addExpectedElement(16781); + addExpectedElement(16782); + addExpectedElement(16783); + addExpectedElement(16784); + addExpectedElement(16785); + addExpectedElement(16786); + addExpectedElement(16787); + addExpectedElement(16788); + addExpectedElement(16789); + addExpectedElement(16790); + addExpectedElement(16791); + addExpectedElement(16792); + addExpectedElement(16793); + addExpectedElement(16794); + addExpectedElement(16795); + addExpectedElement(16796); + addExpectedElement(16797); + addExpectedElement(16798); + addExpectedElement(16799); + addExpectedElement(16800); + addExpectedElement(16801); + addExpectedElement(16802); + addExpectedElement(16803); + addExpectedElement(16804); + addExpectedElement(16805); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16806); + addExpectedElement(16807); + addExpectedElement(16808); + addExpectedElement(16809); + addExpectedElement(16810); + addExpectedElement(16811); + addExpectedElement(16812); + addExpectedElement(16813); + addExpectedElement(16814); + addExpectedElement(16815); + addExpectedElement(16816); + addExpectedElement(16817); + addExpectedElement(16818); + addExpectedElement(16819); + addExpectedElement(16820); + addExpectedElement(16821); + addExpectedElement(16822); + addExpectedElement(16823); + addExpectedElement(16824); + addExpectedElement(16825); + addExpectedElement(16826); + addExpectedElement(16827); + addExpectedElement(16828); + addExpectedElement(16829); + addExpectedElement(16830); + addExpectedElement(16831); + addExpectedElement(16832); + addExpectedElement(16833); + addExpectedElement(16834); + addExpectedElement(16835); + addExpectedElement(16836); + addExpectedElement(16837); + addExpectedElement(16838); + addExpectedElement(16839); + addExpectedElement(16840); + addExpectedElement(16841); + addExpectedElement(16842); + } + + // Java.g:30776:2: (a1_0= parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild ) + // Java.g:30777:3: a1_0= parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild_in_parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression19877); + a1_0=parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createPrefixUnaryModificationExpression(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.PREFIX_UNARY_MODIFICATION_EXPRESSION__CHILD), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_87_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16843); + addExpectedElement(16844); + addExpectedElement(16845); + addExpectedElement(16846); + addExpectedElement(16847); + addExpectedElement(16848); + addExpectedElement(16849); + addExpectedElement(16850); + addExpectedElement(16851); + addExpectedElement(16852); + addExpectedElement(16853); + addExpectedElement(16854); + addExpectedElement(16855); + addExpectedElement(16856); + addExpectedElement(16857); + addExpectedElement(16858); + addExpectedElement(16859); + addExpectedElement(16860); + addExpectedElement(16861); + addExpectedElement(16862); + addExpectedElement(16863); + addExpectedElement(16864); + addExpectedElement(16865); + addExpectedElement(16866); + addExpectedElement(16867); + addExpectedElement(16868); + addExpectedElement(16869); + addExpectedElement(16870); + addExpectedElement(16871); + addExpectedElement(16872); + addExpectedElement(16873); + addExpectedElement(16874); + addExpectedElement(16875); + addExpectedElement(16876); + addExpectedElement(16877); + addExpectedElement(16878); + addExpectedElement(16879); + addExpectedElement(16880); + addExpectedElement(16881); + addExpectedElement(16882); + addExpectedElement(16883); + addExpectedElement(16884); + addExpectedElement(16885); + addExpectedElement(16886); + addExpectedElement(16887); + addExpectedElement(16888); + addExpectedElement(16889); + addExpectedElement(16890); + addExpectedElement(16891); + addExpectedElement(16892); + addExpectedElement(16893); + addExpectedElement(16894); + addExpectedElement(16895); + addExpectedElement(16896); + addExpectedElement(16897); + addExpectedElement(16898); + addExpectedElement(16899); + addExpectedElement(16900); + addExpectedElement(16901); + addExpectedElement(16902); + addExpectedElement(16903); + addExpectedElement(16904); + addExpectedElement(16905); + addExpectedElement(16906); + addExpectedElement(16907); + addExpectedElement(16908); + addExpectedElement(16909); + addExpectedElement(16910); + addExpectedElement(16911); + addExpectedElement(16912); + addExpectedElement(16913); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 89, parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_CastExpression" + // Java.g:30874:1: parse_org_emftext_language_java_expressions_CastExpression returns [org.emftext.language.java.expressions.CastExpression element = null] : a0= '(' (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* a3= ')' (a4_0= parse_org_emftext_language_java_expressions_UnaryExpression ) ; + public final org.emftext.language.java.expressions.CastExpression parse_org_emftext_language_java_expressions_CastExpression() throws RecognitionException { + org.emftext.language.java.expressions.CastExpression element = null; + + int parse_org_emftext_language_java_expressions_CastExpression_StartIndex = input.index(); + + Token a0=null; + Token a3=null; + org.emftext.language.java.types.TypeReference a1_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a2_0 =null; + + org.emftext.language.java.expressions.UnaryExpression a4_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 90) ) { return element; } + + // Java.g:30877:2: (a0= '(' (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* a3= ')' (a4_0= parse_org_emftext_language_java_expressions_UnaryExpression ) ) + // Java.g:30878:2: a0= '(' (a1_0= parse_org_emftext_language_java_types_TypeReference ) ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* a3= ')' (a4_0= parse_org_emftext_language_java_expressions_UnaryExpression ) + { + a0=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_expressions_CastExpression19910); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createCastExpression(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_88_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16914); + addExpectedElement(16915); + addExpectedElement(16916); + addExpectedElement(16917); + addExpectedElement(16918); + addExpectedElement(16919); + addExpectedElement(16920); + addExpectedElement(16921); + addExpectedElement(16922); + addExpectedElement(16923); + addExpectedElement(16924); + } + + // Java.g:30902:2: (a1_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:30903:3: a1_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_expressions_CastExpression19928); + a1_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createCastExpression(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CAST_EXPRESSION__TYPE_REFERENCE), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_88_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16925); + addExpectedElement(16926); + } + + // Java.g:30929:2: ( (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop211: + do { + int alt211=2; + int LA211_0 = input.LA(1); + + if ( (LA211_0==49) ) { + alt211=1; + } + + + switch (alt211) { + case 1 : + // Java.g:30930:3: (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:30930:3: (a2_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:30931:4: a2_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_expressions_CastExpression19955); + a2_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createCastExpression(); + startIncompleteElement(element); + } + if (a2_0 != null) { + if (a2_0 != null) { + Object value = a2_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.CAST_EXPRESSION__ARRAY_DIMENSIONS_BEFORE, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_88_0_0_2, a2_0, true); + copyLocalizationInfos(a2_0, element); + } + } + + } + + + } + break; + + default : + break loop211; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16927); + addExpectedElement(16928); + } + + a3=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_expressions_CastExpression19981); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createCastExpression(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_88_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16929); + addExpectedElement(16930); + addExpectedElement(16931); + addExpectedElement(16932); + addExpectedElement(16933); + addExpectedElement(16934); + addExpectedElement(16935); + addExpectedElement(16936); + addExpectedElement(16937); + addExpectedElement(16938); + addExpectedElement(16939); + addExpectedElement(16940); + addExpectedElement(16941); + addExpectedElement(16942); + addExpectedElement(16943); + addExpectedElement(16944); + addExpectedElement(16945); + addExpectedElement(16946); + addExpectedElement(16947); + addExpectedElement(16948); + addExpectedElement(16949); + addExpectedElement(16950); + addExpectedElement(16951); + addExpectedElement(16952); + addExpectedElement(16953); + addExpectedElement(16954); + addExpectedElement(16955); + addExpectedElement(16956); + addExpectedElement(16957); + addExpectedElement(16958); + addExpectedElement(16959); + addExpectedElement(16960); + addExpectedElement(16961); + addExpectedElement(16962); + addExpectedElement(16963); + addExpectedElement(16964); + addExpectedElement(16965); + addExpectedElement(16966); + addExpectedElement(16967); + addExpectedElement(16968); + addExpectedElement(16969); + addExpectedElement(16970); + addExpectedElement(16971); + } + + // Java.g:31014:2: (a4_0= parse_org_emftext_language_java_expressions_UnaryExpression ) + // Java.g:31015:3: a4_0= parse_org_emftext_language_java_expressions_UnaryExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_UnaryExpression_in_parse_org_emftext_language_java_expressions_CastExpression19999); + a4_0=parse_org_emftext_language_java_expressions_UnaryExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createCastExpression(); + startIncompleteElement(element); + } + if (a4_0 != null) { + if (a4_0 != null) { + Object value = a4_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.CAST_EXPRESSION__CHILD), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_88_0_0_5, a4_0, true); + copyLocalizationInfos(a4_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(16972); + addExpectedElement(16973); + addExpectedElement(16974); + addExpectedElement(16975); + addExpectedElement(16976); + addExpectedElement(16977); + addExpectedElement(16978); + addExpectedElement(16979); + addExpectedElement(16980); + addExpectedElement(16981); + addExpectedElement(16982); + addExpectedElement(16983); + addExpectedElement(16984); + addExpectedElement(16985); + addExpectedElement(16986); + addExpectedElement(16987); + addExpectedElement(16988); + addExpectedElement(16989); + addExpectedElement(16990); + addExpectedElement(16991); + addExpectedElement(16992); + addExpectedElement(16993); + addExpectedElement(16994); + addExpectedElement(16995); + addExpectedElement(16996); + addExpectedElement(16997); + addExpectedElement(16998); + addExpectedElement(16999); + addExpectedElement(17000); + addExpectedElement(17001); + addExpectedElement(17002); + addExpectedElement(17003); + addExpectedElement(17004); + addExpectedElement(17005); + addExpectedElement(17006); + addExpectedElement(17007); + addExpectedElement(17008); + addExpectedElement(17009); + addExpectedElement(17010); + addExpectedElement(17011); + addExpectedElement(17012); + addExpectedElement(17013); + addExpectedElement(17014); + addExpectedElement(17015); + addExpectedElement(17016); + addExpectedElement(17017); + addExpectedElement(17018); + addExpectedElement(17019); + addExpectedElement(17020); + addExpectedElement(17021); + addExpectedElement(17022); + addExpectedElement(17023); + addExpectedElement(17024); + addExpectedElement(17025); + addExpectedElement(17026); + addExpectedElement(17027); + addExpectedElement(17028); + addExpectedElement(17029); + addExpectedElement(17030); + addExpectedElement(17031); + addExpectedElement(17032); + addExpectedElement(17033); + addExpectedElement(17034); + addExpectedElement(17035); + addExpectedElement(17036); + addExpectedElement(17037); + addExpectedElement(17038); + addExpectedElement(17039); + addExpectedElement(17040); + addExpectedElement(17041); + addExpectedElement(17042); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 90, parse_org_emftext_language_java_expressions_CastExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_CastExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_NestedExpression" + // Java.g:31112:1: parse_org_emftext_language_java_expressions_NestedExpression returns [org.emftext.language.java.expressions.NestedExpression element = null] : a0= '(' (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a2= ')' ( (a3_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a4= '.' (a5_0= parse_org_emftext_language_java_references_Reference ) ) )? ; + public final org.emftext.language.java.expressions.NestedExpression parse_org_emftext_language_java_expressions_NestedExpression() throws RecognitionException { + org.emftext.language.java.expressions.NestedExpression element = null; + + int parse_org_emftext_language_java_expressions_NestedExpression_StartIndex = input.index(); + + Token a0=null; + Token a2=null; + Token a4=null; + org.emftext.language.java.expressions.AssignmentExpression a1_0 =null; + + org.emftext.language.java.arrays.ArraySelector a3_0 =null; + + org.emftext.language.java.references.Reference a5_0 =null; + + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 91) ) { return element; } + + // Java.g:31115:2: (a0= '(' (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a2= ')' ( (a3_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a4= '.' (a5_0= parse_org_emftext_language_java_references_Reference ) ) )? ) + // Java.g:31116:2: a0= '(' (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) a2= ')' ( (a3_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* ( (a4= '.' (a5_0= parse_org_emftext_language_java_references_Reference ) ) )? + { + a0=(Token)match(input,26,FOLLOW_26_in_parse_org_emftext_language_java_expressions_NestedExpression20032); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createNestedExpression(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_89_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17043); + addExpectedElement(17044); + addExpectedElement(17045); + addExpectedElement(17046); + addExpectedElement(17047); + addExpectedElement(17048); + addExpectedElement(17049); + addExpectedElement(17050); + addExpectedElement(17051); + addExpectedElement(17052); + addExpectedElement(17053); + addExpectedElement(17054); + addExpectedElement(17055); + addExpectedElement(17056); + addExpectedElement(17057); + addExpectedElement(17058); + addExpectedElement(17059); + addExpectedElement(17060); + addExpectedElement(17061); + addExpectedElement(17062); + addExpectedElement(17063); + addExpectedElement(17064); + addExpectedElement(17065); + addExpectedElement(17066); + addExpectedElement(17067); + addExpectedElement(17068); + addExpectedElement(17069); + addExpectedElement(17070); + addExpectedElement(17071); + addExpectedElement(17072); + addExpectedElement(17073); + addExpectedElement(17074); + addExpectedElement(17075); + addExpectedElement(17076); + addExpectedElement(17077); + addExpectedElement(17078); + addExpectedElement(17079); + addExpectedElement(17080); + addExpectedElement(17081); + addExpectedElement(17082); + addExpectedElement(17083); + addExpectedElement(17084); + addExpectedElement(17085); + } + + // Java.g:31172:2: (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:31173:3: a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_expressions_NestedExpression20050); + a1_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createNestedExpression(); + startIncompleteElement(element); + } + if (a1_0 != null) { + if (a1_0 != null) { + Object value = a1_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.NESTED_EXPRESSION__EXPRESSION), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_89_0_0_1, a1_0, true); + copyLocalizationInfos(a1_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17086); + } + + a2=(Token)match(input,27,FOLLOW_27_in_parse_org_emftext_language_java_expressions_NestedExpression20068); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createNestedExpression(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_89_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17087); + addExpectedElement(17088); + addExpectedElement(17089); + addExpectedElement(17090); + addExpectedElement(17091); + addExpectedElement(17092); + addExpectedElement(17093); + addExpectedElement(17094); + addExpectedElement(17095); + addExpectedElement(17096); + addExpectedElement(17097); + addExpectedElement(17098); + addExpectedElement(17099); + addExpectedElement(17100); + addExpectedElement(17101); + addExpectedElement(17102); + addExpectedElement(17103); + addExpectedElement(17104); + addExpectedElement(17105); + addExpectedElement(17106); + addExpectedElement(17107); + addExpectedElement(17108); + addExpectedElement(17109); + addExpectedElement(17110); + addExpectedElement(17111); + addExpectedElement(17112); + addExpectedElement(17113); + addExpectedElement(17114); + addExpectedElement(17115); + addExpectedElement(17116); + addExpectedElement(17117); + addExpectedElement(17118); + addExpectedElement(17119); + addExpectedElement(17120); + addExpectedElement(17121); + addExpectedElement(17122); + addExpectedElement(17123); + addExpectedElement(17124); + addExpectedElement(17125); + addExpectedElement(17126); + addExpectedElement(17127); + addExpectedElement(17128); + addExpectedElement(17129); + addExpectedElement(17130); + addExpectedElement(17131); + addExpectedElement(17132); + addExpectedElement(17133); + addExpectedElement(17134); + addExpectedElement(17135); + addExpectedElement(17136); + addExpectedElement(17137); + addExpectedElement(17138); + addExpectedElement(17139); + addExpectedElement(17140); + addExpectedElement(17141); + addExpectedElement(17142); + addExpectedElement(17143); + addExpectedElement(17144); + addExpectedElement(17145); + addExpectedElement(17146); + addExpectedElement(17147); + addExpectedElement(17148); + addExpectedElement(17149); + addExpectedElement(17150); + addExpectedElement(17151); + addExpectedElement(17152); + } + + // Java.g:31277:2: ( (a3_0= parse_org_emftext_language_java_arrays_ArraySelector ) )* + loop212: + do { + int alt212=2; + int LA212_0 = input.LA(1); + + if ( (LA212_0==49) ) { + alt212=1; + } + + + switch (alt212) { + case 1 : + // Java.g:31278:3: (a3_0= parse_org_emftext_language_java_arrays_ArraySelector ) + { + // Java.g:31278:3: (a3_0= parse_org_emftext_language_java_arrays_ArraySelector ) + // Java.g:31279:4: a3_0= parse_org_emftext_language_java_arrays_ArraySelector + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArraySelector_in_parse_org_emftext_language_java_expressions_NestedExpression20091); + a3_0=parse_org_emftext_language_java_arrays_ArraySelector(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createNestedExpression(); + startIncompleteElement(element); + } + if (a3_0 != null) { + if (a3_0 != null) { + Object value = a3_0; + addObjectToList(element, org.emftext.language.java.expressions.ExpressionsPackage.NESTED_EXPRESSION__ARRAY_SELECTORS, value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_89_0_0_3, a3_0, true); + copyLocalizationInfos(a3_0, element); + } + } + + } + + + } + break; + + default : + break loop212; + } + } while (true); + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17153); + addExpectedElement(17154); + addExpectedElement(17155); + addExpectedElement(17156); + addExpectedElement(17157); + addExpectedElement(17158); + addExpectedElement(17159); + addExpectedElement(17160); + addExpectedElement(17161); + addExpectedElement(17162); + addExpectedElement(17163); + addExpectedElement(17164); + addExpectedElement(17165); + addExpectedElement(17166); + addExpectedElement(17167); + addExpectedElement(17168); + addExpectedElement(17169); + addExpectedElement(17170); + addExpectedElement(17171); + addExpectedElement(17172); + addExpectedElement(17173); + addExpectedElement(17174); + addExpectedElement(17175); + addExpectedElement(17176); + addExpectedElement(17177); + addExpectedElement(17178); + addExpectedElement(17179); + addExpectedElement(17180); + addExpectedElement(17181); + addExpectedElement(17182); + addExpectedElement(17183); + addExpectedElement(17184); + addExpectedElement(17185); + addExpectedElement(17186); + addExpectedElement(17187); + addExpectedElement(17188); + addExpectedElement(17189); + addExpectedElement(17190); + addExpectedElement(17191); + addExpectedElement(17192); + addExpectedElement(17193); + addExpectedElement(17194); + addExpectedElement(17195); + addExpectedElement(17196); + addExpectedElement(17197); + addExpectedElement(17198); + addExpectedElement(17199); + addExpectedElement(17200); + addExpectedElement(17201); + addExpectedElement(17202); + addExpectedElement(17203); + addExpectedElement(17204); + addExpectedElement(17205); + addExpectedElement(17206); + addExpectedElement(17207); + addExpectedElement(17208); + addExpectedElement(17209); + addExpectedElement(17210); + addExpectedElement(17211); + addExpectedElement(17212); + addExpectedElement(17213); + addExpectedElement(17214); + addExpectedElement(17215); + addExpectedElement(17216); + addExpectedElement(17217); + addExpectedElement(17218); + } + + // Java.g:31370:2: ( (a4= '.' (a5_0= parse_org_emftext_language_java_references_Reference ) ) )? + int alt213=2; + int LA213_0 = input.LA(1); + + if ( (LA213_0==37) ) { + alt213=1; + } + switch (alt213) { + case 1 : + // Java.g:31371:3: (a4= '.' (a5_0= parse_org_emftext_language_java_references_Reference ) ) + { + // Java.g:31371:3: (a4= '.' (a5_0= parse_org_emftext_language_java_references_Reference ) ) + // Java.g:31372:4: a4= '.' (a5_0= parse_org_emftext_language_java_references_Reference ) + { + a4=(Token)match(input,37,FOLLOW_37_in_parse_org_emftext_language_java_expressions_NestedExpression20126); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createNestedExpression(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_89_0_0_4_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a4, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17219); + addExpectedElement(17220); + addExpectedElement(17221); + addExpectedElement(17222); + addExpectedElement(17223); + addExpectedElement(17224); + addExpectedElement(17225); + addExpectedElement(17226); + addExpectedElement(17227); + addExpectedElement(17228); + addExpectedElement(17229); + addExpectedElement(17230); + addExpectedElement(17231); + addExpectedElement(17232); + addExpectedElement(17233); + addExpectedElement(17234); + addExpectedElement(17235); + addExpectedElement(17236); + addExpectedElement(17237); + addExpectedElement(17238); + addExpectedElement(17239); + addExpectedElement(17240); + addExpectedElement(17241); + } + + // Java.g:31408:4: (a5_0= parse_org_emftext_language_java_references_Reference ) + // Java.g:31409:5: a5_0= parse_org_emftext_language_java_references_Reference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_expressions_NestedExpression20152); + a5_0=parse_org_emftext_language_java_references_Reference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.expressions.ExpressionsFactory.eINSTANCE.createNestedExpression(); + startIncompleteElement(element); + } + if (a5_0 != null) { + if (a5_0 != null) { + Object value = a5_0; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.expressions.ExpressionsPackage.NESTED_EXPRESSION__NEXT), value); + completedElement(value, true); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_89_0_0_4_0_0_1, a5_0, true); + copyLocalizationInfos(a5_0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17242); + addExpectedElement(17243); + addExpectedElement(17244); + addExpectedElement(17245); + addExpectedElement(17246); + addExpectedElement(17247); + addExpectedElement(17248); + addExpectedElement(17249); + addExpectedElement(17250); + addExpectedElement(17251); + addExpectedElement(17252); + addExpectedElement(17253); + addExpectedElement(17254); + addExpectedElement(17255); + addExpectedElement(17256); + addExpectedElement(17257); + addExpectedElement(17258); + addExpectedElement(17259); + addExpectedElement(17260); + addExpectedElement(17261); + addExpectedElement(17262); + addExpectedElement(17263); + addExpectedElement(17264); + addExpectedElement(17265); + addExpectedElement(17266); + addExpectedElement(17267); + addExpectedElement(17268); + addExpectedElement(17269); + addExpectedElement(17270); + addExpectedElement(17271); + addExpectedElement(17272); + addExpectedElement(17273); + addExpectedElement(17274); + addExpectedElement(17275); + addExpectedElement(17276); + addExpectedElement(17277); + addExpectedElement(17278); + addExpectedElement(17279); + addExpectedElement(17280); + addExpectedElement(17281); + addExpectedElement(17282); + addExpectedElement(17283); + addExpectedElement(17284); + addExpectedElement(17285); + addExpectedElement(17286); + addExpectedElement(17287); + addExpectedElement(17288); + addExpectedElement(17289); + addExpectedElement(17290); + addExpectedElement(17291); + addExpectedElement(17292); + addExpectedElement(17293); + addExpectedElement(17294); + addExpectedElement(17295); + addExpectedElement(17296); + addExpectedElement(17297); + addExpectedElement(17298); + addExpectedElement(17299); + addExpectedElement(17300); + addExpectedElement(17301); + addExpectedElement(17302); + addExpectedElement(17303); + addExpectedElement(17304); + addExpectedElement(17305); + } + + } + + + } + break; + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17306); + addExpectedElement(17307); + addExpectedElement(17308); + addExpectedElement(17309); + addExpectedElement(17310); + addExpectedElement(17311); + addExpectedElement(17312); + addExpectedElement(17313); + addExpectedElement(17314); + addExpectedElement(17315); + addExpectedElement(17316); + addExpectedElement(17317); + addExpectedElement(17318); + addExpectedElement(17319); + addExpectedElement(17320); + addExpectedElement(17321); + addExpectedElement(17322); + addExpectedElement(17323); + addExpectedElement(17324); + addExpectedElement(17325); + addExpectedElement(17326); + addExpectedElement(17327); + addExpectedElement(17328); + addExpectedElement(17329); + addExpectedElement(17330); + addExpectedElement(17331); + addExpectedElement(17332); + addExpectedElement(17333); + addExpectedElement(17334); + addExpectedElement(17335); + addExpectedElement(17336); + addExpectedElement(17337); + addExpectedElement(17338); + addExpectedElement(17339); + addExpectedElement(17340); + addExpectedElement(17341); + addExpectedElement(17342); + addExpectedElement(17343); + addExpectedElement(17344); + addExpectedElement(17345); + addExpectedElement(17346); + addExpectedElement(17347); + addExpectedElement(17348); + addExpectedElement(17349); + addExpectedElement(17350); + addExpectedElement(17351); + addExpectedElement(17352); + addExpectedElement(17353); + addExpectedElement(17354); + addExpectedElement(17355); + addExpectedElement(17356); + addExpectedElement(17357); + addExpectedElement(17358); + addExpectedElement(17359); + addExpectedElement(17360); + addExpectedElement(17361); + addExpectedElement(17362); + addExpectedElement(17363); + addExpectedElement(17364); + addExpectedElement(17365); + addExpectedElement(17366); + addExpectedElement(17367); + addExpectedElement(17368); + addExpectedElement(17369); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 91, parse_org_emftext_language_java_expressions_NestedExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_NestedExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_Assignment" + // Java.g:31569:1: parse_org_emftext_language_java_operators_Assignment returns [org.emftext.language.java.operators.Assignment element = null] : a0= '=' ; + public final org.emftext.language.java.operators.Assignment parse_org_emftext_language_java_operators_Assignment() throws RecognitionException { + org.emftext.language.java.operators.Assignment element = null; + + int parse_org_emftext_language_java_operators_Assignment_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 92) ) { return element; } + + // Java.g:31572:2: (a0= '=' ) + // Java.g:31573:2: a0= '=' + { + a0=(Token)match(input,44,FOLLOW_44_in_parse_org_emftext_language_java_operators_Assignment20208); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignment(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_90_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17370); + addExpectedElement(17371); + addExpectedElement(17372); + addExpectedElement(17373); + addExpectedElement(17374); + addExpectedElement(17375); + addExpectedElement(17376); + addExpectedElement(17377); + addExpectedElement(17378); + addExpectedElement(17379); + addExpectedElement(17380); + addExpectedElement(17381); + addExpectedElement(17382); + addExpectedElement(17383); + addExpectedElement(17384); + addExpectedElement(17385); + addExpectedElement(17386); + addExpectedElement(17387); + addExpectedElement(17388); + addExpectedElement(17389); + addExpectedElement(17390); + addExpectedElement(17391); + addExpectedElement(17392); + addExpectedElement(17393); + addExpectedElement(17394); + addExpectedElement(17395); + addExpectedElement(17396); + addExpectedElement(17397); + addExpectedElement(17398); + addExpectedElement(17399); + addExpectedElement(17400); + addExpectedElement(17401); + addExpectedElement(17402); + addExpectedElement(17403); + addExpectedElement(17404); + addExpectedElement(17405); + addExpectedElement(17406); + addExpectedElement(17407); + addExpectedElement(17408); + addExpectedElement(17409); + addExpectedElement(17410); + addExpectedElement(17411); + addExpectedElement(17412); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 92, parse_org_emftext_language_java_operators_Assignment_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_Assignment" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_AssignmentPlus" + // Java.g:31631:1: parse_org_emftext_language_java_operators_AssignmentPlus returns [org.emftext.language.java.operators.AssignmentPlus element = null] : a0= '+=' ; + public final org.emftext.language.java.operators.AssignmentPlus parse_org_emftext_language_java_operators_AssignmentPlus() throws RecognitionException { + org.emftext.language.java.operators.AssignmentPlus element = null; + + int parse_org_emftext_language_java_operators_AssignmentPlus_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 93) ) { return element; } + + // Java.g:31634:2: (a0= '+=' ) + // Java.g:31635:2: a0= '+=' + { + a0=(Token)match(input,32,FOLLOW_32_in_parse_org_emftext_language_java_operators_AssignmentPlus20237); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentPlus(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_91_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17413); + addExpectedElement(17414); + addExpectedElement(17415); + addExpectedElement(17416); + addExpectedElement(17417); + addExpectedElement(17418); + addExpectedElement(17419); + addExpectedElement(17420); + addExpectedElement(17421); + addExpectedElement(17422); + addExpectedElement(17423); + addExpectedElement(17424); + addExpectedElement(17425); + addExpectedElement(17426); + addExpectedElement(17427); + addExpectedElement(17428); + addExpectedElement(17429); + addExpectedElement(17430); + addExpectedElement(17431); + addExpectedElement(17432); + addExpectedElement(17433); + addExpectedElement(17434); + addExpectedElement(17435); + addExpectedElement(17436); + addExpectedElement(17437); + addExpectedElement(17438); + addExpectedElement(17439); + addExpectedElement(17440); + addExpectedElement(17441); + addExpectedElement(17442); + addExpectedElement(17443); + addExpectedElement(17444); + addExpectedElement(17445); + addExpectedElement(17446); + addExpectedElement(17447); + addExpectedElement(17448); + addExpectedElement(17449); + addExpectedElement(17450); + addExpectedElement(17451); + addExpectedElement(17452); + addExpectedElement(17453); + addExpectedElement(17454); + addExpectedElement(17455); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 93, parse_org_emftext_language_java_operators_AssignmentPlus_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_AssignmentPlus" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_AssignmentMinus" + // Java.g:31693:1: parse_org_emftext_language_java_operators_AssignmentMinus returns [org.emftext.language.java.operators.AssignmentMinus element = null] : a0= '-=' ; + public final org.emftext.language.java.operators.AssignmentMinus parse_org_emftext_language_java_operators_AssignmentMinus() throws RecognitionException { + org.emftext.language.java.operators.AssignmentMinus element = null; + + int parse_org_emftext_language_java_operators_AssignmentMinus_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 94) ) { return element; } + + // Java.g:31696:2: (a0= '-=' ) + // Java.g:31697:2: a0= '-=' + { + a0=(Token)match(input,36,FOLLOW_36_in_parse_org_emftext_language_java_operators_AssignmentMinus20266); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentMinus(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_92_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17456); + addExpectedElement(17457); + addExpectedElement(17458); + addExpectedElement(17459); + addExpectedElement(17460); + addExpectedElement(17461); + addExpectedElement(17462); + addExpectedElement(17463); + addExpectedElement(17464); + addExpectedElement(17465); + addExpectedElement(17466); + addExpectedElement(17467); + addExpectedElement(17468); + addExpectedElement(17469); + addExpectedElement(17470); + addExpectedElement(17471); + addExpectedElement(17472); + addExpectedElement(17473); + addExpectedElement(17474); + addExpectedElement(17475); + addExpectedElement(17476); + addExpectedElement(17477); + addExpectedElement(17478); + addExpectedElement(17479); + addExpectedElement(17480); + addExpectedElement(17481); + addExpectedElement(17482); + addExpectedElement(17483); + addExpectedElement(17484); + addExpectedElement(17485); + addExpectedElement(17486); + addExpectedElement(17487); + addExpectedElement(17488); + addExpectedElement(17489); + addExpectedElement(17490); + addExpectedElement(17491); + addExpectedElement(17492); + addExpectedElement(17493); + addExpectedElement(17494); + addExpectedElement(17495); + addExpectedElement(17496); + addExpectedElement(17497); + addExpectedElement(17498); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 94, parse_org_emftext_language_java_operators_AssignmentMinus_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_AssignmentMinus" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_AssignmentMultiplication" + // Java.g:31755:1: parse_org_emftext_language_java_operators_AssignmentMultiplication returns [org.emftext.language.java.operators.AssignmentMultiplication element = null] : a0= '*=' ; + public final org.emftext.language.java.operators.AssignmentMultiplication parse_org_emftext_language_java_operators_AssignmentMultiplication() throws RecognitionException { + org.emftext.language.java.operators.AssignmentMultiplication element = null; + + int parse_org_emftext_language_java_operators_AssignmentMultiplication_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 95) ) { return element; } + + // Java.g:31758:2: (a0= '*=' ) + // Java.g:31759:2: a0= '*=' + { + a0=(Token)match(input,29,FOLLOW_29_in_parse_org_emftext_language_java_operators_AssignmentMultiplication20295); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentMultiplication(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_93_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17499); + addExpectedElement(17500); + addExpectedElement(17501); + addExpectedElement(17502); + addExpectedElement(17503); + addExpectedElement(17504); + addExpectedElement(17505); + addExpectedElement(17506); + addExpectedElement(17507); + addExpectedElement(17508); + addExpectedElement(17509); + addExpectedElement(17510); + addExpectedElement(17511); + addExpectedElement(17512); + addExpectedElement(17513); + addExpectedElement(17514); + addExpectedElement(17515); + addExpectedElement(17516); + addExpectedElement(17517); + addExpectedElement(17518); + addExpectedElement(17519); + addExpectedElement(17520); + addExpectedElement(17521); + addExpectedElement(17522); + addExpectedElement(17523); + addExpectedElement(17524); + addExpectedElement(17525); + addExpectedElement(17526); + addExpectedElement(17527); + addExpectedElement(17528); + addExpectedElement(17529); + addExpectedElement(17530); + addExpectedElement(17531); + addExpectedElement(17532); + addExpectedElement(17533); + addExpectedElement(17534); + addExpectedElement(17535); + addExpectedElement(17536); + addExpectedElement(17537); + addExpectedElement(17538); + addExpectedElement(17539); + addExpectedElement(17540); + addExpectedElement(17541); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 95, parse_org_emftext_language_java_operators_AssignmentMultiplication_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_AssignmentMultiplication" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_AssignmentDivision" + // Java.g:31817:1: parse_org_emftext_language_java_operators_AssignmentDivision returns [org.emftext.language.java.operators.AssignmentDivision element = null] : a0= '/=' ; + public final org.emftext.language.java.operators.AssignmentDivision parse_org_emftext_language_java_operators_AssignmentDivision() throws RecognitionException { + org.emftext.language.java.operators.AssignmentDivision element = null; + + int parse_org_emftext_language_java_operators_AssignmentDivision_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 96) ) { return element; } + + // Java.g:31820:2: (a0= '/=' ) + // Java.g:31821:2: a0= '/=' + { + a0=(Token)match(input,40,FOLLOW_40_in_parse_org_emftext_language_java_operators_AssignmentDivision20324); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentDivision(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_94_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17542); + addExpectedElement(17543); + addExpectedElement(17544); + addExpectedElement(17545); + addExpectedElement(17546); + addExpectedElement(17547); + addExpectedElement(17548); + addExpectedElement(17549); + addExpectedElement(17550); + addExpectedElement(17551); + addExpectedElement(17552); + addExpectedElement(17553); + addExpectedElement(17554); + addExpectedElement(17555); + addExpectedElement(17556); + addExpectedElement(17557); + addExpectedElement(17558); + addExpectedElement(17559); + addExpectedElement(17560); + addExpectedElement(17561); + addExpectedElement(17562); + addExpectedElement(17563); + addExpectedElement(17564); + addExpectedElement(17565); + addExpectedElement(17566); + addExpectedElement(17567); + addExpectedElement(17568); + addExpectedElement(17569); + addExpectedElement(17570); + addExpectedElement(17571); + addExpectedElement(17572); + addExpectedElement(17573); + addExpectedElement(17574); + addExpectedElement(17575); + addExpectedElement(17576); + addExpectedElement(17577); + addExpectedElement(17578); + addExpectedElement(17579); + addExpectedElement(17580); + addExpectedElement(17581); + addExpectedElement(17582); + addExpectedElement(17583); + addExpectedElement(17584); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 96, parse_org_emftext_language_java_operators_AssignmentDivision_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_AssignmentDivision" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_AssignmentAnd" + // Java.g:31879:1: parse_org_emftext_language_java_operators_AssignmentAnd returns [org.emftext.language.java.operators.AssignmentAnd element = null] : a0= '&=' ; + public final org.emftext.language.java.operators.AssignmentAnd parse_org_emftext_language_java_operators_AssignmentAnd() throws RecognitionException { + org.emftext.language.java.operators.AssignmentAnd element = null; + + int parse_org_emftext_language_java_operators_AssignmentAnd_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 97) ) { return element; } + + // Java.g:31882:2: (a0= '&=' ) + // Java.g:31883:2: a0= '&=' + { + a0=(Token)match(input,25,FOLLOW_25_in_parse_org_emftext_language_java_operators_AssignmentAnd20353); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentAnd(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_95_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17585); + addExpectedElement(17586); + addExpectedElement(17587); + addExpectedElement(17588); + addExpectedElement(17589); + addExpectedElement(17590); + addExpectedElement(17591); + addExpectedElement(17592); + addExpectedElement(17593); + addExpectedElement(17594); + addExpectedElement(17595); + addExpectedElement(17596); + addExpectedElement(17597); + addExpectedElement(17598); + addExpectedElement(17599); + addExpectedElement(17600); + addExpectedElement(17601); + addExpectedElement(17602); + addExpectedElement(17603); + addExpectedElement(17604); + addExpectedElement(17605); + addExpectedElement(17606); + addExpectedElement(17607); + addExpectedElement(17608); + addExpectedElement(17609); + addExpectedElement(17610); + addExpectedElement(17611); + addExpectedElement(17612); + addExpectedElement(17613); + addExpectedElement(17614); + addExpectedElement(17615); + addExpectedElement(17616); + addExpectedElement(17617); + addExpectedElement(17618); + addExpectedElement(17619); + addExpectedElement(17620); + addExpectedElement(17621); + addExpectedElement(17622); + addExpectedElement(17623); + addExpectedElement(17624); + addExpectedElement(17625); + addExpectedElement(17626); + addExpectedElement(17627); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 97, parse_org_emftext_language_java_operators_AssignmentAnd_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_AssignmentAnd" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_AssignmentOr" + // Java.g:31941:1: parse_org_emftext_language_java_operators_AssignmentOr returns [org.emftext.language.java.operators.AssignmentOr element = null] : a0= '|=' ; + public final org.emftext.language.java.operators.AssignmentOr parse_org_emftext_language_java_operators_AssignmentOr() throws RecognitionException { + org.emftext.language.java.operators.AssignmentOr element = null; + + int parse_org_emftext_language_java_operators_AssignmentOr_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 98) ) { return element; } + + // Java.g:31944:2: (a0= '|=' ) + // Java.g:31945:2: a0= '|=' + { + a0=(Token)match(input,107,FOLLOW_107_in_parse_org_emftext_language_java_operators_AssignmentOr20382); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentOr(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_96_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17628); + addExpectedElement(17629); + addExpectedElement(17630); + addExpectedElement(17631); + addExpectedElement(17632); + addExpectedElement(17633); + addExpectedElement(17634); + addExpectedElement(17635); + addExpectedElement(17636); + addExpectedElement(17637); + addExpectedElement(17638); + addExpectedElement(17639); + addExpectedElement(17640); + addExpectedElement(17641); + addExpectedElement(17642); + addExpectedElement(17643); + addExpectedElement(17644); + addExpectedElement(17645); + addExpectedElement(17646); + addExpectedElement(17647); + addExpectedElement(17648); + addExpectedElement(17649); + addExpectedElement(17650); + addExpectedElement(17651); + addExpectedElement(17652); + addExpectedElement(17653); + addExpectedElement(17654); + addExpectedElement(17655); + addExpectedElement(17656); + addExpectedElement(17657); + addExpectedElement(17658); + addExpectedElement(17659); + addExpectedElement(17660); + addExpectedElement(17661); + addExpectedElement(17662); + addExpectedElement(17663); + addExpectedElement(17664); + addExpectedElement(17665); + addExpectedElement(17666); + addExpectedElement(17667); + addExpectedElement(17668); + addExpectedElement(17669); + addExpectedElement(17670); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 98, parse_org_emftext_language_java_operators_AssignmentOr_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_AssignmentOr" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_AssignmentExclusiveOr" + // Java.g:32003:1: parse_org_emftext_language_java_operators_AssignmentExclusiveOr returns [org.emftext.language.java.operators.AssignmentExclusiveOr element = null] : a0= '^=' ; + public final org.emftext.language.java.operators.AssignmentExclusiveOr parse_org_emftext_language_java_operators_AssignmentExclusiveOr() throws RecognitionException { + org.emftext.language.java.operators.AssignmentExclusiveOr element = null; + + int parse_org_emftext_language_java_operators_AssignmentExclusiveOr_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 99) ) { return element; } + + // Java.g:32006:2: (a0= '^=' ) + // Java.g:32007:2: a0= '^=' + { + a0=(Token)match(input,55,FOLLOW_55_in_parse_org_emftext_language_java_operators_AssignmentExclusiveOr20411); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentExclusiveOr(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_97_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17671); + addExpectedElement(17672); + addExpectedElement(17673); + addExpectedElement(17674); + addExpectedElement(17675); + addExpectedElement(17676); + addExpectedElement(17677); + addExpectedElement(17678); + addExpectedElement(17679); + addExpectedElement(17680); + addExpectedElement(17681); + addExpectedElement(17682); + addExpectedElement(17683); + addExpectedElement(17684); + addExpectedElement(17685); + addExpectedElement(17686); + addExpectedElement(17687); + addExpectedElement(17688); + addExpectedElement(17689); + addExpectedElement(17690); + addExpectedElement(17691); + addExpectedElement(17692); + addExpectedElement(17693); + addExpectedElement(17694); + addExpectedElement(17695); + addExpectedElement(17696); + addExpectedElement(17697); + addExpectedElement(17698); + addExpectedElement(17699); + addExpectedElement(17700); + addExpectedElement(17701); + addExpectedElement(17702); + addExpectedElement(17703); + addExpectedElement(17704); + addExpectedElement(17705); + addExpectedElement(17706); + addExpectedElement(17707); + addExpectedElement(17708); + addExpectedElement(17709); + addExpectedElement(17710); + addExpectedElement(17711); + addExpectedElement(17712); + addExpectedElement(17713); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 99, parse_org_emftext_language_java_operators_AssignmentExclusiveOr_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_AssignmentExclusiveOr" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_AssignmentModulo" + // Java.g:32065:1: parse_org_emftext_language_java_operators_AssignmentModulo returns [org.emftext.language.java.operators.AssignmentModulo element = null] : a0= '\\u0025=' ; + public final org.emftext.language.java.operators.AssignmentModulo parse_org_emftext_language_java_operators_AssignmentModulo() throws RecognitionException { + org.emftext.language.java.operators.AssignmentModulo element = null; + + int parse_org_emftext_language_java_operators_AssignmentModulo_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 100) ) { return element; } + + // Java.g:32068:2: (a0= '\\u0025=' ) + // Java.g:32069:2: a0= '\\u0025=' + { + a0=(Token)match(input,52,FOLLOW_52_in_parse_org_emftext_language_java_operators_AssignmentModulo20440); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentModulo(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_98_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17714); + addExpectedElement(17715); + addExpectedElement(17716); + addExpectedElement(17717); + addExpectedElement(17718); + addExpectedElement(17719); + addExpectedElement(17720); + addExpectedElement(17721); + addExpectedElement(17722); + addExpectedElement(17723); + addExpectedElement(17724); + addExpectedElement(17725); + addExpectedElement(17726); + addExpectedElement(17727); + addExpectedElement(17728); + addExpectedElement(17729); + addExpectedElement(17730); + addExpectedElement(17731); + addExpectedElement(17732); + addExpectedElement(17733); + addExpectedElement(17734); + addExpectedElement(17735); + addExpectedElement(17736); + addExpectedElement(17737); + addExpectedElement(17738); + addExpectedElement(17739); + addExpectedElement(17740); + addExpectedElement(17741); + addExpectedElement(17742); + addExpectedElement(17743); + addExpectedElement(17744); + addExpectedElement(17745); + addExpectedElement(17746); + addExpectedElement(17747); + addExpectedElement(17748); + addExpectedElement(17749); + addExpectedElement(17750); + addExpectedElement(17751); + addExpectedElement(17752); + addExpectedElement(17753); + addExpectedElement(17754); + addExpectedElement(17755); + addExpectedElement(17756); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 100, parse_org_emftext_language_java_operators_AssignmentModulo_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_AssignmentModulo" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_AssignmentLeftShift" + // Java.g:32127:1: parse_org_emftext_language_java_operators_AssignmentLeftShift returns [org.emftext.language.java.operators.AssignmentLeftShift element = null] : a0= '<' a1= '<' a2= '=' ; + public final org.emftext.language.java.operators.AssignmentLeftShift parse_org_emftext_language_java_operators_AssignmentLeftShift() throws RecognitionException { + org.emftext.language.java.operators.AssignmentLeftShift element = null; + + int parse_org_emftext_language_java_operators_AssignmentLeftShift_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a2=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 101) ) { return element; } + + // Java.g:32130:2: (a0= '<' a1= '<' a2= '=' ) + // Java.g:32131:2: a0= '<' a1= '<' a2= '=' + { + a0=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_operators_AssignmentLeftShift20469); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentLeftShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_99_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17757); + } + + a1=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_operators_AssignmentLeftShift20483); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentLeftShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_99_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17758); + } + + a2=(Token)match(input,44,FOLLOW_44_in_parse_org_emftext_language_java_operators_AssignmentLeftShift20497); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentLeftShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_99_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17759); + addExpectedElement(17760); + addExpectedElement(17761); + addExpectedElement(17762); + addExpectedElement(17763); + addExpectedElement(17764); + addExpectedElement(17765); + addExpectedElement(17766); + addExpectedElement(17767); + addExpectedElement(17768); + addExpectedElement(17769); + addExpectedElement(17770); + addExpectedElement(17771); + addExpectedElement(17772); + addExpectedElement(17773); + addExpectedElement(17774); + addExpectedElement(17775); + addExpectedElement(17776); + addExpectedElement(17777); + addExpectedElement(17778); + addExpectedElement(17779); + addExpectedElement(17780); + addExpectedElement(17781); + addExpectedElement(17782); + addExpectedElement(17783); + addExpectedElement(17784); + addExpectedElement(17785); + addExpectedElement(17786); + addExpectedElement(17787); + addExpectedElement(17788); + addExpectedElement(17789); + addExpectedElement(17790); + addExpectedElement(17791); + addExpectedElement(17792); + addExpectedElement(17793); + addExpectedElement(17794); + addExpectedElement(17795); + addExpectedElement(17796); + addExpectedElement(17797); + addExpectedElement(17798); + addExpectedElement(17799); + addExpectedElement(17800); + addExpectedElement(17801); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 101, parse_org_emftext_language_java_operators_AssignmentLeftShift_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_AssignmentLeftShift" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_AssignmentRightShift" + // Java.g:32217:1: parse_org_emftext_language_java_operators_AssignmentRightShift returns [org.emftext.language.java.operators.AssignmentRightShift element = null] : a0= '>' a1= '>' a2= '=' ; + public final org.emftext.language.java.operators.AssignmentRightShift parse_org_emftext_language_java_operators_AssignmentRightShift() throws RecognitionException { + org.emftext.language.java.operators.AssignmentRightShift element = null; + + int parse_org_emftext_language_java_operators_AssignmentRightShift_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a2=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 102) ) { return element; } + + // Java.g:32220:2: (a0= '>' a1= '>' a2= '=' ) + // Java.g:32221:2: a0= '>' a1= '>' a2= '=' + { + a0=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_operators_AssignmentRightShift20526); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentRightShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_100_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17802); + } + + a1=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_operators_AssignmentRightShift20540); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentRightShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_100_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17803); + } + + a2=(Token)match(input,44,FOLLOW_44_in_parse_org_emftext_language_java_operators_AssignmentRightShift20554); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentRightShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_100_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17804); + addExpectedElement(17805); + addExpectedElement(17806); + addExpectedElement(17807); + addExpectedElement(17808); + addExpectedElement(17809); + addExpectedElement(17810); + addExpectedElement(17811); + addExpectedElement(17812); + addExpectedElement(17813); + addExpectedElement(17814); + addExpectedElement(17815); + addExpectedElement(17816); + addExpectedElement(17817); + addExpectedElement(17818); + addExpectedElement(17819); + addExpectedElement(17820); + addExpectedElement(17821); + addExpectedElement(17822); + addExpectedElement(17823); + addExpectedElement(17824); + addExpectedElement(17825); + addExpectedElement(17826); + addExpectedElement(17827); + addExpectedElement(17828); + addExpectedElement(17829); + addExpectedElement(17830); + addExpectedElement(17831); + addExpectedElement(17832); + addExpectedElement(17833); + addExpectedElement(17834); + addExpectedElement(17835); + addExpectedElement(17836); + addExpectedElement(17837); + addExpectedElement(17838); + addExpectedElement(17839); + addExpectedElement(17840); + addExpectedElement(17841); + addExpectedElement(17842); + addExpectedElement(17843); + addExpectedElement(17844); + addExpectedElement(17845); + addExpectedElement(17846); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 102, parse_org_emftext_language_java_operators_AssignmentRightShift_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_AssignmentRightShift" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift" + // Java.g:32307:1: parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift returns [org.emftext.language.java.operators.AssignmentUnsignedRightShift element = null] : a0= '>' a1= '>' a2= '>' a3= '=' ; + public final org.emftext.language.java.operators.AssignmentUnsignedRightShift parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift() throws RecognitionException { + org.emftext.language.java.operators.AssignmentUnsignedRightShift element = null; + + int parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a2=null; + Token a3=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 103) ) { return element; } + + // Java.g:32310:2: (a0= '>' a1= '>' a2= '>' a3= '=' ) + // Java.g:32311:2: a0= '>' a1= '>' a2= '>' a3= '=' + { + a0=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift20583); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentUnsignedRightShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_101_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17847); + } + + a1=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift20597); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentUnsignedRightShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_101_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17848); + } + + a2=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift20611); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentUnsignedRightShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_101_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17849); + } + + a3=(Token)match(input,44,FOLLOW_44_in_parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift20625); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAssignmentUnsignedRightShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_101_0_0_3, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a3, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17850); + addExpectedElement(17851); + addExpectedElement(17852); + addExpectedElement(17853); + addExpectedElement(17854); + addExpectedElement(17855); + addExpectedElement(17856); + addExpectedElement(17857); + addExpectedElement(17858); + addExpectedElement(17859); + addExpectedElement(17860); + addExpectedElement(17861); + addExpectedElement(17862); + addExpectedElement(17863); + addExpectedElement(17864); + addExpectedElement(17865); + addExpectedElement(17866); + addExpectedElement(17867); + addExpectedElement(17868); + addExpectedElement(17869); + addExpectedElement(17870); + addExpectedElement(17871); + addExpectedElement(17872); + addExpectedElement(17873); + addExpectedElement(17874); + addExpectedElement(17875); + addExpectedElement(17876); + addExpectedElement(17877); + addExpectedElement(17878); + addExpectedElement(17879); + addExpectedElement(17880); + addExpectedElement(17881); + addExpectedElement(17882); + addExpectedElement(17883); + addExpectedElement(17884); + addExpectedElement(17885); + addExpectedElement(17886); + addExpectedElement(17887); + addExpectedElement(17888); + addExpectedElement(17889); + addExpectedElement(17890); + addExpectedElement(17891); + addExpectedElement(17892); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 103, parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_Addition" + // Java.g:32411:1: parse_org_emftext_language_java_operators_Addition returns [org.emftext.language.java.operators.Addition element = null] : a0= '+' ; + public final org.emftext.language.java.operators.Addition parse_org_emftext_language_java_operators_Addition() throws RecognitionException { + org.emftext.language.java.operators.Addition element = null; + + int parse_org_emftext_language_java_operators_Addition_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 104) ) { return element; } + + // Java.g:32414:2: (a0= '+' ) + // Java.g:32415:2: a0= '+' + { + a0=(Token)match(input,30,FOLLOW_30_in_parse_org_emftext_language_java_operators_Addition20654); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createAddition(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_102_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17893); + addExpectedElement(17894); + addExpectedElement(17895); + addExpectedElement(17896); + addExpectedElement(17897); + addExpectedElement(17898); + addExpectedElement(17899); + addExpectedElement(17900); + addExpectedElement(17901); + addExpectedElement(17902); + addExpectedElement(17903); + addExpectedElement(17904); + addExpectedElement(17905); + addExpectedElement(17906); + addExpectedElement(17907); + addExpectedElement(17908); + addExpectedElement(17909); + addExpectedElement(17910); + addExpectedElement(17911); + addExpectedElement(17912); + addExpectedElement(17913); + addExpectedElement(17914); + addExpectedElement(17915); + addExpectedElement(17916); + addExpectedElement(17917); + addExpectedElement(17918); + addExpectedElement(17919); + addExpectedElement(17920); + addExpectedElement(17921); + addExpectedElement(17922); + addExpectedElement(17923); + addExpectedElement(17924); + addExpectedElement(17925); + addExpectedElement(17926); + addExpectedElement(17927); + addExpectedElement(17928); + addExpectedElement(17929); + addExpectedElement(17930); + addExpectedElement(17931); + addExpectedElement(17932); + addExpectedElement(17933); + addExpectedElement(17934); + addExpectedElement(17935); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 104, parse_org_emftext_language_java_operators_Addition_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_Addition" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_Subtraction" + // Java.g:32473:1: parse_org_emftext_language_java_operators_Subtraction returns [org.emftext.language.java.operators.Subtraction element = null] : a0= '-' ; + public final org.emftext.language.java.operators.Subtraction parse_org_emftext_language_java_operators_Subtraction() throws RecognitionException { + org.emftext.language.java.operators.Subtraction element = null; + + int parse_org_emftext_language_java_operators_Subtraction_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 105) ) { return element; } + + // Java.g:32476:2: (a0= '-' ) + // Java.g:32477:2: a0= '-' + { + a0=(Token)match(input,34,FOLLOW_34_in_parse_org_emftext_language_java_operators_Subtraction20683); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createSubtraction(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_103_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17936); + addExpectedElement(17937); + addExpectedElement(17938); + addExpectedElement(17939); + addExpectedElement(17940); + addExpectedElement(17941); + addExpectedElement(17942); + addExpectedElement(17943); + addExpectedElement(17944); + addExpectedElement(17945); + addExpectedElement(17946); + addExpectedElement(17947); + addExpectedElement(17948); + addExpectedElement(17949); + addExpectedElement(17950); + addExpectedElement(17951); + addExpectedElement(17952); + addExpectedElement(17953); + addExpectedElement(17954); + addExpectedElement(17955); + addExpectedElement(17956); + addExpectedElement(17957); + addExpectedElement(17958); + addExpectedElement(17959); + addExpectedElement(17960); + addExpectedElement(17961); + addExpectedElement(17962); + addExpectedElement(17963); + addExpectedElement(17964); + addExpectedElement(17965); + addExpectedElement(17966); + addExpectedElement(17967); + addExpectedElement(17968); + addExpectedElement(17969); + addExpectedElement(17970); + addExpectedElement(17971); + addExpectedElement(17972); + addExpectedElement(17973); + addExpectedElement(17974); + addExpectedElement(17975); + addExpectedElement(17976); + addExpectedElement(17977); + addExpectedElement(17978); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 105, parse_org_emftext_language_java_operators_Subtraction_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_Subtraction" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_Multiplication" + // Java.g:32535:1: parse_org_emftext_language_java_operators_Multiplication returns [org.emftext.language.java.operators.Multiplication element = null] : a0= '*' ; + public final org.emftext.language.java.operators.Multiplication parse_org_emftext_language_java_operators_Multiplication() throws RecognitionException { + org.emftext.language.java.operators.Multiplication element = null; + + int parse_org_emftext_language_java_operators_Multiplication_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 106) ) { return element; } + + // Java.g:32538:2: (a0= '*' ) + // Java.g:32539:2: a0= '*' + { + a0=(Token)match(input,28,FOLLOW_28_in_parse_org_emftext_language_java_operators_Multiplication20712); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createMultiplication(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_104_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(17979); + addExpectedElement(17980); + addExpectedElement(17981); + addExpectedElement(17982); + addExpectedElement(17983); + addExpectedElement(17984); + addExpectedElement(17985); + addExpectedElement(17986); + addExpectedElement(17987); + addExpectedElement(17988); + addExpectedElement(17989); + addExpectedElement(17990); + addExpectedElement(17991); + addExpectedElement(17992); + addExpectedElement(17993); + addExpectedElement(17994); + addExpectedElement(17995); + addExpectedElement(17996); + addExpectedElement(17997); + addExpectedElement(17998); + addExpectedElement(17999); + addExpectedElement(18000); + addExpectedElement(18001); + addExpectedElement(18002); + addExpectedElement(18003); + addExpectedElement(18004); + addExpectedElement(18005); + addExpectedElement(18006); + addExpectedElement(18007); + addExpectedElement(18008); + addExpectedElement(18009); + addExpectedElement(18010); + addExpectedElement(18011); + addExpectedElement(18012); + addExpectedElement(18013); + addExpectedElement(18014); + addExpectedElement(18015); + addExpectedElement(18016); + addExpectedElement(18017); + addExpectedElement(18018); + addExpectedElement(18019); + addExpectedElement(18020); + addExpectedElement(18021); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 106, parse_org_emftext_language_java_operators_Multiplication_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_Multiplication" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_Division" + // Java.g:32597:1: parse_org_emftext_language_java_operators_Division returns [org.emftext.language.java.operators.Division element = null] : a0= '/' ; + public final org.emftext.language.java.operators.Division parse_org_emftext_language_java_operators_Division() throws RecognitionException { + org.emftext.language.java.operators.Division element = null; + + int parse_org_emftext_language_java_operators_Division_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 107) ) { return element; } + + // Java.g:32600:2: (a0= '/' ) + // Java.g:32601:2: a0= '/' + { + a0=(Token)match(input,39,FOLLOW_39_in_parse_org_emftext_language_java_operators_Division20741); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createDivision(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_105_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18022); + addExpectedElement(18023); + addExpectedElement(18024); + addExpectedElement(18025); + addExpectedElement(18026); + addExpectedElement(18027); + addExpectedElement(18028); + addExpectedElement(18029); + addExpectedElement(18030); + addExpectedElement(18031); + addExpectedElement(18032); + addExpectedElement(18033); + addExpectedElement(18034); + addExpectedElement(18035); + addExpectedElement(18036); + addExpectedElement(18037); + addExpectedElement(18038); + addExpectedElement(18039); + addExpectedElement(18040); + addExpectedElement(18041); + addExpectedElement(18042); + addExpectedElement(18043); + addExpectedElement(18044); + addExpectedElement(18045); + addExpectedElement(18046); + addExpectedElement(18047); + addExpectedElement(18048); + addExpectedElement(18049); + addExpectedElement(18050); + addExpectedElement(18051); + addExpectedElement(18052); + addExpectedElement(18053); + addExpectedElement(18054); + addExpectedElement(18055); + addExpectedElement(18056); + addExpectedElement(18057); + addExpectedElement(18058); + addExpectedElement(18059); + addExpectedElement(18060); + addExpectedElement(18061); + addExpectedElement(18062); + addExpectedElement(18063); + addExpectedElement(18064); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 107, parse_org_emftext_language_java_operators_Division_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_Division" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_Remainder" + // Java.g:32659:1: parse_org_emftext_language_java_operators_Remainder returns [org.emftext.language.java.operators.Remainder element = null] : a0= '\\u0025' ; + public final org.emftext.language.java.operators.Remainder parse_org_emftext_language_java_operators_Remainder() throws RecognitionException { + org.emftext.language.java.operators.Remainder element = null; + + int parse_org_emftext_language_java_operators_Remainder_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 108) ) { return element; } + + // Java.g:32662:2: (a0= '\\u0025' ) + // Java.g:32663:2: a0= '\\u0025' + { + a0=(Token)match(input,51,FOLLOW_51_in_parse_org_emftext_language_java_operators_Remainder20770); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createRemainder(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_106_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18065); + addExpectedElement(18066); + addExpectedElement(18067); + addExpectedElement(18068); + addExpectedElement(18069); + addExpectedElement(18070); + addExpectedElement(18071); + addExpectedElement(18072); + addExpectedElement(18073); + addExpectedElement(18074); + addExpectedElement(18075); + addExpectedElement(18076); + addExpectedElement(18077); + addExpectedElement(18078); + addExpectedElement(18079); + addExpectedElement(18080); + addExpectedElement(18081); + addExpectedElement(18082); + addExpectedElement(18083); + addExpectedElement(18084); + addExpectedElement(18085); + addExpectedElement(18086); + addExpectedElement(18087); + addExpectedElement(18088); + addExpectedElement(18089); + addExpectedElement(18090); + addExpectedElement(18091); + addExpectedElement(18092); + addExpectedElement(18093); + addExpectedElement(18094); + addExpectedElement(18095); + addExpectedElement(18096); + addExpectedElement(18097); + addExpectedElement(18098); + addExpectedElement(18099); + addExpectedElement(18100); + addExpectedElement(18101); + addExpectedElement(18102); + addExpectedElement(18103); + addExpectedElement(18104); + addExpectedElement(18105); + addExpectedElement(18106); + addExpectedElement(18107); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 108, parse_org_emftext_language_java_operators_Remainder_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_Remainder" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_LessThan" + // Java.g:32721:1: parse_org_emftext_language_java_operators_LessThan returns [org.emftext.language.java.operators.LessThan element = null] : a0= '<' ; + public final org.emftext.language.java.operators.LessThan parse_org_emftext_language_java_operators_LessThan() throws RecognitionException { + org.emftext.language.java.operators.LessThan element = null; + + int parse_org_emftext_language_java_operators_LessThan_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 109) ) { return element; } + + // Java.g:32724:2: (a0= '<' ) + // Java.g:32725:2: a0= '<' + { + a0=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_operators_LessThan20799); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createLessThan(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_107_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18108); + addExpectedElement(18109); + addExpectedElement(18110); + addExpectedElement(18111); + addExpectedElement(18112); + addExpectedElement(18113); + addExpectedElement(18114); + addExpectedElement(18115); + addExpectedElement(18116); + addExpectedElement(18117); + addExpectedElement(18118); + addExpectedElement(18119); + addExpectedElement(18120); + addExpectedElement(18121); + addExpectedElement(18122); + addExpectedElement(18123); + addExpectedElement(18124); + addExpectedElement(18125); + addExpectedElement(18126); + addExpectedElement(18127); + addExpectedElement(18128); + addExpectedElement(18129); + addExpectedElement(18130); + addExpectedElement(18131); + addExpectedElement(18132); + addExpectedElement(18133); + addExpectedElement(18134); + addExpectedElement(18135); + addExpectedElement(18136); + addExpectedElement(18137); + addExpectedElement(18138); + addExpectedElement(18139); + addExpectedElement(18140); + addExpectedElement(18141); + addExpectedElement(18142); + addExpectedElement(18143); + addExpectedElement(18144); + addExpectedElement(18145); + addExpectedElement(18146); + addExpectedElement(18147); + addExpectedElement(18148); + addExpectedElement(18149); + addExpectedElement(18150); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 109, parse_org_emftext_language_java_operators_LessThan_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_LessThan" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_LessThanOrEqual" + // Java.g:32783:1: parse_org_emftext_language_java_operators_LessThanOrEqual returns [org.emftext.language.java.operators.LessThanOrEqual element = null] : a0= '<' a1= '=' ; + public final org.emftext.language.java.operators.LessThanOrEqual parse_org_emftext_language_java_operators_LessThanOrEqual() throws RecognitionException { + org.emftext.language.java.operators.LessThanOrEqual element = null; + + int parse_org_emftext_language_java_operators_LessThanOrEqual_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 110) ) { return element; } + + // Java.g:32786:2: (a0= '<' a1= '=' ) + // Java.g:32787:2: a0= '<' a1= '=' + { + a0=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_operators_LessThanOrEqual20828); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createLessThanOrEqual(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_108_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18151); + } + + a1=(Token)match(input,44,FOLLOW_44_in_parse_org_emftext_language_java_operators_LessThanOrEqual20842); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createLessThanOrEqual(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_108_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18152); + addExpectedElement(18153); + addExpectedElement(18154); + addExpectedElement(18155); + addExpectedElement(18156); + addExpectedElement(18157); + addExpectedElement(18158); + addExpectedElement(18159); + addExpectedElement(18160); + addExpectedElement(18161); + addExpectedElement(18162); + addExpectedElement(18163); + addExpectedElement(18164); + addExpectedElement(18165); + addExpectedElement(18166); + addExpectedElement(18167); + addExpectedElement(18168); + addExpectedElement(18169); + addExpectedElement(18170); + addExpectedElement(18171); + addExpectedElement(18172); + addExpectedElement(18173); + addExpectedElement(18174); + addExpectedElement(18175); + addExpectedElement(18176); + addExpectedElement(18177); + addExpectedElement(18178); + addExpectedElement(18179); + addExpectedElement(18180); + addExpectedElement(18181); + addExpectedElement(18182); + addExpectedElement(18183); + addExpectedElement(18184); + addExpectedElement(18185); + addExpectedElement(18186); + addExpectedElement(18187); + addExpectedElement(18188); + addExpectedElement(18189); + addExpectedElement(18190); + addExpectedElement(18191); + addExpectedElement(18192); + addExpectedElement(18193); + addExpectedElement(18194); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 110, parse_org_emftext_language_java_operators_LessThanOrEqual_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_LessThanOrEqual" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_GreaterThan" + // Java.g:32859:1: parse_org_emftext_language_java_operators_GreaterThan returns [org.emftext.language.java.operators.GreaterThan element = null] : a0= '>' ; + public final org.emftext.language.java.operators.GreaterThan parse_org_emftext_language_java_operators_GreaterThan() throws RecognitionException { + org.emftext.language.java.operators.GreaterThan element = null; + + int parse_org_emftext_language_java_operators_GreaterThan_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 111) ) { return element; } + + // Java.g:32862:2: (a0= '>' ) + // Java.g:32863:2: a0= '>' + { + a0=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_operators_GreaterThan20871); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createGreaterThan(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_109_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18195); + addExpectedElement(18196); + addExpectedElement(18197); + addExpectedElement(18198); + addExpectedElement(18199); + addExpectedElement(18200); + addExpectedElement(18201); + addExpectedElement(18202); + addExpectedElement(18203); + addExpectedElement(18204); + addExpectedElement(18205); + addExpectedElement(18206); + addExpectedElement(18207); + addExpectedElement(18208); + addExpectedElement(18209); + addExpectedElement(18210); + addExpectedElement(18211); + addExpectedElement(18212); + addExpectedElement(18213); + addExpectedElement(18214); + addExpectedElement(18215); + addExpectedElement(18216); + addExpectedElement(18217); + addExpectedElement(18218); + addExpectedElement(18219); + addExpectedElement(18220); + addExpectedElement(18221); + addExpectedElement(18222); + addExpectedElement(18223); + addExpectedElement(18224); + addExpectedElement(18225); + addExpectedElement(18226); + addExpectedElement(18227); + addExpectedElement(18228); + addExpectedElement(18229); + addExpectedElement(18230); + addExpectedElement(18231); + addExpectedElement(18232); + addExpectedElement(18233); + addExpectedElement(18234); + addExpectedElement(18235); + addExpectedElement(18236); + addExpectedElement(18237); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 111, parse_org_emftext_language_java_operators_GreaterThan_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_GreaterThan" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_GreaterThanOrEqual" + // Java.g:32921:1: parse_org_emftext_language_java_operators_GreaterThanOrEqual returns [org.emftext.language.java.operators.GreaterThanOrEqual element = null] : a0= '>' a1= '=' ; + public final org.emftext.language.java.operators.GreaterThanOrEqual parse_org_emftext_language_java_operators_GreaterThanOrEqual() throws RecognitionException { + org.emftext.language.java.operators.GreaterThanOrEqual element = null; + + int parse_org_emftext_language_java_operators_GreaterThanOrEqual_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 112) ) { return element; } + + // Java.g:32924:2: (a0= '>' a1= '=' ) + // Java.g:32925:2: a0= '>' a1= '=' + { + a0=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_operators_GreaterThanOrEqual20900); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createGreaterThanOrEqual(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_110_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18238); + } + + a1=(Token)match(input,44,FOLLOW_44_in_parse_org_emftext_language_java_operators_GreaterThanOrEqual20914); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createGreaterThanOrEqual(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_110_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18239); + addExpectedElement(18240); + addExpectedElement(18241); + addExpectedElement(18242); + addExpectedElement(18243); + addExpectedElement(18244); + addExpectedElement(18245); + addExpectedElement(18246); + addExpectedElement(18247); + addExpectedElement(18248); + addExpectedElement(18249); + addExpectedElement(18250); + addExpectedElement(18251); + addExpectedElement(18252); + addExpectedElement(18253); + addExpectedElement(18254); + addExpectedElement(18255); + addExpectedElement(18256); + addExpectedElement(18257); + addExpectedElement(18258); + addExpectedElement(18259); + addExpectedElement(18260); + addExpectedElement(18261); + addExpectedElement(18262); + addExpectedElement(18263); + addExpectedElement(18264); + addExpectedElement(18265); + addExpectedElement(18266); + addExpectedElement(18267); + addExpectedElement(18268); + addExpectedElement(18269); + addExpectedElement(18270); + addExpectedElement(18271); + addExpectedElement(18272); + addExpectedElement(18273); + addExpectedElement(18274); + addExpectedElement(18275); + addExpectedElement(18276); + addExpectedElement(18277); + addExpectedElement(18278); + addExpectedElement(18279); + addExpectedElement(18280); + addExpectedElement(18281); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 112, parse_org_emftext_language_java_operators_GreaterThanOrEqual_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_GreaterThanOrEqual" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_LeftShift" + // Java.g:32997:1: parse_org_emftext_language_java_operators_LeftShift returns [org.emftext.language.java.operators.LeftShift element = null] : a0= '<' a1= '<' ; + public final org.emftext.language.java.operators.LeftShift parse_org_emftext_language_java_operators_LeftShift() throws RecognitionException { + org.emftext.language.java.operators.LeftShift element = null; + + int parse_org_emftext_language_java_operators_LeftShift_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 113) ) { return element; } + + // Java.g:33000:2: (a0= '<' a1= '<' ) + // Java.g:33001:2: a0= '<' a1= '<' + { + a0=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_operators_LeftShift20943); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createLeftShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_111_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18282); + } + + a1=(Token)match(input,43,FOLLOW_43_in_parse_org_emftext_language_java_operators_LeftShift20957); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createLeftShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_111_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18283); + addExpectedElement(18284); + addExpectedElement(18285); + addExpectedElement(18286); + addExpectedElement(18287); + addExpectedElement(18288); + addExpectedElement(18289); + addExpectedElement(18290); + addExpectedElement(18291); + addExpectedElement(18292); + addExpectedElement(18293); + addExpectedElement(18294); + addExpectedElement(18295); + addExpectedElement(18296); + addExpectedElement(18297); + addExpectedElement(18298); + addExpectedElement(18299); + addExpectedElement(18300); + addExpectedElement(18301); + addExpectedElement(18302); + addExpectedElement(18303); + addExpectedElement(18304); + addExpectedElement(18305); + addExpectedElement(18306); + addExpectedElement(18307); + addExpectedElement(18308); + addExpectedElement(18309); + addExpectedElement(18310); + addExpectedElement(18311); + addExpectedElement(18312); + addExpectedElement(18313); + addExpectedElement(18314); + addExpectedElement(18315); + addExpectedElement(18316); + addExpectedElement(18317); + addExpectedElement(18318); + addExpectedElement(18319); + addExpectedElement(18320); + addExpectedElement(18321); + addExpectedElement(18322); + addExpectedElement(18323); + addExpectedElement(18324); + addExpectedElement(18325); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 113, parse_org_emftext_language_java_operators_LeftShift_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_LeftShift" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_RightShift" + // Java.g:33073:1: parse_org_emftext_language_java_operators_RightShift returns [org.emftext.language.java.operators.RightShift element = null] : a0= '>' a1= '>' ; + public final org.emftext.language.java.operators.RightShift parse_org_emftext_language_java_operators_RightShift() throws RecognitionException { + org.emftext.language.java.operators.RightShift element = null; + + int parse_org_emftext_language_java_operators_RightShift_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 114) ) { return element; } + + // Java.g:33076:2: (a0= '>' a1= '>' ) + // Java.g:33077:2: a0= '>' a1= '>' + { + a0=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_operators_RightShift20986); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createRightShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_112_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18326); + } + + a1=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_operators_RightShift21000); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createRightShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_112_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18327); + addExpectedElement(18328); + addExpectedElement(18329); + addExpectedElement(18330); + addExpectedElement(18331); + addExpectedElement(18332); + addExpectedElement(18333); + addExpectedElement(18334); + addExpectedElement(18335); + addExpectedElement(18336); + addExpectedElement(18337); + addExpectedElement(18338); + addExpectedElement(18339); + addExpectedElement(18340); + addExpectedElement(18341); + addExpectedElement(18342); + addExpectedElement(18343); + addExpectedElement(18344); + addExpectedElement(18345); + addExpectedElement(18346); + addExpectedElement(18347); + addExpectedElement(18348); + addExpectedElement(18349); + addExpectedElement(18350); + addExpectedElement(18351); + addExpectedElement(18352); + addExpectedElement(18353); + addExpectedElement(18354); + addExpectedElement(18355); + addExpectedElement(18356); + addExpectedElement(18357); + addExpectedElement(18358); + addExpectedElement(18359); + addExpectedElement(18360); + addExpectedElement(18361); + addExpectedElement(18362); + addExpectedElement(18363); + addExpectedElement(18364); + addExpectedElement(18365); + addExpectedElement(18366); + addExpectedElement(18367); + addExpectedElement(18368); + addExpectedElement(18369); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 114, parse_org_emftext_language_java_operators_RightShift_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_RightShift" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_UnsignedRightShift" + // Java.g:33149:1: parse_org_emftext_language_java_operators_UnsignedRightShift returns [org.emftext.language.java.operators.UnsignedRightShift element = null] : a0= '>' a1= '>' a2= '>' ; + public final org.emftext.language.java.operators.UnsignedRightShift parse_org_emftext_language_java_operators_UnsignedRightShift() throws RecognitionException { + org.emftext.language.java.operators.UnsignedRightShift element = null; + + int parse_org_emftext_language_java_operators_UnsignedRightShift_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + Token a2=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 115) ) { return element; } + + // Java.g:33152:2: (a0= '>' a1= '>' a2= '>' ) + // Java.g:33153:2: a0= '>' a1= '>' a2= '>' + { + a0=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_operators_UnsignedRightShift21029); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createUnsignedRightShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_113_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18370); + } + + a1=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_operators_UnsignedRightShift21043); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createUnsignedRightShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_113_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18371); + } + + a2=(Token)match(input,46,FOLLOW_46_in_parse_org_emftext_language_java_operators_UnsignedRightShift21057); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createUnsignedRightShift(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_113_0_0_2, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a2, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18372); + addExpectedElement(18373); + addExpectedElement(18374); + addExpectedElement(18375); + addExpectedElement(18376); + addExpectedElement(18377); + addExpectedElement(18378); + addExpectedElement(18379); + addExpectedElement(18380); + addExpectedElement(18381); + addExpectedElement(18382); + addExpectedElement(18383); + addExpectedElement(18384); + addExpectedElement(18385); + addExpectedElement(18386); + addExpectedElement(18387); + addExpectedElement(18388); + addExpectedElement(18389); + addExpectedElement(18390); + addExpectedElement(18391); + addExpectedElement(18392); + addExpectedElement(18393); + addExpectedElement(18394); + addExpectedElement(18395); + addExpectedElement(18396); + addExpectedElement(18397); + addExpectedElement(18398); + addExpectedElement(18399); + addExpectedElement(18400); + addExpectedElement(18401); + addExpectedElement(18402); + addExpectedElement(18403); + addExpectedElement(18404); + addExpectedElement(18405); + addExpectedElement(18406); + addExpectedElement(18407); + addExpectedElement(18408); + addExpectedElement(18409); + addExpectedElement(18410); + addExpectedElement(18411); + addExpectedElement(18412); + addExpectedElement(18413); + addExpectedElement(18414); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 115, parse_org_emftext_language_java_operators_UnsignedRightShift_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_UnsignedRightShift" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_Equal" + // Java.g:33239:1: parse_org_emftext_language_java_operators_Equal returns [org.emftext.language.java.operators.Equal element = null] : a0= '==' ; + public final org.emftext.language.java.operators.Equal parse_org_emftext_language_java_operators_Equal() throws RecognitionException { + org.emftext.language.java.operators.Equal element = null; + + int parse_org_emftext_language_java_operators_Equal_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 116) ) { return element; } + + // Java.g:33242:2: (a0= '==' ) + // Java.g:33243:2: a0= '==' + { + a0=(Token)match(input,45,FOLLOW_45_in_parse_org_emftext_language_java_operators_Equal21086); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createEqual(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_114_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18415); + addExpectedElement(18416); + addExpectedElement(18417); + addExpectedElement(18418); + addExpectedElement(18419); + addExpectedElement(18420); + addExpectedElement(18421); + addExpectedElement(18422); + addExpectedElement(18423); + addExpectedElement(18424); + addExpectedElement(18425); + addExpectedElement(18426); + addExpectedElement(18427); + addExpectedElement(18428); + addExpectedElement(18429); + addExpectedElement(18430); + addExpectedElement(18431); + addExpectedElement(18432); + addExpectedElement(18433); + addExpectedElement(18434); + addExpectedElement(18435); + addExpectedElement(18436); + addExpectedElement(18437); + addExpectedElement(18438); + addExpectedElement(18439); + addExpectedElement(18440); + addExpectedElement(18441); + addExpectedElement(18442); + addExpectedElement(18443); + addExpectedElement(18444); + addExpectedElement(18445); + addExpectedElement(18446); + addExpectedElement(18447); + addExpectedElement(18448); + addExpectedElement(18449); + addExpectedElement(18450); + addExpectedElement(18451); + addExpectedElement(18452); + addExpectedElement(18453); + addExpectedElement(18454); + addExpectedElement(18455); + addExpectedElement(18456); + addExpectedElement(18457); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 116, parse_org_emftext_language_java_operators_Equal_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_Equal" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_NotEqual" + // Java.g:33301:1: parse_org_emftext_language_java_operators_NotEqual returns [org.emftext.language.java.operators.NotEqual element = null] : a0= '!=' ; + public final org.emftext.language.java.operators.NotEqual parse_org_emftext_language_java_operators_NotEqual() throws RecognitionException { + org.emftext.language.java.operators.NotEqual element = null; + + int parse_org_emftext_language_java_operators_NotEqual_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 117) ) { return element; } + + // Java.g:33304:2: (a0= '!=' ) + // Java.g:33305:2: a0= '!=' + { + a0=(Token)match(input,22,FOLLOW_22_in_parse_org_emftext_language_java_operators_NotEqual21115); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createNotEqual(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_115_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18458); + addExpectedElement(18459); + addExpectedElement(18460); + addExpectedElement(18461); + addExpectedElement(18462); + addExpectedElement(18463); + addExpectedElement(18464); + addExpectedElement(18465); + addExpectedElement(18466); + addExpectedElement(18467); + addExpectedElement(18468); + addExpectedElement(18469); + addExpectedElement(18470); + addExpectedElement(18471); + addExpectedElement(18472); + addExpectedElement(18473); + addExpectedElement(18474); + addExpectedElement(18475); + addExpectedElement(18476); + addExpectedElement(18477); + addExpectedElement(18478); + addExpectedElement(18479); + addExpectedElement(18480); + addExpectedElement(18481); + addExpectedElement(18482); + addExpectedElement(18483); + addExpectedElement(18484); + addExpectedElement(18485); + addExpectedElement(18486); + addExpectedElement(18487); + addExpectedElement(18488); + addExpectedElement(18489); + addExpectedElement(18490); + addExpectedElement(18491); + addExpectedElement(18492); + addExpectedElement(18493); + addExpectedElement(18494); + addExpectedElement(18495); + addExpectedElement(18496); + addExpectedElement(18497); + addExpectedElement(18498); + addExpectedElement(18499); + addExpectedElement(18500); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 117, parse_org_emftext_language_java_operators_NotEqual_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_NotEqual" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_PlusPlus" + // Java.g:33363:1: parse_org_emftext_language_java_operators_PlusPlus returns [org.emftext.language.java.operators.PlusPlus element = null] : a0= '++' ; + public final org.emftext.language.java.operators.PlusPlus parse_org_emftext_language_java_operators_PlusPlus() throws RecognitionException { + org.emftext.language.java.operators.PlusPlus element = null; + + int parse_org_emftext_language_java_operators_PlusPlus_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 118) ) { return element; } + + // Java.g:33366:2: (a0= '++' ) + // Java.g:33367:2: a0= '++' + { + a0=(Token)match(input,31,FOLLOW_31_in_parse_org_emftext_language_java_operators_PlusPlus21144); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createPlusPlus(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_116_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18501); + addExpectedElement(18502); + addExpectedElement(18503); + addExpectedElement(18504); + addExpectedElement(18505); + addExpectedElement(18506); + addExpectedElement(18507); + addExpectedElement(18508); + addExpectedElement(18509); + addExpectedElement(18510); + addExpectedElement(18511); + addExpectedElement(18512); + addExpectedElement(18513); + addExpectedElement(18514); + addExpectedElement(18515); + addExpectedElement(18516); + addExpectedElement(18517); + addExpectedElement(18518); + addExpectedElement(18519); + addExpectedElement(18520); + addExpectedElement(18521); + addExpectedElement(18522); + addExpectedElement(18523); + addExpectedElement(18524); + addExpectedElement(18525); + addExpectedElement(18526); + addExpectedElement(18527); + addExpectedElement(18528); + addExpectedElement(18529); + addExpectedElement(18530); + addExpectedElement(18531); + addExpectedElement(18532); + addExpectedElement(18533); + addExpectedElement(18534); + addExpectedElement(18535); + addExpectedElement(18536); + addExpectedElement(18537); + addExpectedElement(18538); + addExpectedElement(18539); + addExpectedElement(18540); + addExpectedElement(18541); + addExpectedElement(18542); + addExpectedElement(18543); + addExpectedElement(18544); + addExpectedElement(18545); + addExpectedElement(18546); + addExpectedElement(18547); + addExpectedElement(18548); + addExpectedElement(18549); + addExpectedElement(18550); + addExpectedElement(18551); + addExpectedElement(18552); + addExpectedElement(18553); + addExpectedElement(18554); + addExpectedElement(18555); + addExpectedElement(18556); + addExpectedElement(18557); + addExpectedElement(18558); + addExpectedElement(18559); + addExpectedElement(18560); + addExpectedElement(18561); + addExpectedElement(18562); + addExpectedElement(18563); + addExpectedElement(18564); + addExpectedElement(18565); + addExpectedElement(18566); + addExpectedElement(18567); + addExpectedElement(18568); + addExpectedElement(18569); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 118, parse_org_emftext_language_java_operators_PlusPlus_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_PlusPlus" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_MinusMinus" + // Java.g:33451:1: parse_org_emftext_language_java_operators_MinusMinus returns [org.emftext.language.java.operators.MinusMinus element = null] : a0= '--' ; + public final org.emftext.language.java.operators.MinusMinus parse_org_emftext_language_java_operators_MinusMinus() throws RecognitionException { + org.emftext.language.java.operators.MinusMinus element = null; + + int parse_org_emftext_language_java_operators_MinusMinus_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 119) ) { return element; } + + // Java.g:33454:2: (a0= '--' ) + // Java.g:33455:2: a0= '--' + { + a0=(Token)match(input,35,FOLLOW_35_in_parse_org_emftext_language_java_operators_MinusMinus21173); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createMinusMinus(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_117_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18570); + addExpectedElement(18571); + addExpectedElement(18572); + addExpectedElement(18573); + addExpectedElement(18574); + addExpectedElement(18575); + addExpectedElement(18576); + addExpectedElement(18577); + addExpectedElement(18578); + addExpectedElement(18579); + addExpectedElement(18580); + addExpectedElement(18581); + addExpectedElement(18582); + addExpectedElement(18583); + addExpectedElement(18584); + addExpectedElement(18585); + addExpectedElement(18586); + addExpectedElement(18587); + addExpectedElement(18588); + addExpectedElement(18589); + addExpectedElement(18590); + addExpectedElement(18591); + addExpectedElement(18592); + addExpectedElement(18593); + addExpectedElement(18594); + addExpectedElement(18595); + addExpectedElement(18596); + addExpectedElement(18597); + addExpectedElement(18598); + addExpectedElement(18599); + addExpectedElement(18600); + addExpectedElement(18601); + addExpectedElement(18602); + addExpectedElement(18603); + addExpectedElement(18604); + addExpectedElement(18605); + addExpectedElement(18606); + addExpectedElement(18607); + addExpectedElement(18608); + addExpectedElement(18609); + addExpectedElement(18610); + addExpectedElement(18611); + addExpectedElement(18612); + addExpectedElement(18613); + addExpectedElement(18614); + addExpectedElement(18615); + addExpectedElement(18616); + addExpectedElement(18617); + addExpectedElement(18618); + addExpectedElement(18619); + addExpectedElement(18620); + addExpectedElement(18621); + addExpectedElement(18622); + addExpectedElement(18623); + addExpectedElement(18624); + addExpectedElement(18625); + addExpectedElement(18626); + addExpectedElement(18627); + addExpectedElement(18628); + addExpectedElement(18629); + addExpectedElement(18630); + addExpectedElement(18631); + addExpectedElement(18632); + addExpectedElement(18633); + addExpectedElement(18634); + addExpectedElement(18635); + addExpectedElement(18636); + addExpectedElement(18637); + addExpectedElement(18638); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 119, parse_org_emftext_language_java_operators_MinusMinus_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_MinusMinus" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_Complement" + // Java.g:33539:1: parse_org_emftext_language_java_operators_Complement returns [org.emftext.language.java.operators.Complement element = null] : a0= '~' ; + public final org.emftext.language.java.operators.Complement parse_org_emftext_language_java_operators_Complement() throws RecognitionException { + org.emftext.language.java.operators.Complement element = null; + + int parse_org_emftext_language_java_operators_Complement_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 120) ) { return element; } + + // Java.g:33542:2: (a0= '~' ) + // Java.g:33543:2: a0= '~' + { + a0=(Token)match(input,110,FOLLOW_110_in_parse_org_emftext_language_java_operators_Complement21202); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createComplement(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_118_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18639); + addExpectedElement(18640); + addExpectedElement(18641); + addExpectedElement(18642); + addExpectedElement(18643); + addExpectedElement(18644); + addExpectedElement(18645); + addExpectedElement(18646); + addExpectedElement(18647); + addExpectedElement(18648); + addExpectedElement(18649); + addExpectedElement(18650); + addExpectedElement(18651); + addExpectedElement(18652); + addExpectedElement(18653); + addExpectedElement(18654); + addExpectedElement(18655); + addExpectedElement(18656); + addExpectedElement(18657); + addExpectedElement(18658); + addExpectedElement(18659); + addExpectedElement(18660); + addExpectedElement(18661); + addExpectedElement(18662); + addExpectedElement(18663); + addExpectedElement(18664); + addExpectedElement(18665); + addExpectedElement(18666); + addExpectedElement(18667); + addExpectedElement(18668); + addExpectedElement(18669); + addExpectedElement(18670); + addExpectedElement(18671); + addExpectedElement(18672); + addExpectedElement(18673); + addExpectedElement(18674); + addExpectedElement(18675); + addExpectedElement(18676); + addExpectedElement(18677); + addExpectedElement(18678); + addExpectedElement(18679); + addExpectedElement(18680); + addExpectedElement(18681); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 120, parse_org_emftext_language_java_operators_Complement_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_Complement" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_Negate" + // Java.g:33601:1: parse_org_emftext_language_java_operators_Negate returns [org.emftext.language.java.operators.Negate element = null] : a0= '!' ; + public final org.emftext.language.java.operators.Negate parse_org_emftext_language_java_operators_Negate() throws RecognitionException { + org.emftext.language.java.operators.Negate element = null; + + int parse_org_emftext_language_java_operators_Negate_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 121) ) { return element; } + + // Java.g:33604:2: (a0= '!' ) + // Java.g:33605:2: a0= '!' + { + a0=(Token)match(input,21,FOLLOW_21_in_parse_org_emftext_language_java_operators_Negate21231); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.operators.OperatorsFactory.eINSTANCE.createNegate(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_119_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18682); + addExpectedElement(18683); + addExpectedElement(18684); + addExpectedElement(18685); + addExpectedElement(18686); + addExpectedElement(18687); + addExpectedElement(18688); + addExpectedElement(18689); + addExpectedElement(18690); + addExpectedElement(18691); + addExpectedElement(18692); + addExpectedElement(18693); + addExpectedElement(18694); + addExpectedElement(18695); + addExpectedElement(18696); + addExpectedElement(18697); + addExpectedElement(18698); + addExpectedElement(18699); + addExpectedElement(18700); + addExpectedElement(18701); + addExpectedElement(18702); + addExpectedElement(18703); + addExpectedElement(18704); + addExpectedElement(18705); + addExpectedElement(18706); + addExpectedElement(18707); + addExpectedElement(18708); + addExpectedElement(18709); + addExpectedElement(18710); + addExpectedElement(18711); + addExpectedElement(18712); + addExpectedElement(18713); + addExpectedElement(18714); + addExpectedElement(18715); + addExpectedElement(18716); + addExpectedElement(18717); + addExpectedElement(18718); + addExpectedElement(18719); + addExpectedElement(18720); + addExpectedElement(18721); + addExpectedElement(18722); + addExpectedElement(18723); + addExpectedElement(18724); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 121, parse_org_emftext_language_java_operators_Negate_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_Negate" + + + + // $ANTLR start "parse_org_emftext_language_java_arrays_ArrayDimension" + // Java.g:33663:1: parse_org_emftext_language_java_arrays_ArrayDimension returns [org.emftext.language.java.arrays.ArrayDimension element = null] : (a0= '[' a1= ']' ) ; + public final org.emftext.language.java.arrays.ArrayDimension parse_org_emftext_language_java_arrays_ArrayDimension() throws RecognitionException { + org.emftext.language.java.arrays.ArrayDimension element = null; + + int parse_org_emftext_language_java_arrays_ArrayDimension_StartIndex = input.index(); + + Token a0=null; + Token a1=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 122) ) { return element; } + + // Java.g:33666:2: ( (a0= '[' a1= ']' ) ) + // Java.g:33667:2: (a0= '[' a1= ']' ) + { + // Java.g:33667:2: (a0= '[' a1= ']' ) + // Java.g:33668:3: a0= '[' a1= ']' + { + a0=(Token)match(input,49,FOLLOW_49_in_parse_org_emftext_language_java_arrays_ArrayDimension21264); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayDimension(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_120_0_0_0_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18725); + } + + a1=(Token)match(input,53,FOLLOW_53_in_parse_org_emftext_language_java_arrays_ArrayDimension21281); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.arrays.ArraysFactory.eINSTANCE.createArrayDimension(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_120_0_0_0_0_0_1, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a1, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18726); + addExpectedElement(18727); + addExpectedElement(18728); + addExpectedElement(18729); + addExpectedElement(18730); + addExpectedElement(18731); + addExpectedElement(18732); + addExpectedElement(18733); + addExpectedElement(18734); + addExpectedElement(18735); + addExpectedElement(18736); + addExpectedElement(18737); + addExpectedElement(18738); + addExpectedElement(18739); + addExpectedElement(18740); + addExpectedElement(18741); + addExpectedElement(18742); + addExpectedElement(18743); + addExpectedElement(18744); + addExpectedElement(18745); + addExpectedElement(18746); + addExpectedElement(18747); + addExpectedElement(18748); + addExpectedElement(18749); + addExpectedElement(18750); + addExpectedElement(18751); + addExpectedElement(18752); + addExpectedElement(18753); + addExpectedElement(18754); + addExpectedElement(18755); + addExpectedElement(18756); + addExpectedElement(18757); + addExpectedElement(18758); + addExpectedElement(18759); + addExpectedElement(18760); + addExpectedElement(18761); + addExpectedElement(18762); + addExpectedElement(18763); + addExpectedElement(18764); + addExpectedElement(18765); + addExpectedElement(18766); + addExpectedElement(18767); + addExpectedElement(18768); + addExpectedElement(18769); + addExpectedElement(18770); + addExpectedElement(18771); + addExpectedElement(18772); + addExpectedElement(18773); + addExpectedElement(18774); + addExpectedElement(18775); + addExpectedElement(18776); + addExpectedElement(18777); + addExpectedElement(18778); + addExpectedElement(18779); + addExpectedElement(18780); + addExpectedElement(18781); + addExpectedElement(18782); + addExpectedElement(18783); + addExpectedElement(18784); + addExpectedElement(18785); + addExpectedElement(18786); + addExpectedElement(18787); + addExpectedElement(18788); + addExpectedElement(18789); + addExpectedElement(18790); + addExpectedElement(18791); + addExpectedElement(18792); + addExpectedElement(18793); + addExpectedElement(18794); + addExpectedElement(18795); + addExpectedElement(18796); + addExpectedElement(18797); + addExpectedElement(18798); + addExpectedElement(18799); + addExpectedElement(18800); + addExpectedElement(18801); + addExpectedElement(18802); + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18803); + addExpectedElement(18804); + addExpectedElement(18805); + addExpectedElement(18806); + addExpectedElement(18807); + addExpectedElement(18808); + addExpectedElement(18809); + addExpectedElement(18810); + addExpectedElement(18811); + addExpectedElement(18812); + addExpectedElement(18813); + addExpectedElement(18814); + addExpectedElement(18815); + addExpectedElement(18816); + addExpectedElement(18817); + addExpectedElement(18818); + addExpectedElement(18819); + addExpectedElement(18820); + addExpectedElement(18821); + addExpectedElement(18822); + addExpectedElement(18823); + addExpectedElement(18824); + addExpectedElement(18825); + addExpectedElement(18826); + addExpectedElement(18827); + addExpectedElement(18828); + addExpectedElement(18829); + addExpectedElement(18830); + addExpectedElement(18831); + addExpectedElement(18832); + addExpectedElement(18833); + addExpectedElement(18834); + addExpectedElement(18835); + addExpectedElement(18836); + addExpectedElement(18837); + addExpectedElement(18838); + addExpectedElement(18839); + addExpectedElement(18840); + addExpectedElement(18841); + addExpectedElement(18842); + addExpectedElement(18843); + addExpectedElement(18844); + addExpectedElement(18845); + addExpectedElement(18846); + addExpectedElement(18847); + addExpectedElement(18848); + addExpectedElement(18849); + addExpectedElement(18850); + addExpectedElement(18851); + addExpectedElement(18852); + addExpectedElement(18853); + addExpectedElement(18854); + addExpectedElement(18855); + addExpectedElement(18856); + addExpectedElement(18857); + addExpectedElement(18858); + addExpectedElement(18859); + addExpectedElement(18860); + addExpectedElement(18861); + addExpectedElement(18862); + addExpectedElement(18863); + addExpectedElement(18864); + addExpectedElement(18865); + addExpectedElement(18866); + addExpectedElement(18867); + addExpectedElement(18868); + addExpectedElement(18869); + addExpectedElement(18870); + addExpectedElement(18871); + addExpectedElement(18872); + addExpectedElement(18873); + addExpectedElement(18874); + addExpectedElement(18875); + addExpectedElement(18876); + addExpectedElement(18877); + addExpectedElement(18878); + addExpectedElement(18879); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 122, parse_org_emftext_language_java_arrays_ArrayDimension_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_arrays_ArrayDimension" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_NullLiteral" + // Java.g:33856:1: parse_org_emftext_language_java_literals_NullLiteral returns [org.emftext.language.java.literals.NullLiteral element = null] : a0= 'null' ; + public final org.emftext.language.java.literals.NullLiteral parse_org_emftext_language_java_literals_NullLiteral() throws RecognitionException { + org.emftext.language.java.literals.NullLiteral element = null; + + int parse_org_emftext_language_java_literals_NullLiteral_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 123) ) { return element; } + + // Java.g:33859:2: (a0= 'null' ) + // Java.g:33860:2: a0= 'null' + { + a0=(Token)match(input,85,FOLLOW_85_in_parse_org_emftext_language_java_literals_NullLiteral21320); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createNullLiteral(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_121_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18880); + addExpectedElement(18881); + addExpectedElement(18882); + addExpectedElement(18883); + addExpectedElement(18884); + addExpectedElement(18885); + addExpectedElement(18886); + addExpectedElement(18887); + addExpectedElement(18888); + addExpectedElement(18889); + addExpectedElement(18890); + addExpectedElement(18891); + addExpectedElement(18892); + addExpectedElement(18893); + addExpectedElement(18894); + addExpectedElement(18895); + addExpectedElement(18896); + addExpectedElement(18897); + addExpectedElement(18898); + addExpectedElement(18899); + addExpectedElement(18900); + addExpectedElement(18901); + addExpectedElement(18902); + addExpectedElement(18903); + addExpectedElement(18904); + addExpectedElement(18905); + addExpectedElement(18906); + addExpectedElement(18907); + addExpectedElement(18908); + addExpectedElement(18909); + addExpectedElement(18910); + addExpectedElement(18911); + addExpectedElement(18912); + addExpectedElement(18913); + addExpectedElement(18914); + addExpectedElement(18915); + addExpectedElement(18916); + addExpectedElement(18917); + addExpectedElement(18918); + addExpectedElement(18919); + addExpectedElement(18920); + addExpectedElement(18921); + addExpectedElement(18922); + addExpectedElement(18923); + addExpectedElement(18924); + addExpectedElement(18925); + addExpectedElement(18926); + addExpectedElement(18927); + addExpectedElement(18928); + addExpectedElement(18929); + addExpectedElement(18930); + addExpectedElement(18931); + addExpectedElement(18932); + addExpectedElement(18933); + addExpectedElement(18934); + addExpectedElement(18935); + addExpectedElement(18936); + addExpectedElement(18937); + addExpectedElement(18938); + addExpectedElement(18939); + addExpectedElement(18940); + addExpectedElement(18941); + addExpectedElement(18942); + addExpectedElement(18943); + addExpectedElement(18944); + addExpectedElement(18945); + addExpectedElement(18946); + addExpectedElement(18947); + addExpectedElement(18948); + addExpectedElement(18949); + addExpectedElement(18950); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 123, parse_org_emftext_language_java_literals_NullLiteral_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_NullLiteral" + + + + // $ANTLR start "parse_org_emftext_language_java_modifiers_Public" + // Java.g:33946:1: parse_org_emftext_language_java_modifiers_Public returns [org.emftext.language.java.modifiers.Public element = null] : a0= 'public' ; + public final org.emftext.language.java.modifiers.Public parse_org_emftext_language_java_modifiers_Public() throws RecognitionException { + org.emftext.language.java.modifiers.Public element = null; + + int parse_org_emftext_language_java_modifiers_Public_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 124) ) { return element; } + + // Java.g:33949:2: (a0= 'public' ) + // Java.g:33950:2: a0= 'public' + { + a0=(Token)match(input,89,FOLLOW_89_in_parse_org_emftext_language_java_modifiers_Public21349); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.modifiers.ModifiersFactory.eINSTANCE.createPublic(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_122_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18951); + addExpectedElement(18952); + addExpectedElement(18953); + addExpectedElement(18954); + addExpectedElement(18955); + addExpectedElement(18956); + addExpectedElement(18957); + addExpectedElement(18958); + addExpectedElement(18959); + addExpectedElement(18960); + addExpectedElement(18961); + addExpectedElement(18962); + addExpectedElement(18963); + addExpectedElement(18964); + addExpectedElement(18965); + addExpectedElement(18966); + addExpectedElement(18967); + addExpectedElement(18968); + addExpectedElement(18969); + addExpectedElement(18970); + addExpectedElement(18971); + addExpectedElement(18972); + addExpectedElement(18973); + addExpectedElement(18974); + addExpectedElement(18975); + addExpectedElement(18976); + addExpectedElement(18977); + addExpectedElement(18978); + addExpectedElement(18979); + addExpectedElement(18980); + addExpectedElement(18981); + addExpectedElement(18982); + addExpectedElement(18983); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 124, parse_org_emftext_language_java_modifiers_Public_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_modifiers_Public" + + + + // $ANTLR start "parse_org_emftext_language_java_modifiers_Abstract" + // Java.g:33998:1: parse_org_emftext_language_java_modifiers_Abstract returns [org.emftext.language.java.modifiers.Abstract element = null] : a0= 'abstract' ; + public final org.emftext.language.java.modifiers.Abstract parse_org_emftext_language_java_modifiers_Abstract() throws RecognitionException { + org.emftext.language.java.modifiers.Abstract element = null; + + int parse_org_emftext_language_java_modifiers_Abstract_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 125) ) { return element; } + + // Java.g:34001:2: (a0= 'abstract' ) + // Java.g:34002:2: a0= 'abstract' + { + a0=(Token)match(input,56,FOLLOW_56_in_parse_org_emftext_language_java_modifiers_Abstract21378); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.modifiers.ModifiersFactory.eINSTANCE.createAbstract(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_123_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(18984); + addExpectedElement(18985); + addExpectedElement(18986); + addExpectedElement(18987); + addExpectedElement(18988); + addExpectedElement(18989); + addExpectedElement(18990); + addExpectedElement(18991); + addExpectedElement(18992); + addExpectedElement(18993); + addExpectedElement(18994); + addExpectedElement(18995); + addExpectedElement(18996); + addExpectedElement(18997); + addExpectedElement(18998); + addExpectedElement(18999); + addExpectedElement(19000); + addExpectedElement(19001); + addExpectedElement(19002); + addExpectedElement(19003); + addExpectedElement(19004); + addExpectedElement(19005); + addExpectedElement(19006); + addExpectedElement(19007); + addExpectedElement(19008); + addExpectedElement(19009); + addExpectedElement(19010); + addExpectedElement(19011); + addExpectedElement(19012); + addExpectedElement(19013); + addExpectedElement(19014); + addExpectedElement(19015); + addExpectedElement(19016); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 125, parse_org_emftext_language_java_modifiers_Abstract_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_modifiers_Abstract" + + + + // $ANTLR start "parse_org_emftext_language_java_modifiers_Protected" + // Java.g:34050:1: parse_org_emftext_language_java_modifiers_Protected returns [org.emftext.language.java.modifiers.Protected element = null] : a0= 'protected' ; + public final org.emftext.language.java.modifiers.Protected parse_org_emftext_language_java_modifiers_Protected() throws RecognitionException { + org.emftext.language.java.modifiers.Protected element = null; + + int parse_org_emftext_language_java_modifiers_Protected_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 126) ) { return element; } + + // Java.g:34053:2: (a0= 'protected' ) + // Java.g:34054:2: a0= 'protected' + { + a0=(Token)match(input,88,FOLLOW_88_in_parse_org_emftext_language_java_modifiers_Protected21407); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.modifiers.ModifiersFactory.eINSTANCE.createProtected(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_124_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19017); + addExpectedElement(19018); + addExpectedElement(19019); + addExpectedElement(19020); + addExpectedElement(19021); + addExpectedElement(19022); + addExpectedElement(19023); + addExpectedElement(19024); + addExpectedElement(19025); + addExpectedElement(19026); + addExpectedElement(19027); + addExpectedElement(19028); + addExpectedElement(19029); + addExpectedElement(19030); + addExpectedElement(19031); + addExpectedElement(19032); + addExpectedElement(19033); + addExpectedElement(19034); + addExpectedElement(19035); + addExpectedElement(19036); + addExpectedElement(19037); + addExpectedElement(19038); + addExpectedElement(19039); + addExpectedElement(19040); + addExpectedElement(19041); + addExpectedElement(19042); + addExpectedElement(19043); + addExpectedElement(19044); + addExpectedElement(19045); + addExpectedElement(19046); + addExpectedElement(19047); + addExpectedElement(19048); + addExpectedElement(19049); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 126, parse_org_emftext_language_java_modifiers_Protected_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_modifiers_Protected" + + + + // $ANTLR start "parse_org_emftext_language_java_modifiers_Private" + // Java.g:34102:1: parse_org_emftext_language_java_modifiers_Private returns [org.emftext.language.java.modifiers.Private element = null] : a0= 'private' ; + public final org.emftext.language.java.modifiers.Private parse_org_emftext_language_java_modifiers_Private() throws RecognitionException { + org.emftext.language.java.modifiers.Private element = null; + + int parse_org_emftext_language_java_modifiers_Private_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 127) ) { return element; } + + // Java.g:34105:2: (a0= 'private' ) + // Java.g:34106:2: a0= 'private' + { + a0=(Token)match(input,87,FOLLOW_87_in_parse_org_emftext_language_java_modifiers_Private21436); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.modifiers.ModifiersFactory.eINSTANCE.createPrivate(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_125_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19050); + addExpectedElement(19051); + addExpectedElement(19052); + addExpectedElement(19053); + addExpectedElement(19054); + addExpectedElement(19055); + addExpectedElement(19056); + addExpectedElement(19057); + addExpectedElement(19058); + addExpectedElement(19059); + addExpectedElement(19060); + addExpectedElement(19061); + addExpectedElement(19062); + addExpectedElement(19063); + addExpectedElement(19064); + addExpectedElement(19065); + addExpectedElement(19066); + addExpectedElement(19067); + addExpectedElement(19068); + addExpectedElement(19069); + addExpectedElement(19070); + addExpectedElement(19071); + addExpectedElement(19072); + addExpectedElement(19073); + addExpectedElement(19074); + addExpectedElement(19075); + addExpectedElement(19076); + addExpectedElement(19077); + addExpectedElement(19078); + addExpectedElement(19079); + addExpectedElement(19080); + addExpectedElement(19081); + addExpectedElement(19082); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 127, parse_org_emftext_language_java_modifiers_Private_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_modifiers_Private" + + + + // $ANTLR start "parse_org_emftext_language_java_modifiers_Final" + // Java.g:34154:1: parse_org_emftext_language_java_modifiers_Final returns [org.emftext.language.java.modifiers.Final element = null] : a0= 'final' ; + public final org.emftext.language.java.modifiers.Final parse_org_emftext_language_java_modifiers_Final() throws RecognitionException { + org.emftext.language.java.modifiers.Final element = null; + + int parse_org_emftext_language_java_modifiers_Final_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 128) ) { return element; } + + // Java.g:34157:2: (a0= 'final' ) + // Java.g:34158:2: a0= 'final' + { + a0=(Token)match(input,72,FOLLOW_72_in_parse_org_emftext_language_java_modifiers_Final21465); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.modifiers.ModifiersFactory.eINSTANCE.createFinal(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_126_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19083); + addExpectedElement(19084); + addExpectedElement(19085); + addExpectedElement(19086); + addExpectedElement(19087); + addExpectedElement(19088); + addExpectedElement(19089); + addExpectedElement(19090); + addExpectedElement(19091); + addExpectedElement(19092); + addExpectedElement(19093); + addExpectedElement(19094); + addExpectedElement(19095); + addExpectedElement(19096); + addExpectedElement(19097); + addExpectedElement(19098); + addExpectedElement(19099); + addExpectedElement(19100); + addExpectedElement(19101); + addExpectedElement(19102); + addExpectedElement(19103); + addExpectedElement(19104); + addExpectedElement(19105); + addExpectedElement(19106); + addExpectedElement(19107); + addExpectedElement(19108); + addExpectedElement(19109); + addExpectedElement(19110); + addExpectedElement(19111); + addExpectedElement(19112); + addExpectedElement(19113); + addExpectedElement(19114); + addExpectedElement(19115); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 128, parse_org_emftext_language_java_modifiers_Final_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_modifiers_Final" + + + + // $ANTLR start "parse_org_emftext_language_java_modifiers_Static" + // Java.g:34206:1: parse_org_emftext_language_java_modifiers_Static returns [org.emftext.language.java.modifiers.Static element = null] : a0= 'static' ; + public final org.emftext.language.java.modifiers.Static parse_org_emftext_language_java_modifiers_Static() throws RecognitionException { + org.emftext.language.java.modifiers.Static element = null; + + int parse_org_emftext_language_java_modifiers_Static_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 129) ) { return element; } + + // Java.g:34209:2: (a0= 'static' ) + // Java.g:34210:2: a0= 'static' + { + a0=(Token)match(input,92,FOLLOW_92_in_parse_org_emftext_language_java_modifiers_Static21494); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.modifiers.ModifiersFactory.eINSTANCE.createStatic(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_127_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19116); + addExpectedElement(19117); + addExpectedElement(19118); + addExpectedElement(19119); + addExpectedElement(19120); + addExpectedElement(19121); + addExpectedElement(19122); + addExpectedElement(19123); + addExpectedElement(19124); + addExpectedElement(19125); + addExpectedElement(19126); + addExpectedElement(19127); + addExpectedElement(19128); + addExpectedElement(19129); + addExpectedElement(19130); + addExpectedElement(19131); + addExpectedElement(19132); + addExpectedElement(19133); + addExpectedElement(19134); + addExpectedElement(19135); + addExpectedElement(19136); + addExpectedElement(19137); + addExpectedElement(19138); + addExpectedElement(19139); + addExpectedElement(19140); + addExpectedElement(19141); + addExpectedElement(19142); + addExpectedElement(19143); + addExpectedElement(19144); + addExpectedElement(19145); + addExpectedElement(19146); + addExpectedElement(19147); + addExpectedElement(19148); + addExpectedElement(19149); + addExpectedElement(19150); + addExpectedElement(19151); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 129, parse_org_emftext_language_java_modifiers_Static_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_modifiers_Static" + + + + // $ANTLR start "parse_org_emftext_language_java_modifiers_Native" + // Java.g:34261:1: parse_org_emftext_language_java_modifiers_Native returns [org.emftext.language.java.modifiers.Native element = null] : a0= 'native' ; + public final org.emftext.language.java.modifiers.Native parse_org_emftext_language_java_modifiers_Native() throws RecognitionException { + org.emftext.language.java.modifiers.Native element = null; + + int parse_org_emftext_language_java_modifiers_Native_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 130) ) { return element; } + + // Java.g:34264:2: (a0= 'native' ) + // Java.g:34265:2: a0= 'native' + { + a0=(Token)match(input,83,FOLLOW_83_in_parse_org_emftext_language_java_modifiers_Native21523); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.modifiers.ModifiersFactory.eINSTANCE.createNative(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_128_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19152); + addExpectedElement(19153); + addExpectedElement(19154); + addExpectedElement(19155); + addExpectedElement(19156); + addExpectedElement(19157); + addExpectedElement(19158); + addExpectedElement(19159); + addExpectedElement(19160); + addExpectedElement(19161); + addExpectedElement(19162); + addExpectedElement(19163); + addExpectedElement(19164); + addExpectedElement(19165); + addExpectedElement(19166); + addExpectedElement(19167); + addExpectedElement(19168); + addExpectedElement(19169); + addExpectedElement(19170); + addExpectedElement(19171); + addExpectedElement(19172); + addExpectedElement(19173); + addExpectedElement(19174); + addExpectedElement(19175); + addExpectedElement(19176); + addExpectedElement(19177); + addExpectedElement(19178); + addExpectedElement(19179); + addExpectedElement(19180); + addExpectedElement(19181); + addExpectedElement(19182); + addExpectedElement(19183); + addExpectedElement(19184); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 130, parse_org_emftext_language_java_modifiers_Native_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_modifiers_Native" + + + + // $ANTLR start "parse_org_emftext_language_java_modifiers_Synchronized" + // Java.g:34313:1: parse_org_emftext_language_java_modifiers_Synchronized returns [org.emftext.language.java.modifiers.Synchronized element = null] : a0= 'synchronized' ; + public final org.emftext.language.java.modifiers.Synchronized parse_org_emftext_language_java_modifiers_Synchronized() throws RecognitionException { + org.emftext.language.java.modifiers.Synchronized element = null; + + int parse_org_emftext_language_java_modifiers_Synchronized_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 131) ) { return element; } + + // Java.g:34316:2: (a0= 'synchronized' ) + // Java.g:34317:2: a0= 'synchronized' + { + a0=(Token)match(input,96,FOLLOW_96_in_parse_org_emftext_language_java_modifiers_Synchronized21552); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.modifiers.ModifiersFactory.eINSTANCE.createSynchronized(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_129_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19185); + addExpectedElement(19186); + addExpectedElement(19187); + addExpectedElement(19188); + addExpectedElement(19189); + addExpectedElement(19190); + addExpectedElement(19191); + addExpectedElement(19192); + addExpectedElement(19193); + addExpectedElement(19194); + addExpectedElement(19195); + addExpectedElement(19196); + addExpectedElement(19197); + addExpectedElement(19198); + addExpectedElement(19199); + addExpectedElement(19200); + addExpectedElement(19201); + addExpectedElement(19202); + addExpectedElement(19203); + addExpectedElement(19204); + addExpectedElement(19205); + addExpectedElement(19206); + addExpectedElement(19207); + addExpectedElement(19208); + addExpectedElement(19209); + addExpectedElement(19210); + addExpectedElement(19211); + addExpectedElement(19212); + addExpectedElement(19213); + addExpectedElement(19214); + addExpectedElement(19215); + addExpectedElement(19216); + addExpectedElement(19217); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 131, parse_org_emftext_language_java_modifiers_Synchronized_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_modifiers_Synchronized" + + + + // $ANTLR start "parse_org_emftext_language_java_modifiers_Transient" + // Java.g:34365:1: parse_org_emftext_language_java_modifiers_Transient returns [org.emftext.language.java.modifiers.Transient element = null] : a0= 'transient' ; + public final org.emftext.language.java.modifiers.Transient parse_org_emftext_language_java_modifiers_Transient() throws RecognitionException { + org.emftext.language.java.modifiers.Transient element = null; + + int parse_org_emftext_language_java_modifiers_Transient_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 132) ) { return element; } + + // Java.g:34368:2: (a0= 'transient' ) + // Java.g:34369:2: a0= 'transient' + { + a0=(Token)match(input,100,FOLLOW_100_in_parse_org_emftext_language_java_modifiers_Transient21581); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.modifiers.ModifiersFactory.eINSTANCE.createTransient(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_130_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19218); + addExpectedElement(19219); + addExpectedElement(19220); + addExpectedElement(19221); + addExpectedElement(19222); + addExpectedElement(19223); + addExpectedElement(19224); + addExpectedElement(19225); + addExpectedElement(19226); + addExpectedElement(19227); + addExpectedElement(19228); + addExpectedElement(19229); + addExpectedElement(19230); + addExpectedElement(19231); + addExpectedElement(19232); + addExpectedElement(19233); + addExpectedElement(19234); + addExpectedElement(19235); + addExpectedElement(19236); + addExpectedElement(19237); + addExpectedElement(19238); + addExpectedElement(19239); + addExpectedElement(19240); + addExpectedElement(19241); + addExpectedElement(19242); + addExpectedElement(19243); + addExpectedElement(19244); + addExpectedElement(19245); + addExpectedElement(19246); + addExpectedElement(19247); + addExpectedElement(19248); + addExpectedElement(19249); + addExpectedElement(19250); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 132, parse_org_emftext_language_java_modifiers_Transient_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_modifiers_Transient" + + + + // $ANTLR start "parse_org_emftext_language_java_modifiers_Volatile" + // Java.g:34417:1: parse_org_emftext_language_java_modifiers_Volatile returns [org.emftext.language.java.modifiers.Volatile element = null] : a0= 'volatile' ; + public final org.emftext.language.java.modifiers.Volatile parse_org_emftext_language_java_modifiers_Volatile() throws RecognitionException { + org.emftext.language.java.modifiers.Volatile element = null; + + int parse_org_emftext_language_java_modifiers_Volatile_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 133) ) { return element; } + + // Java.g:34420:2: (a0= 'volatile' ) + // Java.g:34421:2: a0= 'volatile' + { + a0=(Token)match(input,103,FOLLOW_103_in_parse_org_emftext_language_java_modifiers_Volatile21610); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.modifiers.ModifiersFactory.eINSTANCE.createVolatile(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_131_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19251); + addExpectedElement(19252); + addExpectedElement(19253); + addExpectedElement(19254); + addExpectedElement(19255); + addExpectedElement(19256); + addExpectedElement(19257); + addExpectedElement(19258); + addExpectedElement(19259); + addExpectedElement(19260); + addExpectedElement(19261); + addExpectedElement(19262); + addExpectedElement(19263); + addExpectedElement(19264); + addExpectedElement(19265); + addExpectedElement(19266); + addExpectedElement(19267); + addExpectedElement(19268); + addExpectedElement(19269); + addExpectedElement(19270); + addExpectedElement(19271); + addExpectedElement(19272); + addExpectedElement(19273); + addExpectedElement(19274); + addExpectedElement(19275); + addExpectedElement(19276); + addExpectedElement(19277); + addExpectedElement(19278); + addExpectedElement(19279); + addExpectedElement(19280); + addExpectedElement(19281); + addExpectedElement(19282); + addExpectedElement(19283); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 133, parse_org_emftext_language_java_modifiers_Volatile_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_modifiers_Volatile" + + + + // $ANTLR start "parse_org_emftext_language_java_modifiers_Strictfp" + // Java.g:34469:1: parse_org_emftext_language_java_modifiers_Strictfp returns [org.emftext.language.java.modifiers.Strictfp element = null] : a0= 'strictfp' ; + public final org.emftext.language.java.modifiers.Strictfp parse_org_emftext_language_java_modifiers_Strictfp() throws RecognitionException { + org.emftext.language.java.modifiers.Strictfp element = null; + + int parse_org_emftext_language_java_modifiers_Strictfp_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 134) ) { return element; } + + // Java.g:34472:2: (a0= 'strictfp' ) + // Java.g:34473:2: a0= 'strictfp' + { + a0=(Token)match(input,93,FOLLOW_93_in_parse_org_emftext_language_java_modifiers_Strictfp21639); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.modifiers.ModifiersFactory.eINSTANCE.createStrictfp(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_132_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19284); + addExpectedElement(19285); + addExpectedElement(19286); + addExpectedElement(19287); + addExpectedElement(19288); + addExpectedElement(19289); + addExpectedElement(19290); + addExpectedElement(19291); + addExpectedElement(19292); + addExpectedElement(19293); + addExpectedElement(19294); + addExpectedElement(19295); + addExpectedElement(19296); + addExpectedElement(19297); + addExpectedElement(19298); + addExpectedElement(19299); + addExpectedElement(19300); + addExpectedElement(19301); + addExpectedElement(19302); + addExpectedElement(19303); + addExpectedElement(19304); + addExpectedElement(19305); + addExpectedElement(19306); + addExpectedElement(19307); + addExpectedElement(19308); + addExpectedElement(19309); + addExpectedElement(19310); + addExpectedElement(19311); + addExpectedElement(19312); + addExpectedElement(19313); + addExpectedElement(19314); + addExpectedElement(19315); + addExpectedElement(19316); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 134, parse_org_emftext_language_java_modifiers_Strictfp_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_modifiers_Strictfp" + + + + // $ANTLR start "parse_org_emftext_language_java_types_Void" + // Java.g:34521:1: parse_org_emftext_language_java_types_Void returns [org.emftext.language.java.types.Void element = null] : a0= 'void' ; + public final org.emftext.language.java.types.Void parse_org_emftext_language_java_types_Void() throws RecognitionException { + org.emftext.language.java.types.Void element = null; + + int parse_org_emftext_language_java_types_Void_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 135) ) { return element; } + + // Java.g:34524:2: (a0= 'void' ) + // Java.g:34525:2: a0= 'void' + { + a0=(Token)match(input,102,FOLLOW_102_in_parse_org_emftext_language_java_types_Void21668); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createVoid(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_133_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19317); + addExpectedElement(19318); + addExpectedElement(19319); + addExpectedElement(19320); + addExpectedElement(19321); + addExpectedElement(19322); + addExpectedElement(19323); + addExpectedElement(19324); + addExpectedElement(19325); + addExpectedElement(19326); + addExpectedElement(19327); + addExpectedElement(19328); + addExpectedElement(19329); + addExpectedElement(19330); + addExpectedElement(19331); + addExpectedElement(19332); + addExpectedElement(19333); + addExpectedElement(19334); + addExpectedElement(19335); + addExpectedElement(19336); + addExpectedElement(19337); + addExpectedElement(19338); + addExpectedElement(19339); + addExpectedElement(19340); + addExpectedElement(19341); + addExpectedElement(19342); + addExpectedElement(19343); + addExpectedElement(19344); + addExpectedElement(19345); + addExpectedElement(19346); + addExpectedElement(19347); + addExpectedElement(19348); + addExpectedElement(19349); + addExpectedElement(19350); + addExpectedElement(19351); + addExpectedElement(19352); + addExpectedElement(19353); + addExpectedElement(19354); + addExpectedElement(19355); + addExpectedElement(19356); + addExpectedElement(19357); + addExpectedElement(19358); + addExpectedElement(19359); + addExpectedElement(19360); + addExpectedElement(19361); + addExpectedElement(19362); + addExpectedElement(19363); + addExpectedElement(19364); + addExpectedElement(19365); + addExpectedElement(19366); + addExpectedElement(19367); + addExpectedElement(19368); + addExpectedElement(19369); + addExpectedElement(19370); + addExpectedElement(19371); + addExpectedElement(19372); + addExpectedElement(19373); + addExpectedElement(19374); + addExpectedElement(19375); + addExpectedElement(19376); + addExpectedElement(19377); + addExpectedElement(19378); + addExpectedElement(19379); + addExpectedElement(19380); + addExpectedElement(19381); + addExpectedElement(19382); + addExpectedElement(19383); + addExpectedElement(19384); + addExpectedElement(19385); + addExpectedElement(19386); + addExpectedElement(19387); + addExpectedElement(19388); + addExpectedElement(19389); + addExpectedElement(19390); + addExpectedElement(19391); + addExpectedElement(19392); + addExpectedElement(19393); + addExpectedElement(19394); + addExpectedElement(19395); + addExpectedElement(19396); + addExpectedElement(19397); + addExpectedElement(19398); + addExpectedElement(19399); + addExpectedElement(19400); + addExpectedElement(19401); + addExpectedElement(19402); + addExpectedElement(19403); + addExpectedElement(19404); + addExpectedElement(19405); + addExpectedElement(19406); + addExpectedElement(19407); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 135, parse_org_emftext_language_java_types_Void_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_types_Void" + + + + // $ANTLR start "parse_org_emftext_language_java_types_Boolean" + // Java.g:34631:1: parse_org_emftext_language_java_types_Boolean returns [org.emftext.language.java.types.Boolean element = null] : a0= 'boolean' ; + public final org.emftext.language.java.types.Boolean parse_org_emftext_language_java_types_Boolean() throws RecognitionException { + org.emftext.language.java.types.Boolean element = null; + + int parse_org_emftext_language_java_types_Boolean_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 136) ) { return element; } + + // Java.g:34634:2: (a0= 'boolean' ) + // Java.g:34635:2: a0= 'boolean' + { + a0=(Token)match(input,58,FOLLOW_58_in_parse_org_emftext_language_java_types_Boolean21697); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createBoolean(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_134_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19408); + addExpectedElement(19409); + addExpectedElement(19410); + addExpectedElement(19411); + addExpectedElement(19412); + addExpectedElement(19413); + addExpectedElement(19414); + addExpectedElement(19415); + addExpectedElement(19416); + addExpectedElement(19417); + addExpectedElement(19418); + addExpectedElement(19419); + addExpectedElement(19420); + addExpectedElement(19421); + addExpectedElement(19422); + addExpectedElement(19423); + addExpectedElement(19424); + addExpectedElement(19425); + addExpectedElement(19426); + addExpectedElement(19427); + addExpectedElement(19428); + addExpectedElement(19429); + addExpectedElement(19430); + addExpectedElement(19431); + addExpectedElement(19432); + addExpectedElement(19433); + addExpectedElement(19434); + addExpectedElement(19435); + addExpectedElement(19436); + addExpectedElement(19437); + addExpectedElement(19438); + addExpectedElement(19439); + addExpectedElement(19440); + addExpectedElement(19441); + addExpectedElement(19442); + addExpectedElement(19443); + addExpectedElement(19444); + addExpectedElement(19445); + addExpectedElement(19446); + addExpectedElement(19447); + addExpectedElement(19448); + addExpectedElement(19449); + addExpectedElement(19450); + addExpectedElement(19451); + addExpectedElement(19452); + addExpectedElement(19453); + addExpectedElement(19454); + addExpectedElement(19455); + addExpectedElement(19456); + addExpectedElement(19457); + addExpectedElement(19458); + addExpectedElement(19459); + addExpectedElement(19460); + addExpectedElement(19461); + addExpectedElement(19462); + addExpectedElement(19463); + addExpectedElement(19464); + addExpectedElement(19465); + addExpectedElement(19466); + addExpectedElement(19467); + addExpectedElement(19468); + addExpectedElement(19469); + addExpectedElement(19470); + addExpectedElement(19471); + addExpectedElement(19472); + addExpectedElement(19473); + addExpectedElement(19474); + addExpectedElement(19475); + addExpectedElement(19476); + addExpectedElement(19477); + addExpectedElement(19478); + addExpectedElement(19479); + addExpectedElement(19480); + addExpectedElement(19481); + addExpectedElement(19482); + addExpectedElement(19483); + addExpectedElement(19484); + addExpectedElement(19485); + addExpectedElement(19486); + addExpectedElement(19487); + addExpectedElement(19488); + addExpectedElement(19489); + addExpectedElement(19490); + addExpectedElement(19491); + addExpectedElement(19492); + addExpectedElement(19493); + addExpectedElement(19494); + addExpectedElement(19495); + addExpectedElement(19496); + addExpectedElement(19497); + addExpectedElement(19498); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 136, parse_org_emftext_language_java_types_Boolean_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_types_Boolean" + + + + // $ANTLR start "parse_org_emftext_language_java_types_Char" + // Java.g:34741:1: parse_org_emftext_language_java_types_Char returns [org.emftext.language.java.types.Char element = null] : a0= 'char' ; + public final org.emftext.language.java.types.Char parse_org_emftext_language_java_types_Char() throws RecognitionException { + org.emftext.language.java.types.Char element = null; + + int parse_org_emftext_language_java_types_Char_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 137) ) { return element; } + + // Java.g:34744:2: (a0= 'char' ) + // Java.g:34745:2: a0= 'char' + { + a0=(Token)match(input,63,FOLLOW_63_in_parse_org_emftext_language_java_types_Char21726); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createChar(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_135_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19499); + addExpectedElement(19500); + addExpectedElement(19501); + addExpectedElement(19502); + addExpectedElement(19503); + addExpectedElement(19504); + addExpectedElement(19505); + addExpectedElement(19506); + addExpectedElement(19507); + addExpectedElement(19508); + addExpectedElement(19509); + addExpectedElement(19510); + addExpectedElement(19511); + addExpectedElement(19512); + addExpectedElement(19513); + addExpectedElement(19514); + addExpectedElement(19515); + addExpectedElement(19516); + addExpectedElement(19517); + addExpectedElement(19518); + addExpectedElement(19519); + addExpectedElement(19520); + addExpectedElement(19521); + addExpectedElement(19522); + addExpectedElement(19523); + addExpectedElement(19524); + addExpectedElement(19525); + addExpectedElement(19526); + addExpectedElement(19527); + addExpectedElement(19528); + addExpectedElement(19529); + addExpectedElement(19530); + addExpectedElement(19531); + addExpectedElement(19532); + addExpectedElement(19533); + addExpectedElement(19534); + addExpectedElement(19535); + addExpectedElement(19536); + addExpectedElement(19537); + addExpectedElement(19538); + addExpectedElement(19539); + addExpectedElement(19540); + addExpectedElement(19541); + addExpectedElement(19542); + addExpectedElement(19543); + addExpectedElement(19544); + addExpectedElement(19545); + addExpectedElement(19546); + addExpectedElement(19547); + addExpectedElement(19548); + addExpectedElement(19549); + addExpectedElement(19550); + addExpectedElement(19551); + addExpectedElement(19552); + addExpectedElement(19553); + addExpectedElement(19554); + addExpectedElement(19555); + addExpectedElement(19556); + addExpectedElement(19557); + addExpectedElement(19558); + addExpectedElement(19559); + addExpectedElement(19560); + addExpectedElement(19561); + addExpectedElement(19562); + addExpectedElement(19563); + addExpectedElement(19564); + addExpectedElement(19565); + addExpectedElement(19566); + addExpectedElement(19567); + addExpectedElement(19568); + addExpectedElement(19569); + addExpectedElement(19570); + addExpectedElement(19571); + addExpectedElement(19572); + addExpectedElement(19573); + addExpectedElement(19574); + addExpectedElement(19575); + addExpectedElement(19576); + addExpectedElement(19577); + addExpectedElement(19578); + addExpectedElement(19579); + addExpectedElement(19580); + addExpectedElement(19581); + addExpectedElement(19582); + addExpectedElement(19583); + addExpectedElement(19584); + addExpectedElement(19585); + addExpectedElement(19586); + addExpectedElement(19587); + addExpectedElement(19588); + addExpectedElement(19589); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 137, parse_org_emftext_language_java_types_Char_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_types_Char" + + + + // $ANTLR start "parse_org_emftext_language_java_types_Byte" + // Java.g:34851:1: parse_org_emftext_language_java_types_Byte returns [org.emftext.language.java.types.Byte element = null] : a0= 'byte' ; + public final org.emftext.language.java.types.Byte parse_org_emftext_language_java_types_Byte() throws RecognitionException { + org.emftext.language.java.types.Byte element = null; + + int parse_org_emftext_language_java_types_Byte_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 138) ) { return element; } + + // Java.g:34854:2: (a0= 'byte' ) + // Java.g:34855:2: a0= 'byte' + { + a0=(Token)match(input,60,FOLLOW_60_in_parse_org_emftext_language_java_types_Byte21755); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createByte(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_136_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19590); + addExpectedElement(19591); + addExpectedElement(19592); + addExpectedElement(19593); + addExpectedElement(19594); + addExpectedElement(19595); + addExpectedElement(19596); + addExpectedElement(19597); + addExpectedElement(19598); + addExpectedElement(19599); + addExpectedElement(19600); + addExpectedElement(19601); + addExpectedElement(19602); + addExpectedElement(19603); + addExpectedElement(19604); + addExpectedElement(19605); + addExpectedElement(19606); + addExpectedElement(19607); + addExpectedElement(19608); + addExpectedElement(19609); + addExpectedElement(19610); + addExpectedElement(19611); + addExpectedElement(19612); + addExpectedElement(19613); + addExpectedElement(19614); + addExpectedElement(19615); + addExpectedElement(19616); + addExpectedElement(19617); + addExpectedElement(19618); + addExpectedElement(19619); + addExpectedElement(19620); + addExpectedElement(19621); + addExpectedElement(19622); + addExpectedElement(19623); + addExpectedElement(19624); + addExpectedElement(19625); + addExpectedElement(19626); + addExpectedElement(19627); + addExpectedElement(19628); + addExpectedElement(19629); + addExpectedElement(19630); + addExpectedElement(19631); + addExpectedElement(19632); + addExpectedElement(19633); + addExpectedElement(19634); + addExpectedElement(19635); + addExpectedElement(19636); + addExpectedElement(19637); + addExpectedElement(19638); + addExpectedElement(19639); + addExpectedElement(19640); + addExpectedElement(19641); + addExpectedElement(19642); + addExpectedElement(19643); + addExpectedElement(19644); + addExpectedElement(19645); + addExpectedElement(19646); + addExpectedElement(19647); + addExpectedElement(19648); + addExpectedElement(19649); + addExpectedElement(19650); + addExpectedElement(19651); + addExpectedElement(19652); + addExpectedElement(19653); + addExpectedElement(19654); + addExpectedElement(19655); + addExpectedElement(19656); + addExpectedElement(19657); + addExpectedElement(19658); + addExpectedElement(19659); + addExpectedElement(19660); + addExpectedElement(19661); + addExpectedElement(19662); + addExpectedElement(19663); + addExpectedElement(19664); + addExpectedElement(19665); + addExpectedElement(19666); + addExpectedElement(19667); + addExpectedElement(19668); + addExpectedElement(19669); + addExpectedElement(19670); + addExpectedElement(19671); + addExpectedElement(19672); + addExpectedElement(19673); + addExpectedElement(19674); + addExpectedElement(19675); + addExpectedElement(19676); + addExpectedElement(19677); + addExpectedElement(19678); + addExpectedElement(19679); + addExpectedElement(19680); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 138, parse_org_emftext_language_java_types_Byte_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_types_Byte" + + + + // $ANTLR start "parse_org_emftext_language_java_types_Short" + // Java.g:34961:1: parse_org_emftext_language_java_types_Short returns [org.emftext.language.java.types.Short element = null] : a0= 'short' ; + public final org.emftext.language.java.types.Short parse_org_emftext_language_java_types_Short() throws RecognitionException { + org.emftext.language.java.types.Short element = null; + + int parse_org_emftext_language_java_types_Short_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 139) ) { return element; } + + // Java.g:34964:2: (a0= 'short' ) + // Java.g:34965:2: a0= 'short' + { + a0=(Token)match(input,91,FOLLOW_91_in_parse_org_emftext_language_java_types_Short21784); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createShort(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_137_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19681); + addExpectedElement(19682); + addExpectedElement(19683); + addExpectedElement(19684); + addExpectedElement(19685); + addExpectedElement(19686); + addExpectedElement(19687); + addExpectedElement(19688); + addExpectedElement(19689); + addExpectedElement(19690); + addExpectedElement(19691); + addExpectedElement(19692); + addExpectedElement(19693); + addExpectedElement(19694); + addExpectedElement(19695); + addExpectedElement(19696); + addExpectedElement(19697); + addExpectedElement(19698); + addExpectedElement(19699); + addExpectedElement(19700); + addExpectedElement(19701); + addExpectedElement(19702); + addExpectedElement(19703); + addExpectedElement(19704); + addExpectedElement(19705); + addExpectedElement(19706); + addExpectedElement(19707); + addExpectedElement(19708); + addExpectedElement(19709); + addExpectedElement(19710); + addExpectedElement(19711); + addExpectedElement(19712); + addExpectedElement(19713); + addExpectedElement(19714); + addExpectedElement(19715); + addExpectedElement(19716); + addExpectedElement(19717); + addExpectedElement(19718); + addExpectedElement(19719); + addExpectedElement(19720); + addExpectedElement(19721); + addExpectedElement(19722); + addExpectedElement(19723); + addExpectedElement(19724); + addExpectedElement(19725); + addExpectedElement(19726); + addExpectedElement(19727); + addExpectedElement(19728); + addExpectedElement(19729); + addExpectedElement(19730); + addExpectedElement(19731); + addExpectedElement(19732); + addExpectedElement(19733); + addExpectedElement(19734); + addExpectedElement(19735); + addExpectedElement(19736); + addExpectedElement(19737); + addExpectedElement(19738); + addExpectedElement(19739); + addExpectedElement(19740); + addExpectedElement(19741); + addExpectedElement(19742); + addExpectedElement(19743); + addExpectedElement(19744); + addExpectedElement(19745); + addExpectedElement(19746); + addExpectedElement(19747); + addExpectedElement(19748); + addExpectedElement(19749); + addExpectedElement(19750); + addExpectedElement(19751); + addExpectedElement(19752); + addExpectedElement(19753); + addExpectedElement(19754); + addExpectedElement(19755); + addExpectedElement(19756); + addExpectedElement(19757); + addExpectedElement(19758); + addExpectedElement(19759); + addExpectedElement(19760); + addExpectedElement(19761); + addExpectedElement(19762); + addExpectedElement(19763); + addExpectedElement(19764); + addExpectedElement(19765); + addExpectedElement(19766); + addExpectedElement(19767); + addExpectedElement(19768); + addExpectedElement(19769); + addExpectedElement(19770); + addExpectedElement(19771); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 139, parse_org_emftext_language_java_types_Short_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_types_Short" + + + + // $ANTLR start "parse_org_emftext_language_java_types_Int" + // Java.g:35071:1: parse_org_emftext_language_java_types_Int returns [org.emftext.language.java.types.Int element = null] : a0= 'int' ; + public final org.emftext.language.java.types.Int parse_org_emftext_language_java_types_Int() throws RecognitionException { + org.emftext.language.java.types.Int element = null; + + int parse_org_emftext_language_java_types_Int_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 140) ) { return element; } + + // Java.g:35074:2: (a0= 'int' ) + // Java.g:35075:2: a0= 'int' + { + a0=(Token)match(input,80,FOLLOW_80_in_parse_org_emftext_language_java_types_Int21813); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createInt(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_138_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19772); + addExpectedElement(19773); + addExpectedElement(19774); + addExpectedElement(19775); + addExpectedElement(19776); + addExpectedElement(19777); + addExpectedElement(19778); + addExpectedElement(19779); + addExpectedElement(19780); + addExpectedElement(19781); + addExpectedElement(19782); + addExpectedElement(19783); + addExpectedElement(19784); + addExpectedElement(19785); + addExpectedElement(19786); + addExpectedElement(19787); + addExpectedElement(19788); + addExpectedElement(19789); + addExpectedElement(19790); + addExpectedElement(19791); + addExpectedElement(19792); + addExpectedElement(19793); + addExpectedElement(19794); + addExpectedElement(19795); + addExpectedElement(19796); + addExpectedElement(19797); + addExpectedElement(19798); + addExpectedElement(19799); + addExpectedElement(19800); + addExpectedElement(19801); + addExpectedElement(19802); + addExpectedElement(19803); + addExpectedElement(19804); + addExpectedElement(19805); + addExpectedElement(19806); + addExpectedElement(19807); + addExpectedElement(19808); + addExpectedElement(19809); + addExpectedElement(19810); + addExpectedElement(19811); + addExpectedElement(19812); + addExpectedElement(19813); + addExpectedElement(19814); + addExpectedElement(19815); + addExpectedElement(19816); + addExpectedElement(19817); + addExpectedElement(19818); + addExpectedElement(19819); + addExpectedElement(19820); + addExpectedElement(19821); + addExpectedElement(19822); + addExpectedElement(19823); + addExpectedElement(19824); + addExpectedElement(19825); + addExpectedElement(19826); + addExpectedElement(19827); + addExpectedElement(19828); + addExpectedElement(19829); + addExpectedElement(19830); + addExpectedElement(19831); + addExpectedElement(19832); + addExpectedElement(19833); + addExpectedElement(19834); + addExpectedElement(19835); + addExpectedElement(19836); + addExpectedElement(19837); + addExpectedElement(19838); + addExpectedElement(19839); + addExpectedElement(19840); + addExpectedElement(19841); + addExpectedElement(19842); + addExpectedElement(19843); + addExpectedElement(19844); + addExpectedElement(19845); + addExpectedElement(19846); + addExpectedElement(19847); + addExpectedElement(19848); + addExpectedElement(19849); + addExpectedElement(19850); + addExpectedElement(19851); + addExpectedElement(19852); + addExpectedElement(19853); + addExpectedElement(19854); + addExpectedElement(19855); + addExpectedElement(19856); + addExpectedElement(19857); + addExpectedElement(19858); + addExpectedElement(19859); + addExpectedElement(19860); + addExpectedElement(19861); + addExpectedElement(19862); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 140, parse_org_emftext_language_java_types_Int_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_types_Int" + + + + // $ANTLR start "parse_org_emftext_language_java_types_Long" + // Java.g:35181:1: parse_org_emftext_language_java_types_Long returns [org.emftext.language.java.types.Long element = null] : a0= 'long' ; + public final org.emftext.language.java.types.Long parse_org_emftext_language_java_types_Long() throws RecognitionException { + org.emftext.language.java.types.Long element = null; + + int parse_org_emftext_language_java_types_Long_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 141) ) { return element; } + + // Java.g:35184:2: (a0= 'long' ) + // Java.g:35185:2: a0= 'long' + { + a0=(Token)match(input,82,FOLLOW_82_in_parse_org_emftext_language_java_types_Long21842); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createLong(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_139_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19863); + addExpectedElement(19864); + addExpectedElement(19865); + addExpectedElement(19866); + addExpectedElement(19867); + addExpectedElement(19868); + addExpectedElement(19869); + addExpectedElement(19870); + addExpectedElement(19871); + addExpectedElement(19872); + addExpectedElement(19873); + addExpectedElement(19874); + addExpectedElement(19875); + addExpectedElement(19876); + addExpectedElement(19877); + addExpectedElement(19878); + addExpectedElement(19879); + addExpectedElement(19880); + addExpectedElement(19881); + addExpectedElement(19882); + addExpectedElement(19883); + addExpectedElement(19884); + addExpectedElement(19885); + addExpectedElement(19886); + addExpectedElement(19887); + addExpectedElement(19888); + addExpectedElement(19889); + addExpectedElement(19890); + addExpectedElement(19891); + addExpectedElement(19892); + addExpectedElement(19893); + addExpectedElement(19894); + addExpectedElement(19895); + addExpectedElement(19896); + addExpectedElement(19897); + addExpectedElement(19898); + addExpectedElement(19899); + addExpectedElement(19900); + addExpectedElement(19901); + addExpectedElement(19902); + addExpectedElement(19903); + addExpectedElement(19904); + addExpectedElement(19905); + addExpectedElement(19906); + addExpectedElement(19907); + addExpectedElement(19908); + addExpectedElement(19909); + addExpectedElement(19910); + addExpectedElement(19911); + addExpectedElement(19912); + addExpectedElement(19913); + addExpectedElement(19914); + addExpectedElement(19915); + addExpectedElement(19916); + addExpectedElement(19917); + addExpectedElement(19918); + addExpectedElement(19919); + addExpectedElement(19920); + addExpectedElement(19921); + addExpectedElement(19922); + addExpectedElement(19923); + addExpectedElement(19924); + addExpectedElement(19925); + addExpectedElement(19926); + addExpectedElement(19927); + addExpectedElement(19928); + addExpectedElement(19929); + addExpectedElement(19930); + addExpectedElement(19931); + addExpectedElement(19932); + addExpectedElement(19933); + addExpectedElement(19934); + addExpectedElement(19935); + addExpectedElement(19936); + addExpectedElement(19937); + addExpectedElement(19938); + addExpectedElement(19939); + addExpectedElement(19940); + addExpectedElement(19941); + addExpectedElement(19942); + addExpectedElement(19943); + addExpectedElement(19944); + addExpectedElement(19945); + addExpectedElement(19946); + addExpectedElement(19947); + addExpectedElement(19948); + addExpectedElement(19949); + addExpectedElement(19950); + addExpectedElement(19951); + addExpectedElement(19952); + addExpectedElement(19953); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 141, parse_org_emftext_language_java_types_Long_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_types_Long" + + + + // $ANTLR start "parse_org_emftext_language_java_types_Float" + // Java.g:35291:1: parse_org_emftext_language_java_types_Float returns [org.emftext.language.java.types.Float element = null] : a0= 'float' ; + public final org.emftext.language.java.types.Float parse_org_emftext_language_java_types_Float() throws RecognitionException { + org.emftext.language.java.types.Float element = null; + + int parse_org_emftext_language_java_types_Float_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 142) ) { return element; } + + // Java.g:35294:2: (a0= 'float' ) + // Java.g:35295:2: a0= 'float' + { + a0=(Token)match(input,74,FOLLOW_74_in_parse_org_emftext_language_java_types_Float21871); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createFloat(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_140_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(19954); + addExpectedElement(19955); + addExpectedElement(19956); + addExpectedElement(19957); + addExpectedElement(19958); + addExpectedElement(19959); + addExpectedElement(19960); + addExpectedElement(19961); + addExpectedElement(19962); + addExpectedElement(19963); + addExpectedElement(19964); + addExpectedElement(19965); + addExpectedElement(19966); + addExpectedElement(19967); + addExpectedElement(19968); + addExpectedElement(19969); + addExpectedElement(19970); + addExpectedElement(19971); + addExpectedElement(19972); + addExpectedElement(19973); + addExpectedElement(19974); + addExpectedElement(19975); + addExpectedElement(19976); + addExpectedElement(19977); + addExpectedElement(19978); + addExpectedElement(19979); + addExpectedElement(19980); + addExpectedElement(19981); + addExpectedElement(19982); + addExpectedElement(19983); + addExpectedElement(19984); + addExpectedElement(19985); + addExpectedElement(19986); + addExpectedElement(19987); + addExpectedElement(19988); + addExpectedElement(19989); + addExpectedElement(19990); + addExpectedElement(19991); + addExpectedElement(19992); + addExpectedElement(19993); + addExpectedElement(19994); + addExpectedElement(19995); + addExpectedElement(19996); + addExpectedElement(19997); + addExpectedElement(19998); + addExpectedElement(19999); + addExpectedElement(20000); + addExpectedElement(20001); + addExpectedElement(20002); + addExpectedElement(20003); + addExpectedElement(20004); + addExpectedElement(20005); + addExpectedElement(20006); + addExpectedElement(20007); + addExpectedElement(20008); + addExpectedElement(20009); + addExpectedElement(20010); + addExpectedElement(20011); + addExpectedElement(20012); + addExpectedElement(20013); + addExpectedElement(20014); + addExpectedElement(20015); + addExpectedElement(20016); + addExpectedElement(20017); + addExpectedElement(20018); + addExpectedElement(20019); + addExpectedElement(20020); + addExpectedElement(20021); + addExpectedElement(20022); + addExpectedElement(20023); + addExpectedElement(20024); + addExpectedElement(20025); + addExpectedElement(20026); + addExpectedElement(20027); + addExpectedElement(20028); + addExpectedElement(20029); + addExpectedElement(20030); + addExpectedElement(20031); + addExpectedElement(20032); + addExpectedElement(20033); + addExpectedElement(20034); + addExpectedElement(20035); + addExpectedElement(20036); + addExpectedElement(20037); + addExpectedElement(20038); + addExpectedElement(20039); + addExpectedElement(20040); + addExpectedElement(20041); + addExpectedElement(20042); + addExpectedElement(20043); + addExpectedElement(20044); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 142, parse_org_emftext_language_java_types_Float_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_types_Float" + + + + // $ANTLR start "parse_org_emftext_language_java_types_Double" + // Java.g:35401:1: parse_org_emftext_language_java_types_Double returns [org.emftext.language.java.types.Double element = null] : a0= 'double' ; + public final org.emftext.language.java.types.Double parse_org_emftext_language_java_types_Double() throws RecognitionException { + org.emftext.language.java.types.Double element = null; + + int parse_org_emftext_language_java_types_Double_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 143) ) { return element; } + + // Java.g:35404:2: (a0= 'double' ) + // Java.g:35405:2: a0= 'double' + { + a0=(Token)match(input,68,FOLLOW_68_in_parse_org_emftext_language_java_types_Double21900); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (element == null) { + element = org.emftext.language.java.types.TypesFactory.eINSTANCE.createDouble(); + startIncompleteElement(element); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_141_0_0_0, null, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken)a0, element); + } + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(20045); + addExpectedElement(20046); + addExpectedElement(20047); + addExpectedElement(20048); + addExpectedElement(20049); + addExpectedElement(20050); + addExpectedElement(20051); + addExpectedElement(20052); + addExpectedElement(20053); + addExpectedElement(20054); + addExpectedElement(20055); + addExpectedElement(20056); + addExpectedElement(20057); + addExpectedElement(20058); + addExpectedElement(20059); + addExpectedElement(20060); + addExpectedElement(20061); + addExpectedElement(20062); + addExpectedElement(20063); + addExpectedElement(20064); + addExpectedElement(20065); + addExpectedElement(20066); + addExpectedElement(20067); + addExpectedElement(20068); + addExpectedElement(20069); + addExpectedElement(20070); + addExpectedElement(20071); + addExpectedElement(20072); + addExpectedElement(20073); + addExpectedElement(20074); + addExpectedElement(20075); + addExpectedElement(20076); + addExpectedElement(20077); + addExpectedElement(20078); + addExpectedElement(20079); + addExpectedElement(20080); + addExpectedElement(20081); + addExpectedElement(20082); + addExpectedElement(20083); + addExpectedElement(20084); + addExpectedElement(20085); + addExpectedElement(20086); + addExpectedElement(20087); + addExpectedElement(20088); + addExpectedElement(20089); + addExpectedElement(20090); + addExpectedElement(20091); + addExpectedElement(20092); + addExpectedElement(20093); + addExpectedElement(20094); + addExpectedElement(20095); + addExpectedElement(20096); + addExpectedElement(20097); + addExpectedElement(20098); + addExpectedElement(20099); + addExpectedElement(20100); + addExpectedElement(20101); + addExpectedElement(20102); + addExpectedElement(20103); + addExpectedElement(20104); + addExpectedElement(20105); + addExpectedElement(20106); + addExpectedElement(20107); + addExpectedElement(20108); + addExpectedElement(20109); + addExpectedElement(20110); + addExpectedElement(20111); + addExpectedElement(20112); + addExpectedElement(20113); + addExpectedElement(20114); + addExpectedElement(20115); + addExpectedElement(20116); + addExpectedElement(20117); + addExpectedElement(20118); + addExpectedElement(20119); + addExpectedElement(20120); + addExpectedElement(20121); + addExpectedElement(20122); + addExpectedElement(20123); + addExpectedElement(20124); + addExpectedElement(20125); + addExpectedElement(20126); + addExpectedElement(20127); + addExpectedElement(20128); + addExpectedElement(20129); + addExpectedElement(20130); + addExpectedElement(20131); + addExpectedElement(20132); + addExpectedElement(20133); + addExpectedElement(20134); + addExpectedElement(20135); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 143, parse_org_emftext_language_java_types_Double_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_types_Double" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_DecimalLongLiteral" + // Java.g:35511:1: parse_org_emftext_language_java_literals_DecimalLongLiteral returns [org.emftext.language.java.literals.DecimalLongLiteral element = null] : (a0= DECIMAL_LONG_LITERAL ) ; + public final org.emftext.language.java.literals.DecimalLongLiteral parse_org_emftext_language_java_literals_DecimalLongLiteral() throws RecognitionException { + org.emftext.language.java.literals.DecimalLongLiteral element = null; + + int parse_org_emftext_language_java_literals_DecimalLongLiteral_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 144) ) { return element; } + + // Java.g:35514:2: ( (a0= DECIMAL_LONG_LITERAL ) ) + // Java.g:35515:2: (a0= DECIMAL_LONG_LITERAL ) + { + // Java.g:35515:2: (a0= DECIMAL_LONG_LITERAL ) + // Java.g:35516:3: a0= DECIMAL_LONG_LITERAL + { + a0=(Token)match(input,DECIMAL_LONG_LITERAL,FOLLOW_DECIMAL_LONG_LITERAL_in_parse_org_emftext_language_java_literals_DecimalLongLiteral21933); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createDecimalLongLiteral(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("DECIMAL_LONG_LITERAL"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.DECIMAL_LONG_LITERAL__DECIMAL_VALUE), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.math.BigInteger resolved = (java.math.BigInteger) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.DECIMAL_LONG_LITERAL__DECIMAL_VALUE), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_142_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(20136); + addExpectedElement(20137); + addExpectedElement(20138); + addExpectedElement(20139); + addExpectedElement(20140); + addExpectedElement(20141); + addExpectedElement(20142); + addExpectedElement(20143); + addExpectedElement(20144); + addExpectedElement(20145); + addExpectedElement(20146); + addExpectedElement(20147); + addExpectedElement(20148); + addExpectedElement(20149); + addExpectedElement(20150); + addExpectedElement(20151); + addExpectedElement(20152); + addExpectedElement(20153); + addExpectedElement(20154); + addExpectedElement(20155); + addExpectedElement(20156); + addExpectedElement(20157); + addExpectedElement(20158); + addExpectedElement(20159); + addExpectedElement(20160); + addExpectedElement(20161); + addExpectedElement(20162); + addExpectedElement(20163); + addExpectedElement(20164); + addExpectedElement(20165); + addExpectedElement(20166); + addExpectedElement(20167); + addExpectedElement(20168); + addExpectedElement(20169); + addExpectedElement(20170); + addExpectedElement(20171); + addExpectedElement(20172); + addExpectedElement(20173); + addExpectedElement(20174); + addExpectedElement(20175); + addExpectedElement(20176); + addExpectedElement(20177); + addExpectedElement(20178); + addExpectedElement(20179); + addExpectedElement(20180); + addExpectedElement(20181); + addExpectedElement(20182); + addExpectedElement(20183); + addExpectedElement(20184); + addExpectedElement(20185); + addExpectedElement(20186); + addExpectedElement(20187); + addExpectedElement(20188); + addExpectedElement(20189); + addExpectedElement(20190); + addExpectedElement(20191); + addExpectedElement(20192); + addExpectedElement(20193); + addExpectedElement(20194); + addExpectedElement(20195); + addExpectedElement(20196); + addExpectedElement(20197); + addExpectedElement(20198); + addExpectedElement(20199); + addExpectedElement(20200); + addExpectedElement(20201); + addExpectedElement(20202); + addExpectedElement(20203); + addExpectedElement(20204); + addExpectedElement(20205); + addExpectedElement(20206); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 144, parse_org_emftext_language_java_literals_DecimalLongLiteral_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_DecimalLongLiteral" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_DecimalFloatLiteral" + // Java.g:35623:1: parse_org_emftext_language_java_literals_DecimalFloatLiteral returns [org.emftext.language.java.literals.DecimalFloatLiteral element = null] : (a0= DECIMAL_FLOAT_LITERAL ) ; + public final org.emftext.language.java.literals.DecimalFloatLiteral parse_org_emftext_language_java_literals_DecimalFloatLiteral() throws RecognitionException { + org.emftext.language.java.literals.DecimalFloatLiteral element = null; + + int parse_org_emftext_language_java_literals_DecimalFloatLiteral_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 145) ) { return element; } + + // Java.g:35626:2: ( (a0= DECIMAL_FLOAT_LITERAL ) ) + // Java.g:35627:2: (a0= DECIMAL_FLOAT_LITERAL ) + { + // Java.g:35627:2: (a0= DECIMAL_FLOAT_LITERAL ) + // Java.g:35628:3: a0= DECIMAL_FLOAT_LITERAL + { + a0=(Token)match(input,DECIMAL_FLOAT_LITERAL,FOLLOW_DECIMAL_FLOAT_LITERAL_in_parse_org_emftext_language_java_literals_DecimalFloatLiteral21973); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createDecimalFloatLiteral(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("DECIMAL_FLOAT_LITERAL"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.DECIMAL_FLOAT_LITERAL__DECIMAL_VALUE), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.lang.Float resolved = (java.lang.Float) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.DECIMAL_FLOAT_LITERAL__DECIMAL_VALUE), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_143_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(20207); + addExpectedElement(20208); + addExpectedElement(20209); + addExpectedElement(20210); + addExpectedElement(20211); + addExpectedElement(20212); + addExpectedElement(20213); + addExpectedElement(20214); + addExpectedElement(20215); + addExpectedElement(20216); + addExpectedElement(20217); + addExpectedElement(20218); + addExpectedElement(20219); + addExpectedElement(20220); + addExpectedElement(20221); + addExpectedElement(20222); + addExpectedElement(20223); + addExpectedElement(20224); + addExpectedElement(20225); + addExpectedElement(20226); + addExpectedElement(20227); + addExpectedElement(20228); + addExpectedElement(20229); + addExpectedElement(20230); + addExpectedElement(20231); + addExpectedElement(20232); + addExpectedElement(20233); + addExpectedElement(20234); + addExpectedElement(20235); + addExpectedElement(20236); + addExpectedElement(20237); + addExpectedElement(20238); + addExpectedElement(20239); + addExpectedElement(20240); + addExpectedElement(20241); + addExpectedElement(20242); + addExpectedElement(20243); + addExpectedElement(20244); + addExpectedElement(20245); + addExpectedElement(20246); + addExpectedElement(20247); + addExpectedElement(20248); + addExpectedElement(20249); + addExpectedElement(20250); + addExpectedElement(20251); + addExpectedElement(20252); + addExpectedElement(20253); + addExpectedElement(20254); + addExpectedElement(20255); + addExpectedElement(20256); + addExpectedElement(20257); + addExpectedElement(20258); + addExpectedElement(20259); + addExpectedElement(20260); + addExpectedElement(20261); + addExpectedElement(20262); + addExpectedElement(20263); + addExpectedElement(20264); + addExpectedElement(20265); + addExpectedElement(20266); + addExpectedElement(20267); + addExpectedElement(20268); + addExpectedElement(20269); + addExpectedElement(20270); + addExpectedElement(20271); + addExpectedElement(20272); + addExpectedElement(20273); + addExpectedElement(20274); + addExpectedElement(20275); + addExpectedElement(20276); + addExpectedElement(20277); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 145, parse_org_emftext_language_java_literals_DecimalFloatLiteral_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_DecimalFloatLiteral" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_DecimalIntegerLiteral" + // Java.g:35735:1: parse_org_emftext_language_java_literals_DecimalIntegerLiteral returns [org.emftext.language.java.literals.DecimalIntegerLiteral element = null] : (a0= DECIMAL_INTEGER_LITERAL ) ; + public final org.emftext.language.java.literals.DecimalIntegerLiteral parse_org_emftext_language_java_literals_DecimalIntegerLiteral() throws RecognitionException { + org.emftext.language.java.literals.DecimalIntegerLiteral element = null; + + int parse_org_emftext_language_java_literals_DecimalIntegerLiteral_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 146) ) { return element; } + + // Java.g:35738:2: ( (a0= DECIMAL_INTEGER_LITERAL ) ) + // Java.g:35739:2: (a0= DECIMAL_INTEGER_LITERAL ) + { + // Java.g:35739:2: (a0= DECIMAL_INTEGER_LITERAL ) + // Java.g:35740:3: a0= DECIMAL_INTEGER_LITERAL + { + a0=(Token)match(input,DECIMAL_INTEGER_LITERAL,FOLLOW_DECIMAL_INTEGER_LITERAL_in_parse_org_emftext_language_java_literals_DecimalIntegerLiteral22013); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createDecimalIntegerLiteral(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("DECIMAL_INTEGER_LITERAL"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.DECIMAL_INTEGER_LITERAL__DECIMAL_VALUE), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.math.BigInteger resolved = (java.math.BigInteger) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.DECIMAL_INTEGER_LITERAL__DECIMAL_VALUE), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_144_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(20278); + addExpectedElement(20279); + addExpectedElement(20280); + addExpectedElement(20281); + addExpectedElement(20282); + addExpectedElement(20283); + addExpectedElement(20284); + addExpectedElement(20285); + addExpectedElement(20286); + addExpectedElement(20287); + addExpectedElement(20288); + addExpectedElement(20289); + addExpectedElement(20290); + addExpectedElement(20291); + addExpectedElement(20292); + addExpectedElement(20293); + addExpectedElement(20294); + addExpectedElement(20295); + addExpectedElement(20296); + addExpectedElement(20297); + addExpectedElement(20298); + addExpectedElement(20299); + addExpectedElement(20300); + addExpectedElement(20301); + addExpectedElement(20302); + addExpectedElement(20303); + addExpectedElement(20304); + addExpectedElement(20305); + addExpectedElement(20306); + addExpectedElement(20307); + addExpectedElement(20308); + addExpectedElement(20309); + addExpectedElement(20310); + addExpectedElement(20311); + addExpectedElement(20312); + addExpectedElement(20313); + addExpectedElement(20314); + addExpectedElement(20315); + addExpectedElement(20316); + addExpectedElement(20317); + addExpectedElement(20318); + addExpectedElement(20319); + addExpectedElement(20320); + addExpectedElement(20321); + addExpectedElement(20322); + addExpectedElement(20323); + addExpectedElement(20324); + addExpectedElement(20325); + addExpectedElement(20326); + addExpectedElement(20327); + addExpectedElement(20328); + addExpectedElement(20329); + addExpectedElement(20330); + addExpectedElement(20331); + addExpectedElement(20332); + addExpectedElement(20333); + addExpectedElement(20334); + addExpectedElement(20335); + addExpectedElement(20336); + addExpectedElement(20337); + addExpectedElement(20338); + addExpectedElement(20339); + addExpectedElement(20340); + addExpectedElement(20341); + addExpectedElement(20342); + addExpectedElement(20343); + addExpectedElement(20344); + addExpectedElement(20345); + addExpectedElement(20346); + addExpectedElement(20347); + addExpectedElement(20348); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 146, parse_org_emftext_language_java_literals_DecimalIntegerLiteral_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_DecimalIntegerLiteral" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_DecimalDoubleLiteral" + // Java.g:35847:1: parse_org_emftext_language_java_literals_DecimalDoubleLiteral returns [org.emftext.language.java.literals.DecimalDoubleLiteral element = null] : (a0= DECIMAL_DOUBLE_LITERAL ) ; + public final org.emftext.language.java.literals.DecimalDoubleLiteral parse_org_emftext_language_java_literals_DecimalDoubleLiteral() throws RecognitionException { + org.emftext.language.java.literals.DecimalDoubleLiteral element = null; + + int parse_org_emftext_language_java_literals_DecimalDoubleLiteral_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 147) ) { return element; } + + // Java.g:35850:2: ( (a0= DECIMAL_DOUBLE_LITERAL ) ) + // Java.g:35851:2: (a0= DECIMAL_DOUBLE_LITERAL ) + { + // Java.g:35851:2: (a0= DECIMAL_DOUBLE_LITERAL ) + // Java.g:35852:3: a0= DECIMAL_DOUBLE_LITERAL + { + a0=(Token)match(input,DECIMAL_DOUBLE_LITERAL,FOLLOW_DECIMAL_DOUBLE_LITERAL_in_parse_org_emftext_language_java_literals_DecimalDoubleLiteral22053); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createDecimalDoubleLiteral(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("DECIMAL_DOUBLE_LITERAL"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.DECIMAL_DOUBLE_LITERAL__DECIMAL_VALUE), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.lang.Double resolved = (java.lang.Double) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.DECIMAL_DOUBLE_LITERAL__DECIMAL_VALUE), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_145_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(20349); + addExpectedElement(20350); + addExpectedElement(20351); + addExpectedElement(20352); + addExpectedElement(20353); + addExpectedElement(20354); + addExpectedElement(20355); + addExpectedElement(20356); + addExpectedElement(20357); + addExpectedElement(20358); + addExpectedElement(20359); + addExpectedElement(20360); + addExpectedElement(20361); + addExpectedElement(20362); + addExpectedElement(20363); + addExpectedElement(20364); + addExpectedElement(20365); + addExpectedElement(20366); + addExpectedElement(20367); + addExpectedElement(20368); + addExpectedElement(20369); + addExpectedElement(20370); + addExpectedElement(20371); + addExpectedElement(20372); + addExpectedElement(20373); + addExpectedElement(20374); + addExpectedElement(20375); + addExpectedElement(20376); + addExpectedElement(20377); + addExpectedElement(20378); + addExpectedElement(20379); + addExpectedElement(20380); + addExpectedElement(20381); + addExpectedElement(20382); + addExpectedElement(20383); + addExpectedElement(20384); + addExpectedElement(20385); + addExpectedElement(20386); + addExpectedElement(20387); + addExpectedElement(20388); + addExpectedElement(20389); + addExpectedElement(20390); + addExpectedElement(20391); + addExpectedElement(20392); + addExpectedElement(20393); + addExpectedElement(20394); + addExpectedElement(20395); + addExpectedElement(20396); + addExpectedElement(20397); + addExpectedElement(20398); + addExpectedElement(20399); + addExpectedElement(20400); + addExpectedElement(20401); + addExpectedElement(20402); + addExpectedElement(20403); + addExpectedElement(20404); + addExpectedElement(20405); + addExpectedElement(20406); + addExpectedElement(20407); + addExpectedElement(20408); + addExpectedElement(20409); + addExpectedElement(20410); + addExpectedElement(20411); + addExpectedElement(20412); + addExpectedElement(20413); + addExpectedElement(20414); + addExpectedElement(20415); + addExpectedElement(20416); + addExpectedElement(20417); + addExpectedElement(20418); + addExpectedElement(20419); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 147, parse_org_emftext_language_java_literals_DecimalDoubleLiteral_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_DecimalDoubleLiteral" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_HexLongLiteral" + // Java.g:35959:1: parse_org_emftext_language_java_literals_HexLongLiteral returns [org.emftext.language.java.literals.HexLongLiteral element = null] : (a0= HEX_LONG_LITERAL ) ; + public final org.emftext.language.java.literals.HexLongLiteral parse_org_emftext_language_java_literals_HexLongLiteral() throws RecognitionException { + org.emftext.language.java.literals.HexLongLiteral element = null; + + int parse_org_emftext_language_java_literals_HexLongLiteral_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 148) ) { return element; } + + // Java.g:35962:2: ( (a0= HEX_LONG_LITERAL ) ) + // Java.g:35963:2: (a0= HEX_LONG_LITERAL ) + { + // Java.g:35963:2: (a0= HEX_LONG_LITERAL ) + // Java.g:35964:3: a0= HEX_LONG_LITERAL + { + a0=(Token)match(input,HEX_LONG_LITERAL,FOLLOW_HEX_LONG_LITERAL_in_parse_org_emftext_language_java_literals_HexLongLiteral22093); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createHexLongLiteral(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("HEX_LONG_LITERAL"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.HEX_LONG_LITERAL__HEX_VALUE), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.math.BigInteger resolved = (java.math.BigInteger) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.HEX_LONG_LITERAL__HEX_VALUE), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_146_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(20420); + addExpectedElement(20421); + addExpectedElement(20422); + addExpectedElement(20423); + addExpectedElement(20424); + addExpectedElement(20425); + addExpectedElement(20426); + addExpectedElement(20427); + addExpectedElement(20428); + addExpectedElement(20429); + addExpectedElement(20430); + addExpectedElement(20431); + addExpectedElement(20432); + addExpectedElement(20433); + addExpectedElement(20434); + addExpectedElement(20435); + addExpectedElement(20436); + addExpectedElement(20437); + addExpectedElement(20438); + addExpectedElement(20439); + addExpectedElement(20440); + addExpectedElement(20441); + addExpectedElement(20442); + addExpectedElement(20443); + addExpectedElement(20444); + addExpectedElement(20445); + addExpectedElement(20446); + addExpectedElement(20447); + addExpectedElement(20448); + addExpectedElement(20449); + addExpectedElement(20450); + addExpectedElement(20451); + addExpectedElement(20452); + addExpectedElement(20453); + addExpectedElement(20454); + addExpectedElement(20455); + addExpectedElement(20456); + addExpectedElement(20457); + addExpectedElement(20458); + addExpectedElement(20459); + addExpectedElement(20460); + addExpectedElement(20461); + addExpectedElement(20462); + addExpectedElement(20463); + addExpectedElement(20464); + addExpectedElement(20465); + addExpectedElement(20466); + addExpectedElement(20467); + addExpectedElement(20468); + addExpectedElement(20469); + addExpectedElement(20470); + addExpectedElement(20471); + addExpectedElement(20472); + addExpectedElement(20473); + addExpectedElement(20474); + addExpectedElement(20475); + addExpectedElement(20476); + addExpectedElement(20477); + addExpectedElement(20478); + addExpectedElement(20479); + addExpectedElement(20480); + addExpectedElement(20481); + addExpectedElement(20482); + addExpectedElement(20483); + addExpectedElement(20484); + addExpectedElement(20485); + addExpectedElement(20486); + addExpectedElement(20487); + addExpectedElement(20488); + addExpectedElement(20489); + addExpectedElement(20490); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 148, parse_org_emftext_language_java_literals_HexLongLiteral_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_HexLongLiteral" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_HexFloatLiteral" + // Java.g:36071:1: parse_org_emftext_language_java_literals_HexFloatLiteral returns [org.emftext.language.java.literals.HexFloatLiteral element = null] : (a0= HEX_FLOAT_LITERAL ) ; + public final org.emftext.language.java.literals.HexFloatLiteral parse_org_emftext_language_java_literals_HexFloatLiteral() throws RecognitionException { + org.emftext.language.java.literals.HexFloatLiteral element = null; + + int parse_org_emftext_language_java_literals_HexFloatLiteral_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 149) ) { return element; } + + // Java.g:36074:2: ( (a0= HEX_FLOAT_LITERAL ) ) + // Java.g:36075:2: (a0= HEX_FLOAT_LITERAL ) + { + // Java.g:36075:2: (a0= HEX_FLOAT_LITERAL ) + // Java.g:36076:3: a0= HEX_FLOAT_LITERAL + { + a0=(Token)match(input,HEX_FLOAT_LITERAL,FOLLOW_HEX_FLOAT_LITERAL_in_parse_org_emftext_language_java_literals_HexFloatLiteral22133); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createHexFloatLiteral(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("HEX_FLOAT_LITERAL"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.HEX_FLOAT_LITERAL__HEX_VALUE), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.lang.Float resolved = (java.lang.Float) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.HEX_FLOAT_LITERAL__HEX_VALUE), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_147_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(20491); + addExpectedElement(20492); + addExpectedElement(20493); + addExpectedElement(20494); + addExpectedElement(20495); + addExpectedElement(20496); + addExpectedElement(20497); + addExpectedElement(20498); + addExpectedElement(20499); + addExpectedElement(20500); + addExpectedElement(20501); + addExpectedElement(20502); + addExpectedElement(20503); + addExpectedElement(20504); + addExpectedElement(20505); + addExpectedElement(20506); + addExpectedElement(20507); + addExpectedElement(20508); + addExpectedElement(20509); + addExpectedElement(20510); + addExpectedElement(20511); + addExpectedElement(20512); + addExpectedElement(20513); + addExpectedElement(20514); + addExpectedElement(20515); + addExpectedElement(20516); + addExpectedElement(20517); + addExpectedElement(20518); + addExpectedElement(20519); + addExpectedElement(20520); + addExpectedElement(20521); + addExpectedElement(20522); + addExpectedElement(20523); + addExpectedElement(20524); + addExpectedElement(20525); + addExpectedElement(20526); + addExpectedElement(20527); + addExpectedElement(20528); + addExpectedElement(20529); + addExpectedElement(20530); + addExpectedElement(20531); + addExpectedElement(20532); + addExpectedElement(20533); + addExpectedElement(20534); + addExpectedElement(20535); + addExpectedElement(20536); + addExpectedElement(20537); + addExpectedElement(20538); + addExpectedElement(20539); + addExpectedElement(20540); + addExpectedElement(20541); + addExpectedElement(20542); + addExpectedElement(20543); + addExpectedElement(20544); + addExpectedElement(20545); + addExpectedElement(20546); + addExpectedElement(20547); + addExpectedElement(20548); + addExpectedElement(20549); + addExpectedElement(20550); + addExpectedElement(20551); + addExpectedElement(20552); + addExpectedElement(20553); + addExpectedElement(20554); + addExpectedElement(20555); + addExpectedElement(20556); + addExpectedElement(20557); + addExpectedElement(20558); + addExpectedElement(20559); + addExpectedElement(20560); + addExpectedElement(20561); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 149, parse_org_emftext_language_java_literals_HexFloatLiteral_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_HexFloatLiteral" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_HexDoubleLiteral" + // Java.g:36183:1: parse_org_emftext_language_java_literals_HexDoubleLiteral returns [org.emftext.language.java.literals.HexDoubleLiteral element = null] : (a0= HEX_DOUBLE_LITERAL ) ; + public final org.emftext.language.java.literals.HexDoubleLiteral parse_org_emftext_language_java_literals_HexDoubleLiteral() throws RecognitionException { + org.emftext.language.java.literals.HexDoubleLiteral element = null; + + int parse_org_emftext_language_java_literals_HexDoubleLiteral_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 150) ) { return element; } + + // Java.g:36186:2: ( (a0= HEX_DOUBLE_LITERAL ) ) + // Java.g:36187:2: (a0= HEX_DOUBLE_LITERAL ) + { + // Java.g:36187:2: (a0= HEX_DOUBLE_LITERAL ) + // Java.g:36188:3: a0= HEX_DOUBLE_LITERAL + { + a0=(Token)match(input,HEX_DOUBLE_LITERAL,FOLLOW_HEX_DOUBLE_LITERAL_in_parse_org_emftext_language_java_literals_HexDoubleLiteral22173); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createHexDoubleLiteral(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("HEX_DOUBLE_LITERAL"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.HEX_DOUBLE_LITERAL__HEX_VALUE), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.lang.Double resolved = (java.lang.Double) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.HEX_DOUBLE_LITERAL__HEX_VALUE), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_148_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(20562); + addExpectedElement(20563); + addExpectedElement(20564); + addExpectedElement(20565); + addExpectedElement(20566); + addExpectedElement(20567); + addExpectedElement(20568); + addExpectedElement(20569); + addExpectedElement(20570); + addExpectedElement(20571); + addExpectedElement(20572); + addExpectedElement(20573); + addExpectedElement(20574); + addExpectedElement(20575); + addExpectedElement(20576); + addExpectedElement(20577); + addExpectedElement(20578); + addExpectedElement(20579); + addExpectedElement(20580); + addExpectedElement(20581); + addExpectedElement(20582); + addExpectedElement(20583); + addExpectedElement(20584); + addExpectedElement(20585); + addExpectedElement(20586); + addExpectedElement(20587); + addExpectedElement(20588); + addExpectedElement(20589); + addExpectedElement(20590); + addExpectedElement(20591); + addExpectedElement(20592); + addExpectedElement(20593); + addExpectedElement(20594); + addExpectedElement(20595); + addExpectedElement(20596); + addExpectedElement(20597); + addExpectedElement(20598); + addExpectedElement(20599); + addExpectedElement(20600); + addExpectedElement(20601); + addExpectedElement(20602); + addExpectedElement(20603); + addExpectedElement(20604); + addExpectedElement(20605); + addExpectedElement(20606); + addExpectedElement(20607); + addExpectedElement(20608); + addExpectedElement(20609); + addExpectedElement(20610); + addExpectedElement(20611); + addExpectedElement(20612); + addExpectedElement(20613); + addExpectedElement(20614); + addExpectedElement(20615); + addExpectedElement(20616); + addExpectedElement(20617); + addExpectedElement(20618); + addExpectedElement(20619); + addExpectedElement(20620); + addExpectedElement(20621); + addExpectedElement(20622); + addExpectedElement(20623); + addExpectedElement(20624); + addExpectedElement(20625); + addExpectedElement(20626); + addExpectedElement(20627); + addExpectedElement(20628); + addExpectedElement(20629); + addExpectedElement(20630); + addExpectedElement(20631); + addExpectedElement(20632); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 150, parse_org_emftext_language_java_literals_HexDoubleLiteral_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_HexDoubleLiteral" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_HexIntegerLiteral" + // Java.g:36295:1: parse_org_emftext_language_java_literals_HexIntegerLiteral returns [org.emftext.language.java.literals.HexIntegerLiteral element = null] : (a0= HEX_INTEGER_LITERAL ) ; + public final org.emftext.language.java.literals.HexIntegerLiteral parse_org_emftext_language_java_literals_HexIntegerLiteral() throws RecognitionException { + org.emftext.language.java.literals.HexIntegerLiteral element = null; + + int parse_org_emftext_language_java_literals_HexIntegerLiteral_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 151) ) { return element; } + + // Java.g:36298:2: ( (a0= HEX_INTEGER_LITERAL ) ) + // Java.g:36299:2: (a0= HEX_INTEGER_LITERAL ) + { + // Java.g:36299:2: (a0= HEX_INTEGER_LITERAL ) + // Java.g:36300:3: a0= HEX_INTEGER_LITERAL + { + a0=(Token)match(input,HEX_INTEGER_LITERAL,FOLLOW_HEX_INTEGER_LITERAL_in_parse_org_emftext_language_java_literals_HexIntegerLiteral22213); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createHexIntegerLiteral(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("HEX_INTEGER_LITERAL"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.HEX_INTEGER_LITERAL__HEX_VALUE), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.math.BigInteger resolved = (java.math.BigInteger) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.HEX_INTEGER_LITERAL__HEX_VALUE), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_149_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(20633); + addExpectedElement(20634); + addExpectedElement(20635); + addExpectedElement(20636); + addExpectedElement(20637); + addExpectedElement(20638); + addExpectedElement(20639); + addExpectedElement(20640); + addExpectedElement(20641); + addExpectedElement(20642); + addExpectedElement(20643); + addExpectedElement(20644); + addExpectedElement(20645); + addExpectedElement(20646); + addExpectedElement(20647); + addExpectedElement(20648); + addExpectedElement(20649); + addExpectedElement(20650); + addExpectedElement(20651); + addExpectedElement(20652); + addExpectedElement(20653); + addExpectedElement(20654); + addExpectedElement(20655); + addExpectedElement(20656); + addExpectedElement(20657); + addExpectedElement(20658); + addExpectedElement(20659); + addExpectedElement(20660); + addExpectedElement(20661); + addExpectedElement(20662); + addExpectedElement(20663); + addExpectedElement(20664); + addExpectedElement(20665); + addExpectedElement(20666); + addExpectedElement(20667); + addExpectedElement(20668); + addExpectedElement(20669); + addExpectedElement(20670); + addExpectedElement(20671); + addExpectedElement(20672); + addExpectedElement(20673); + addExpectedElement(20674); + addExpectedElement(20675); + addExpectedElement(20676); + addExpectedElement(20677); + addExpectedElement(20678); + addExpectedElement(20679); + addExpectedElement(20680); + addExpectedElement(20681); + addExpectedElement(20682); + addExpectedElement(20683); + addExpectedElement(20684); + addExpectedElement(20685); + addExpectedElement(20686); + addExpectedElement(20687); + addExpectedElement(20688); + addExpectedElement(20689); + addExpectedElement(20690); + addExpectedElement(20691); + addExpectedElement(20692); + addExpectedElement(20693); + addExpectedElement(20694); + addExpectedElement(20695); + addExpectedElement(20696); + addExpectedElement(20697); + addExpectedElement(20698); + addExpectedElement(20699); + addExpectedElement(20700); + addExpectedElement(20701); + addExpectedElement(20702); + addExpectedElement(20703); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 151, parse_org_emftext_language_java_literals_HexIntegerLiteral_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_HexIntegerLiteral" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_OctalLongLiteral" + // Java.g:36407:1: parse_org_emftext_language_java_literals_OctalLongLiteral returns [org.emftext.language.java.literals.OctalLongLiteral element = null] : (a0= OCTAL_LONG_LITERAL ) ; + public final org.emftext.language.java.literals.OctalLongLiteral parse_org_emftext_language_java_literals_OctalLongLiteral() throws RecognitionException { + org.emftext.language.java.literals.OctalLongLiteral element = null; + + int parse_org_emftext_language_java_literals_OctalLongLiteral_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 152) ) { return element; } + + // Java.g:36410:2: ( (a0= OCTAL_LONG_LITERAL ) ) + // Java.g:36411:2: (a0= OCTAL_LONG_LITERAL ) + { + // Java.g:36411:2: (a0= OCTAL_LONG_LITERAL ) + // Java.g:36412:3: a0= OCTAL_LONG_LITERAL + { + a0=(Token)match(input,OCTAL_LONG_LITERAL,FOLLOW_OCTAL_LONG_LITERAL_in_parse_org_emftext_language_java_literals_OctalLongLiteral22253); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createOctalLongLiteral(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("OCTAL_LONG_LITERAL"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.OCTAL_LONG_LITERAL__OCTAL_VALUE), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.math.BigInteger resolved = (java.math.BigInteger) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.OCTAL_LONG_LITERAL__OCTAL_VALUE), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_150_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(20704); + addExpectedElement(20705); + addExpectedElement(20706); + addExpectedElement(20707); + addExpectedElement(20708); + addExpectedElement(20709); + addExpectedElement(20710); + addExpectedElement(20711); + addExpectedElement(20712); + addExpectedElement(20713); + addExpectedElement(20714); + addExpectedElement(20715); + addExpectedElement(20716); + addExpectedElement(20717); + addExpectedElement(20718); + addExpectedElement(20719); + addExpectedElement(20720); + addExpectedElement(20721); + addExpectedElement(20722); + addExpectedElement(20723); + addExpectedElement(20724); + addExpectedElement(20725); + addExpectedElement(20726); + addExpectedElement(20727); + addExpectedElement(20728); + addExpectedElement(20729); + addExpectedElement(20730); + addExpectedElement(20731); + addExpectedElement(20732); + addExpectedElement(20733); + addExpectedElement(20734); + addExpectedElement(20735); + addExpectedElement(20736); + addExpectedElement(20737); + addExpectedElement(20738); + addExpectedElement(20739); + addExpectedElement(20740); + addExpectedElement(20741); + addExpectedElement(20742); + addExpectedElement(20743); + addExpectedElement(20744); + addExpectedElement(20745); + addExpectedElement(20746); + addExpectedElement(20747); + addExpectedElement(20748); + addExpectedElement(20749); + addExpectedElement(20750); + addExpectedElement(20751); + addExpectedElement(20752); + addExpectedElement(20753); + addExpectedElement(20754); + addExpectedElement(20755); + addExpectedElement(20756); + addExpectedElement(20757); + addExpectedElement(20758); + addExpectedElement(20759); + addExpectedElement(20760); + addExpectedElement(20761); + addExpectedElement(20762); + addExpectedElement(20763); + addExpectedElement(20764); + addExpectedElement(20765); + addExpectedElement(20766); + addExpectedElement(20767); + addExpectedElement(20768); + addExpectedElement(20769); + addExpectedElement(20770); + addExpectedElement(20771); + addExpectedElement(20772); + addExpectedElement(20773); + addExpectedElement(20774); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 152, parse_org_emftext_language_java_literals_OctalLongLiteral_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_OctalLongLiteral" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_OctalIntegerLiteral" + // Java.g:36519:1: parse_org_emftext_language_java_literals_OctalIntegerLiteral returns [org.emftext.language.java.literals.OctalIntegerLiteral element = null] : (a0= OCTAL_INTEGER_LITERAL ) ; + public final org.emftext.language.java.literals.OctalIntegerLiteral parse_org_emftext_language_java_literals_OctalIntegerLiteral() throws RecognitionException { + org.emftext.language.java.literals.OctalIntegerLiteral element = null; + + int parse_org_emftext_language_java_literals_OctalIntegerLiteral_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 153) ) { return element; } + + // Java.g:36522:2: ( (a0= OCTAL_INTEGER_LITERAL ) ) + // Java.g:36523:2: (a0= OCTAL_INTEGER_LITERAL ) + { + // Java.g:36523:2: (a0= OCTAL_INTEGER_LITERAL ) + // Java.g:36524:3: a0= OCTAL_INTEGER_LITERAL + { + a0=(Token)match(input,OCTAL_INTEGER_LITERAL,FOLLOW_OCTAL_INTEGER_LITERAL_in_parse_org_emftext_language_java_literals_OctalIntegerLiteral22293); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createOctalIntegerLiteral(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("OCTAL_INTEGER_LITERAL"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.OCTAL_INTEGER_LITERAL__OCTAL_VALUE), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.math.BigInteger resolved = (java.math.BigInteger) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.OCTAL_INTEGER_LITERAL__OCTAL_VALUE), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_151_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(20775); + addExpectedElement(20776); + addExpectedElement(20777); + addExpectedElement(20778); + addExpectedElement(20779); + addExpectedElement(20780); + addExpectedElement(20781); + addExpectedElement(20782); + addExpectedElement(20783); + addExpectedElement(20784); + addExpectedElement(20785); + addExpectedElement(20786); + addExpectedElement(20787); + addExpectedElement(20788); + addExpectedElement(20789); + addExpectedElement(20790); + addExpectedElement(20791); + addExpectedElement(20792); + addExpectedElement(20793); + addExpectedElement(20794); + addExpectedElement(20795); + addExpectedElement(20796); + addExpectedElement(20797); + addExpectedElement(20798); + addExpectedElement(20799); + addExpectedElement(20800); + addExpectedElement(20801); + addExpectedElement(20802); + addExpectedElement(20803); + addExpectedElement(20804); + addExpectedElement(20805); + addExpectedElement(20806); + addExpectedElement(20807); + addExpectedElement(20808); + addExpectedElement(20809); + addExpectedElement(20810); + addExpectedElement(20811); + addExpectedElement(20812); + addExpectedElement(20813); + addExpectedElement(20814); + addExpectedElement(20815); + addExpectedElement(20816); + addExpectedElement(20817); + addExpectedElement(20818); + addExpectedElement(20819); + addExpectedElement(20820); + addExpectedElement(20821); + addExpectedElement(20822); + addExpectedElement(20823); + addExpectedElement(20824); + addExpectedElement(20825); + addExpectedElement(20826); + addExpectedElement(20827); + addExpectedElement(20828); + addExpectedElement(20829); + addExpectedElement(20830); + addExpectedElement(20831); + addExpectedElement(20832); + addExpectedElement(20833); + addExpectedElement(20834); + addExpectedElement(20835); + addExpectedElement(20836); + addExpectedElement(20837); + addExpectedElement(20838); + addExpectedElement(20839); + addExpectedElement(20840); + addExpectedElement(20841); + addExpectedElement(20842); + addExpectedElement(20843); + addExpectedElement(20844); + addExpectedElement(20845); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 153, parse_org_emftext_language_java_literals_OctalIntegerLiteral_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_OctalIntegerLiteral" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_CharacterLiteral" + // Java.g:36631:1: parse_org_emftext_language_java_literals_CharacterLiteral returns [org.emftext.language.java.literals.CharacterLiteral element = null] : (a0= CHARACTER_LITERAL ) ; + public final org.emftext.language.java.literals.CharacterLiteral parse_org_emftext_language_java_literals_CharacterLiteral() throws RecognitionException { + org.emftext.language.java.literals.CharacterLiteral element = null; + + int parse_org_emftext_language_java_literals_CharacterLiteral_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 154) ) { return element; } + + // Java.g:36634:2: ( (a0= CHARACTER_LITERAL ) ) + // Java.g:36635:2: (a0= CHARACTER_LITERAL ) + { + // Java.g:36635:2: (a0= CHARACTER_LITERAL ) + // Java.g:36636:3: a0= CHARACTER_LITERAL + { + a0=(Token)match(input,CHARACTER_LITERAL,FOLLOW_CHARACTER_LITERAL_in_parse_org_emftext_language_java_literals_CharacterLiteral22333); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createCharacterLiteral(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("CHARACTER_LITERAL"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.CHARACTER_LITERAL__VALUE), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.lang.Character resolved = (java.lang.Character) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.CHARACTER_LITERAL__VALUE), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_152_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(20846); + addExpectedElement(20847); + addExpectedElement(20848); + addExpectedElement(20849); + addExpectedElement(20850); + addExpectedElement(20851); + addExpectedElement(20852); + addExpectedElement(20853); + addExpectedElement(20854); + addExpectedElement(20855); + addExpectedElement(20856); + addExpectedElement(20857); + addExpectedElement(20858); + addExpectedElement(20859); + addExpectedElement(20860); + addExpectedElement(20861); + addExpectedElement(20862); + addExpectedElement(20863); + addExpectedElement(20864); + addExpectedElement(20865); + addExpectedElement(20866); + addExpectedElement(20867); + addExpectedElement(20868); + addExpectedElement(20869); + addExpectedElement(20870); + addExpectedElement(20871); + addExpectedElement(20872); + addExpectedElement(20873); + addExpectedElement(20874); + addExpectedElement(20875); + addExpectedElement(20876); + addExpectedElement(20877); + addExpectedElement(20878); + addExpectedElement(20879); + addExpectedElement(20880); + addExpectedElement(20881); + addExpectedElement(20882); + addExpectedElement(20883); + addExpectedElement(20884); + addExpectedElement(20885); + addExpectedElement(20886); + addExpectedElement(20887); + addExpectedElement(20888); + addExpectedElement(20889); + addExpectedElement(20890); + addExpectedElement(20891); + addExpectedElement(20892); + addExpectedElement(20893); + addExpectedElement(20894); + addExpectedElement(20895); + addExpectedElement(20896); + addExpectedElement(20897); + addExpectedElement(20898); + addExpectedElement(20899); + addExpectedElement(20900); + addExpectedElement(20901); + addExpectedElement(20902); + addExpectedElement(20903); + addExpectedElement(20904); + addExpectedElement(20905); + addExpectedElement(20906); + addExpectedElement(20907); + addExpectedElement(20908); + addExpectedElement(20909); + addExpectedElement(20910); + addExpectedElement(20911); + addExpectedElement(20912); + addExpectedElement(20913); + addExpectedElement(20914); + addExpectedElement(20915); + addExpectedElement(20916); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 154, parse_org_emftext_language_java_literals_CharacterLiteral_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_CharacterLiteral" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_BooleanLiteral" + // Java.g:36743:1: parse_org_emftext_language_java_literals_BooleanLiteral returns [org.emftext.language.java.literals.BooleanLiteral element = null] : (a0= BOOLEAN_LITERAL ) ; + public final org.emftext.language.java.literals.BooleanLiteral parse_org_emftext_language_java_literals_BooleanLiteral() throws RecognitionException { + org.emftext.language.java.literals.BooleanLiteral element = null; + + int parse_org_emftext_language_java_literals_BooleanLiteral_StartIndex = input.index(); + + Token a0=null; + + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 155) ) { return element; } + + // Java.g:36746:2: ( (a0= BOOLEAN_LITERAL ) ) + // Java.g:36747:2: (a0= BOOLEAN_LITERAL ) + { + // Java.g:36747:2: (a0= BOOLEAN_LITERAL ) + // Java.g:36748:3: a0= BOOLEAN_LITERAL + { + a0=(Token)match(input,BOOLEAN_LITERAL,FOLLOW_BOOLEAN_LITERAL_in_parse_org_emftext_language_java_literals_BooleanLiteral22373); if (state.failed) return element; + + if ( state.backtracking==0 ) { + if (terminateParsing) { + throw new org.emftext.language.java.resource.java.mopp.JavaTerminateParsingException(); + } + if (element == null) { + element = org.emftext.language.java.literals.LiteralsFactory.eINSTANCE.createBooleanLiteral(); + startIncompleteElement(element); + } + if (a0 != null) { + org.emftext.language.java.resource.java.IJavaTokenResolver tokenResolver = tokenResolverFactory.createTokenResolver("BOOLEAN_LITERAL"); + tokenResolver.setOptions(getOptions()); + org.emftext.language.java.resource.java.IJavaTokenResolveResult result = getFreshTokenResolveResult(); + tokenResolver.resolve(a0.getText(), element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.BOOLEAN_LITERAL__VALUE), result); + Object resolvedObject = result.getResolvedToken(); + if (resolvedObject == null) { + addErrorToResource(result.getErrorMessage(), ((org.antlr.runtime3_4_0.CommonToken) a0).getLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getCharPositionInLine(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStartIndex(), ((org.antlr.runtime3_4_0.CommonToken) a0).getStopIndex()); + } + java.lang.Boolean resolved = (java.lang.Boolean) resolvedObject; + if (resolved != null) { + Object value = resolved; + element.eSet(element.eClass().getEStructuralFeature(org.emftext.language.java.literals.LiteralsPackage.BOOLEAN_LITERAL__VALUE), value); + completedElement(value, false); + } + collectHiddenTokens(element); + retrieveLayoutInformation(element, org.emftext.language.java.resource.java.grammar.JavaGrammarInformationProvider.JAVA_153_0_0_0, resolved, true); + copyLocalizationInfos((org.antlr.runtime3_4_0.CommonToken) a0, element); + } + } + + } + + + if ( state.backtracking==0 ) { + // expected elements (follow set) + addExpectedElement(20917); + addExpectedElement(20918); + addExpectedElement(20919); + addExpectedElement(20920); + addExpectedElement(20921); + addExpectedElement(20922); + addExpectedElement(20923); + addExpectedElement(20924); + addExpectedElement(20925); + addExpectedElement(20926); + addExpectedElement(20927); + addExpectedElement(20928); + addExpectedElement(20929); + addExpectedElement(20930); + addExpectedElement(20931); + addExpectedElement(20932); + addExpectedElement(20933); + addExpectedElement(20934); + addExpectedElement(20935); + addExpectedElement(20936); + addExpectedElement(20937); + addExpectedElement(20938); + addExpectedElement(20939); + addExpectedElement(20940); + addExpectedElement(20941); + addExpectedElement(20942); + addExpectedElement(20943); + addExpectedElement(20944); + addExpectedElement(20945); + addExpectedElement(20946); + addExpectedElement(20947); + addExpectedElement(20948); + addExpectedElement(20949); + addExpectedElement(20950); + addExpectedElement(20951); + addExpectedElement(20952); + addExpectedElement(20953); + addExpectedElement(20954); + addExpectedElement(20955); + addExpectedElement(20956); + addExpectedElement(20957); + addExpectedElement(20958); + addExpectedElement(20959); + addExpectedElement(20960); + addExpectedElement(20961); + addExpectedElement(20962); + addExpectedElement(20963); + addExpectedElement(20964); + addExpectedElement(20965); + addExpectedElement(20966); + addExpectedElement(20967); + addExpectedElement(20968); + addExpectedElement(20969); + addExpectedElement(20970); + addExpectedElement(20971); + addExpectedElement(20972); + addExpectedElement(20973); + addExpectedElement(20974); + addExpectedElement(20975); + addExpectedElement(20976); + addExpectedElement(20977); + addExpectedElement(20978); + addExpectedElement(20979); + addExpectedElement(20980); + addExpectedElement(20981); + addExpectedElement(20982); + addExpectedElement(20983); + addExpectedElement(20984); + addExpectedElement(20985); + addExpectedElement(20986); + addExpectedElement(20987); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 155, parse_org_emftext_language_java_literals_BooleanLiteral_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_BooleanLiteral" + + + + // $ANTLR start "parse_org_emftext_language_java_imports_Import" + // Java.g:36855:1: parse_org_emftext_language_java_imports_Import returns [org.emftext.language.java.imports.Import element = null] : (c0= parse_org_emftext_language_java_imports_ClassifierImport |c1= parse_org_emftext_language_java_imports_PackageImport |c2= parse_org_emftext_language_java_imports_StaticMemberImport |c3= parse_org_emftext_language_java_imports_StaticClassifierImport ); + public final org.emftext.language.java.imports.Import parse_org_emftext_language_java_imports_Import() throws RecognitionException { + org.emftext.language.java.imports.Import element = null; + + int parse_org_emftext_language_java_imports_Import_StartIndex = input.index(); + + org.emftext.language.java.imports.ClassifierImport c0 =null; + + org.emftext.language.java.imports.PackageImport c1 =null; + + org.emftext.language.java.imports.StaticMemberImport c2 =null; + + org.emftext.language.java.imports.StaticClassifierImport c3 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 156) ) { return element; } + + // Java.g:36856:2: (c0= parse_org_emftext_language_java_imports_ClassifierImport |c1= parse_org_emftext_language_java_imports_PackageImport |c2= parse_org_emftext_language_java_imports_StaticMemberImport |c3= parse_org_emftext_language_java_imports_StaticClassifierImport ) + int alt214=4; + alt214 = dfa214.predict(input); + switch (alt214) { + case 1 : + // Java.g:36857:2: c0= parse_org_emftext_language_java_imports_ClassifierImport + { + pushFollow(FOLLOW_parse_org_emftext_language_java_imports_ClassifierImport_in_parse_org_emftext_language_java_imports_Import22405); + c0=parse_org_emftext_language_java_imports_ClassifierImport(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:36858:4: c1= parse_org_emftext_language_java_imports_PackageImport + { + pushFollow(FOLLOW_parse_org_emftext_language_java_imports_PackageImport_in_parse_org_emftext_language_java_imports_Import22415); + c1=parse_org_emftext_language_java_imports_PackageImport(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:36859:4: c2= parse_org_emftext_language_java_imports_StaticMemberImport + { + pushFollow(FOLLOW_parse_org_emftext_language_java_imports_StaticMemberImport_in_parse_org_emftext_language_java_imports_Import22425); + c2=parse_org_emftext_language_java_imports_StaticMemberImport(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + case 4 : + // Java.g:36860:4: c3= parse_org_emftext_language_java_imports_StaticClassifierImport + { + pushFollow(FOLLOW_parse_org_emftext_language_java_imports_StaticClassifierImport_in_parse_org_emftext_language_java_imports_Import22435); + c3=parse_org_emftext_language_java_imports_StaticClassifierImport(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c3; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 156, parse_org_emftext_language_java_imports_Import_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_imports_Import" + + + + // $ANTLR start "parse_org_emftext_language_java_classifiers_ConcreteClassifier" + // Java.g:36864:1: parse_org_emftext_language_java_classifiers_ConcreteClassifier returns [org.emftext.language.java.classifiers.ConcreteClassifier element = null] : (c0= parse_org_emftext_language_java_classifiers_Class |c1= parse_org_emftext_language_java_classifiers_Interface |c2= parse_org_emftext_language_java_classifiers_Enumeration |c3= parse_org_emftext_language_java_classifiers_Annotation ); + public final org.emftext.language.java.classifiers.ConcreteClassifier parse_org_emftext_language_java_classifiers_ConcreteClassifier() throws RecognitionException { + org.emftext.language.java.classifiers.ConcreteClassifier element = null; + + int parse_org_emftext_language_java_classifiers_ConcreteClassifier_StartIndex = input.index(); + + org.emftext.language.java.classifiers.Class c0 =null; + + org.emftext.language.java.classifiers.Interface c1 =null; + + org.emftext.language.java.classifiers.Enumeration c2 =null; + + org.emftext.language.java.classifiers.Annotation c3 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 157) ) { return element; } + + // Java.g:36865:2: (c0= parse_org_emftext_language_java_classifiers_Class |c1= parse_org_emftext_language_java_classifiers_Interface |c2= parse_org_emftext_language_java_classifiers_Enumeration |c3= parse_org_emftext_language_java_classifiers_Annotation ) + int alt215=4; + switch ( input.LA(1) ) { + case 48: + { + int LA215_1 = input.LA(2); + + if ( (synpred218_Java()) ) { + alt215=1; + } + else if ( (synpred219_Java()) ) { + alt215=2; + } + else if ( (synpred220_Java()) ) { + alt215=3; + } + else if ( (true) ) { + alt215=4; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 215, 1, input); + + throw nvae; + + } + } + break; + case 89: + { + int LA215_2 = input.LA(2); + + if ( (synpred218_Java()) ) { + alt215=1; + } + else if ( (synpred219_Java()) ) { + alt215=2; + } + else if ( (synpred220_Java()) ) { + alt215=3; + } + else if ( (true) ) { + alt215=4; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 215, 2, input); + + throw nvae; + + } + } + break; + case 56: + { + int LA215_3 = input.LA(2); + + if ( (synpred218_Java()) ) { + alt215=1; + } + else if ( (synpred219_Java()) ) { + alt215=2; + } + else if ( (synpred220_Java()) ) { + alt215=3; + } + else if ( (true) ) { + alt215=4; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 215, 3, input); + + throw nvae; + + } + } + break; + case 88: + { + int LA215_4 = input.LA(2); + + if ( (synpred218_Java()) ) { + alt215=1; + } + else if ( (synpred219_Java()) ) { + alt215=2; + } + else if ( (synpred220_Java()) ) { + alt215=3; + } + else if ( (true) ) { + alt215=4; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 215, 4, input); + + throw nvae; + + } + } + break; + case 87: + { + int LA215_5 = input.LA(2); + + if ( (synpred218_Java()) ) { + alt215=1; + } + else if ( (synpred219_Java()) ) { + alt215=2; + } + else if ( (synpred220_Java()) ) { + alt215=3; + } + else if ( (true) ) { + alt215=4; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 215, 5, input); + + throw nvae; + + } + } + break; + case 72: + { + int LA215_6 = input.LA(2); + + if ( (synpred218_Java()) ) { + alt215=1; + } + else if ( (synpred219_Java()) ) { + alt215=2; + } + else if ( (synpred220_Java()) ) { + alt215=3; + } + else if ( (true) ) { + alt215=4; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 215, 6, input); + + throw nvae; + + } + } + break; + case 92: + { + int LA215_7 = input.LA(2); + + if ( (synpred218_Java()) ) { + alt215=1; + } + else if ( (synpred219_Java()) ) { + alt215=2; + } + else if ( (synpred220_Java()) ) { + alt215=3; + } + else if ( (true) ) { + alt215=4; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 215, 7, input); + + throw nvae; + + } + } + break; + case 83: + { + int LA215_8 = input.LA(2); + + if ( (synpred218_Java()) ) { + alt215=1; + } + else if ( (synpred219_Java()) ) { + alt215=2; + } + else if ( (synpred220_Java()) ) { + alt215=3; + } + else if ( (true) ) { + alt215=4; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 215, 8, input); + + throw nvae; + + } + } + break; + case 96: + { + int LA215_9 = input.LA(2); + + if ( (synpred218_Java()) ) { + alt215=1; + } + else if ( (synpred219_Java()) ) { + alt215=2; + } + else if ( (synpred220_Java()) ) { + alt215=3; + } + else if ( (true) ) { + alt215=4; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 215, 9, input); + + throw nvae; + + } + } + break; + case 100: + { + int LA215_10 = input.LA(2); + + if ( (synpred218_Java()) ) { + alt215=1; + } + else if ( (synpred219_Java()) ) { + alt215=2; + } + else if ( (synpred220_Java()) ) { + alt215=3; + } + else if ( (true) ) { + alt215=4; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 215, 10, input); + + throw nvae; + + } + } + break; + case 103: + { + int LA215_11 = input.LA(2); + + if ( (synpred218_Java()) ) { + alt215=1; + } + else if ( (synpred219_Java()) ) { + alt215=2; + } + else if ( (synpred220_Java()) ) { + alt215=3; + } + else if ( (true) ) { + alt215=4; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 215, 11, input); + + throw nvae; + + } + } + break; + case 93: + { + int LA215_12 = input.LA(2); + + if ( (synpred218_Java()) ) { + alt215=1; + } + else if ( (synpred219_Java()) ) { + alt215=2; + } + else if ( (synpred220_Java()) ) { + alt215=3; + } + else if ( (true) ) { + alt215=4; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 215, 12, input); + + throw nvae; + + } + } + break; + case 64: + { + alt215=1; + } + break; + case 81: + { + alt215=2; + } + break; + case 70: + { + alt215=3; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 215, 0, input); + + throw nvae; + + } + + switch (alt215) { + case 1 : + // Java.g:36866:2: c0= parse_org_emftext_language_java_classifiers_Class + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Class_in_parse_org_emftext_language_java_classifiers_ConcreteClassifier22456); + c0=parse_org_emftext_language_java_classifiers_Class(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:36867:4: c1= parse_org_emftext_language_java_classifiers_Interface + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Interface_in_parse_org_emftext_language_java_classifiers_ConcreteClassifier22466); + c1=parse_org_emftext_language_java_classifiers_Interface(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:36868:4: c2= parse_org_emftext_language_java_classifiers_Enumeration + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Enumeration_in_parse_org_emftext_language_java_classifiers_ConcreteClassifier22476); + c2=parse_org_emftext_language_java_classifiers_Enumeration(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + case 4 : + // Java.g:36869:4: c3= parse_org_emftext_language_java_classifiers_Annotation + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Annotation_in_parse_org_emftext_language_java_classifiers_ConcreteClassifier22486); + c3=parse_org_emftext_language_java_classifiers_Annotation(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c3; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 157, parse_org_emftext_language_java_classifiers_ConcreteClassifier_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_classifiers_ConcreteClassifier" + + + + // $ANTLR start "parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier" + // Java.g:36873:1: parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier returns [org.emftext.language.java.modifiers.AnnotationInstanceOrModifier element = null] : (c0= parse_org_emftext_language_java_annotations_AnnotationInstance |c1= parse_org_emftext_language_java_modifiers_Public |c2= parse_org_emftext_language_java_modifiers_Abstract |c3= parse_org_emftext_language_java_modifiers_Protected |c4= parse_org_emftext_language_java_modifiers_Private |c5= parse_org_emftext_language_java_modifiers_Final |c6= parse_org_emftext_language_java_modifiers_Static |c7= parse_org_emftext_language_java_modifiers_Native |c8= parse_org_emftext_language_java_modifiers_Synchronized |c9= parse_org_emftext_language_java_modifiers_Transient |c10= parse_org_emftext_language_java_modifiers_Volatile |c11= parse_org_emftext_language_java_modifiers_Strictfp ); + public final org.emftext.language.java.modifiers.AnnotationInstanceOrModifier parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier() throws RecognitionException { + org.emftext.language.java.modifiers.AnnotationInstanceOrModifier element = null; + + int parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_StartIndex = input.index(); + + org.emftext.language.java.annotations.AnnotationInstance c0 =null; + + org.emftext.language.java.modifiers.Public c1 =null; + + org.emftext.language.java.modifiers.Abstract c2 =null; + + org.emftext.language.java.modifiers.Protected c3 =null; + + org.emftext.language.java.modifiers.Private c4 =null; + + org.emftext.language.java.modifiers.Final c5 =null; + + org.emftext.language.java.modifiers.Static c6 =null; + + org.emftext.language.java.modifiers.Native c7 =null; + + org.emftext.language.java.modifiers.Synchronized c8 =null; + + org.emftext.language.java.modifiers.Transient c9 =null; + + org.emftext.language.java.modifiers.Volatile c10 =null; + + org.emftext.language.java.modifiers.Strictfp c11 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 158) ) { return element; } + + // Java.g:36874:2: (c0= parse_org_emftext_language_java_annotations_AnnotationInstance |c1= parse_org_emftext_language_java_modifiers_Public |c2= parse_org_emftext_language_java_modifiers_Abstract |c3= parse_org_emftext_language_java_modifiers_Protected |c4= parse_org_emftext_language_java_modifiers_Private |c5= parse_org_emftext_language_java_modifiers_Final |c6= parse_org_emftext_language_java_modifiers_Static |c7= parse_org_emftext_language_java_modifiers_Native |c8= parse_org_emftext_language_java_modifiers_Synchronized |c9= parse_org_emftext_language_java_modifiers_Transient |c10= parse_org_emftext_language_java_modifiers_Volatile |c11= parse_org_emftext_language_java_modifiers_Strictfp ) + int alt216=12; + switch ( input.LA(1) ) { + case 48: + { + alt216=1; + } + break; + case 89: + { + alt216=2; + } + break; + case 56: + { + alt216=3; + } + break; + case 88: + { + alt216=4; + } + break; + case 87: + { + alt216=5; + } + break; + case 72: + { + alt216=6; + } + break; + case 92: + { + alt216=7; + } + break; + case 83: + { + alt216=8; + } + break; + case 96: + { + alt216=9; + } + break; + case 100: + { + alt216=10; + } + break; + case 103: + { + alt216=11; + } + break; + case 93: + { + alt216=12; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 216, 0, input); + + throw nvae; + + } + + switch (alt216) { + case 1 : + // Java.g:36875:2: c0= parse_org_emftext_language_java_annotations_AnnotationInstance + { + pushFollow(FOLLOW_parse_org_emftext_language_java_annotations_AnnotationInstance_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22507); + c0=parse_org_emftext_language_java_annotations_AnnotationInstance(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:36876:4: c1= parse_org_emftext_language_java_modifiers_Public + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Public_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22517); + c1=parse_org_emftext_language_java_modifiers_Public(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:36877:4: c2= parse_org_emftext_language_java_modifiers_Abstract + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Abstract_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22527); + c2=parse_org_emftext_language_java_modifiers_Abstract(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + case 4 : + // Java.g:36878:4: c3= parse_org_emftext_language_java_modifiers_Protected + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Protected_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22537); + c3=parse_org_emftext_language_java_modifiers_Protected(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c3; /* this is a subclass or primitive expression choice */ } + + } + break; + case 5 : + // Java.g:36879:4: c4= parse_org_emftext_language_java_modifiers_Private + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Private_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22547); + c4=parse_org_emftext_language_java_modifiers_Private(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c4; /* this is a subclass or primitive expression choice */ } + + } + break; + case 6 : + // Java.g:36880:4: c5= parse_org_emftext_language_java_modifiers_Final + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Final_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22557); + c5=parse_org_emftext_language_java_modifiers_Final(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c5; /* this is a subclass or primitive expression choice */ } + + } + break; + case 7 : + // Java.g:36881:4: c6= parse_org_emftext_language_java_modifiers_Static + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Static_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22567); + c6=parse_org_emftext_language_java_modifiers_Static(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c6; /* this is a subclass or primitive expression choice */ } + + } + break; + case 8 : + // Java.g:36882:4: c7= parse_org_emftext_language_java_modifiers_Native + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Native_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22577); + c7=parse_org_emftext_language_java_modifiers_Native(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c7; /* this is a subclass or primitive expression choice */ } + + } + break; + case 9 : + // Java.g:36883:4: c8= parse_org_emftext_language_java_modifiers_Synchronized + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Synchronized_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22587); + c8=parse_org_emftext_language_java_modifiers_Synchronized(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c8; /* this is a subclass or primitive expression choice */ } + + } + break; + case 10 : + // Java.g:36884:4: c9= parse_org_emftext_language_java_modifiers_Transient + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Transient_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22597); + c9=parse_org_emftext_language_java_modifiers_Transient(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c9; /* this is a subclass or primitive expression choice */ } + + } + break; + case 11 : + // Java.g:36885:4: c10= parse_org_emftext_language_java_modifiers_Volatile + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Volatile_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22607); + c10=parse_org_emftext_language_java_modifiers_Volatile(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c10; /* this is a subclass or primitive expression choice */ } + + } + break; + case 12 : + // Java.g:36886:4: c11= parse_org_emftext_language_java_modifiers_Strictfp + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Strictfp_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22617); + c11=parse_org_emftext_language_java_modifiers_Strictfp(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c11; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 158, parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier" + + + + // $ANTLR start "parse_org_emftext_language_java_types_TypeReference" + // Java.g:36890:1: parse_org_emftext_language_java_types_TypeReference returns [org.emftext.language.java.types.TypeReference element = null] : (c0= parse_org_emftext_language_java_types_NamespaceClassifierReference |c1= parse_org_emftext_language_java_types_ClassifierReference |c2= parse_org_emftext_language_java_types_Void |c3= parse_org_emftext_language_java_types_Boolean |c4= parse_org_emftext_language_java_types_Char |c5= parse_org_emftext_language_java_types_Byte |c6= parse_org_emftext_language_java_types_Short |c7= parse_org_emftext_language_java_types_Int |c8= parse_org_emftext_language_java_types_Long |c9= parse_org_emftext_language_java_types_Float |c10= parse_org_emftext_language_java_types_Double ); + public final org.emftext.language.java.types.TypeReference parse_org_emftext_language_java_types_TypeReference() throws RecognitionException { + org.emftext.language.java.types.TypeReference element = null; + + int parse_org_emftext_language_java_types_TypeReference_StartIndex = input.index(); + + org.emftext.language.java.types.NamespaceClassifierReference c0 =null; + + org.emftext.language.java.types.ClassifierReference c1 =null; + + org.emftext.language.java.types.Void c2 =null; + + org.emftext.language.java.types.Boolean c3 =null; + + org.emftext.language.java.types.Char c4 =null; + + org.emftext.language.java.types.Byte c5 =null; + + org.emftext.language.java.types.Short c6 =null; + + org.emftext.language.java.types.Int c7 =null; + + org.emftext.language.java.types.Long c8 =null; + + org.emftext.language.java.types.Float c9 =null; + + org.emftext.language.java.types.Double c10 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 159) ) { return element; } + + // Java.g:36891:2: (c0= parse_org_emftext_language_java_types_NamespaceClassifierReference |c1= parse_org_emftext_language_java_types_ClassifierReference |c2= parse_org_emftext_language_java_types_Void |c3= parse_org_emftext_language_java_types_Boolean |c4= parse_org_emftext_language_java_types_Char |c5= parse_org_emftext_language_java_types_Byte |c6= parse_org_emftext_language_java_types_Short |c7= parse_org_emftext_language_java_types_Int |c8= parse_org_emftext_language_java_types_Long |c9= parse_org_emftext_language_java_types_Float |c10= parse_org_emftext_language_java_types_Double ) + int alt217=11; + switch ( input.LA(1) ) { + case IDENTIFIER: + { + int LA217_1 = input.LA(2); + + if ( (synpred232_Java()) ) { + alt217=1; + } + else if ( (synpred233_Java()) ) { + alt217=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 217, 1, input); + + throw nvae; + + } + } + break; + case 102: + { + alt217=3; + } + break; + case 58: + { + alt217=4; + } + break; + case 63: + { + alt217=5; + } + break; + case 60: + { + alt217=6; + } + break; + case 91: + { + alt217=7; + } + break; + case 80: + { + alt217=8; + } + break; + case 82: + { + alt217=9; + } + break; + case 74: + { + alt217=10; + } + break; + case 68: + { + alt217=11; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 217, 0, input); + + throw nvae; + + } + + switch (alt217) { + case 1 : + // Java.g:36892:2: c0= parse_org_emftext_language_java_types_NamespaceClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_types_TypeReference22638); + c0=parse_org_emftext_language_java_types_NamespaceClassifierReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:36893:4: c1= parse_org_emftext_language_java_types_ClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_ClassifierReference_in_parse_org_emftext_language_java_types_TypeReference22648); + c1=parse_org_emftext_language_java_types_ClassifierReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:36894:4: c2= parse_org_emftext_language_java_types_Void + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Void_in_parse_org_emftext_language_java_types_TypeReference22658); + c2=parse_org_emftext_language_java_types_Void(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + case 4 : + // Java.g:36895:4: c3= parse_org_emftext_language_java_types_Boolean + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Boolean_in_parse_org_emftext_language_java_types_TypeReference22668); + c3=parse_org_emftext_language_java_types_Boolean(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c3; /* this is a subclass or primitive expression choice */ } + + } + break; + case 5 : + // Java.g:36896:4: c4= parse_org_emftext_language_java_types_Char + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Char_in_parse_org_emftext_language_java_types_TypeReference22678); + c4=parse_org_emftext_language_java_types_Char(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c4; /* this is a subclass or primitive expression choice */ } + + } + break; + case 6 : + // Java.g:36897:4: c5= parse_org_emftext_language_java_types_Byte + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Byte_in_parse_org_emftext_language_java_types_TypeReference22688); + c5=parse_org_emftext_language_java_types_Byte(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c5; /* this is a subclass or primitive expression choice */ } + + } + break; + case 7 : + // Java.g:36898:4: c6= parse_org_emftext_language_java_types_Short + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Short_in_parse_org_emftext_language_java_types_TypeReference22698); + c6=parse_org_emftext_language_java_types_Short(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c6; /* this is a subclass or primitive expression choice */ } + + } + break; + case 8 : + // Java.g:36899:4: c7= parse_org_emftext_language_java_types_Int + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Int_in_parse_org_emftext_language_java_types_TypeReference22708); + c7=parse_org_emftext_language_java_types_Int(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c7; /* this is a subclass or primitive expression choice */ } + + } + break; + case 9 : + // Java.g:36900:4: c8= parse_org_emftext_language_java_types_Long + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Long_in_parse_org_emftext_language_java_types_TypeReference22718); + c8=parse_org_emftext_language_java_types_Long(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c8; /* this is a subclass or primitive expression choice */ } + + } + break; + case 10 : + // Java.g:36901:4: c9= parse_org_emftext_language_java_types_Float + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Float_in_parse_org_emftext_language_java_types_TypeReference22728); + c9=parse_org_emftext_language_java_types_Float(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c9; /* this is a subclass or primitive expression choice */ } + + } + break; + case 11 : + // Java.g:36902:4: c10= parse_org_emftext_language_java_types_Double + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Double_in_parse_org_emftext_language_java_types_TypeReference22738); + c10=parse_org_emftext_language_java_types_Double(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c10; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 159, parse_org_emftext_language_java_types_TypeReference_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_types_TypeReference" + + + + // $ANTLR start "parse_org_emftext_language_java_members_Member" + // Java.g:36906:1: parse_org_emftext_language_java_members_Member returns [org.emftext.language.java.members.Member element = null] : (c0= parse_org_emftext_language_java_classifiers_Class |c1= parse_org_emftext_language_java_classifiers_Interface |c2= parse_org_emftext_language_java_classifiers_Enumeration |c3= parse_org_emftext_language_java_classifiers_Annotation |c4= parse_org_emftext_language_java_statements_Block |c5= parse_org_emftext_language_java_members_Constructor |c6= parse_org_emftext_language_java_members_InterfaceMethod |c7= parse_org_emftext_language_java_members_ClassMethod |c8= parse_org_emftext_language_java_annotations_AnnotationAttribute |c9= parse_org_emftext_language_java_members_Field |c10= parse_org_emftext_language_java_members_EmptyMember ); + public final org.emftext.language.java.members.Member parse_org_emftext_language_java_members_Member() throws RecognitionException { + org.emftext.language.java.members.Member element = null; + + int parse_org_emftext_language_java_members_Member_StartIndex = input.index(); + + org.emftext.language.java.classifiers.Class c0 =null; + + org.emftext.language.java.classifiers.Interface c1 =null; + + org.emftext.language.java.classifiers.Enumeration c2 =null; + + org.emftext.language.java.classifiers.Annotation c3 =null; + + org.emftext.language.java.statements.Block c4 =null; + + org.emftext.language.java.members.Constructor c5 =null; + + org.emftext.language.java.members.InterfaceMethod c6 =null; + + org.emftext.language.java.members.ClassMethod c7 =null; + + org.emftext.language.java.annotations.AnnotationAttribute c8 =null; + + org.emftext.language.java.members.Field c9 =null; + + org.emftext.language.java.members.EmptyMember c10 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 160) ) { return element; } + + // Java.g:36907:2: (c0= parse_org_emftext_language_java_classifiers_Class |c1= parse_org_emftext_language_java_classifiers_Interface |c2= parse_org_emftext_language_java_classifiers_Enumeration |c3= parse_org_emftext_language_java_classifiers_Annotation |c4= parse_org_emftext_language_java_statements_Block |c5= parse_org_emftext_language_java_members_Constructor |c6= parse_org_emftext_language_java_members_InterfaceMethod |c7= parse_org_emftext_language_java_members_ClassMethod |c8= parse_org_emftext_language_java_annotations_AnnotationAttribute |c9= parse_org_emftext_language_java_members_Field |c10= parse_org_emftext_language_java_members_EmptyMember ) + int alt218=11; + switch ( input.LA(1) ) { + case 48: + { + int LA218_1 = input.LA(2); + + if ( (synpred242_Java()) ) { + alt218=1; + } + else if ( (synpred243_Java()) ) { + alt218=2; + } + else if ( (synpred244_Java()) ) { + alt218=3; + } + else if ( (synpred245_Java()) ) { + alt218=4; + } + else if ( (synpred247_Java()) ) { + alt218=6; + } + else if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 1, input); + + throw nvae; + + } + } + break; + case 89: + { + int LA218_2 = input.LA(2); + + if ( (synpred242_Java()) ) { + alt218=1; + } + else if ( (synpred243_Java()) ) { + alt218=2; + } + else if ( (synpred244_Java()) ) { + alt218=3; + } + else if ( (synpred245_Java()) ) { + alt218=4; + } + else if ( (synpred246_Java()) ) { + alt218=5; + } + else if ( (synpred247_Java()) ) { + alt218=6; + } + else if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 2, input); + + throw nvae; + + } + } + break; + case 56: + { + int LA218_3 = input.LA(2); + + if ( (synpred242_Java()) ) { + alt218=1; + } + else if ( (synpred243_Java()) ) { + alt218=2; + } + else if ( (synpred244_Java()) ) { + alt218=3; + } + else if ( (synpred245_Java()) ) { + alt218=4; + } + else if ( (synpred246_Java()) ) { + alt218=5; + } + else if ( (synpred247_Java()) ) { + alt218=6; + } + else if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 3, input); + + throw nvae; + + } + } + break; + case 88: + { + int LA218_4 = input.LA(2); + + if ( (synpred242_Java()) ) { + alt218=1; + } + else if ( (synpred243_Java()) ) { + alt218=2; + } + else if ( (synpred244_Java()) ) { + alt218=3; + } + else if ( (synpred245_Java()) ) { + alt218=4; + } + else if ( (synpred246_Java()) ) { + alt218=5; + } + else if ( (synpred247_Java()) ) { + alt218=6; + } + else if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 4, input); + + throw nvae; + + } + } + break; + case 87: + { + int LA218_5 = input.LA(2); + + if ( (synpred242_Java()) ) { + alt218=1; + } + else if ( (synpred243_Java()) ) { + alt218=2; + } + else if ( (synpred244_Java()) ) { + alt218=3; + } + else if ( (synpred245_Java()) ) { + alt218=4; + } + else if ( (synpred246_Java()) ) { + alt218=5; + } + else if ( (synpred247_Java()) ) { + alt218=6; + } + else if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 5, input); + + throw nvae; + + } + } + break; + case 72: + { + int LA218_6 = input.LA(2); + + if ( (synpred242_Java()) ) { + alt218=1; + } + else if ( (synpred243_Java()) ) { + alt218=2; + } + else if ( (synpred244_Java()) ) { + alt218=3; + } + else if ( (synpred245_Java()) ) { + alt218=4; + } + else if ( (synpred246_Java()) ) { + alt218=5; + } + else if ( (synpred247_Java()) ) { + alt218=6; + } + else if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 6, input); + + throw nvae; + + } + } + break; + case 92: + { + int LA218_7 = input.LA(2); + + if ( (synpred242_Java()) ) { + alt218=1; + } + else if ( (synpred243_Java()) ) { + alt218=2; + } + else if ( (synpred244_Java()) ) { + alt218=3; + } + else if ( (synpred245_Java()) ) { + alt218=4; + } + else if ( (synpred246_Java()) ) { + alt218=5; + } + else if ( (synpred247_Java()) ) { + alt218=6; + } + else if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 7, input); + + throw nvae; + + } + } + break; + case 83: + { + int LA218_8 = input.LA(2); + + if ( (synpred242_Java()) ) { + alt218=1; + } + else if ( (synpred243_Java()) ) { + alt218=2; + } + else if ( (synpred244_Java()) ) { + alt218=3; + } + else if ( (synpred245_Java()) ) { + alt218=4; + } + else if ( (synpred246_Java()) ) { + alt218=5; + } + else if ( (synpred247_Java()) ) { + alt218=6; + } + else if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 8, input); + + throw nvae; + + } + } + break; + case 96: + { + int LA218_9 = input.LA(2); + + if ( (synpred242_Java()) ) { + alt218=1; + } + else if ( (synpred243_Java()) ) { + alt218=2; + } + else if ( (synpred244_Java()) ) { + alt218=3; + } + else if ( (synpred245_Java()) ) { + alt218=4; + } + else if ( (synpred246_Java()) ) { + alt218=5; + } + else if ( (synpred247_Java()) ) { + alt218=6; + } + else if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 9, input); + + throw nvae; + + } + } + break; + case 100: + { + int LA218_10 = input.LA(2); + + if ( (synpred242_Java()) ) { + alt218=1; + } + else if ( (synpred243_Java()) ) { + alt218=2; + } + else if ( (synpred244_Java()) ) { + alt218=3; + } + else if ( (synpred245_Java()) ) { + alt218=4; + } + else if ( (synpred246_Java()) ) { + alt218=5; + } + else if ( (synpred247_Java()) ) { + alt218=6; + } + else if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 10, input); + + throw nvae; + + } + } + break; + case 103: + { + int LA218_11 = input.LA(2); + + if ( (synpred242_Java()) ) { + alt218=1; + } + else if ( (synpred243_Java()) ) { + alt218=2; + } + else if ( (synpred244_Java()) ) { + alt218=3; + } + else if ( (synpred245_Java()) ) { + alt218=4; + } + else if ( (synpred246_Java()) ) { + alt218=5; + } + else if ( (synpred247_Java()) ) { + alt218=6; + } + else if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 11, input); + + throw nvae; + + } + } + break; + case 93: + { + int LA218_12 = input.LA(2); + + if ( (synpred242_Java()) ) { + alt218=1; + } + else if ( (synpred243_Java()) ) { + alt218=2; + } + else if ( (synpred244_Java()) ) { + alt218=3; + } + else if ( (synpred245_Java()) ) { + alt218=4; + } + else if ( (synpred246_Java()) ) { + alt218=5; + } + else if ( (synpred247_Java()) ) { + alt218=6; + } + else if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 12, input); + + throw nvae; + + } + } + break; + case 64: + { + alt218=1; + } + break; + case 81: + { + alt218=2; + } + break; + case 70: + { + alt218=3; + } + break; + case 105: + { + alt218=5; + } + break; + case 43: + { + int LA218_17 = input.LA(2); + + if ( (synpred247_Java()) ) { + alt218=6; + } + else if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 17, input); + + throw nvae; + + } + } + break; + case IDENTIFIER: + { + int LA218_18 = input.LA(2); + + if ( (synpred247_Java()) ) { + alt218=6; + } + else if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 18, input); + + throw nvae; + + } + } + break; + case 102: + { + int LA218_19 = input.LA(2); + + if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 19, input); + + throw nvae; + + } + } + break; + case 58: + { + int LA218_20 = input.LA(2); + + if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 20, input); + + throw nvae; + + } + } + break; + case 63: + { + int LA218_21 = input.LA(2); + + if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 21, input); + + throw nvae; + + } + } + break; + case 60: + { + int LA218_22 = input.LA(2); + + if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 22, input); + + throw nvae; + + } + } + break; + case 91: + { + int LA218_23 = input.LA(2); + + if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 23, input); + + throw nvae; + + } + } + break; + case 80: + { + int LA218_24 = input.LA(2); + + if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 24, input); + + throw nvae; + + } + } + break; + case 82: + { + int LA218_25 = input.LA(2); + + if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 25, input); + + throw nvae; + + } + } + break; + case 74: + { + int LA218_26 = input.LA(2); + + if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 26, input); + + throw nvae; + + } + } + break; + case 68: + { + int LA218_27 = input.LA(2); + + if ( (synpred248_Java()) ) { + alt218=7; + } + else if ( (synpred249_Java()) ) { + alt218=8; + } + else if ( (synpred250_Java()) ) { + alt218=9; + } + else if ( (synpred251_Java()) ) { + alt218=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 27, input); + + throw nvae; + + } + } + break; + case 42: + { + alt218=11; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 218, 0, input); + + throw nvae; + + } + + switch (alt218) { + case 1 : + // Java.g:36908:2: c0= parse_org_emftext_language_java_classifiers_Class + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Class_in_parse_org_emftext_language_java_members_Member22759); + c0=parse_org_emftext_language_java_classifiers_Class(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:36909:4: c1= parse_org_emftext_language_java_classifiers_Interface + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Interface_in_parse_org_emftext_language_java_members_Member22769); + c1=parse_org_emftext_language_java_classifiers_Interface(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:36910:4: c2= parse_org_emftext_language_java_classifiers_Enumeration + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Enumeration_in_parse_org_emftext_language_java_members_Member22779); + c2=parse_org_emftext_language_java_classifiers_Enumeration(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + case 4 : + // Java.g:36911:4: c3= parse_org_emftext_language_java_classifiers_Annotation + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Annotation_in_parse_org_emftext_language_java_members_Member22789); + c3=parse_org_emftext_language_java_classifiers_Annotation(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c3; /* this is a subclass or primitive expression choice */ } + + } + break; + case 5 : + // Java.g:36912:4: c4= parse_org_emftext_language_java_statements_Block + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Block_in_parse_org_emftext_language_java_members_Member22799); + c4=parse_org_emftext_language_java_statements_Block(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c4; /* this is a subclass or primitive expression choice */ } + + } + break; + case 6 : + // Java.g:36913:4: c5= parse_org_emftext_language_java_members_Constructor + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_Constructor_in_parse_org_emftext_language_java_members_Member22809); + c5=parse_org_emftext_language_java_members_Constructor(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c5; /* this is a subclass or primitive expression choice */ } + + } + break; + case 7 : + // Java.g:36914:4: c6= parse_org_emftext_language_java_members_InterfaceMethod + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_InterfaceMethod_in_parse_org_emftext_language_java_members_Member22819); + c6=parse_org_emftext_language_java_members_InterfaceMethod(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c6; /* this is a subclass or primitive expression choice */ } + + } + break; + case 8 : + // Java.g:36915:4: c7= parse_org_emftext_language_java_members_ClassMethod + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_ClassMethod_in_parse_org_emftext_language_java_members_Member22829); + c7=parse_org_emftext_language_java_members_ClassMethod(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c7; /* this is a subclass or primitive expression choice */ } + + } + break; + case 9 : + // Java.g:36916:4: c8= parse_org_emftext_language_java_annotations_AnnotationAttribute + { + pushFollow(FOLLOW_parse_org_emftext_language_java_annotations_AnnotationAttribute_in_parse_org_emftext_language_java_members_Member22839); + c8=parse_org_emftext_language_java_annotations_AnnotationAttribute(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c8; /* this is a subclass or primitive expression choice */ } + + } + break; + case 10 : + // Java.g:36917:4: c9= parse_org_emftext_language_java_members_Field + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_Field_in_parse_org_emftext_language_java_members_Member22849); + c9=parse_org_emftext_language_java_members_Field(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c9; /* this is a subclass or primitive expression choice */ } + + } + break; + case 11 : + // Java.g:36918:4: c10= parse_org_emftext_language_java_members_EmptyMember + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_EmptyMember_in_parse_org_emftext_language_java_members_Member22859); + c10=parse_org_emftext_language_java_members_EmptyMember(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c10; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 160, parse_org_emftext_language_java_members_Member_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_members_Member" + + + + // $ANTLR start "parse_org_emftext_language_java_annotations_AnnotationParameter" + // Java.g:36922:1: parse_org_emftext_language_java_annotations_AnnotationParameter returns [org.emftext.language.java.annotations.AnnotationParameter element = null] : (c0= parse_org_emftext_language_java_annotations_SingleAnnotationParameter |c1= parse_org_emftext_language_java_annotations_AnnotationParameterList ); + public final org.emftext.language.java.annotations.AnnotationParameter parse_org_emftext_language_java_annotations_AnnotationParameter() throws RecognitionException { + org.emftext.language.java.annotations.AnnotationParameter element = null; + + int parse_org_emftext_language_java_annotations_AnnotationParameter_StartIndex = input.index(); + + org.emftext.language.java.annotations.SingleAnnotationParameter c0 =null; + + org.emftext.language.java.annotations.AnnotationParameterList c1 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 161) ) { return element; } + + // Java.g:36923:2: (c0= parse_org_emftext_language_java_annotations_SingleAnnotationParameter |c1= parse_org_emftext_language_java_annotations_AnnotationParameterList ) + int alt219=2; + int LA219_0 = input.LA(1); + + if ( (LA219_0==26) ) { + switch ( input.LA(2) ) { + case BOOLEAN_LITERAL: + case CHARACTER_LITERAL: + case DECIMAL_DOUBLE_LITERAL: + case DECIMAL_FLOAT_LITERAL: + case DECIMAL_INTEGER_LITERAL: + case DECIMAL_LONG_LITERAL: + case HEX_DOUBLE_LITERAL: + case HEX_FLOAT_LITERAL: + case HEX_INTEGER_LITERAL: + case HEX_LONG_LITERAL: + case OCTAL_INTEGER_LITERAL: + case OCTAL_LONG_LITERAL: + case STRING_LITERAL: + case 21: + case 26: + case 30: + case 31: + case 34: + case 35: + case 43: + case 48: + case 58: + case 60: + case 63: + case 64: + case 68: + case 74: + case 80: + case 82: + case 84: + case 85: + case 91: + case 94: + case 97: + case 102: + case 105: + case 110: + { + alt219=1; + } + break; + case IDENTIFIER: + { + int LA219_3 = input.LA(3); + + if ( ((LA219_3 >= 22 && LA219_3 <= 24)||(LA219_3 >= 26 && LA219_3 <= 28)||(LA219_3 >= 30 && LA219_3 <= 31)||(LA219_3 >= 34 && LA219_3 <= 35)||LA219_3==37||LA219_3==39||LA219_3==43||(LA219_3 >= 45 && LA219_3 <= 47)||LA219_3==49||LA219_3==51||LA219_3==54||LA219_3==79||LA219_3==106||LA219_3==108) ) { + alt219=1; + } + else if ( (LA219_3==44) ) { + alt219=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 219, 3, input); + + throw nvae; + + } + } + break; + case 27: + { + alt219=2; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 219, 1, input); + + throw nvae; + + } + + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 219, 0, input); + + throw nvae; + + } + switch (alt219) { + case 1 : + // Java.g:36924:2: c0= parse_org_emftext_language_java_annotations_SingleAnnotationParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_annotations_SingleAnnotationParameter_in_parse_org_emftext_language_java_annotations_AnnotationParameter22880); + c0=parse_org_emftext_language_java_annotations_SingleAnnotationParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:36925:4: c1= parse_org_emftext_language_java_annotations_AnnotationParameterList + { + pushFollow(FOLLOW_parse_org_emftext_language_java_annotations_AnnotationParameterList_in_parse_org_emftext_language_java_annotations_AnnotationParameter22890); + c1=parse_org_emftext_language_java_annotations_AnnotationParameterList(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 161, parse_org_emftext_language_java_annotations_AnnotationParameter_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_annotations_AnnotationParameter" + + + + // $ANTLR start "parse_org_emftext_language_java_modifiers_Modifier" + // Java.g:36929:1: parse_org_emftext_language_java_modifiers_Modifier returns [org.emftext.language.java.modifiers.Modifier element = null] : (c0= parse_org_emftext_language_java_modifiers_Public |c1= parse_org_emftext_language_java_modifiers_Abstract |c2= parse_org_emftext_language_java_modifiers_Protected |c3= parse_org_emftext_language_java_modifiers_Private |c4= parse_org_emftext_language_java_modifiers_Final |c5= parse_org_emftext_language_java_modifiers_Static |c6= parse_org_emftext_language_java_modifiers_Native |c7= parse_org_emftext_language_java_modifiers_Synchronized |c8= parse_org_emftext_language_java_modifiers_Transient |c9= parse_org_emftext_language_java_modifiers_Volatile |c10= parse_org_emftext_language_java_modifiers_Strictfp ); + public final org.emftext.language.java.modifiers.Modifier parse_org_emftext_language_java_modifiers_Modifier() throws RecognitionException { + org.emftext.language.java.modifiers.Modifier element = null; + + int parse_org_emftext_language_java_modifiers_Modifier_StartIndex = input.index(); + + org.emftext.language.java.modifiers.Public c0 =null; + + org.emftext.language.java.modifiers.Abstract c1 =null; + + org.emftext.language.java.modifiers.Protected c2 =null; + + org.emftext.language.java.modifiers.Private c3 =null; + + org.emftext.language.java.modifiers.Final c4 =null; + + org.emftext.language.java.modifiers.Static c5 =null; + + org.emftext.language.java.modifiers.Native c6 =null; + + org.emftext.language.java.modifiers.Synchronized c7 =null; + + org.emftext.language.java.modifiers.Transient c8 =null; + + org.emftext.language.java.modifiers.Volatile c9 =null; + + org.emftext.language.java.modifiers.Strictfp c10 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 162) ) { return element; } + + // Java.g:36930:2: (c0= parse_org_emftext_language_java_modifiers_Public |c1= parse_org_emftext_language_java_modifiers_Abstract |c2= parse_org_emftext_language_java_modifiers_Protected |c3= parse_org_emftext_language_java_modifiers_Private |c4= parse_org_emftext_language_java_modifiers_Final |c5= parse_org_emftext_language_java_modifiers_Static |c6= parse_org_emftext_language_java_modifiers_Native |c7= parse_org_emftext_language_java_modifiers_Synchronized |c8= parse_org_emftext_language_java_modifiers_Transient |c9= parse_org_emftext_language_java_modifiers_Volatile |c10= parse_org_emftext_language_java_modifiers_Strictfp ) + int alt220=11; + switch ( input.LA(1) ) { + case 89: + { + alt220=1; + } + break; + case 56: + { + alt220=2; + } + break; + case 88: + { + alt220=3; + } + break; + case 87: + { + alt220=4; + } + break; + case 72: + { + alt220=5; + } + break; + case 92: + { + alt220=6; + } + break; + case 83: + { + alt220=7; + } + break; + case 96: + { + alt220=8; + } + break; + case 100: + { + alt220=9; + } + break; + case 103: + { + alt220=10; + } + break; + case 93: + { + alt220=11; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 220, 0, input); + + throw nvae; + + } + + switch (alt220) { + case 1 : + // Java.g:36931:2: c0= parse_org_emftext_language_java_modifiers_Public + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Public_in_parse_org_emftext_language_java_modifiers_Modifier22911); + c0=parse_org_emftext_language_java_modifiers_Public(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:36932:4: c1= parse_org_emftext_language_java_modifiers_Abstract + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Abstract_in_parse_org_emftext_language_java_modifiers_Modifier22921); + c1=parse_org_emftext_language_java_modifiers_Abstract(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:36933:4: c2= parse_org_emftext_language_java_modifiers_Protected + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Protected_in_parse_org_emftext_language_java_modifiers_Modifier22931); + c2=parse_org_emftext_language_java_modifiers_Protected(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + case 4 : + // Java.g:36934:4: c3= parse_org_emftext_language_java_modifiers_Private + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Private_in_parse_org_emftext_language_java_modifiers_Modifier22941); + c3=parse_org_emftext_language_java_modifiers_Private(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c3; /* this is a subclass or primitive expression choice */ } + + } + break; + case 5 : + // Java.g:36935:4: c4= parse_org_emftext_language_java_modifiers_Final + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Final_in_parse_org_emftext_language_java_modifiers_Modifier22951); + c4=parse_org_emftext_language_java_modifiers_Final(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c4; /* this is a subclass or primitive expression choice */ } + + } + break; + case 6 : + // Java.g:36936:4: c5= parse_org_emftext_language_java_modifiers_Static + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Static_in_parse_org_emftext_language_java_modifiers_Modifier22961); + c5=parse_org_emftext_language_java_modifiers_Static(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c5; /* this is a subclass or primitive expression choice */ } + + } + break; + case 7 : + // Java.g:36937:4: c6= parse_org_emftext_language_java_modifiers_Native + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Native_in_parse_org_emftext_language_java_modifiers_Modifier22971); + c6=parse_org_emftext_language_java_modifiers_Native(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c6; /* this is a subclass or primitive expression choice */ } + + } + break; + case 8 : + // Java.g:36938:4: c7= parse_org_emftext_language_java_modifiers_Synchronized + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Synchronized_in_parse_org_emftext_language_java_modifiers_Modifier22981); + c7=parse_org_emftext_language_java_modifiers_Synchronized(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c7; /* this is a subclass or primitive expression choice */ } + + } + break; + case 9 : + // Java.g:36939:4: c8= parse_org_emftext_language_java_modifiers_Transient + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Transient_in_parse_org_emftext_language_java_modifiers_Modifier22991); + c8=parse_org_emftext_language_java_modifiers_Transient(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c8; /* this is a subclass or primitive expression choice */ } + + } + break; + case 10 : + // Java.g:36940:4: c9= parse_org_emftext_language_java_modifiers_Volatile + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Volatile_in_parse_org_emftext_language_java_modifiers_Modifier23001); + c9=parse_org_emftext_language_java_modifiers_Volatile(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c9; /* this is a subclass or primitive expression choice */ } + + } + break; + case 11 : + // Java.g:36941:4: c10= parse_org_emftext_language_java_modifiers_Strictfp + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_Strictfp_in_parse_org_emftext_language_java_modifiers_Modifier23011); + c10=parse_org_emftext_language_java_modifiers_Strictfp(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c10; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 162, parse_org_emftext_language_java_modifiers_Modifier_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_modifiers_Modifier" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_Statement" + // Java.g:36945:1: parse_org_emftext_language_java_statements_Statement returns [org.emftext.language.java.statements.Statement element = null] : (c0= parse_org_emftext_language_java_classifiers_Class |c1= parse_org_emftext_language_java_classifiers_Interface |c2= parse_org_emftext_language_java_classifiers_Enumeration |c3= parse_org_emftext_language_java_classifiers_Annotation |c4= parse_org_emftext_language_java_statements_Block |c5= parse_org_emftext_language_java_statements_LocalVariableStatement |c6= parse_org_emftext_language_java_statements_Assert |c7= parse_org_emftext_language_java_statements_Condition |c8= parse_org_emftext_language_java_statements_ForLoop |c9= parse_org_emftext_language_java_statements_ForEachLoop |c10= parse_org_emftext_language_java_statements_WhileLoop |c11= parse_org_emftext_language_java_statements_DoWhileLoop |c12= parse_org_emftext_language_java_statements_EmptyStatement |c13= parse_org_emftext_language_java_statements_SynchronizedBlock |c14= parse_org_emftext_language_java_statements_TryBlock |c15= parse_org_emftext_language_java_statements_Switch |c16= parse_org_emftext_language_java_statements_Return |c17= parse_org_emftext_language_java_statements_Throw |c18= parse_org_emftext_language_java_statements_Break |c19= parse_org_emftext_language_java_statements_Continue |c20= parse_org_emftext_language_java_statements_JumpLabel |c21= parse_org_emftext_language_java_statements_ExpressionStatement ); + public final org.emftext.language.java.statements.Statement parse_org_emftext_language_java_statements_Statement() throws RecognitionException { + org.emftext.language.java.statements.Statement element = null; + + int parse_org_emftext_language_java_statements_Statement_StartIndex = input.index(); + + org.emftext.language.java.classifiers.Class c0 =null; + + org.emftext.language.java.classifiers.Interface c1 =null; + + org.emftext.language.java.classifiers.Enumeration c2 =null; + + org.emftext.language.java.classifiers.Annotation c3 =null; + + org.emftext.language.java.statements.Block c4 =null; + + org.emftext.language.java.statements.LocalVariableStatement c5 =null; + + org.emftext.language.java.statements.Assert c6 =null; + + org.emftext.language.java.statements.Condition c7 =null; + + org.emftext.language.java.statements.ForLoop c8 =null; + + org.emftext.language.java.statements.ForEachLoop c9 =null; + + org.emftext.language.java.statements.WhileLoop c10 =null; + + org.emftext.language.java.statements.DoWhileLoop c11 =null; + + org.emftext.language.java.statements.EmptyStatement c12 =null; + + org.emftext.language.java.statements.SynchronizedBlock c13 =null; + + org.emftext.language.java.statements.TryBlock c14 =null; + + org.emftext.language.java.statements.Switch c15 =null; + + org.emftext.language.java.statements.Return c16 =null; + + org.emftext.language.java.statements.Throw c17 =null; + + org.emftext.language.java.statements.Break c18 =null; + + org.emftext.language.java.statements.Continue c19 =null; + + org.emftext.language.java.statements.JumpLabel c20 =null; + + org.emftext.language.java.statements.ExpressionStatement c21 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 163) ) { return element; } + + // Java.g:36946:2: (c0= parse_org_emftext_language_java_classifiers_Class |c1= parse_org_emftext_language_java_classifiers_Interface |c2= parse_org_emftext_language_java_classifiers_Enumeration |c3= parse_org_emftext_language_java_classifiers_Annotation |c4= parse_org_emftext_language_java_statements_Block |c5= parse_org_emftext_language_java_statements_LocalVariableStatement |c6= parse_org_emftext_language_java_statements_Assert |c7= parse_org_emftext_language_java_statements_Condition |c8= parse_org_emftext_language_java_statements_ForLoop |c9= parse_org_emftext_language_java_statements_ForEachLoop |c10= parse_org_emftext_language_java_statements_WhileLoop |c11= parse_org_emftext_language_java_statements_DoWhileLoop |c12= parse_org_emftext_language_java_statements_EmptyStatement |c13= parse_org_emftext_language_java_statements_SynchronizedBlock |c14= parse_org_emftext_language_java_statements_TryBlock |c15= parse_org_emftext_language_java_statements_Switch |c16= parse_org_emftext_language_java_statements_Return |c17= parse_org_emftext_language_java_statements_Throw |c18= parse_org_emftext_language_java_statements_Break |c19= parse_org_emftext_language_java_statements_Continue |c20= parse_org_emftext_language_java_statements_JumpLabel |c21= parse_org_emftext_language_java_statements_ExpressionStatement ) + int alt221=22; + alt221 = dfa221.predict(input); + switch (alt221) { + case 1 : + // Java.g:36947:2: c0= parse_org_emftext_language_java_classifiers_Class + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Class_in_parse_org_emftext_language_java_statements_Statement23032); + c0=parse_org_emftext_language_java_classifiers_Class(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:36948:4: c1= parse_org_emftext_language_java_classifiers_Interface + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Interface_in_parse_org_emftext_language_java_statements_Statement23042); + c1=parse_org_emftext_language_java_classifiers_Interface(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:36949:4: c2= parse_org_emftext_language_java_classifiers_Enumeration + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Enumeration_in_parse_org_emftext_language_java_statements_Statement23052); + c2=parse_org_emftext_language_java_classifiers_Enumeration(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + case 4 : + // Java.g:36950:4: c3= parse_org_emftext_language_java_classifiers_Annotation + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Annotation_in_parse_org_emftext_language_java_statements_Statement23062); + c3=parse_org_emftext_language_java_classifiers_Annotation(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c3; /* this is a subclass or primitive expression choice */ } + + } + break; + case 5 : + // Java.g:36951:4: c4= parse_org_emftext_language_java_statements_Block + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Block_in_parse_org_emftext_language_java_statements_Statement23072); + c4=parse_org_emftext_language_java_statements_Block(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c4; /* this is a subclass or primitive expression choice */ } + + } + break; + case 6 : + // Java.g:36952:4: c5= parse_org_emftext_language_java_statements_LocalVariableStatement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_LocalVariableStatement_in_parse_org_emftext_language_java_statements_Statement23082); + c5=parse_org_emftext_language_java_statements_LocalVariableStatement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c5; /* this is a subclass or primitive expression choice */ } + + } + break; + case 7 : + // Java.g:36953:4: c6= parse_org_emftext_language_java_statements_Assert + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Assert_in_parse_org_emftext_language_java_statements_Statement23092); + c6=parse_org_emftext_language_java_statements_Assert(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c6; /* this is a subclass or primitive expression choice */ } + + } + break; + case 8 : + // Java.g:36954:4: c7= parse_org_emftext_language_java_statements_Condition + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Condition_in_parse_org_emftext_language_java_statements_Statement23102); + c7=parse_org_emftext_language_java_statements_Condition(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c7; /* this is a subclass or primitive expression choice */ } + + } + break; + case 9 : + // Java.g:36955:4: c8= parse_org_emftext_language_java_statements_ForLoop + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_ForLoop_in_parse_org_emftext_language_java_statements_Statement23112); + c8=parse_org_emftext_language_java_statements_ForLoop(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c8; /* this is a subclass or primitive expression choice */ } + + } + break; + case 10 : + // Java.g:36956:4: c9= parse_org_emftext_language_java_statements_ForEachLoop + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_ForEachLoop_in_parse_org_emftext_language_java_statements_Statement23122); + c9=parse_org_emftext_language_java_statements_ForEachLoop(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c9; /* this is a subclass or primitive expression choice */ } + + } + break; + case 11 : + // Java.g:36957:4: c10= parse_org_emftext_language_java_statements_WhileLoop + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_WhileLoop_in_parse_org_emftext_language_java_statements_Statement23132); + c10=parse_org_emftext_language_java_statements_WhileLoop(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c10; /* this is a subclass or primitive expression choice */ } + + } + break; + case 12 : + // Java.g:36958:4: c11= parse_org_emftext_language_java_statements_DoWhileLoop + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_DoWhileLoop_in_parse_org_emftext_language_java_statements_Statement23142); + c11=parse_org_emftext_language_java_statements_DoWhileLoop(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c11; /* this is a subclass or primitive expression choice */ } + + } + break; + case 13 : + // Java.g:36959:4: c12= parse_org_emftext_language_java_statements_EmptyStatement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_EmptyStatement_in_parse_org_emftext_language_java_statements_Statement23152); + c12=parse_org_emftext_language_java_statements_EmptyStatement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c12; /* this is a subclass or primitive expression choice */ } + + } + break; + case 14 : + // Java.g:36960:4: c13= parse_org_emftext_language_java_statements_SynchronizedBlock + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_SynchronizedBlock_in_parse_org_emftext_language_java_statements_Statement23162); + c13=parse_org_emftext_language_java_statements_SynchronizedBlock(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c13; /* this is a subclass or primitive expression choice */ } + + } + break; + case 15 : + // Java.g:36961:4: c14= parse_org_emftext_language_java_statements_TryBlock + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_TryBlock_in_parse_org_emftext_language_java_statements_Statement23172); + c14=parse_org_emftext_language_java_statements_TryBlock(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c14; /* this is a subclass or primitive expression choice */ } + + } + break; + case 16 : + // Java.g:36962:4: c15= parse_org_emftext_language_java_statements_Switch + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Switch_in_parse_org_emftext_language_java_statements_Statement23182); + c15=parse_org_emftext_language_java_statements_Switch(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c15; /* this is a subclass or primitive expression choice */ } + + } + break; + case 17 : + // Java.g:36963:4: c16= parse_org_emftext_language_java_statements_Return + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Return_in_parse_org_emftext_language_java_statements_Statement23192); + c16=parse_org_emftext_language_java_statements_Return(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c16; /* this is a subclass or primitive expression choice */ } + + } + break; + case 18 : + // Java.g:36964:4: c17= parse_org_emftext_language_java_statements_Throw + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Throw_in_parse_org_emftext_language_java_statements_Statement23202); + c17=parse_org_emftext_language_java_statements_Throw(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c17; /* this is a subclass or primitive expression choice */ } + + } + break; + case 19 : + // Java.g:36965:4: c18= parse_org_emftext_language_java_statements_Break + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Break_in_parse_org_emftext_language_java_statements_Statement23212); + c18=parse_org_emftext_language_java_statements_Break(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c18; /* this is a subclass or primitive expression choice */ } + + } + break; + case 20 : + // Java.g:36966:4: c19= parse_org_emftext_language_java_statements_Continue + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Continue_in_parse_org_emftext_language_java_statements_Statement23222); + c19=parse_org_emftext_language_java_statements_Continue(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c19; /* this is a subclass or primitive expression choice */ } + + } + break; + case 21 : + // Java.g:36967:4: c20= parse_org_emftext_language_java_statements_JumpLabel + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_JumpLabel_in_parse_org_emftext_language_java_statements_Statement23232); + c20=parse_org_emftext_language_java_statements_JumpLabel(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c20; /* this is a subclass or primitive expression choice */ } + + } + break; + case 22 : + // Java.g:36968:4: c21= parse_org_emftext_language_java_statements_ExpressionStatement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_ExpressionStatement_in_parse_org_emftext_language_java_statements_Statement23242); + c21=parse_org_emftext_language_java_statements_ExpressionStatement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c21; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 163, parse_org_emftext_language_java_statements_Statement_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_Statement" + + + + // $ANTLR start "parse_org_emftext_language_java_parameters_Parameter" + // Java.g:36972:1: parse_org_emftext_language_java_parameters_Parameter returns [org.emftext.language.java.parameters.Parameter element = null] : (c0= parse_org_emftext_language_java_parameters_OrdinaryParameter |c1= parse_org_emftext_language_java_parameters_VariableLengthParameter ); + public final org.emftext.language.java.parameters.Parameter parse_org_emftext_language_java_parameters_Parameter() throws RecognitionException { + org.emftext.language.java.parameters.Parameter element = null; + + int parse_org_emftext_language_java_parameters_Parameter_StartIndex = input.index(); + + org.emftext.language.java.parameters.OrdinaryParameter c0 =null; + + org.emftext.language.java.parameters.VariableLengthParameter c1 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 164) ) { return element; } + + // Java.g:36973:2: (c0= parse_org_emftext_language_java_parameters_OrdinaryParameter |c1= parse_org_emftext_language_java_parameters_VariableLengthParameter ) + int alt222=2; + switch ( input.LA(1) ) { + case 48: + { + int LA222_1 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 1, input); + + throw nvae; + + } + } + break; + case 89: + { + int LA222_2 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 2, input); + + throw nvae; + + } + } + break; + case 56: + { + int LA222_3 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 3, input); + + throw nvae; + + } + } + break; + case 88: + { + int LA222_4 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 4, input); + + throw nvae; + + } + } + break; + case 87: + { + int LA222_5 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 5, input); + + throw nvae; + + } + } + break; + case 72: + { + int LA222_6 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 6, input); + + throw nvae; + + } + } + break; + case 92: + { + int LA222_7 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 7, input); + + throw nvae; + + } + } + break; + case 83: + { + int LA222_8 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 8, input); + + throw nvae; + + } + } + break; + case 96: + { + int LA222_9 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 9, input); + + throw nvae; + + } + } + break; + case 100: + { + int LA222_10 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 10, input); + + throw nvae; + + } + } + break; + case 103: + { + int LA222_11 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 11, input); + + throw nvae; + + } + } + break; + case 93: + { + int LA222_12 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 12, input); + + throw nvae; + + } + } + break; + case IDENTIFIER: + { + int LA222_13 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 13, input); + + throw nvae; + + } + } + break; + case 102: + { + int LA222_14 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 14, input); + + throw nvae; + + } + } + break; + case 58: + { + int LA222_15 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 15, input); + + throw nvae; + + } + } + break; + case 63: + { + int LA222_16 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 16, input); + + throw nvae; + + } + } + break; + case 60: + { + int LA222_17 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 17, input); + + throw nvae; + + } + } + break; + case 91: + { + int LA222_18 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 18, input); + + throw nvae; + + } + } + break; + case 80: + { + int LA222_19 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 19, input); + + throw nvae; + + } + } + break; + case 82: + { + int LA222_20 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 20, input); + + throw nvae; + + } + } + break; + case 74: + { + int LA222_21 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 21, input); + + throw nvae; + + } + } + break; + case 68: + { + int LA222_22 = input.LA(2); + + if ( (synpred284_Java()) ) { + alt222=1; + } + else if ( (true) ) { + alt222=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 22, input); + + throw nvae; + + } + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 222, 0, input); + + throw nvae; + + } + + switch (alt222) { + case 1 : + // Java.g:36974:2: c0= parse_org_emftext_language_java_parameters_OrdinaryParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_OrdinaryParameter_in_parse_org_emftext_language_java_parameters_Parameter23263); + c0=parse_org_emftext_language_java_parameters_OrdinaryParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:36975:4: c1= parse_org_emftext_language_java_parameters_VariableLengthParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_VariableLengthParameter_in_parse_org_emftext_language_java_parameters_Parameter23273); + c1=parse_org_emftext_language_java_parameters_VariableLengthParameter(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 164, parse_org_emftext_language_java_parameters_Parameter_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_parameters_Parameter" + + + + // $ANTLR start "parse_org_emftext_language_java_generics_TypeArgument" + // Java.g:36979:1: parse_org_emftext_language_java_generics_TypeArgument returns [org.emftext.language.java.generics.TypeArgument element = null] : (c0= parse_org_emftext_language_java_generics_QualifiedTypeArgument |c1= parse_org_emftext_language_java_generics_UnknownTypeArgument |c2= parse_org_emftext_language_java_generics_ExtendsTypeArgument |c3= parse_org_emftext_language_java_generics_SuperTypeArgument ); + public final org.emftext.language.java.generics.TypeArgument parse_org_emftext_language_java_generics_TypeArgument() throws RecognitionException { + org.emftext.language.java.generics.TypeArgument element = null; + + int parse_org_emftext_language_java_generics_TypeArgument_StartIndex = input.index(); + + org.emftext.language.java.generics.QualifiedTypeArgument c0 =null; + + org.emftext.language.java.generics.UnknownTypeArgument c1 =null; + + org.emftext.language.java.generics.ExtendsTypeArgument c2 =null; + + org.emftext.language.java.generics.SuperTypeArgument c3 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 165) ) { return element; } + + // Java.g:36980:2: (c0= parse_org_emftext_language_java_generics_QualifiedTypeArgument |c1= parse_org_emftext_language_java_generics_UnknownTypeArgument |c2= parse_org_emftext_language_java_generics_ExtendsTypeArgument |c3= parse_org_emftext_language_java_generics_SuperTypeArgument ) + int alt223=4; + int LA223_0 = input.LA(1); + + if ( (LA223_0==IDENTIFIER||LA223_0==58||LA223_0==60||LA223_0==63||LA223_0==68||LA223_0==74||LA223_0==80||LA223_0==82||LA223_0==91||LA223_0==102) ) { + alt223=1; + } + else if ( (LA223_0==47) ) { + switch ( input.LA(2) ) { + case EOF: + case 33: + case 46: + { + alt223=2; + } + break; + case 71: + { + alt223=3; + } + break; + case 94: + { + alt223=4; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 223, 2, input); + + throw nvae; + + } + + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 223, 0, input); + + throw nvae; + + } + switch (alt223) { + case 1 : + // Java.g:36981:2: c0= parse_org_emftext_language_java_generics_QualifiedTypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_QualifiedTypeArgument_in_parse_org_emftext_language_java_generics_TypeArgument23294); + c0=parse_org_emftext_language_java_generics_QualifiedTypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:36982:4: c1= parse_org_emftext_language_java_generics_UnknownTypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_UnknownTypeArgument_in_parse_org_emftext_language_java_generics_TypeArgument23304); + c1=parse_org_emftext_language_java_generics_UnknownTypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:36983:4: c2= parse_org_emftext_language_java_generics_ExtendsTypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_ExtendsTypeArgument_in_parse_org_emftext_language_java_generics_TypeArgument23314); + c2=parse_org_emftext_language_java_generics_ExtendsTypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + case 4 : + // Java.g:36984:4: c3= parse_org_emftext_language_java_generics_SuperTypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_SuperTypeArgument_in_parse_org_emftext_language_java_generics_TypeArgument23324); + c3=parse_org_emftext_language_java_generics_SuperTypeArgument(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c3; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 165, parse_org_emftext_language_java_generics_TypeArgument_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_generics_TypeArgument" + + + + // $ANTLR start "parse_org_emftext_language_java_references_Reference" + // Java.g:36988:1: parse_org_emftext_language_java_references_Reference returns [org.emftext.language.java.references.Reference element = null] : (c0= parse_org_emftext_language_java_annotations_AnnotationInstance |c1= parse_org_emftext_language_java_instantiations_NewConstructorCall |c2= parse_org_emftext_language_java_instantiations_ExplicitConstructorCall |c3= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped |c4= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped |c5= parse_org_emftext_language_java_arrays_ArrayInstantiationBySize |c6= parse_org_emftext_language_java_references_MethodCall |c7= parse_org_emftext_language_java_references_IdentifierReference |c8= parse_org_emftext_language_java_references_ReflectiveClassReference |c9= parse_org_emftext_language_java_references_SelfReference |c10= parse_org_emftext_language_java_references_PrimitiveTypeReference |c11= parse_org_emftext_language_java_references_StringReference |c12= parse_org_emftext_language_java_expressions_NestedExpression ); + public final org.emftext.language.java.references.Reference parse_org_emftext_language_java_references_Reference() throws RecognitionException { + org.emftext.language.java.references.Reference element = null; + + int parse_org_emftext_language_java_references_Reference_StartIndex = input.index(); + + org.emftext.language.java.annotations.AnnotationInstance c0 =null; + + org.emftext.language.java.instantiations.NewConstructorCall c1 =null; + + org.emftext.language.java.instantiations.ExplicitConstructorCall c2 =null; + + org.emftext.language.java.arrays.ArrayInstantiationByValuesTyped c3 =null; + + org.emftext.language.java.arrays.ArrayInstantiationByValuesUntyped c4 =null; + + org.emftext.language.java.arrays.ArrayInstantiationBySize c5 =null; + + org.emftext.language.java.references.MethodCall c6 =null; + + org.emftext.language.java.references.IdentifierReference c7 =null; + + org.emftext.language.java.references.ReflectiveClassReference c8 =null; + + org.emftext.language.java.references.SelfReference c9 =null; + + org.emftext.language.java.references.PrimitiveTypeReference c10 =null; + + org.emftext.language.java.references.StringReference c11 =null; + + org.emftext.language.java.expressions.NestedExpression c12 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 166) ) { return element; } + + // Java.g:36989:2: (c0= parse_org_emftext_language_java_annotations_AnnotationInstance |c1= parse_org_emftext_language_java_instantiations_NewConstructorCall |c2= parse_org_emftext_language_java_instantiations_ExplicitConstructorCall |c3= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped |c4= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped |c5= parse_org_emftext_language_java_arrays_ArrayInstantiationBySize |c6= parse_org_emftext_language_java_references_MethodCall |c7= parse_org_emftext_language_java_references_IdentifierReference |c8= parse_org_emftext_language_java_references_ReflectiveClassReference |c9= parse_org_emftext_language_java_references_SelfReference |c10= parse_org_emftext_language_java_references_PrimitiveTypeReference |c11= parse_org_emftext_language_java_references_StringReference |c12= parse_org_emftext_language_java_expressions_NestedExpression ) + int alt224=13; + switch ( input.LA(1) ) { + case 48: + { + alt224=1; + } + break; + case 84: + { + int LA224_2 = input.LA(2); + + if ( (synpred289_Java()) ) { + alt224=2; + } + else if ( (synpred291_Java()) ) { + alt224=4; + } + else if ( (synpred293_Java()) ) { + alt224=6; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 224, 2, input); + + throw nvae; + + } + } + break; + case 43: + { + int LA224_3 = input.LA(2); + + if ( (synpred290_Java()) ) { + alt224=3; + } + else if ( (synpred294_Java()) ) { + alt224=7; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 224, 3, input); + + throw nvae; + + } + } + break; + case 97: + { + int LA224_4 = input.LA(2); + + if ( (synpred290_Java()) ) { + alt224=3; + } + else if ( (synpred297_Java()) ) { + alt224=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 224, 4, input); + + throw nvae; + + } + } + break; + case 94: + { + int LA224_5 = input.LA(2); + + if ( (synpred290_Java()) ) { + alt224=3; + } + else if ( (synpred297_Java()) ) { + alt224=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 224, 5, input); + + throw nvae; + + } + } + break; + case 105: + { + alt224=5; + } + break; + case IDENTIFIER: + { + int LA224_7 = input.LA(2); + + if ( (synpred294_Java()) ) { + alt224=7; + } + else if ( (synpred295_Java()) ) { + alt224=8; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 224, 7, input); + + throw nvae; + + } + } + break; + case 64: + { + alt224=9; + } + break; + case 58: + case 60: + case 63: + case 68: + case 74: + case 80: + case 82: + case 91: + case 102: + { + alt224=11; + } + break; + case STRING_LITERAL: + { + alt224=12; + } + break; + case 26: + { + alt224=13; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 224, 0, input); + + throw nvae; + + } + + switch (alt224) { + case 1 : + // Java.g:36990:2: c0= parse_org_emftext_language_java_annotations_AnnotationInstance + { + pushFollow(FOLLOW_parse_org_emftext_language_java_annotations_AnnotationInstance_in_parse_org_emftext_language_java_references_Reference23345); + c0=parse_org_emftext_language_java_annotations_AnnotationInstance(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:36991:4: c1= parse_org_emftext_language_java_instantiations_NewConstructorCall + { + pushFollow(FOLLOW_parse_org_emftext_language_java_instantiations_NewConstructorCall_in_parse_org_emftext_language_java_references_Reference23355); + c1=parse_org_emftext_language_java_instantiations_NewConstructorCall(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:36992:4: c2= parse_org_emftext_language_java_instantiations_ExplicitConstructorCall + { + pushFollow(FOLLOW_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall_in_parse_org_emftext_language_java_references_Reference23365); + c2=parse_org_emftext_language_java_instantiations_ExplicitConstructorCall(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + case 4 : + // Java.g:36993:4: c3= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped_in_parse_org_emftext_language_java_references_Reference23375); + c3=parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c3; /* this is a subclass or primitive expression choice */ } + + } + break; + case 5 : + // Java.g:36994:4: c4= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped_in_parse_org_emftext_language_java_references_Reference23385); + c4=parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c4; /* this is a subclass or primitive expression choice */ } + + } + break; + case 6 : + // Java.g:36995:4: c5= parse_org_emftext_language_java_arrays_ArrayInstantiationBySize + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize_in_parse_org_emftext_language_java_references_Reference23395); + c5=parse_org_emftext_language_java_arrays_ArrayInstantiationBySize(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c5; /* this is a subclass or primitive expression choice */ } + + } + break; + case 7 : + // Java.g:36996:4: c6= parse_org_emftext_language_java_references_MethodCall + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_MethodCall_in_parse_org_emftext_language_java_references_Reference23405); + c6=parse_org_emftext_language_java_references_MethodCall(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c6; /* this is a subclass or primitive expression choice */ } + + } + break; + case 8 : + // Java.g:36997:4: c7= parse_org_emftext_language_java_references_IdentifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_IdentifierReference_in_parse_org_emftext_language_java_references_Reference23415); + c7=parse_org_emftext_language_java_references_IdentifierReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c7; /* this is a subclass or primitive expression choice */ } + + } + break; + case 9 : + // Java.g:36998:4: c8= parse_org_emftext_language_java_references_ReflectiveClassReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_ReflectiveClassReference_in_parse_org_emftext_language_java_references_Reference23425); + c8=parse_org_emftext_language_java_references_ReflectiveClassReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c8; /* this is a subclass or primitive expression choice */ } + + } + break; + case 10 : + // Java.g:36999:4: c9= parse_org_emftext_language_java_references_SelfReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_SelfReference_in_parse_org_emftext_language_java_references_Reference23435); + c9=parse_org_emftext_language_java_references_SelfReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c9; /* this is a subclass or primitive expression choice */ } + + } + break; + case 11 : + // Java.g:37000:4: c10= parse_org_emftext_language_java_references_PrimitiveTypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_PrimitiveTypeReference_in_parse_org_emftext_language_java_references_Reference23445); + c10=parse_org_emftext_language_java_references_PrimitiveTypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c10; /* this is a subclass or primitive expression choice */ } + + } + break; + case 12 : + // Java.g:37001:4: c11= parse_org_emftext_language_java_references_StringReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_StringReference_in_parse_org_emftext_language_java_references_Reference23455); + c11=parse_org_emftext_language_java_references_StringReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c11; /* this is a subclass or primitive expression choice */ } + + } + break; + case 13 : + // Java.g:37002:4: c12= parse_org_emftext_language_java_expressions_NestedExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_NestedExpression_in_parse_org_emftext_language_java_references_Reference23465); + c12=parse_org_emftext_language_java_expressions_NestedExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c12; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 166, parse_org_emftext_language_java_references_Reference_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_references_Reference" + + + + // $ANTLR start "parse_org_emftext_language_java_literals_Self" + // Java.g:37006:1: parse_org_emftext_language_java_literals_Self returns [org.emftext.language.java.literals.Self element = null] : (c0= parse_org_emftext_language_java_literals_This |c1= parse_org_emftext_language_java_literals_Super ); + public final org.emftext.language.java.literals.Self parse_org_emftext_language_java_literals_Self() throws RecognitionException { + org.emftext.language.java.literals.Self element = null; + + int parse_org_emftext_language_java_literals_Self_StartIndex = input.index(); + + org.emftext.language.java.literals.This c0 =null; + + org.emftext.language.java.literals.Super c1 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 167) ) { return element; } + + // Java.g:37007:2: (c0= parse_org_emftext_language_java_literals_This |c1= parse_org_emftext_language_java_literals_Super ) + int alt225=2; + int LA225_0 = input.LA(1); + + if ( (LA225_0==97) ) { + alt225=1; + } + else if ( (LA225_0==94) ) { + alt225=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 225, 0, input); + + throw nvae; + + } + switch (alt225) { + case 1 : + // Java.g:37008:2: c0= parse_org_emftext_language_java_literals_This + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_This_in_parse_org_emftext_language_java_literals_Self23486); + c0=parse_org_emftext_language_java_literals_This(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:37009:4: c1= parse_org_emftext_language_java_literals_Super + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_Super_in_parse_org_emftext_language_java_literals_Self23496); + c1=parse_org_emftext_language_java_literals_Super(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 167, parse_org_emftext_language_java_literals_Self_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_literals_Self" + + + + // $ANTLR start "parse_org_emftext_language_java_types_PrimitiveType" + // Java.g:37013:1: parse_org_emftext_language_java_types_PrimitiveType returns [org.emftext.language.java.types.PrimitiveType element = null] : (c0= parse_org_emftext_language_java_types_Void |c1= parse_org_emftext_language_java_types_Boolean |c2= parse_org_emftext_language_java_types_Char |c3= parse_org_emftext_language_java_types_Byte |c4= parse_org_emftext_language_java_types_Short |c5= parse_org_emftext_language_java_types_Int |c6= parse_org_emftext_language_java_types_Long |c7= parse_org_emftext_language_java_types_Float |c8= parse_org_emftext_language_java_types_Double ); + public final org.emftext.language.java.types.PrimitiveType parse_org_emftext_language_java_types_PrimitiveType() throws RecognitionException { + org.emftext.language.java.types.PrimitiveType element = null; + + int parse_org_emftext_language_java_types_PrimitiveType_StartIndex = input.index(); + + org.emftext.language.java.types.Void c0 =null; + + org.emftext.language.java.types.Boolean c1 =null; + + org.emftext.language.java.types.Char c2 =null; + + org.emftext.language.java.types.Byte c3 =null; + + org.emftext.language.java.types.Short c4 =null; + + org.emftext.language.java.types.Int c5 =null; + + org.emftext.language.java.types.Long c6 =null; + + org.emftext.language.java.types.Float c7 =null; + + org.emftext.language.java.types.Double c8 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 168) ) { return element; } + + // Java.g:37014:2: (c0= parse_org_emftext_language_java_types_Void |c1= parse_org_emftext_language_java_types_Boolean |c2= parse_org_emftext_language_java_types_Char |c3= parse_org_emftext_language_java_types_Byte |c4= parse_org_emftext_language_java_types_Short |c5= parse_org_emftext_language_java_types_Int |c6= parse_org_emftext_language_java_types_Long |c7= parse_org_emftext_language_java_types_Float |c8= parse_org_emftext_language_java_types_Double ) + int alt226=9; + switch ( input.LA(1) ) { + case 102: + { + alt226=1; + } + break; + case 58: + { + alt226=2; + } + break; + case 63: + { + alt226=3; + } + break; + case 60: + { + alt226=4; + } + break; + case 91: + { + alt226=5; + } + break; + case 80: + { + alt226=6; + } + break; + case 82: + { + alt226=7; + } + break; + case 74: + { + alt226=8; + } + break; + case 68: + { + alt226=9; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 226, 0, input); + + throw nvae; + + } + + switch (alt226) { + case 1 : + // Java.g:37015:2: c0= parse_org_emftext_language_java_types_Void + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Void_in_parse_org_emftext_language_java_types_PrimitiveType23517); + c0=parse_org_emftext_language_java_types_Void(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:37016:4: c1= parse_org_emftext_language_java_types_Boolean + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Boolean_in_parse_org_emftext_language_java_types_PrimitiveType23527); + c1=parse_org_emftext_language_java_types_Boolean(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:37017:4: c2= parse_org_emftext_language_java_types_Char + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Char_in_parse_org_emftext_language_java_types_PrimitiveType23537); + c2=parse_org_emftext_language_java_types_Char(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + case 4 : + // Java.g:37018:4: c3= parse_org_emftext_language_java_types_Byte + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Byte_in_parse_org_emftext_language_java_types_PrimitiveType23547); + c3=parse_org_emftext_language_java_types_Byte(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c3; /* this is a subclass or primitive expression choice */ } + + } + break; + case 5 : + // Java.g:37019:4: c4= parse_org_emftext_language_java_types_Short + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Short_in_parse_org_emftext_language_java_types_PrimitiveType23557); + c4=parse_org_emftext_language_java_types_Short(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c4; /* this is a subclass or primitive expression choice */ } + + } + break; + case 6 : + // Java.g:37020:4: c5= parse_org_emftext_language_java_types_Int + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Int_in_parse_org_emftext_language_java_types_PrimitiveType23567); + c5=parse_org_emftext_language_java_types_Int(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c5; /* this is a subclass or primitive expression choice */ } + + } + break; + case 7 : + // Java.g:37021:4: c6= parse_org_emftext_language_java_types_Long + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Long_in_parse_org_emftext_language_java_types_PrimitiveType23577); + c6=parse_org_emftext_language_java_types_Long(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c6; /* this is a subclass or primitive expression choice */ } + + } + break; + case 8 : + // Java.g:37022:4: c7= parse_org_emftext_language_java_types_Float + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Float_in_parse_org_emftext_language_java_types_PrimitiveType23587); + c7=parse_org_emftext_language_java_types_Float(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c7; /* this is a subclass or primitive expression choice */ } + + } + break; + case 9 : + // Java.g:37023:4: c8= parse_org_emftext_language_java_types_Double + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_Double_in_parse_org_emftext_language_java_types_PrimitiveType23597); + c8=parse_org_emftext_language_java_types_Double(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c8; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 168, parse_org_emftext_language_java_types_PrimitiveType_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_types_PrimitiveType" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_ForLoopInitializer" + // Java.g:37027:1: parse_org_emftext_language_java_statements_ForLoopInitializer returns [org.emftext.language.java.statements.ForLoopInitializer element = null] : (c0= parse_org_emftext_language_java_variables_LocalVariable |c1= parse_org_emftext_language_java_expressions_ExpressionList ); + public final org.emftext.language.java.statements.ForLoopInitializer parse_org_emftext_language_java_statements_ForLoopInitializer() throws RecognitionException { + org.emftext.language.java.statements.ForLoopInitializer element = null; + + int parse_org_emftext_language_java_statements_ForLoopInitializer_StartIndex = input.index(); + + org.emftext.language.java.variables.LocalVariable c0 =null; + + org.emftext.language.java.expressions.ExpressionList c1 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 169) ) { return element; } + + // Java.g:37028:2: (c0= parse_org_emftext_language_java_variables_LocalVariable |c1= parse_org_emftext_language_java_expressions_ExpressionList ) + int alt227=2; + switch ( input.LA(1) ) { + case 48: + { + int LA227_1 = input.LA(2); + + if ( (synpred309_Java()) ) { + alt227=1; + } + else if ( (true) ) { + alt227=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 227, 1, input); + + throw nvae; + + } + } + break; + case 56: + case 72: + case 83: + case 87: + case 88: + case 89: + case 92: + case 93: + case 96: + case 100: + case 103: + { + alt227=1; + } + break; + case IDENTIFIER: + { + int LA227_13 = input.LA(2); + + if ( (synpred309_Java()) ) { + alt227=1; + } + else if ( (true) ) { + alt227=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 227, 13, input); + + throw nvae; + + } + } + break; + case 102: + { + int LA227_14 = input.LA(2); + + if ( (synpred309_Java()) ) { + alt227=1; + } + else if ( (true) ) { + alt227=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 227, 14, input); + + throw nvae; + + } + } + break; + case 58: + { + int LA227_15 = input.LA(2); + + if ( (synpred309_Java()) ) { + alt227=1; + } + else if ( (true) ) { + alt227=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 227, 15, input); + + throw nvae; + + } + } + break; + case 63: + { + int LA227_16 = input.LA(2); + + if ( (synpred309_Java()) ) { + alt227=1; + } + else if ( (true) ) { + alt227=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 227, 16, input); + + throw nvae; + + } + } + break; + case 60: + { + int LA227_17 = input.LA(2); + + if ( (synpred309_Java()) ) { + alt227=1; + } + else if ( (true) ) { + alt227=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 227, 17, input); + + throw nvae; + + } + } + break; + case 91: + { + int LA227_18 = input.LA(2); + + if ( (synpred309_Java()) ) { + alt227=1; + } + else if ( (true) ) { + alt227=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 227, 18, input); + + throw nvae; + + } + } + break; + case 80: + { + int LA227_19 = input.LA(2); + + if ( (synpred309_Java()) ) { + alt227=1; + } + else if ( (true) ) { + alt227=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 227, 19, input); + + throw nvae; + + } + } + break; + case 82: + { + int LA227_20 = input.LA(2); + + if ( (synpred309_Java()) ) { + alt227=1; + } + else if ( (true) ) { + alt227=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 227, 20, input); + + throw nvae; + + } + } + break; + case 74: + { + int LA227_21 = input.LA(2); + + if ( (synpred309_Java()) ) { + alt227=1; + } + else if ( (true) ) { + alt227=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 227, 21, input); + + throw nvae; + + } + } + break; + case 68: + { + int LA227_22 = input.LA(2); + + if ( (synpred309_Java()) ) { + alt227=1; + } + else if ( (true) ) { + alt227=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 227, 22, input); + + throw nvae; + + } + } + break; + case BOOLEAN_LITERAL: + case CHARACTER_LITERAL: + case DECIMAL_DOUBLE_LITERAL: + case DECIMAL_FLOAT_LITERAL: + case DECIMAL_INTEGER_LITERAL: + case DECIMAL_LONG_LITERAL: + case HEX_DOUBLE_LITERAL: + case HEX_FLOAT_LITERAL: + case HEX_INTEGER_LITERAL: + case HEX_LONG_LITERAL: + case OCTAL_INTEGER_LITERAL: + case OCTAL_LONG_LITERAL: + case STRING_LITERAL: + case 21: + case 26: + case 30: + case 31: + case 34: + case 35: + case 43: + case 64: + case 84: + case 85: + case 94: + case 97: + case 105: + case 110: + { + alt227=2; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 227, 0, input); + + throw nvae; + + } + + switch (alt227) { + case 1 : + // Java.g:37029:2: c0= parse_org_emftext_language_java_variables_LocalVariable + { + pushFollow(FOLLOW_parse_org_emftext_language_java_variables_LocalVariable_in_parse_org_emftext_language_java_statements_ForLoopInitializer23618); + c0=parse_org_emftext_language_java_variables_LocalVariable(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:37030:4: c1= parse_org_emftext_language_java_expressions_ExpressionList + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_ExpressionList_in_parse_org_emftext_language_java_statements_ForLoopInitializer23628); + c1=parse_org_emftext_language_java_expressions_ExpressionList(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 169, parse_org_emftext_language_java_statements_ForLoopInitializer_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_ForLoopInitializer" + + + + // $ANTLR start "parse_org_emftext_language_java_statements_SwitchCase" + // Java.g:37034:1: parse_org_emftext_language_java_statements_SwitchCase returns [org.emftext.language.java.statements.SwitchCase element = null] : (c0= parse_org_emftext_language_java_statements_NormalSwitchCase |c1= parse_org_emftext_language_java_statements_DefaultSwitchCase ); + public final org.emftext.language.java.statements.SwitchCase parse_org_emftext_language_java_statements_SwitchCase() throws RecognitionException { + org.emftext.language.java.statements.SwitchCase element = null; + + int parse_org_emftext_language_java_statements_SwitchCase_StartIndex = input.index(); + + org.emftext.language.java.statements.NormalSwitchCase c0 =null; + + org.emftext.language.java.statements.DefaultSwitchCase c1 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 170) ) { return element; } + + // Java.g:37035:2: (c0= parse_org_emftext_language_java_statements_NormalSwitchCase |c1= parse_org_emftext_language_java_statements_DefaultSwitchCase ) + int alt228=2; + int LA228_0 = input.LA(1); + + if ( (LA228_0==61) ) { + alt228=1; + } + else if ( (LA228_0==66) ) { + alt228=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 228, 0, input); + + throw nvae; + + } + switch (alt228) { + case 1 : + // Java.g:37036:2: c0= parse_org_emftext_language_java_statements_NormalSwitchCase + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_NormalSwitchCase_in_parse_org_emftext_language_java_statements_SwitchCase23649); + c0=parse_org_emftext_language_java_statements_NormalSwitchCase(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:37037:4: c1= parse_org_emftext_language_java_statements_DefaultSwitchCase + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_DefaultSwitchCase_in_parse_org_emftext_language_java_statements_SwitchCase23659); + c1=parse_org_emftext_language_java_statements_DefaultSwitchCase(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 170, parse_org_emftext_language_java_statements_SwitchCase_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_statements_SwitchCase" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_AssignmentOperator" + // Java.g:37041:1: parse_org_emftext_language_java_operators_AssignmentOperator returns [org.emftext.language.java.operators.AssignmentOperator element = null] : (c0= parse_org_emftext_language_java_operators_Assignment |c1= parse_org_emftext_language_java_operators_AssignmentPlus |c2= parse_org_emftext_language_java_operators_AssignmentMinus |c3= parse_org_emftext_language_java_operators_AssignmentMultiplication |c4= parse_org_emftext_language_java_operators_AssignmentDivision |c5= parse_org_emftext_language_java_operators_AssignmentAnd |c6= parse_org_emftext_language_java_operators_AssignmentOr |c7= parse_org_emftext_language_java_operators_AssignmentExclusiveOr |c8= parse_org_emftext_language_java_operators_AssignmentModulo |c9= parse_org_emftext_language_java_operators_AssignmentLeftShift |c10= parse_org_emftext_language_java_operators_AssignmentRightShift |c11= parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift ); + public final org.emftext.language.java.operators.AssignmentOperator parse_org_emftext_language_java_operators_AssignmentOperator() throws RecognitionException { + org.emftext.language.java.operators.AssignmentOperator element = null; + + int parse_org_emftext_language_java_operators_AssignmentOperator_StartIndex = input.index(); + + org.emftext.language.java.operators.Assignment c0 =null; + + org.emftext.language.java.operators.AssignmentPlus c1 =null; + + org.emftext.language.java.operators.AssignmentMinus c2 =null; + + org.emftext.language.java.operators.AssignmentMultiplication c3 =null; + + org.emftext.language.java.operators.AssignmentDivision c4 =null; + + org.emftext.language.java.operators.AssignmentAnd c5 =null; + + org.emftext.language.java.operators.AssignmentOr c6 =null; + + org.emftext.language.java.operators.AssignmentExclusiveOr c7 =null; + + org.emftext.language.java.operators.AssignmentModulo c8 =null; + + org.emftext.language.java.operators.AssignmentLeftShift c9 =null; + + org.emftext.language.java.operators.AssignmentRightShift c10 =null; + + org.emftext.language.java.operators.AssignmentUnsignedRightShift c11 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 171) ) { return element; } + + // Java.g:37042:2: (c0= parse_org_emftext_language_java_operators_Assignment |c1= parse_org_emftext_language_java_operators_AssignmentPlus |c2= parse_org_emftext_language_java_operators_AssignmentMinus |c3= parse_org_emftext_language_java_operators_AssignmentMultiplication |c4= parse_org_emftext_language_java_operators_AssignmentDivision |c5= parse_org_emftext_language_java_operators_AssignmentAnd |c6= parse_org_emftext_language_java_operators_AssignmentOr |c7= parse_org_emftext_language_java_operators_AssignmentExclusiveOr |c8= parse_org_emftext_language_java_operators_AssignmentModulo |c9= parse_org_emftext_language_java_operators_AssignmentLeftShift |c10= parse_org_emftext_language_java_operators_AssignmentRightShift |c11= parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift ) + int alt229=12; + switch ( input.LA(1) ) { + case 44: + { + alt229=1; + } + break; + case 32: + { + alt229=2; + } + break; + case 36: + { + alt229=3; + } + break; + case 29: + { + alt229=4; + } + break; + case 40: + { + alt229=5; + } + break; + case 25: + { + alt229=6; + } + break; + case 107: + { + alt229=7; + } + break; + case 55: + { + alt229=8; + } + break; + case 52: + { + alt229=9; + } + break; + case 43: + { + alt229=10; + } + break; + case 46: + { + int LA229_11 = input.LA(2); + + if ( (LA229_11==46) ) { + int LA229_12 = input.LA(3); + + if ( (LA229_12==44) ) { + alt229=11; + } + else if ( (LA229_12==46) ) { + alt229=12; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 229, 12, input); + + throw nvae; + + } + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 229, 11, input); + + throw nvae; + + } + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 229, 0, input); + + throw nvae; + + } + + switch (alt229) { + case 1 : + // Java.g:37043:2: c0= parse_org_emftext_language_java_operators_Assignment + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_Assignment_in_parse_org_emftext_language_java_operators_AssignmentOperator23680); + c0=parse_org_emftext_language_java_operators_Assignment(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:37044:4: c1= parse_org_emftext_language_java_operators_AssignmentPlus + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_AssignmentPlus_in_parse_org_emftext_language_java_operators_AssignmentOperator23690); + c1=parse_org_emftext_language_java_operators_AssignmentPlus(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:37045:4: c2= parse_org_emftext_language_java_operators_AssignmentMinus + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_AssignmentMinus_in_parse_org_emftext_language_java_operators_AssignmentOperator23700); + c2=parse_org_emftext_language_java_operators_AssignmentMinus(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + case 4 : + // Java.g:37046:4: c3= parse_org_emftext_language_java_operators_AssignmentMultiplication + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_AssignmentMultiplication_in_parse_org_emftext_language_java_operators_AssignmentOperator23710); + c3=parse_org_emftext_language_java_operators_AssignmentMultiplication(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c3; /* this is a subclass or primitive expression choice */ } + + } + break; + case 5 : + // Java.g:37047:4: c4= parse_org_emftext_language_java_operators_AssignmentDivision + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_AssignmentDivision_in_parse_org_emftext_language_java_operators_AssignmentOperator23720); + c4=parse_org_emftext_language_java_operators_AssignmentDivision(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c4; /* this is a subclass or primitive expression choice */ } + + } + break; + case 6 : + // Java.g:37048:4: c5= parse_org_emftext_language_java_operators_AssignmentAnd + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_AssignmentAnd_in_parse_org_emftext_language_java_operators_AssignmentOperator23730); + c5=parse_org_emftext_language_java_operators_AssignmentAnd(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c5; /* this is a subclass or primitive expression choice */ } + + } + break; + case 7 : + // Java.g:37049:4: c6= parse_org_emftext_language_java_operators_AssignmentOr + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_AssignmentOr_in_parse_org_emftext_language_java_operators_AssignmentOperator23740); + c6=parse_org_emftext_language_java_operators_AssignmentOr(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c6; /* this is a subclass or primitive expression choice */ } + + } + break; + case 8 : + // Java.g:37050:4: c7= parse_org_emftext_language_java_operators_AssignmentExclusiveOr + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_AssignmentExclusiveOr_in_parse_org_emftext_language_java_operators_AssignmentOperator23750); + c7=parse_org_emftext_language_java_operators_AssignmentExclusiveOr(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c7; /* this is a subclass or primitive expression choice */ } + + } + break; + case 9 : + // Java.g:37051:4: c8= parse_org_emftext_language_java_operators_AssignmentModulo + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_AssignmentModulo_in_parse_org_emftext_language_java_operators_AssignmentOperator23760); + c8=parse_org_emftext_language_java_operators_AssignmentModulo(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c8; /* this is a subclass or primitive expression choice */ } + + } + break; + case 10 : + // Java.g:37052:4: c9= parse_org_emftext_language_java_operators_AssignmentLeftShift + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_AssignmentLeftShift_in_parse_org_emftext_language_java_operators_AssignmentOperator23770); + c9=parse_org_emftext_language_java_operators_AssignmentLeftShift(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c9; /* this is a subclass or primitive expression choice */ } + + } + break; + case 11 : + // Java.g:37053:4: c10= parse_org_emftext_language_java_operators_AssignmentRightShift + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_AssignmentRightShift_in_parse_org_emftext_language_java_operators_AssignmentOperator23780); + c10=parse_org_emftext_language_java_operators_AssignmentRightShift(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c10; /* this is a subclass or primitive expression choice */ } + + } + break; + case 12 : + // Java.g:37054:4: c11= parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift_in_parse_org_emftext_language_java_operators_AssignmentOperator23790); + c11=parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c11; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 171, parse_org_emftext_language_java_operators_AssignmentOperator_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_AssignmentOperator" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_EqualityOperator" + // Java.g:37058:1: parse_org_emftext_language_java_operators_EqualityOperator returns [org.emftext.language.java.operators.EqualityOperator element = null] : (c0= parse_org_emftext_language_java_operators_Equal |c1= parse_org_emftext_language_java_operators_NotEqual ); + public final org.emftext.language.java.operators.EqualityOperator parse_org_emftext_language_java_operators_EqualityOperator() throws RecognitionException { + org.emftext.language.java.operators.EqualityOperator element = null; + + int parse_org_emftext_language_java_operators_EqualityOperator_StartIndex = input.index(); + + org.emftext.language.java.operators.Equal c0 =null; + + org.emftext.language.java.operators.NotEqual c1 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 172) ) { return element; } + + // Java.g:37059:2: (c0= parse_org_emftext_language_java_operators_Equal |c1= parse_org_emftext_language_java_operators_NotEqual ) + int alt230=2; + int LA230_0 = input.LA(1); + + if ( (LA230_0==45) ) { + alt230=1; + } + else if ( (LA230_0==22) ) { + alt230=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 230, 0, input); + + throw nvae; + + } + switch (alt230) { + case 1 : + // Java.g:37060:2: c0= parse_org_emftext_language_java_operators_Equal + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_Equal_in_parse_org_emftext_language_java_operators_EqualityOperator23811); + c0=parse_org_emftext_language_java_operators_Equal(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:37061:4: c1= parse_org_emftext_language_java_operators_NotEqual + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_NotEqual_in_parse_org_emftext_language_java_operators_EqualityOperator23821); + c1=parse_org_emftext_language_java_operators_NotEqual(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 172, parse_org_emftext_language_java_operators_EqualityOperator_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_EqualityOperator" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_RelationOperator" + // Java.g:37065:1: parse_org_emftext_language_java_operators_RelationOperator returns [org.emftext.language.java.operators.RelationOperator element = null] : (c0= parse_org_emftext_language_java_operators_LessThan |c1= parse_org_emftext_language_java_operators_LessThanOrEqual |c2= parse_org_emftext_language_java_operators_GreaterThan |c3= parse_org_emftext_language_java_operators_GreaterThanOrEqual ); + public final org.emftext.language.java.operators.RelationOperator parse_org_emftext_language_java_operators_RelationOperator() throws RecognitionException { + org.emftext.language.java.operators.RelationOperator element = null; + + int parse_org_emftext_language_java_operators_RelationOperator_StartIndex = input.index(); + + org.emftext.language.java.operators.LessThan c0 =null; + + org.emftext.language.java.operators.LessThanOrEqual c1 =null; + + org.emftext.language.java.operators.GreaterThan c2 =null; + + org.emftext.language.java.operators.GreaterThanOrEqual c3 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 173) ) { return element; } + + // Java.g:37066:2: (c0= parse_org_emftext_language_java_operators_LessThan |c1= parse_org_emftext_language_java_operators_LessThanOrEqual |c2= parse_org_emftext_language_java_operators_GreaterThan |c3= parse_org_emftext_language_java_operators_GreaterThanOrEqual ) + int alt231=4; + int LA231_0 = input.LA(1); + + if ( (LA231_0==43) ) { + int LA231_1 = input.LA(2); + + if ( ((LA231_1 >= BOOLEAN_LITERAL && LA231_1 <= IDENTIFIER)||(LA231_1 >= OCTAL_INTEGER_LITERAL && LA231_1 <= OCTAL_LONG_LITERAL)||LA231_1==STRING_LITERAL||LA231_1==21||LA231_1==26||(LA231_1 >= 30 && LA231_1 <= 31)||(LA231_1 >= 34 && LA231_1 <= 35)||LA231_1==43||LA231_1==48||LA231_1==58||LA231_1==60||(LA231_1 >= 63 && LA231_1 <= 64)||LA231_1==68||LA231_1==74||LA231_1==80||LA231_1==82||(LA231_1 >= 84 && LA231_1 <= 85)||LA231_1==91||LA231_1==94||LA231_1==97||LA231_1==102||LA231_1==105||LA231_1==110) ) { + alt231=1; + } + else if ( (LA231_1==44) ) { + alt231=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 231, 1, input); + + throw nvae; + + } + } + else if ( (LA231_0==46) ) { + int LA231_2 = input.LA(2); + + if ( ((LA231_2 >= BOOLEAN_LITERAL && LA231_2 <= IDENTIFIER)||(LA231_2 >= OCTAL_INTEGER_LITERAL && LA231_2 <= OCTAL_LONG_LITERAL)||LA231_2==STRING_LITERAL||LA231_2==21||LA231_2==26||(LA231_2 >= 30 && LA231_2 <= 31)||(LA231_2 >= 34 && LA231_2 <= 35)||LA231_2==43||LA231_2==48||LA231_2==58||LA231_2==60||(LA231_2 >= 63 && LA231_2 <= 64)||LA231_2==68||LA231_2==74||LA231_2==80||LA231_2==82||(LA231_2 >= 84 && LA231_2 <= 85)||LA231_2==91||LA231_2==94||LA231_2==97||LA231_2==102||LA231_2==105||LA231_2==110) ) { + alt231=3; + } + else if ( (LA231_2==44) ) { + alt231=4; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 231, 2, input); + + throw nvae; + + } + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 231, 0, input); + + throw nvae; + + } + switch (alt231) { + case 1 : + // Java.g:37067:2: c0= parse_org_emftext_language_java_operators_LessThan + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_LessThan_in_parse_org_emftext_language_java_operators_RelationOperator23842); + c0=parse_org_emftext_language_java_operators_LessThan(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:37068:4: c1= parse_org_emftext_language_java_operators_LessThanOrEqual + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_LessThanOrEqual_in_parse_org_emftext_language_java_operators_RelationOperator23852); + c1=parse_org_emftext_language_java_operators_LessThanOrEqual(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:37069:4: c2= parse_org_emftext_language_java_operators_GreaterThan + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_GreaterThan_in_parse_org_emftext_language_java_operators_RelationOperator23862); + c2=parse_org_emftext_language_java_operators_GreaterThan(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + case 4 : + // Java.g:37070:4: c3= parse_org_emftext_language_java_operators_GreaterThanOrEqual + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_GreaterThanOrEqual_in_parse_org_emftext_language_java_operators_RelationOperator23872); + c3=parse_org_emftext_language_java_operators_GreaterThanOrEqual(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c3; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 173, parse_org_emftext_language_java_operators_RelationOperator_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_RelationOperator" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_ShiftOperator" + // Java.g:37074:1: parse_org_emftext_language_java_operators_ShiftOperator returns [org.emftext.language.java.operators.ShiftOperator element = null] : (c0= parse_org_emftext_language_java_operators_LeftShift |c1= parse_org_emftext_language_java_operators_RightShift |c2= parse_org_emftext_language_java_operators_UnsignedRightShift ); + public final org.emftext.language.java.operators.ShiftOperator parse_org_emftext_language_java_operators_ShiftOperator() throws RecognitionException { + org.emftext.language.java.operators.ShiftOperator element = null; + + int parse_org_emftext_language_java_operators_ShiftOperator_StartIndex = input.index(); + + org.emftext.language.java.operators.LeftShift c0 =null; + + org.emftext.language.java.operators.RightShift c1 =null; + + org.emftext.language.java.operators.UnsignedRightShift c2 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 174) ) { return element; } + + // Java.g:37075:2: (c0= parse_org_emftext_language_java_operators_LeftShift |c1= parse_org_emftext_language_java_operators_RightShift |c2= parse_org_emftext_language_java_operators_UnsignedRightShift ) + int alt232=3; + int LA232_0 = input.LA(1); + + if ( (LA232_0==43) ) { + alt232=1; + } + else if ( (LA232_0==46) ) { + int LA232_2 = input.LA(2); + + if ( (LA232_2==46) ) { + int LA232_3 = input.LA(3); + + if ( ((LA232_3 >= BOOLEAN_LITERAL && LA232_3 <= IDENTIFIER)||(LA232_3 >= OCTAL_INTEGER_LITERAL && LA232_3 <= OCTAL_LONG_LITERAL)||LA232_3==STRING_LITERAL||LA232_3==21||LA232_3==26||(LA232_3 >= 30 && LA232_3 <= 31)||(LA232_3 >= 34 && LA232_3 <= 35)||LA232_3==43||LA232_3==48||LA232_3==58||LA232_3==60||(LA232_3 >= 63 && LA232_3 <= 64)||LA232_3==68||LA232_3==74||LA232_3==80||LA232_3==82||(LA232_3 >= 84 && LA232_3 <= 85)||LA232_3==91||LA232_3==94||LA232_3==97||LA232_3==102||LA232_3==105||LA232_3==110) ) { + alt232=2; + } + else if ( (LA232_3==46) ) { + alt232=3; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 232, 3, input); + + throw nvae; + + } + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 232, 2, input); + + throw nvae; + + } + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 232, 0, input); + + throw nvae; + + } + switch (alt232) { + case 1 : + // Java.g:37076:2: c0= parse_org_emftext_language_java_operators_LeftShift + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_LeftShift_in_parse_org_emftext_language_java_operators_ShiftOperator23893); + c0=parse_org_emftext_language_java_operators_LeftShift(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:37077:4: c1= parse_org_emftext_language_java_operators_RightShift + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_RightShift_in_parse_org_emftext_language_java_operators_ShiftOperator23903); + c1=parse_org_emftext_language_java_operators_RightShift(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:37078:4: c2= parse_org_emftext_language_java_operators_UnsignedRightShift + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_UnsignedRightShift_in_parse_org_emftext_language_java_operators_ShiftOperator23913); + c2=parse_org_emftext_language_java_operators_UnsignedRightShift(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 174, parse_org_emftext_language_java_operators_ShiftOperator_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_ShiftOperator" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_AdditiveOperator" + // Java.g:37082:1: parse_org_emftext_language_java_operators_AdditiveOperator returns [org.emftext.language.java.operators.AdditiveOperator element = null] : (c0= parse_org_emftext_language_java_operators_Addition |c1= parse_org_emftext_language_java_operators_Subtraction ); + public final org.emftext.language.java.operators.AdditiveOperator parse_org_emftext_language_java_operators_AdditiveOperator() throws RecognitionException { + org.emftext.language.java.operators.AdditiveOperator element = null; + + int parse_org_emftext_language_java_operators_AdditiveOperator_StartIndex = input.index(); + + org.emftext.language.java.operators.Addition c0 =null; + + org.emftext.language.java.operators.Subtraction c1 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 175) ) { return element; } + + // Java.g:37083:2: (c0= parse_org_emftext_language_java_operators_Addition |c1= parse_org_emftext_language_java_operators_Subtraction ) + int alt233=2; + int LA233_0 = input.LA(1); + + if ( (LA233_0==30) ) { + alt233=1; + } + else if ( (LA233_0==34) ) { + alt233=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 233, 0, input); + + throw nvae; + + } + switch (alt233) { + case 1 : + // Java.g:37084:2: c0= parse_org_emftext_language_java_operators_Addition + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_Addition_in_parse_org_emftext_language_java_operators_AdditiveOperator23934); + c0=parse_org_emftext_language_java_operators_Addition(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:37085:4: c1= parse_org_emftext_language_java_operators_Subtraction + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_Subtraction_in_parse_org_emftext_language_java_operators_AdditiveOperator23944); + c1=parse_org_emftext_language_java_operators_Subtraction(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 175, parse_org_emftext_language_java_operators_AdditiveOperator_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_AdditiveOperator" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_MultiplicativeOperator" + // Java.g:37089:1: parse_org_emftext_language_java_operators_MultiplicativeOperator returns [org.emftext.language.java.operators.MultiplicativeOperator element = null] : (c0= parse_org_emftext_language_java_operators_Multiplication |c1= parse_org_emftext_language_java_operators_Division |c2= parse_org_emftext_language_java_operators_Remainder ); + public final org.emftext.language.java.operators.MultiplicativeOperator parse_org_emftext_language_java_operators_MultiplicativeOperator() throws RecognitionException { + org.emftext.language.java.operators.MultiplicativeOperator element = null; + + int parse_org_emftext_language_java_operators_MultiplicativeOperator_StartIndex = input.index(); + + org.emftext.language.java.operators.Multiplication c0 =null; + + org.emftext.language.java.operators.Division c1 =null; + + org.emftext.language.java.operators.Remainder c2 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 176) ) { return element; } + + // Java.g:37090:2: (c0= parse_org_emftext_language_java_operators_Multiplication |c1= parse_org_emftext_language_java_operators_Division |c2= parse_org_emftext_language_java_operators_Remainder ) + int alt234=3; + switch ( input.LA(1) ) { + case 28: + { + alt234=1; + } + break; + case 39: + { + alt234=2; + } + break; + case 51: + { + alt234=3; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 234, 0, input); + + throw nvae; + + } + + switch (alt234) { + case 1 : + // Java.g:37091:2: c0= parse_org_emftext_language_java_operators_Multiplication + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_Multiplication_in_parse_org_emftext_language_java_operators_MultiplicativeOperator23965); + c0=parse_org_emftext_language_java_operators_Multiplication(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:37092:4: c1= parse_org_emftext_language_java_operators_Division + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_Division_in_parse_org_emftext_language_java_operators_MultiplicativeOperator23975); + c1=parse_org_emftext_language_java_operators_Division(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:37093:4: c2= parse_org_emftext_language_java_operators_Remainder + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_Remainder_in_parse_org_emftext_language_java_operators_MultiplicativeOperator23985); + c2=parse_org_emftext_language_java_operators_Remainder(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 176, parse_org_emftext_language_java_operators_MultiplicativeOperator_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_MultiplicativeOperator" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_UnaryOperator" + // Java.g:37097:1: parse_org_emftext_language_java_operators_UnaryOperator returns [org.emftext.language.java.operators.UnaryOperator element = null] : (c0= parse_org_emftext_language_java_operators_Addition |c1= parse_org_emftext_language_java_operators_Subtraction |c2= parse_org_emftext_language_java_operators_Complement |c3= parse_org_emftext_language_java_operators_Negate ); + public final org.emftext.language.java.operators.UnaryOperator parse_org_emftext_language_java_operators_UnaryOperator() throws RecognitionException { + org.emftext.language.java.operators.UnaryOperator element = null; + + int parse_org_emftext_language_java_operators_UnaryOperator_StartIndex = input.index(); + + org.emftext.language.java.operators.Addition c0 =null; + + org.emftext.language.java.operators.Subtraction c1 =null; + + org.emftext.language.java.operators.Complement c2 =null; + + org.emftext.language.java.operators.Negate c3 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 177) ) { return element; } + + // Java.g:37098:2: (c0= parse_org_emftext_language_java_operators_Addition |c1= parse_org_emftext_language_java_operators_Subtraction |c2= parse_org_emftext_language_java_operators_Complement |c3= parse_org_emftext_language_java_operators_Negate ) + int alt235=4; + switch ( input.LA(1) ) { + case 30: + { + alt235=1; + } + break; + case 34: + { + alt235=2; + } + break; + case 110: + { + alt235=3; + } + break; + case 21: + { + alt235=4; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 235, 0, input); + + throw nvae; + + } + + switch (alt235) { + case 1 : + // Java.g:37099:2: c0= parse_org_emftext_language_java_operators_Addition + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_Addition_in_parse_org_emftext_language_java_operators_UnaryOperator24006); + c0=parse_org_emftext_language_java_operators_Addition(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:37100:4: c1= parse_org_emftext_language_java_operators_Subtraction + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_Subtraction_in_parse_org_emftext_language_java_operators_UnaryOperator24016); + c1=parse_org_emftext_language_java_operators_Subtraction(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:37101:4: c2= parse_org_emftext_language_java_operators_Complement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_Complement_in_parse_org_emftext_language_java_operators_UnaryOperator24026); + c2=parse_org_emftext_language_java_operators_Complement(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + case 4 : + // Java.g:37102:4: c3= parse_org_emftext_language_java_operators_Negate + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_Negate_in_parse_org_emftext_language_java_operators_UnaryOperator24036); + c3=parse_org_emftext_language_java_operators_Negate(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c3; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 177, parse_org_emftext_language_java_operators_UnaryOperator_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_UnaryOperator" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_UnaryModificationExpression" + // Java.g:37106:1: parse_org_emftext_language_java_expressions_UnaryModificationExpression returns [org.emftext.language.java.expressions.UnaryModificationExpression element = null] : (c0= parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression |c1= parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression ); + public final org.emftext.language.java.expressions.UnaryModificationExpression parse_org_emftext_language_java_expressions_UnaryModificationExpression() throws RecognitionException { + org.emftext.language.java.expressions.UnaryModificationExpression element = null; + + int parse_org_emftext_language_java_expressions_UnaryModificationExpression_StartIndex = input.index(); + + org.emftext.language.java.expressions.SuffixUnaryModificationExpression c0 =null; + + org.emftext.language.java.expressions.PrefixUnaryModificationExpression c1 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 178) ) { return element; } + + // Java.g:37107:2: (c0= parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression |c1= parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression ) + int alt236=2; + switch ( input.LA(1) ) { + case 48: + { + int LA236_1 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 1, input); + + throw nvae; + + } + } + break; + case 84: + { + int LA236_2 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 2, input); + + throw nvae; + + } + } + break; + case 43: + { + int LA236_3 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 3, input); + + throw nvae; + + } + } + break; + case 97: + { + int LA236_4 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 4, input); + + throw nvae; + + } + } + break; + case 94: + { + int LA236_5 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 5, input); + + throw nvae; + + } + } + break; + case 105: + { + int LA236_6 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 6, input); + + throw nvae; + + } + } + break; + case IDENTIFIER: + { + int LA236_7 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 7, input); + + throw nvae; + + } + } + break; + case 64: + { + int LA236_8 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 8, input); + + throw nvae; + + } + } + break; + case 102: + { + int LA236_9 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 9, input); + + throw nvae; + + } + } + break; + case 58: + { + int LA236_10 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 10, input); + + throw nvae; + + } + } + break; + case 63: + { + int LA236_11 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 11, input); + + throw nvae; + + } + } + break; + case 60: + { + int LA236_12 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 12, input); + + throw nvae; + + } + } + break; + case 91: + { + int LA236_13 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 13, input); + + throw nvae; + + } + } + break; + case 80: + { + int LA236_14 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 14, input); + + throw nvae; + + } + } + break; + case 82: + { + int LA236_15 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 15, input); + + throw nvae; + + } + } + break; + case 74: + { + int LA236_16 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 16, input); + + throw nvae; + + } + } + break; + case 68: + { + int LA236_17 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 17, input); + + throw nvae; + + } + } + break; + case STRING_LITERAL: + { + int LA236_18 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 18, input); + + throw nvae; + + } + } + break; + case 26: + { + int LA236_19 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 19, input); + + throw nvae; + + } + } + break; + case 85: + { + int LA236_20 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 20, input); + + throw nvae; + + } + } + break; + case DECIMAL_LONG_LITERAL: + { + int LA236_21 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 21, input); + + throw nvae; + + } + } + break; + case DECIMAL_FLOAT_LITERAL: + { + int LA236_22 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 22, input); + + throw nvae; + + } + } + break; + case DECIMAL_INTEGER_LITERAL: + { + int LA236_23 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 23, input); + + throw nvae; + + } + } + break; + case DECIMAL_DOUBLE_LITERAL: + { + int LA236_24 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 24, input); + + throw nvae; + + } + } + break; + case HEX_LONG_LITERAL: + { + int LA236_25 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 25, input); + + throw nvae; + + } + } + break; + case HEX_FLOAT_LITERAL: + { + int LA236_26 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 26, input); + + throw nvae; + + } + } + break; + case HEX_DOUBLE_LITERAL: + { + int LA236_27 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 27, input); + + throw nvae; + + } + } + break; + case HEX_INTEGER_LITERAL: + { + int LA236_28 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 28, input); + + throw nvae; + + } + } + break; + case OCTAL_LONG_LITERAL: + { + int LA236_29 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 29, input); + + throw nvae; + + } + } + break; + case OCTAL_INTEGER_LITERAL: + { + int LA236_30 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 30, input); + + throw nvae; + + } + } + break; + case CHARACTER_LITERAL: + { + int LA236_31 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 31, input); + + throw nvae; + + } + } + break; + case BOOLEAN_LITERAL: + { + int LA236_32 = input.LA(2); + + if ( (synpred334_Java()) ) { + alt236=1; + } + else if ( (true) ) { + alt236=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 32, input); + + throw nvae; + + } + } + break; + case 31: + case 35: + { + alt236=2; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 236, 0, input); + + throw nvae; + + } + + switch (alt236) { + case 1 : + // Java.g:37108:2: c0= parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression_in_parse_org_emftext_language_java_expressions_UnaryModificationExpression24057); + c0=parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:37109:4: c1= parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression_in_parse_org_emftext_language_java_expressions_UnaryModificationExpression24067); + c1=parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 178, parse_org_emftext_language_java_expressions_UnaryModificationExpression_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_UnaryModificationExpression" + + + + // $ANTLR start "parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild" + // Java.g:37113:1: parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild returns [org.emftext.language.java.expressions.UnaryModificationExpressionChild element = null] : (c0= parse_org_emftext_language_java_annotations_AnnotationInstance |c1= parse_org_emftext_language_java_instantiations_NewConstructorCall |c2= parse_org_emftext_language_java_instantiations_ExplicitConstructorCall |c3= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped |c4= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped |c5= parse_org_emftext_language_java_arrays_ArrayInstantiationBySize |c6= parse_org_emftext_language_java_references_MethodCall |c7= parse_org_emftext_language_java_references_IdentifierReference |c8= parse_org_emftext_language_java_references_ReflectiveClassReference |c9= parse_org_emftext_language_java_references_SelfReference |c10= parse_org_emftext_language_java_references_PrimitiveTypeReference |c11= parse_org_emftext_language_java_references_StringReference |c12= parse_org_emftext_language_java_expressions_CastExpression |c13= parse_org_emftext_language_java_expressions_NestedExpression |c14= parse_org_emftext_language_java_literals_NullLiteral |c15= parse_org_emftext_language_java_literals_DecimalLongLiteral |c16= parse_org_emftext_language_java_literals_DecimalFloatLiteral |c17= parse_org_emftext_language_java_literals_DecimalIntegerLiteral |c18= parse_org_emftext_language_java_literals_DecimalDoubleLiteral |c19= parse_org_emftext_language_java_literals_HexLongLiteral |c20= parse_org_emftext_language_java_literals_HexFloatLiteral |c21= parse_org_emftext_language_java_literals_HexDoubleLiteral |c22= parse_org_emftext_language_java_literals_HexIntegerLiteral |c23= parse_org_emftext_language_java_literals_OctalLongLiteral |c24= parse_org_emftext_language_java_literals_OctalIntegerLiteral |c25= parse_org_emftext_language_java_literals_CharacterLiteral |c26= parse_org_emftext_language_java_literals_BooleanLiteral ); + public final org.emftext.language.java.expressions.UnaryModificationExpressionChild parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild() throws RecognitionException { + org.emftext.language.java.expressions.UnaryModificationExpressionChild element = null; + + int parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild_StartIndex = input.index(); + + org.emftext.language.java.annotations.AnnotationInstance c0 =null; + + org.emftext.language.java.instantiations.NewConstructorCall c1 =null; + + org.emftext.language.java.instantiations.ExplicitConstructorCall c2 =null; + + org.emftext.language.java.arrays.ArrayInstantiationByValuesTyped c3 =null; + + org.emftext.language.java.arrays.ArrayInstantiationByValuesUntyped c4 =null; + + org.emftext.language.java.arrays.ArrayInstantiationBySize c5 =null; + + org.emftext.language.java.references.MethodCall c6 =null; + + org.emftext.language.java.references.IdentifierReference c7 =null; + + org.emftext.language.java.references.ReflectiveClassReference c8 =null; + + org.emftext.language.java.references.SelfReference c9 =null; + + org.emftext.language.java.references.PrimitiveTypeReference c10 =null; + + org.emftext.language.java.references.StringReference c11 =null; + + org.emftext.language.java.expressions.CastExpression c12 =null; + + org.emftext.language.java.expressions.NestedExpression c13 =null; + + org.emftext.language.java.literals.NullLiteral c14 =null; + + org.emftext.language.java.literals.DecimalLongLiteral c15 =null; + + org.emftext.language.java.literals.DecimalFloatLiteral c16 =null; + + org.emftext.language.java.literals.DecimalIntegerLiteral c17 =null; + + org.emftext.language.java.literals.DecimalDoubleLiteral c18 =null; + + org.emftext.language.java.literals.HexLongLiteral c19 =null; + + org.emftext.language.java.literals.HexFloatLiteral c20 =null; + + org.emftext.language.java.literals.HexDoubleLiteral c21 =null; + + org.emftext.language.java.literals.HexIntegerLiteral c22 =null; + + org.emftext.language.java.literals.OctalLongLiteral c23 =null; + + org.emftext.language.java.literals.OctalIntegerLiteral c24 =null; + + org.emftext.language.java.literals.CharacterLiteral c25 =null; + + org.emftext.language.java.literals.BooleanLiteral c26 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 179) ) { return element; } + + // Java.g:37114:2: (c0= parse_org_emftext_language_java_annotations_AnnotationInstance |c1= parse_org_emftext_language_java_instantiations_NewConstructorCall |c2= parse_org_emftext_language_java_instantiations_ExplicitConstructorCall |c3= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped |c4= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped |c5= parse_org_emftext_language_java_arrays_ArrayInstantiationBySize |c6= parse_org_emftext_language_java_references_MethodCall |c7= parse_org_emftext_language_java_references_IdentifierReference |c8= parse_org_emftext_language_java_references_ReflectiveClassReference |c9= parse_org_emftext_language_java_references_SelfReference |c10= parse_org_emftext_language_java_references_PrimitiveTypeReference |c11= parse_org_emftext_language_java_references_StringReference |c12= parse_org_emftext_language_java_expressions_CastExpression |c13= parse_org_emftext_language_java_expressions_NestedExpression |c14= parse_org_emftext_language_java_literals_NullLiteral |c15= parse_org_emftext_language_java_literals_DecimalLongLiteral |c16= parse_org_emftext_language_java_literals_DecimalFloatLiteral |c17= parse_org_emftext_language_java_literals_DecimalIntegerLiteral |c18= parse_org_emftext_language_java_literals_DecimalDoubleLiteral |c19= parse_org_emftext_language_java_literals_HexLongLiteral |c20= parse_org_emftext_language_java_literals_HexFloatLiteral |c21= parse_org_emftext_language_java_literals_HexDoubleLiteral |c22= parse_org_emftext_language_java_literals_HexIntegerLiteral |c23= parse_org_emftext_language_java_literals_OctalLongLiteral |c24= parse_org_emftext_language_java_literals_OctalIntegerLiteral |c25= parse_org_emftext_language_java_literals_CharacterLiteral |c26= parse_org_emftext_language_java_literals_BooleanLiteral ) + int alt237=27; + switch ( input.LA(1) ) { + case 48: + { + alt237=1; + } + break; + case 84: + { + int LA237_2 = input.LA(2); + + if ( (synpred336_Java()) ) { + alt237=2; + } + else if ( (synpred338_Java()) ) { + alt237=4; + } + else if ( (synpred340_Java()) ) { + alt237=6; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 237, 2, input); + + throw nvae; + + } + } + break; + case 43: + { + int LA237_3 = input.LA(2); + + if ( (synpred337_Java()) ) { + alt237=3; + } + else if ( (synpred341_Java()) ) { + alt237=7; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 237, 3, input); + + throw nvae; + + } + } + break; + case 97: + { + int LA237_4 = input.LA(2); + + if ( (synpred337_Java()) ) { + alt237=3; + } + else if ( (synpred344_Java()) ) { + alt237=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 237, 4, input); + + throw nvae; + + } + } + break; + case 94: + { + int LA237_5 = input.LA(2); + + if ( (synpred337_Java()) ) { + alt237=3; + } + else if ( (synpred344_Java()) ) { + alt237=10; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 237, 5, input); + + throw nvae; + + } + } + break; + case 105: + { + alt237=5; + } + break; + case IDENTIFIER: + { + int LA237_7 = input.LA(2); + + if ( (synpred341_Java()) ) { + alt237=7; + } + else if ( (synpred342_Java()) ) { + alt237=8; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 237, 7, input); + + throw nvae; + + } + } + break; + case 64: + { + alt237=9; + } + break; + case 58: + case 60: + case 63: + case 68: + case 74: + case 80: + case 82: + case 91: + case 102: + { + alt237=11; + } + break; + case STRING_LITERAL: + { + alt237=12; + } + break; + case 26: + { + int LA237_19 = input.LA(2); + + if ( (synpred347_Java()) ) { + alt237=13; + } + else if ( (synpred348_Java()) ) { + alt237=14; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 237, 19, input); + + throw nvae; + + } + } + break; + case 85: + { + alt237=15; + } + break; + case DECIMAL_LONG_LITERAL: + { + alt237=16; + } + break; + case DECIMAL_FLOAT_LITERAL: + { + alt237=17; + } + break; + case DECIMAL_INTEGER_LITERAL: + { + alt237=18; + } + break; + case DECIMAL_DOUBLE_LITERAL: + { + alt237=19; + } + break; + case HEX_LONG_LITERAL: + { + alt237=20; + } + break; + case HEX_FLOAT_LITERAL: + { + alt237=21; + } + break; + case HEX_DOUBLE_LITERAL: + { + alt237=22; + } + break; + case HEX_INTEGER_LITERAL: + { + alt237=23; + } + break; + case OCTAL_LONG_LITERAL: + { + alt237=24; + } + break; + case OCTAL_INTEGER_LITERAL: + { + alt237=25; + } + break; + case CHARACTER_LITERAL: + { + alt237=26; + } + break; + case BOOLEAN_LITERAL: + { + alt237=27; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 237, 0, input); + + throw nvae; + + } + + switch (alt237) { + case 1 : + // Java.g:37115:2: c0= parse_org_emftext_language_java_annotations_AnnotationInstance + { + pushFollow(FOLLOW_parse_org_emftext_language_java_annotations_AnnotationInstance_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24088); + c0=parse_org_emftext_language_java_annotations_AnnotationInstance(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:37116:4: c1= parse_org_emftext_language_java_instantiations_NewConstructorCall + { + pushFollow(FOLLOW_parse_org_emftext_language_java_instantiations_NewConstructorCall_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24098); + c1=parse_org_emftext_language_java_instantiations_NewConstructorCall(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + case 3 : + // Java.g:37117:4: c2= parse_org_emftext_language_java_instantiations_ExplicitConstructorCall + { + pushFollow(FOLLOW_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24108); + c2=parse_org_emftext_language_java_instantiations_ExplicitConstructorCall(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c2; /* this is a subclass or primitive expression choice */ } + + } + break; + case 4 : + // Java.g:37118:4: c3= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24118); + c3=parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c3; /* this is a subclass or primitive expression choice */ } + + } + break; + case 5 : + // Java.g:37119:4: c4= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24128); + c4=parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c4; /* this is a subclass or primitive expression choice */ } + + } + break; + case 6 : + // Java.g:37120:4: c5= parse_org_emftext_language_java_arrays_ArrayInstantiationBySize + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24138); + c5=parse_org_emftext_language_java_arrays_ArrayInstantiationBySize(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c5; /* this is a subclass or primitive expression choice */ } + + } + break; + case 7 : + // Java.g:37121:4: c6= parse_org_emftext_language_java_references_MethodCall + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_MethodCall_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24148); + c6=parse_org_emftext_language_java_references_MethodCall(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c6; /* this is a subclass or primitive expression choice */ } + + } + break; + case 8 : + // Java.g:37122:4: c7= parse_org_emftext_language_java_references_IdentifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_IdentifierReference_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24158); + c7=parse_org_emftext_language_java_references_IdentifierReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c7; /* this is a subclass or primitive expression choice */ } + + } + break; + case 9 : + // Java.g:37123:4: c8= parse_org_emftext_language_java_references_ReflectiveClassReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_ReflectiveClassReference_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24168); + c8=parse_org_emftext_language_java_references_ReflectiveClassReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c8; /* this is a subclass or primitive expression choice */ } + + } + break; + case 10 : + // Java.g:37124:4: c9= parse_org_emftext_language_java_references_SelfReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_SelfReference_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24178); + c9=parse_org_emftext_language_java_references_SelfReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c9; /* this is a subclass or primitive expression choice */ } + + } + break; + case 11 : + // Java.g:37125:4: c10= parse_org_emftext_language_java_references_PrimitiveTypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_PrimitiveTypeReference_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24188); + c10=parse_org_emftext_language_java_references_PrimitiveTypeReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c10; /* this is a subclass or primitive expression choice */ } + + } + break; + case 12 : + // Java.g:37126:4: c11= parse_org_emftext_language_java_references_StringReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_StringReference_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24198); + c11=parse_org_emftext_language_java_references_StringReference(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c11; /* this is a subclass or primitive expression choice */ } + + } + break; + case 13 : + // Java.g:37127:4: c12= parse_org_emftext_language_java_expressions_CastExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_CastExpression_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24208); + c12=parse_org_emftext_language_java_expressions_CastExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c12; /* this is a subclass or primitive expression choice */ } + + } + break; + case 14 : + // Java.g:37128:4: c13= parse_org_emftext_language_java_expressions_NestedExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_NestedExpression_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24218); + c13=parse_org_emftext_language_java_expressions_NestedExpression(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c13; /* this is a subclass or primitive expression choice */ } + + } + break; + case 15 : + // Java.g:37129:4: c14= parse_org_emftext_language_java_literals_NullLiteral + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_NullLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24228); + c14=parse_org_emftext_language_java_literals_NullLiteral(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c14; /* this is a subclass or primitive expression choice */ } + + } + break; + case 16 : + // Java.g:37130:4: c15= parse_org_emftext_language_java_literals_DecimalLongLiteral + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_DecimalLongLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24238); + c15=parse_org_emftext_language_java_literals_DecimalLongLiteral(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c15; /* this is a subclass or primitive expression choice */ } + + } + break; + case 17 : + // Java.g:37131:4: c16= parse_org_emftext_language_java_literals_DecimalFloatLiteral + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_DecimalFloatLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24248); + c16=parse_org_emftext_language_java_literals_DecimalFloatLiteral(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c16; /* this is a subclass or primitive expression choice */ } + + } + break; + case 18 : + // Java.g:37132:4: c17= parse_org_emftext_language_java_literals_DecimalIntegerLiteral + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_DecimalIntegerLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24258); + c17=parse_org_emftext_language_java_literals_DecimalIntegerLiteral(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c17; /* this is a subclass or primitive expression choice */ } + + } + break; + case 19 : + // Java.g:37133:4: c18= parse_org_emftext_language_java_literals_DecimalDoubleLiteral + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_DecimalDoubleLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24268); + c18=parse_org_emftext_language_java_literals_DecimalDoubleLiteral(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c18; /* this is a subclass or primitive expression choice */ } + + } + break; + case 20 : + // Java.g:37134:4: c19= parse_org_emftext_language_java_literals_HexLongLiteral + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_HexLongLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24278); + c19=parse_org_emftext_language_java_literals_HexLongLiteral(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c19; /* this is a subclass or primitive expression choice */ } + + } + break; + case 21 : + // Java.g:37135:4: c20= parse_org_emftext_language_java_literals_HexFloatLiteral + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_HexFloatLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24288); + c20=parse_org_emftext_language_java_literals_HexFloatLiteral(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c20; /* this is a subclass or primitive expression choice */ } + + } + break; + case 22 : + // Java.g:37136:4: c21= parse_org_emftext_language_java_literals_HexDoubleLiteral + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_HexDoubleLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24298); + c21=parse_org_emftext_language_java_literals_HexDoubleLiteral(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c21; /* this is a subclass or primitive expression choice */ } + + } + break; + case 23 : + // Java.g:37137:4: c22= parse_org_emftext_language_java_literals_HexIntegerLiteral + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_HexIntegerLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24308); + c22=parse_org_emftext_language_java_literals_HexIntegerLiteral(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c22; /* this is a subclass or primitive expression choice */ } + + } + break; + case 24 : + // Java.g:37138:4: c23= parse_org_emftext_language_java_literals_OctalLongLiteral + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_OctalLongLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24318); + c23=parse_org_emftext_language_java_literals_OctalLongLiteral(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c23; /* this is a subclass or primitive expression choice */ } + + } + break; + case 25 : + // Java.g:37139:4: c24= parse_org_emftext_language_java_literals_OctalIntegerLiteral + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_OctalIntegerLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24328); + c24=parse_org_emftext_language_java_literals_OctalIntegerLiteral(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c24; /* this is a subclass or primitive expression choice */ } + + } + break; + case 26 : + // Java.g:37140:4: c25= parse_org_emftext_language_java_literals_CharacterLiteral + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_CharacterLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24338); + c25=parse_org_emftext_language_java_literals_CharacterLiteral(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c25; /* this is a subclass or primitive expression choice */ } + + } + break; + case 27 : + // Java.g:37141:4: c26= parse_org_emftext_language_java_literals_BooleanLiteral + { + pushFollow(FOLLOW_parse_org_emftext_language_java_literals_BooleanLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24348); + c26=parse_org_emftext_language_java_literals_BooleanLiteral(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c26; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 179, parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild" + + + + // $ANTLR start "parse_org_emftext_language_java_operators_UnaryModificationOperator" + // Java.g:37145:1: parse_org_emftext_language_java_operators_UnaryModificationOperator returns [org.emftext.language.java.operators.UnaryModificationOperator element = null] : (c0= parse_org_emftext_language_java_operators_PlusPlus |c1= parse_org_emftext_language_java_operators_MinusMinus ); + public final org.emftext.language.java.operators.UnaryModificationOperator parse_org_emftext_language_java_operators_UnaryModificationOperator() throws RecognitionException { + org.emftext.language.java.operators.UnaryModificationOperator element = null; + + int parse_org_emftext_language_java_operators_UnaryModificationOperator_StartIndex = input.index(); + + org.emftext.language.java.operators.PlusPlus c0 =null; + + org.emftext.language.java.operators.MinusMinus c1 =null; + + + try { + if ( state.backtracking>0 && alreadyParsedRule(input, 180) ) { return element; } + + // Java.g:37146:2: (c0= parse_org_emftext_language_java_operators_PlusPlus |c1= parse_org_emftext_language_java_operators_MinusMinus ) + int alt238=2; + int LA238_0 = input.LA(1); + + if ( (LA238_0==31) ) { + alt238=1; + } + else if ( (LA238_0==35) ) { + alt238=2; + } + else { + if (state.backtracking>0) {state.failed=true; return element;} + NoViableAltException nvae = + new NoViableAltException("", 238, 0, input); + + throw nvae; + + } + switch (alt238) { + case 1 : + // Java.g:37147:2: c0= parse_org_emftext_language_java_operators_PlusPlus + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_PlusPlus_in_parse_org_emftext_language_java_operators_UnaryModificationOperator24369); + c0=parse_org_emftext_language_java_operators_PlusPlus(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c0; /* this is a subclass or primitive expression choice */ } + + } + break; + case 2 : + // Java.g:37148:4: c1= parse_org_emftext_language_java_operators_MinusMinus + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_MinusMinus_in_parse_org_emftext_language_java_operators_UnaryModificationOperator24379); + c1=parse_org_emftext_language_java_operators_MinusMinus(); + + state._fsp--; + if (state.failed) return element; + + if ( state.backtracking==0 ) { element = c1; /* this is a subclass or primitive expression choice */ } + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + if ( state.backtracking>0 ) { memoize(input, 180, parse_org_emftext_language_java_operators_UnaryModificationOperator_StartIndex); } + + } + return element; + } + // $ANTLR end "parse_org_emftext_language_java_operators_UnaryModificationOperator" + + // $ANTLR start synpred1_Java + public final void synpred1_Java_fragment() throws RecognitionException { + org.emftext.language.java.containers.CompilationUnit c0 =null; + + + // Java.g:994:3: (c0= parse_org_emftext_language_java_containers_CompilationUnit ) + // Java.g:994:3: c0= parse_org_emftext_language_java_containers_CompilationUnit + { + pushFollow(FOLLOW_parse_org_emftext_language_java_containers_CompilationUnit_in_synpred1_Java82); + c0=parse_org_emftext_language_java_containers_CompilationUnit(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred1_Java + + // $ANTLR start synpred2_Java + public final void synpred2_Java_fragment() throws RecognitionException { + org.emftext.language.java.containers.Package c1 =null; + + + // Java.g:995:8: (c1= parse_org_emftext_language_java_containers_Package ) + // Java.g:995:8: c1= parse_org_emftext_language_java_containers_Package + { + pushFollow(FOLLOW_parse_org_emftext_language_java_containers_Package_in_synpred2_Java96); + c1=parse_org_emftext_language_java_containers_Package(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred2_Java + + // $ANTLR start synpred7_Java + public final void synpred7_Java_fragment() throws RecognitionException { + Token a6=null; + + // Java.g:1255:3: ( (a6= ';' ) ) + // Java.g:1255:3: (a6= ';' ) + { + // Java.g:1255:3: (a6= ';' ) + // Java.g:1256:4: a6= ';' + { + a6=(Token)match(input,42,FOLLOW_42_in_synpred7_Java454); if (state.failed) return ; + + } + + + } + + } + // $ANTLR end synpred7_Java + + // $ANTLR start synpred47_Java + public final void synpred47_Java_fragment() throws RecognitionException { + org.emftext.language.java.arrays.ArrayInitializer a1_0 =null; + + + // Java.g:5456:3: (a1_0= parse_org_emftext_language_java_arrays_ArrayInitializer ) + // Java.g:5456:3: a1_0= parse_org_emftext_language_java_arrays_ArrayInitializer + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_synpred47_Java4154); + a1_0=parse_org_emftext_language_java_arrays_ArrayInitializer(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred47_Java + + // $ANTLR start synpred50_Java + public final void synpred50_Java_fragment() throws RecognitionException { + org.emftext.language.java.arrays.ArrayInitializer a2_0 =null; + + + // Java.g:5919:3: (a2_0= parse_org_emftext_language_java_arrays_ArrayInitializer ) + // Java.g:5919:3: a2_0= parse_org_emftext_language_java_arrays_ArrayInitializer + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_synpred50_Java4465); + a2_0=parse_org_emftext_language_java_arrays_ArrayInitializer(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred50_Java + + // $ANTLR start synpred77_Java + public final void synpred77_Java_fragment() throws RecognitionException { + Token a1=null; + Token a3=null; + Token a5=null; + Token a8=null; + Token a9=null; + Token a11=null; + Token a13=null; + Token a15=null; + Token a17=null; + Token a19=null; + org.emftext.language.java.modifiers.AnnotationInstanceOrModifier a0_0 =null; + + org.emftext.language.java.generics.TypeParameter a2_0 =null; + + org.emftext.language.java.generics.TypeParameter a4_0 =null; + + org.emftext.language.java.types.TypeReference a6_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a7_0 =null; + + org.emftext.language.java.parameters.Parameter a10_0 =null; + + org.emftext.language.java.parameters.Parameter a12_0 =null; + + org.emftext.language.java.arrays.ArrayDimension a14_0 =null; + + org.emftext.language.java.types.NamespaceClassifierReference a16_0 =null; + + org.emftext.language.java.types.NamespaceClassifierReference a18_0 =null; + + + // Java.g:7747:2: ( ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) (a8= IDENTIFIER ) a9= '(' ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? a13= ')' ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? a19= ';' ) + // Java.g:7747:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) (a8= IDENTIFIER ) a9= '(' ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? a13= ')' ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? a19= ';' + { + // Java.g:7747:2: ( (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) )* + loop259: + do { + int alt259=2; + int LA259_0 = input.LA(1); + + if ( (LA259_0==48||LA259_0==56||LA259_0==72||LA259_0==83||(LA259_0 >= 87 && LA259_0 <= 89)||(LA259_0 >= 92 && LA259_0 <= 93)||LA259_0==96||LA259_0==100||LA259_0==103) ) { + alt259=1; + } + + + switch (alt259) { + case 1 : + // Java.g:7748:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + { + // Java.g:7748:3: (a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier ) + // Java.g:7749:4: a0_0= parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier + { + pushFollow(FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_synpred77_Java6033); + a0_0=parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier(); + + state._fsp--; + if (state.failed) return ; + + } + + + } + break; + + default : + break loop259; + } + } while (true); + + + // Java.g:7798:2: ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) )? + int alt261=2; + int LA261_0 = input.LA(1); + + if ( (LA261_0==43) ) { + alt261=1; + } + switch (alt261) { + case 1 : + // Java.g:7799:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) + { + // Java.g:7799:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' ) + // Java.g:7800:4: a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* a5= '>' + { + a1=(Token)match(input,43,FOLLOW_43_in_synpred77_Java6068); if (state.failed) return ; + + // Java.g:7814:4: (a2_0= parse_org_emftext_language_java_generics_TypeParameter ) + // Java.g:7815:5: a2_0= parse_org_emftext_language_java_generics_TypeParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_synpred77_Java6094); + a2_0=parse_org_emftext_language_java_generics_TypeParameter(); + + state._fsp--; + if (state.failed) return ; + + } + + + // Java.g:7841:4: ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) )* + loop260: + do { + int alt260=2; + int LA260_0 = input.LA(1); + + if ( (LA260_0==33) ) { + alt260=1; + } + + + switch (alt260) { + case 1 : + // Java.g:7842:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) + { + // Java.g:7842:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) ) + // Java.g:7843:6: a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) + { + a3=(Token)match(input,33,FOLLOW_33_in_synpred77_Java6135); if (state.failed) return ; + + // Java.g:7857:6: (a4_0= parse_org_emftext_language_java_generics_TypeParameter ) + // Java.g:7858:7: a4_0= parse_org_emftext_language_java_generics_TypeParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_synpred77_Java6169); + a4_0=parse_org_emftext_language_java_generics_TypeParameter(); + + state._fsp--; + if (state.failed) return ; + + } + + + } + + + } + break; + + default : + break loop260; + } + } while (true); + + + a5=(Token)match(input,46,FOLLOW_46_in_synpred77_Java6230); if (state.failed) return ; + + } + + + } + break; + + } + + + // Java.g:7933:2: ( (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* ) + // Java.g:7934:3: (a6_0= parse_org_emftext_language_java_types_TypeReference ) ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + { + // Java.g:7934:3: (a6_0= parse_org_emftext_language_java_types_TypeReference ) + // Java.g:7935:4: a6_0= parse_org_emftext_language_java_types_TypeReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_synpred77_Java6272); + a6_0=parse_org_emftext_language_java_types_TypeReference(); + + state._fsp--; + if (state.failed) return ; + + } + + + // Java.g:7961:3: ( (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop262: + do { + int alt262=2; + int LA262_0 = input.LA(1); + + if ( (LA262_0==49) ) { + alt262=1; + } + + + switch (alt262) { + case 1 : + // Java.g:7962:4: (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:7962:4: (a7_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:7963:5: a7_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_synpred77_Java6306); + a7_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return ; + + } + + + } + break; + + default : + break loop262; + } + } while (true); + + + } + + + // Java.g:7996:2: (a8= IDENTIFIER ) + // Java.g:7997:3: a8= IDENTIFIER + { + a8=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_synpred77_Java6350); if (state.failed) return ; + + } + + + a9=(Token)match(input,26,FOLLOW_26_in_synpred77_Java6371); if (state.failed) return ; + + // Java.g:8069:2: ( ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) )? + int alt264=2; + int LA264_0 = input.LA(1); + + if ( (LA264_0==IDENTIFIER||LA264_0==48||LA264_0==56||LA264_0==58||LA264_0==60||LA264_0==63||LA264_0==68||LA264_0==72||LA264_0==74||LA264_0==80||(LA264_0 >= 82 && LA264_0 <= 83)||(LA264_0 >= 87 && LA264_0 <= 89)||(LA264_0 >= 91 && LA264_0 <= 93)||LA264_0==96||LA264_0==100||(LA264_0 >= 102 && LA264_0 <= 103)) ) { + alt264=1; + } + switch (alt264) { + case 1 : + // Java.g:8070:3: ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) + { + // Java.g:8070:3: ( (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* ) + // Java.g:8071:4: (a10_0= parse_org_emftext_language_java_parameters_Parameter ) ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* + { + // Java.g:8071:4: (a10_0= parse_org_emftext_language_java_parameters_Parameter ) + // Java.g:8072:5: a10_0= parse_org_emftext_language_java_parameters_Parameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_synpred77_Java6400); + a10_0=parse_org_emftext_language_java_parameters_Parameter(); + + state._fsp--; + if (state.failed) return ; + + } + + + // Java.g:8098:4: ( (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) )* + loop263: + do { + int alt263=2; + int LA263_0 = input.LA(1); + + if ( (LA263_0==33) ) { + alt263=1; + } + + + switch (alt263) { + case 1 : + // Java.g:8099:5: (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) + { + // Java.g:8099:5: (a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) ) + // Java.g:8100:6: a11= ',' (a12_0= parse_org_emftext_language_java_parameters_Parameter ) + { + a11=(Token)match(input,33,FOLLOW_33_in_synpred77_Java6441); if (state.failed) return ; + + // Java.g:8136:6: (a12_0= parse_org_emftext_language_java_parameters_Parameter ) + // Java.g:8137:7: a12_0= parse_org_emftext_language_java_parameters_Parameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_synpred77_Java6475); + a12_0=parse_org_emftext_language_java_parameters_Parameter(); + + state._fsp--; + if (state.failed) return ; + + } + + + } + + + } + break; + + default : + break loop263; + } + } while (true); + + + } + + + } + break; + + } + + + a13=(Token)match(input,27,FOLLOW_27_in_synpred77_Java6549); if (state.failed) return ; + + // Java.g:8194:2: ( (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) )* + loop265: + do { + int alt265=2; + int LA265_0 = input.LA(1); + + if ( (LA265_0==49) ) { + alt265=1; + } + + + switch (alt265) { + case 1 : + // Java.g:8195:3: (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + { + // Java.g:8195:3: (a14_0= parse_org_emftext_language_java_arrays_ArrayDimension ) + // Java.g:8196:4: a14_0= parse_org_emftext_language_java_arrays_ArrayDimension + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_synpred77_Java6572); + a14_0=parse_org_emftext_language_java_arrays_ArrayDimension(); + + state._fsp--; + if (state.failed) return ; + + } + + + } + break; + + default : + break loop265; + } + } while (true); + + + // Java.g:8224:2: ( (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) )? + int alt267=2; + int LA267_0 = input.LA(1); + + if ( (LA267_0==99) ) { + alt267=1; + } + switch (alt267) { + case 1 : + // Java.g:8225:3: (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) + { + // Java.g:8225:3: (a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* ) + // Java.g:8226:4: a15= 'throws' (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* + { + a15=(Token)match(input,99,FOLLOW_99_in_synpred77_Java6607); if (state.failed) return ; + + // Java.g:8241:4: (a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + // Java.g:8242:5: a16_0= parse_org_emftext_language_java_types_NamespaceClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_synpred77_Java6633); + a16_0=parse_org_emftext_language_java_types_NamespaceClassifierReference(); + + state._fsp--; + if (state.failed) return ; + + } + + + // Java.g:8268:4: ( (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) )* + loop266: + do { + int alt266=2; + int LA266_0 = input.LA(1); + + if ( (LA266_0==33) ) { + alt266=1; + } + + + switch (alt266) { + case 1 : + // Java.g:8269:5: (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) + { + // Java.g:8269:5: (a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) ) + // Java.g:8270:6: a17= ',' (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + { + a17=(Token)match(input,33,FOLLOW_33_in_synpred77_Java6674); if (state.failed) return ; + + // Java.g:8285:6: (a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + // Java.g:8286:7: a18_0= parse_org_emftext_language_java_types_NamespaceClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_synpred77_Java6708); + a18_0=parse_org_emftext_language_java_types_NamespaceClassifierReference(); + + state._fsp--; + if (state.failed) return ; + + } + + + } + + + } + break; + + default : + break loop266; + } + } while (true); + + + } + + + } + break; + + } + + + a19=(Token)match(input,42,FOLLOW_42_in_synpred77_Java6782); if (state.failed) return ; + + } + + } + // $ANTLR end synpred77_Java + + // $ANTLR start synpred145_Java + public final void synpred145_Java_fragment() throws RecognitionException { + org.emftext.language.java.expressions.AssignmentExpression a1_0 =null; + + + // Java.g:15250:5: (a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:15250:5: a1_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_synpred145_Java12594); + a1_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred145_Java + + // $ANTLR start synpred146_Java + public final void synpred146_Java_fragment() throws RecognitionException { + org.emftext.language.java.expressions.AssignmentExpression a3_0 =null; + + + // Java.g:15355:7: (a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression ) + // Java.g:15355:7: a3_0= parse_org_emftext_language_java_expressions_AssignmentExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_synpred146_Java12689); + a3_0=parse_org_emftext_language_java_expressions_AssignmentExpression(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred146_Java + + // $ANTLR start synpred151_Java + public final void synpred151_Java_fragment() throws RecognitionException { + Token a0=null; + Token a1=null; + + // Java.g:15697:3: ( ( (a0= IDENTIFIER ) a1= '.' ) ) + // Java.g:15697:3: ( (a0= IDENTIFIER ) a1= '.' ) + { + // Java.g:15697:3: ( (a0= IDENTIFIER ) a1= '.' ) + // Java.g:15698:4: (a0= IDENTIFIER ) a1= '.' + { + // Java.g:15698:4: (a0= IDENTIFIER ) + // Java.g:15699:5: a0= IDENTIFIER + { + a0=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_synpred151_Java12953); if (state.failed) return ; + + } + + + a1=(Token)match(input,37,FOLLOW_37_in_synpred151_Java12986); if (state.failed) return ; + + } + + + } + + } + // $ANTLR end synpred151_Java + + // $ANTLR start synpred152_Java + public final void synpred152_Java_fragment() throws RecognitionException { + Token a3=null; + org.emftext.language.java.types.ClassifierReference a2_0 =null; + + + // Java.g:15758:3: ( ( (a2_0= parse_org_emftext_language_java_types_ClassifierReference ) a3= '.' ) ) + // Java.g:15758:3: ( (a2_0= parse_org_emftext_language_java_types_ClassifierReference ) a3= '.' ) + { + // Java.g:15758:3: ( (a2_0= parse_org_emftext_language_java_types_ClassifierReference ) a3= '.' ) + // Java.g:15759:4: (a2_0= parse_org_emftext_language_java_types_ClassifierReference ) a3= '.' + { + // Java.g:15759:4: (a2_0= parse_org_emftext_language_java_types_ClassifierReference ) + // Java.g:15760:5: a2_0= parse_org_emftext_language_java_types_ClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_ClassifierReference_in_synpred152_Java13034); + a2_0=parse_org_emftext_language_java_types_ClassifierReference(); + + state._fsp--; + if (state.failed) return ; + + } + + + a3=(Token)match(input,37,FOLLOW_37_in_synpred152_Java13062); if (state.failed) return ; + + } + + + } + + } + // $ANTLR end synpred152_Java + + // $ANTLR start synpred154_Java + public final void synpred154_Java_fragment() throws RecognitionException { + Token a1=null; + Token a3=null; + Token a5=null; + org.emftext.language.java.generics.TypeArgument a2_0 =null; + + org.emftext.language.java.generics.TypeArgument a4_0 =null; + + + // Java.g:16041:3: ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) ) + // Java.g:16041:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) + { + // Java.g:16041:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) + // Java.g:16042:4: a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' + { + a1=(Token)match(input,43,FOLLOW_43_in_synpred154_Java13166); if (state.failed) return ; + + // Java.g:16069:4: (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:16070:5: a2_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_synpred154_Java13192); + a2_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return ; + + } + + + // Java.g:16096:4: ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* + loop287: + do { + int alt287=2; + int LA287_0 = input.LA(1); + + if ( (LA287_0==33) ) { + alt287=1; + } + + + switch (alt287) { + case 1 : + // Java.g:16097:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + { + // Java.g:16097:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + // Java.g:16098:6: a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) + { + a3=(Token)match(input,33,FOLLOW_33_in_synpred154_Java13233); if (state.failed) return ; + + // Java.g:16125:6: (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:16126:7: a4_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_synpred154_Java13267); + a4_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return ; + + } + + + } + + + } + break; + + default : + break loop287; + } + } while (true); + + + a5=(Token)match(input,46,FOLLOW_46_in_synpred154_Java13328); if (state.failed) return ; + + } + + + } + + } + // $ANTLR end synpred154_Java + + // $ANTLR start synpred164_Java + public final void synpred164_Java_fragment() throws RecognitionException { + Token a1=null; + Token a3=null; + Token a5=null; + org.emftext.language.java.generics.TypeArgument a2_0 =null; + + org.emftext.language.java.generics.TypeArgument a4_0 =null; + + + // Java.g:17340:3: ( (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) ) + // Java.g:17340:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) + { + // Java.g:17340:3: (a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' ) + // Java.g:17341:4: a1= '<' (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* a5= '>' + { + a1=(Token)match(input,43,FOLLOW_43_in_synpred164_Java14161); if (state.failed) return ; + + // Java.g:17368:4: (a2_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:17369:5: a2_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_synpred164_Java14187); + a2_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return ; + + } + + + // Java.g:17395:4: ( (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) )* + loop291: + do { + int alt291=2; + int LA291_0 = input.LA(1); + + if ( (LA291_0==33) ) { + alt291=1; + } + + + switch (alt291) { + case 1 : + // Java.g:17396:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + { + // Java.g:17396:5: (a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) ) + // Java.g:17397:6: a3= ',' (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) + { + a3=(Token)match(input,33,FOLLOW_33_in_synpred164_Java14228); if (state.failed) return ; + + // Java.g:17424:6: (a4_0= parse_org_emftext_language_java_generics_TypeArgument ) + // Java.g:17425:7: a4_0= parse_org_emftext_language_java_generics_TypeArgument + { + pushFollow(FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_synpred164_Java14262); + a4_0=parse_org_emftext_language_java_generics_TypeArgument(); + + state._fsp--; + if (state.failed) return ; + + } + + + } + + + } + break; + + default : + break loop291; + } + } while (true); + + + a5=(Token)match(input,46,FOLLOW_46_in_synpred164_Java14323); if (state.failed) return ; + + } + + + } + + } + // $ANTLR end synpred164_Java + + // $ANTLR start synpred177_Java + public final void synpred177_Java_fragment() throws RecognitionException { + Token a5=null; + org.emftext.language.java.statements.Statement a6_0 =null; + + + // Java.g:20417:3: ( (a5= 'else' (a6_0= parse_org_emftext_language_java_statements_Statement ) ) ) + // Java.g:20417:3: (a5= 'else' (a6_0= parse_org_emftext_language_java_statements_Statement ) ) + { + // Java.g:20417:3: (a5= 'else' (a6_0= parse_org_emftext_language_java_statements_Statement ) ) + // Java.g:20418:4: a5= 'else' (a6_0= parse_org_emftext_language_java_statements_Statement ) + { + a5=(Token)match(input,69,FOLLOW_69_in_synpred177_Java15635); if (state.failed) return ; + + // Java.g:20507:4: (a6_0= parse_org_emftext_language_java_statements_Statement ) + // Java.g:20508:5: a6_0= parse_org_emftext_language_java_statements_Statement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Statement_in_synpred177_Java15661); + a6_0=parse_org_emftext_language_java_statements_Statement(); + + state._fsp--; + if (state.failed) return ; + + } + + + } + + + } + + } + // $ANTLR end synpred177_Java + + // $ANTLR start synpred206_Java + public final void synpred206_Java_fragment() throws RecognitionException { + org.emftext.language.java.operators.ShiftOperator a1_0 =null; + + org.emftext.language.java.expressions.AdditiveExpression a2_0 =null; + + + // Java.g:29317:3: ( ( (a1_0= parse_org_emftext_language_java_operators_ShiftOperator ) (a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) ) ) + // Java.g:29317:3: ( (a1_0= parse_org_emftext_language_java_operators_ShiftOperator ) (a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) ) + { + // Java.g:29317:3: ( (a1_0= parse_org_emftext_language_java_operators_ShiftOperator ) (a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) ) + // Java.g:29318:4: (a1_0= parse_org_emftext_language_java_operators_ShiftOperator ) (a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) + { + // Java.g:29318:4: (a1_0= parse_org_emftext_language_java_operators_ShiftOperator ) + // Java.g:29319:5: a1_0= parse_org_emftext_language_java_operators_ShiftOperator + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_ShiftOperator_in_synpred206_Java19308); + a1_0=parse_org_emftext_language_java_operators_ShiftOperator(); + + state._fsp--; + if (state.failed) return ; + + } + + + // Java.g:29386:4: (a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression ) + // Java.g:29387:5: a2_0= parse_org_emftext_language_java_expressions_AdditiveExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_AdditiveExpression_in_synpred206_Java19342); + a2_0=parse_org_emftext_language_java_expressions_AdditiveExpression(); + + state._fsp--; + if (state.failed) return ; + + } + + + } + + + } + + } + // $ANTLR end synpred206_Java + + // $ANTLR start synpred210_Java + public final void synpred210_Java_fragment() throws RecognitionException { + org.emftext.language.java.operators.UnaryModificationOperator a1_0 =null; + + + // Java.g:30489:3: ( ( (a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) ) + // Java.g:30489:3: ( (a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) + { + // Java.g:30489:3: ( (a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) ) + // Java.g:30490:4: (a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) + { + // Java.g:30490:4: (a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator ) + // Java.g:30491:5: a1_0= parse_org_emftext_language_java_operators_UnaryModificationOperator + { + pushFollow(FOLLOW_parse_org_emftext_language_java_operators_UnaryModificationOperator_in_synpred210_Java19761); + a1_0=parse_org_emftext_language_java_operators_UnaryModificationOperator(); + + state._fsp--; + if (state.failed) return ; + + } + + + } + + + } + + } + // $ANTLR end synpred210_Java + + // $ANTLR start synpred218_Java + public final void synpred218_Java_fragment() throws RecognitionException { + org.emftext.language.java.classifiers.Class c0 =null; + + + // Java.g:36866:2: (c0= parse_org_emftext_language_java_classifiers_Class ) + // Java.g:36866:2: c0= parse_org_emftext_language_java_classifiers_Class + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Class_in_synpred218_Java22456); + c0=parse_org_emftext_language_java_classifiers_Class(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred218_Java + + // $ANTLR start synpred219_Java + public final void synpred219_Java_fragment() throws RecognitionException { + org.emftext.language.java.classifiers.Interface c1 =null; + + + // Java.g:36867:4: (c1= parse_org_emftext_language_java_classifiers_Interface ) + // Java.g:36867:4: c1= parse_org_emftext_language_java_classifiers_Interface + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Interface_in_synpred219_Java22466); + c1=parse_org_emftext_language_java_classifiers_Interface(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred219_Java + + // $ANTLR start synpred220_Java + public final void synpred220_Java_fragment() throws RecognitionException { + org.emftext.language.java.classifiers.Enumeration c2 =null; + + + // Java.g:36868:4: (c2= parse_org_emftext_language_java_classifiers_Enumeration ) + // Java.g:36868:4: c2= parse_org_emftext_language_java_classifiers_Enumeration + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Enumeration_in_synpred220_Java22476); + c2=parse_org_emftext_language_java_classifiers_Enumeration(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred220_Java + + // $ANTLR start synpred232_Java + public final void synpred232_Java_fragment() throws RecognitionException { + org.emftext.language.java.types.NamespaceClassifierReference c0 =null; + + + // Java.g:36892:2: (c0= parse_org_emftext_language_java_types_NamespaceClassifierReference ) + // Java.g:36892:2: c0= parse_org_emftext_language_java_types_NamespaceClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_synpred232_Java22638); + c0=parse_org_emftext_language_java_types_NamespaceClassifierReference(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred232_Java + + // $ANTLR start synpred233_Java + public final void synpred233_Java_fragment() throws RecognitionException { + org.emftext.language.java.types.ClassifierReference c1 =null; + + + // Java.g:36893:4: (c1= parse_org_emftext_language_java_types_ClassifierReference ) + // Java.g:36893:4: c1= parse_org_emftext_language_java_types_ClassifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_types_ClassifierReference_in_synpred233_Java22648); + c1=parse_org_emftext_language_java_types_ClassifierReference(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred233_Java + + // $ANTLR start synpred242_Java + public final void synpred242_Java_fragment() throws RecognitionException { + org.emftext.language.java.classifiers.Class c0 =null; + + + // Java.g:36908:2: (c0= parse_org_emftext_language_java_classifiers_Class ) + // Java.g:36908:2: c0= parse_org_emftext_language_java_classifiers_Class + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Class_in_synpred242_Java22759); + c0=parse_org_emftext_language_java_classifiers_Class(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred242_Java + + // $ANTLR start synpred243_Java + public final void synpred243_Java_fragment() throws RecognitionException { + org.emftext.language.java.classifiers.Interface c1 =null; + + + // Java.g:36909:4: (c1= parse_org_emftext_language_java_classifiers_Interface ) + // Java.g:36909:4: c1= parse_org_emftext_language_java_classifiers_Interface + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Interface_in_synpred243_Java22769); + c1=parse_org_emftext_language_java_classifiers_Interface(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred243_Java + + // $ANTLR start synpred244_Java + public final void synpred244_Java_fragment() throws RecognitionException { + org.emftext.language.java.classifiers.Enumeration c2 =null; + + + // Java.g:36910:4: (c2= parse_org_emftext_language_java_classifiers_Enumeration ) + // Java.g:36910:4: c2= parse_org_emftext_language_java_classifiers_Enumeration + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Enumeration_in_synpred244_Java22779); + c2=parse_org_emftext_language_java_classifiers_Enumeration(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred244_Java + + // $ANTLR start synpred245_Java + public final void synpred245_Java_fragment() throws RecognitionException { + org.emftext.language.java.classifiers.Annotation c3 =null; + + + // Java.g:36911:4: (c3= parse_org_emftext_language_java_classifiers_Annotation ) + // Java.g:36911:4: c3= parse_org_emftext_language_java_classifiers_Annotation + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Annotation_in_synpred245_Java22789); + c3=parse_org_emftext_language_java_classifiers_Annotation(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred245_Java + + // $ANTLR start synpred246_Java + public final void synpred246_Java_fragment() throws RecognitionException { + org.emftext.language.java.statements.Block c4 =null; + + + // Java.g:36912:4: (c4= parse_org_emftext_language_java_statements_Block ) + // Java.g:36912:4: c4= parse_org_emftext_language_java_statements_Block + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Block_in_synpred246_Java22799); + c4=parse_org_emftext_language_java_statements_Block(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred246_Java + + // $ANTLR start synpred247_Java + public final void synpred247_Java_fragment() throws RecognitionException { + org.emftext.language.java.members.Constructor c5 =null; + + + // Java.g:36913:4: (c5= parse_org_emftext_language_java_members_Constructor ) + // Java.g:36913:4: c5= parse_org_emftext_language_java_members_Constructor + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_Constructor_in_synpred247_Java22809); + c5=parse_org_emftext_language_java_members_Constructor(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred247_Java + + // $ANTLR start synpred248_Java + public final void synpred248_Java_fragment() throws RecognitionException { + org.emftext.language.java.members.InterfaceMethod c6 =null; + + + // Java.g:36914:4: (c6= parse_org_emftext_language_java_members_InterfaceMethod ) + // Java.g:36914:4: c6= parse_org_emftext_language_java_members_InterfaceMethod + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_InterfaceMethod_in_synpred248_Java22819); + c6=parse_org_emftext_language_java_members_InterfaceMethod(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred248_Java + + // $ANTLR start synpred249_Java + public final void synpred249_Java_fragment() throws RecognitionException { + org.emftext.language.java.members.ClassMethod c7 =null; + + + // Java.g:36915:4: (c7= parse_org_emftext_language_java_members_ClassMethod ) + // Java.g:36915:4: c7= parse_org_emftext_language_java_members_ClassMethod + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_ClassMethod_in_synpred249_Java22829); + c7=parse_org_emftext_language_java_members_ClassMethod(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred249_Java + + // $ANTLR start synpred250_Java + public final void synpred250_Java_fragment() throws RecognitionException { + org.emftext.language.java.annotations.AnnotationAttribute c8 =null; + + + // Java.g:36916:4: (c8= parse_org_emftext_language_java_annotations_AnnotationAttribute ) + // Java.g:36916:4: c8= parse_org_emftext_language_java_annotations_AnnotationAttribute + { + pushFollow(FOLLOW_parse_org_emftext_language_java_annotations_AnnotationAttribute_in_synpred250_Java22839); + c8=parse_org_emftext_language_java_annotations_AnnotationAttribute(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred250_Java + + // $ANTLR start synpred251_Java + public final void synpred251_Java_fragment() throws RecognitionException { + org.emftext.language.java.members.Field c9 =null; + + + // Java.g:36917:4: (c9= parse_org_emftext_language_java_members_Field ) + // Java.g:36917:4: c9= parse_org_emftext_language_java_members_Field + { + pushFollow(FOLLOW_parse_org_emftext_language_java_members_Field_in_synpred251_Java22849); + c9=parse_org_emftext_language_java_members_Field(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred251_Java + + // $ANTLR start synpred263_Java + public final void synpred263_Java_fragment() throws RecognitionException { + org.emftext.language.java.classifiers.Class c0 =null; + + + // Java.g:36947:2: (c0= parse_org_emftext_language_java_classifiers_Class ) + // Java.g:36947:2: c0= parse_org_emftext_language_java_classifiers_Class + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Class_in_synpred263_Java23032); + c0=parse_org_emftext_language_java_classifiers_Class(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred263_Java + + // $ANTLR start synpred264_Java + public final void synpred264_Java_fragment() throws RecognitionException { + org.emftext.language.java.classifiers.Interface c1 =null; + + + // Java.g:36948:4: (c1= parse_org_emftext_language_java_classifiers_Interface ) + // Java.g:36948:4: c1= parse_org_emftext_language_java_classifiers_Interface + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Interface_in_synpred264_Java23042); + c1=parse_org_emftext_language_java_classifiers_Interface(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred264_Java + + // $ANTLR start synpred265_Java + public final void synpred265_Java_fragment() throws RecognitionException { + org.emftext.language.java.classifiers.Enumeration c2 =null; + + + // Java.g:36949:4: (c2= parse_org_emftext_language_java_classifiers_Enumeration ) + // Java.g:36949:4: c2= parse_org_emftext_language_java_classifiers_Enumeration + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Enumeration_in_synpred265_Java23052); + c2=parse_org_emftext_language_java_classifiers_Enumeration(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred265_Java + + // $ANTLR start synpred266_Java + public final void synpred266_Java_fragment() throws RecognitionException { + org.emftext.language.java.classifiers.Annotation c3 =null; + + + // Java.g:36950:4: (c3= parse_org_emftext_language_java_classifiers_Annotation ) + // Java.g:36950:4: c3= parse_org_emftext_language_java_classifiers_Annotation + { + pushFollow(FOLLOW_parse_org_emftext_language_java_classifiers_Annotation_in_synpred266_Java23062); + c3=parse_org_emftext_language_java_classifiers_Annotation(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred266_Java + + // $ANTLR start synpred267_Java + public final void synpred267_Java_fragment() throws RecognitionException { + org.emftext.language.java.statements.Block c4 =null; + + + // Java.g:36951:4: (c4= parse_org_emftext_language_java_statements_Block ) + // Java.g:36951:4: c4= parse_org_emftext_language_java_statements_Block + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_Block_in_synpred267_Java23072); + c4=parse_org_emftext_language_java_statements_Block(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred267_Java + + // $ANTLR start synpred268_Java + public final void synpred268_Java_fragment() throws RecognitionException { + org.emftext.language.java.statements.LocalVariableStatement c5 =null; + + + // Java.g:36952:4: (c5= parse_org_emftext_language_java_statements_LocalVariableStatement ) + // Java.g:36952:4: c5= parse_org_emftext_language_java_statements_LocalVariableStatement + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_LocalVariableStatement_in_synpred268_Java23082); + c5=parse_org_emftext_language_java_statements_LocalVariableStatement(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred268_Java + + // $ANTLR start synpred271_Java + public final void synpred271_Java_fragment() throws RecognitionException { + org.emftext.language.java.statements.ForLoop c8 =null; + + + // Java.g:36955:4: (c8= parse_org_emftext_language_java_statements_ForLoop ) + // Java.g:36955:4: c8= parse_org_emftext_language_java_statements_ForLoop + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_ForLoop_in_synpred271_Java23112); + c8=parse_org_emftext_language_java_statements_ForLoop(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred271_Java + + // $ANTLR start synpred272_Java + public final void synpred272_Java_fragment() throws RecognitionException { + org.emftext.language.java.statements.ForEachLoop c9 =null; + + + // Java.g:36956:4: (c9= parse_org_emftext_language_java_statements_ForEachLoop ) + // Java.g:36956:4: c9= parse_org_emftext_language_java_statements_ForEachLoop + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_ForEachLoop_in_synpred272_Java23122); + c9=parse_org_emftext_language_java_statements_ForEachLoop(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred272_Java + + // $ANTLR start synpred273_Java + public final void synpred273_Java_fragment() throws RecognitionException { + org.emftext.language.java.statements.WhileLoop c10 =null; + + + // Java.g:36957:4: (c10= parse_org_emftext_language_java_statements_WhileLoop ) + // Java.g:36957:4: c10= parse_org_emftext_language_java_statements_WhileLoop + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_WhileLoop_in_synpred273_Java23132); + c10=parse_org_emftext_language_java_statements_WhileLoop(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred273_Java + + // $ANTLR start synpred274_Java + public final void synpred274_Java_fragment() throws RecognitionException { + org.emftext.language.java.statements.DoWhileLoop c11 =null; + + + // Java.g:36958:4: (c11= parse_org_emftext_language_java_statements_DoWhileLoop ) + // Java.g:36958:4: c11= parse_org_emftext_language_java_statements_DoWhileLoop + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_DoWhileLoop_in_synpred274_Java23142); + c11=parse_org_emftext_language_java_statements_DoWhileLoop(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred274_Java + + // $ANTLR start synpred276_Java + public final void synpred276_Java_fragment() throws RecognitionException { + org.emftext.language.java.statements.SynchronizedBlock c13 =null; + + + // Java.g:36960:4: (c13= parse_org_emftext_language_java_statements_SynchronizedBlock ) + // Java.g:36960:4: c13= parse_org_emftext_language_java_statements_SynchronizedBlock + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_SynchronizedBlock_in_synpred276_Java23162); + c13=parse_org_emftext_language_java_statements_SynchronizedBlock(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred276_Java + + // $ANTLR start synpred283_Java + public final void synpred283_Java_fragment() throws RecognitionException { + org.emftext.language.java.statements.JumpLabel c20 =null; + + + // Java.g:36967:4: (c20= parse_org_emftext_language_java_statements_JumpLabel ) + // Java.g:36967:4: c20= parse_org_emftext_language_java_statements_JumpLabel + { + pushFollow(FOLLOW_parse_org_emftext_language_java_statements_JumpLabel_in_synpred283_Java23232); + c20=parse_org_emftext_language_java_statements_JumpLabel(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred283_Java + + // $ANTLR start synpred284_Java + public final void synpred284_Java_fragment() throws RecognitionException { + org.emftext.language.java.parameters.OrdinaryParameter c0 =null; + + + // Java.g:36974:2: (c0= parse_org_emftext_language_java_parameters_OrdinaryParameter ) + // Java.g:36974:2: c0= parse_org_emftext_language_java_parameters_OrdinaryParameter + { + pushFollow(FOLLOW_parse_org_emftext_language_java_parameters_OrdinaryParameter_in_synpred284_Java23263); + c0=parse_org_emftext_language_java_parameters_OrdinaryParameter(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred284_Java + + // $ANTLR start synpred289_Java + public final void synpred289_Java_fragment() throws RecognitionException { + org.emftext.language.java.instantiations.NewConstructorCall c1 =null; + + + // Java.g:36991:4: (c1= parse_org_emftext_language_java_instantiations_NewConstructorCall ) + // Java.g:36991:4: c1= parse_org_emftext_language_java_instantiations_NewConstructorCall + { + pushFollow(FOLLOW_parse_org_emftext_language_java_instantiations_NewConstructorCall_in_synpred289_Java23355); + c1=parse_org_emftext_language_java_instantiations_NewConstructorCall(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred289_Java + + // $ANTLR start synpred290_Java + public final void synpred290_Java_fragment() throws RecognitionException { + org.emftext.language.java.instantiations.ExplicitConstructorCall c2 =null; + + + // Java.g:36992:4: (c2= parse_org_emftext_language_java_instantiations_ExplicitConstructorCall ) + // Java.g:36992:4: c2= parse_org_emftext_language_java_instantiations_ExplicitConstructorCall + { + pushFollow(FOLLOW_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall_in_synpred290_Java23365); + c2=parse_org_emftext_language_java_instantiations_ExplicitConstructorCall(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred290_Java + + // $ANTLR start synpred291_Java + public final void synpred291_Java_fragment() throws RecognitionException { + org.emftext.language.java.arrays.ArrayInstantiationByValuesTyped c3 =null; + + + // Java.g:36993:4: (c3= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped ) + // Java.g:36993:4: c3= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped_in_synpred291_Java23375); + c3=parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred291_Java + + // $ANTLR start synpred293_Java + public final void synpred293_Java_fragment() throws RecognitionException { + org.emftext.language.java.arrays.ArrayInstantiationBySize c5 =null; + + + // Java.g:36995:4: (c5= parse_org_emftext_language_java_arrays_ArrayInstantiationBySize ) + // Java.g:36995:4: c5= parse_org_emftext_language_java_arrays_ArrayInstantiationBySize + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize_in_synpred293_Java23395); + c5=parse_org_emftext_language_java_arrays_ArrayInstantiationBySize(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred293_Java + + // $ANTLR start synpred294_Java + public final void synpred294_Java_fragment() throws RecognitionException { + org.emftext.language.java.references.MethodCall c6 =null; + + + // Java.g:36996:4: (c6= parse_org_emftext_language_java_references_MethodCall ) + // Java.g:36996:4: c6= parse_org_emftext_language_java_references_MethodCall + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_MethodCall_in_synpred294_Java23405); + c6=parse_org_emftext_language_java_references_MethodCall(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred294_Java + + // $ANTLR start synpred295_Java + public final void synpred295_Java_fragment() throws RecognitionException { + org.emftext.language.java.references.IdentifierReference c7 =null; + + + // Java.g:36997:4: (c7= parse_org_emftext_language_java_references_IdentifierReference ) + // Java.g:36997:4: c7= parse_org_emftext_language_java_references_IdentifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_IdentifierReference_in_synpred295_Java23415); + c7=parse_org_emftext_language_java_references_IdentifierReference(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred295_Java + + // $ANTLR start synpred297_Java + public final void synpred297_Java_fragment() throws RecognitionException { + org.emftext.language.java.references.SelfReference c9 =null; + + + // Java.g:36999:4: (c9= parse_org_emftext_language_java_references_SelfReference ) + // Java.g:36999:4: c9= parse_org_emftext_language_java_references_SelfReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_SelfReference_in_synpred297_Java23435); + c9=parse_org_emftext_language_java_references_SelfReference(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred297_Java + + // $ANTLR start synpred309_Java + public final void synpred309_Java_fragment() throws RecognitionException { + org.emftext.language.java.variables.LocalVariable c0 =null; + + + // Java.g:37029:2: (c0= parse_org_emftext_language_java_variables_LocalVariable ) + // Java.g:37029:2: c0= parse_org_emftext_language_java_variables_LocalVariable + { + pushFollow(FOLLOW_parse_org_emftext_language_java_variables_LocalVariable_in_synpred309_Java23618); + c0=parse_org_emftext_language_java_variables_LocalVariable(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred309_Java + + // $ANTLR start synpred334_Java + public final void synpred334_Java_fragment() throws RecognitionException { + org.emftext.language.java.expressions.SuffixUnaryModificationExpression c0 =null; + + + // Java.g:37108:2: (c0= parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression ) + // Java.g:37108:2: c0= parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression_in_synpred334_Java24057); + c0=parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred334_Java + + // $ANTLR start synpred336_Java + public final void synpred336_Java_fragment() throws RecognitionException { + org.emftext.language.java.instantiations.NewConstructorCall c1 =null; + + + // Java.g:37116:4: (c1= parse_org_emftext_language_java_instantiations_NewConstructorCall ) + // Java.g:37116:4: c1= parse_org_emftext_language_java_instantiations_NewConstructorCall + { + pushFollow(FOLLOW_parse_org_emftext_language_java_instantiations_NewConstructorCall_in_synpred336_Java24098); + c1=parse_org_emftext_language_java_instantiations_NewConstructorCall(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred336_Java + + // $ANTLR start synpred337_Java + public final void synpred337_Java_fragment() throws RecognitionException { + org.emftext.language.java.instantiations.ExplicitConstructorCall c2 =null; + + + // Java.g:37117:4: (c2= parse_org_emftext_language_java_instantiations_ExplicitConstructorCall ) + // Java.g:37117:4: c2= parse_org_emftext_language_java_instantiations_ExplicitConstructorCall + { + pushFollow(FOLLOW_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall_in_synpred337_Java24108); + c2=parse_org_emftext_language_java_instantiations_ExplicitConstructorCall(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred337_Java + + // $ANTLR start synpred338_Java + public final void synpred338_Java_fragment() throws RecognitionException { + org.emftext.language.java.arrays.ArrayInstantiationByValuesTyped c3 =null; + + + // Java.g:37118:4: (c3= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped ) + // Java.g:37118:4: c3= parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped_in_synpred338_Java24118); + c3=parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred338_Java + + // $ANTLR start synpred340_Java + public final void synpred340_Java_fragment() throws RecognitionException { + org.emftext.language.java.arrays.ArrayInstantiationBySize c5 =null; + + + // Java.g:37120:4: (c5= parse_org_emftext_language_java_arrays_ArrayInstantiationBySize ) + // Java.g:37120:4: c5= parse_org_emftext_language_java_arrays_ArrayInstantiationBySize + { + pushFollow(FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize_in_synpred340_Java24138); + c5=parse_org_emftext_language_java_arrays_ArrayInstantiationBySize(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred340_Java + + // $ANTLR start synpred341_Java + public final void synpred341_Java_fragment() throws RecognitionException { + org.emftext.language.java.references.MethodCall c6 =null; + + + // Java.g:37121:4: (c6= parse_org_emftext_language_java_references_MethodCall ) + // Java.g:37121:4: c6= parse_org_emftext_language_java_references_MethodCall + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_MethodCall_in_synpred341_Java24148); + c6=parse_org_emftext_language_java_references_MethodCall(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred341_Java + + // $ANTLR start synpred342_Java + public final void synpred342_Java_fragment() throws RecognitionException { + org.emftext.language.java.references.IdentifierReference c7 =null; + + + // Java.g:37122:4: (c7= parse_org_emftext_language_java_references_IdentifierReference ) + // Java.g:37122:4: c7= parse_org_emftext_language_java_references_IdentifierReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_IdentifierReference_in_synpred342_Java24158); + c7=parse_org_emftext_language_java_references_IdentifierReference(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred342_Java + + // $ANTLR start synpred344_Java + public final void synpred344_Java_fragment() throws RecognitionException { + org.emftext.language.java.references.SelfReference c9 =null; + + + // Java.g:37124:4: (c9= parse_org_emftext_language_java_references_SelfReference ) + // Java.g:37124:4: c9= parse_org_emftext_language_java_references_SelfReference + { + pushFollow(FOLLOW_parse_org_emftext_language_java_references_SelfReference_in_synpred344_Java24178); + c9=parse_org_emftext_language_java_references_SelfReference(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred344_Java + + // $ANTLR start synpred347_Java + public final void synpred347_Java_fragment() throws RecognitionException { + org.emftext.language.java.expressions.CastExpression c12 =null; + + + // Java.g:37127:4: (c12= parse_org_emftext_language_java_expressions_CastExpression ) + // Java.g:37127:4: c12= parse_org_emftext_language_java_expressions_CastExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_CastExpression_in_synpred347_Java24208); + c12=parse_org_emftext_language_java_expressions_CastExpression(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred347_Java + + // $ANTLR start synpred348_Java + public final void synpred348_Java_fragment() throws RecognitionException { + org.emftext.language.java.expressions.NestedExpression c13 =null; + + + // Java.g:37128:4: (c13= parse_org_emftext_language_java_expressions_NestedExpression ) + // Java.g:37128:4: c13= parse_org_emftext_language_java_expressions_NestedExpression + { + pushFollow(FOLLOW_parse_org_emftext_language_java_expressions_NestedExpression_in_synpred348_Java24218); + c13=parse_org_emftext_language_java_expressions_NestedExpression(); + + state._fsp--; + if (state.failed) return ; + + } + + } + // $ANTLR end synpred348_Java + + // Delegated rules + + public final boolean synpred341_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred341_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred273_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred273_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred249_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred249_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred336_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred336_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred154_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred154_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred210_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred210_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred334_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred334_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred220_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred220_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred297_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred297_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred340_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred340_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred290_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred290_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred151_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred151_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred268_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred268_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred342_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred342_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred266_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred266_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred271_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred271_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred337_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred337_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred145_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred145_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred77_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred77_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred276_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred276_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred152_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred152_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred284_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred284_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred242_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred242_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred309_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred309_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred348_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred348_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred233_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred233_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred272_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred272_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred338_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred338_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred294_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred294_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred293_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred293_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred244_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred244_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred250_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred250_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred248_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred248_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred251_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred251_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred146_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred146_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred232_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred232_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred291_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred291_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred289_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred289_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred267_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred267_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred274_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred274_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred243_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred243_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred1_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred1_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred264_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred264_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred177_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred177_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred219_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred219_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred246_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred246_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred218_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred218_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred245_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred245_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred295_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred295_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred2_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred2_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred283_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred283_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred347_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred347_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred344_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred344_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred247_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred247_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred265_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred265_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred47_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred47_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred206_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred206_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred50_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred50_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred263_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred263_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred7_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred7_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred164_Java() { + state.backtracking++; + int start = input.mark(); + try { + synpred164_Java_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + + + protected DFA214 dfa214 = new DFA214(this); + protected DFA221 dfa221 = new DFA221(this); + static final String DFA214_eotS = + "\13\uffff"; + static final String DFA214_eofS = + "\13\uffff"; + static final String DFA214_minS = + "\1\116\1\16\1\45\2\16\1\uffff\1\45\1\uffff\1\16\2\uffff"; + static final String DFA214_maxS = + "\1\116\1\134\1\52\1\16\1\34\1\uffff\1\52\1\uffff\1\34\2\uffff"; + static final String DFA214_acceptS = + "\5\uffff\1\1\1\uffff\1\2\1\uffff\1\3\1\4"; + static final String DFA214_specialS = + "\13\uffff}>"; + static final String[] DFA214_transitionS = { + "\1\1", + "\1\2\115\uffff\1\3", + "\1\4\4\uffff\1\5", + "\1\6", + "\1\2\15\uffff\1\7", + "", + "\1\10\4\uffff\1\11", + "", + "\1\6\15\uffff\1\12", + "", + "" + }; + + static final short[] DFA214_eot = DFA.unpackEncodedString(DFA214_eotS); + static final short[] DFA214_eof = DFA.unpackEncodedString(DFA214_eofS); + static final char[] DFA214_min = DFA.unpackEncodedStringToUnsignedChars(DFA214_minS); + static final char[] DFA214_max = DFA.unpackEncodedStringToUnsignedChars(DFA214_maxS); + static final short[] DFA214_accept = DFA.unpackEncodedString(DFA214_acceptS); + static final short[] DFA214_special = DFA.unpackEncodedString(DFA214_specialS); + static final short[][] DFA214_transition; + + static { + int numStates = DFA214_transitionS.length; + DFA214_transition = new short[numStates][]; + for (int i=0; i"; + static final String[] DFA221_transitionS = { + "\12\47\1\21\1\uffff\2\47\1\uffff\1\47\1\uffff\1\47\4\uffff\1"+ + "\47\3\uffff\2\47\2\uffff\2\47\6\uffff\1\40\1\47\4\uffff\1\1"+ + "\7\uffff\1\3\1\33\1\23\1\45\1\25\2\uffff\1\24\1\15\1\46\1\uffff"+ + "\1\37\1\32\1\uffff\1\17\1\uffff\1\6\1\uffff\1\31\1\35\1\34\3"+ + "\uffff\1\27\1\16\1\30\1\10\2\47\1\uffff\1\5\1\4\1\2\1\43\1\26"+ + "\1\7\1\14\1\47\1\42\1\11\1\47\1\44\1\uffff\1\12\1\41\1\22\1"+ + "\13\1\36\1\20\4\uffff\1\47", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "", + "", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "", + "", + "\1\uffff", + "", + "\1\uffff", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA221_eot = DFA.unpackEncodedString(DFA221_eotS); + static final short[] DFA221_eof = DFA.unpackEncodedString(DFA221_eofS); + static final char[] DFA221_min = DFA.unpackEncodedStringToUnsignedChars(DFA221_minS); + static final char[] DFA221_max = DFA.unpackEncodedStringToUnsignedChars(DFA221_maxS); + static final short[] DFA221_accept = DFA.unpackEncodedString(DFA221_acceptS); + static final short[] DFA221_special = DFA.unpackEncodedString(DFA221_specialS); + static final short[][] DFA221_transition; + + static { + int numStates = DFA221_transitionS.length; + DFA221_transition = new short[numStates][]; + for (int i=0; i=0 ) return s; + break; + case 1 : + int LA221_2 = input.LA(1); + + + int index221_2 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred263_Java()) ) {s = 64;} + + else if ( (synpred264_Java()) ) {s = 14;} + + else if ( (synpred265_Java()) ) {s = 15;} + + else if ( (synpred266_Java()) ) {s = 65;} + + else if ( (synpred267_Java()) ) {s = 67;} + + else if ( (synpred268_Java()) ) {s = 66;} + + + input.seek(index221_2); + + if ( s>=0 ) return s; + break; + case 2 : + int LA221_3 = input.LA(1); + + + int index221_3 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred263_Java()) ) {s = 64;} + + else if ( (synpred264_Java()) ) {s = 14;} + + else if ( (synpred265_Java()) ) {s = 15;} + + else if ( (synpred266_Java()) ) {s = 65;} + + else if ( (synpred267_Java()) ) {s = 67;} + + else if ( (synpred268_Java()) ) {s = 66;} + + + input.seek(index221_3); + + if ( s>=0 ) return s; + break; + case 3 : + int LA221_4 = input.LA(1); + + + int index221_4 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred263_Java()) ) {s = 64;} + + else if ( (synpred264_Java()) ) {s = 14;} + + else if ( (synpred265_Java()) ) {s = 15;} + + else if ( (synpred266_Java()) ) {s = 65;} + + else if ( (synpred267_Java()) ) {s = 67;} + + else if ( (synpred268_Java()) ) {s = 66;} + + + input.seek(index221_4); + + if ( s>=0 ) return s; + break; + case 4 : + int LA221_5 = input.LA(1); + + + int index221_5 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred263_Java()) ) {s = 64;} + + else if ( (synpred264_Java()) ) {s = 14;} + + else if ( (synpred265_Java()) ) {s = 15;} + + else if ( (synpred266_Java()) ) {s = 65;} + + else if ( (synpred267_Java()) ) {s = 67;} + + else if ( (synpred268_Java()) ) {s = 66;} + + + input.seek(index221_5); + + if ( s>=0 ) return s; + break; + case 5 : + int LA221_6 = input.LA(1); + + + int index221_6 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred263_Java()) ) {s = 64;} + + else if ( (synpred264_Java()) ) {s = 14;} + + else if ( (synpred265_Java()) ) {s = 15;} + + else if ( (synpred266_Java()) ) {s = 65;} + + else if ( (synpred267_Java()) ) {s = 67;} + + else if ( (synpred268_Java()) ) {s = 66;} + + + input.seek(index221_6); + + if ( s>=0 ) return s; + break; + case 6 : + int LA221_7 = input.LA(1); + + + int index221_7 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred263_Java()) ) {s = 64;} + + else if ( (synpred264_Java()) ) {s = 14;} + + else if ( (synpred265_Java()) ) {s = 15;} + + else if ( (synpred266_Java()) ) {s = 65;} + + else if ( (synpred267_Java()) ) {s = 67;} + + else if ( (synpred268_Java()) ) {s = 66;} + + + input.seek(index221_7); + + if ( s>=0 ) return s; + break; + case 7 : + int LA221_8 = input.LA(1); + + + int index221_8 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred263_Java()) ) {s = 64;} + + else if ( (synpred264_Java()) ) {s = 14;} + + else if ( (synpred265_Java()) ) {s = 15;} + + else if ( (synpred266_Java()) ) {s = 65;} + + else if ( (synpred267_Java()) ) {s = 67;} + + else if ( (synpred268_Java()) ) {s = 66;} + + + input.seek(index221_8); + + if ( s>=0 ) return s; + break; + case 8 : + int LA221_9 = input.LA(1); + + + int index221_9 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred263_Java()) ) {s = 64;} + + else if ( (synpred264_Java()) ) {s = 14;} + + else if ( (synpred265_Java()) ) {s = 15;} + + else if ( (synpred266_Java()) ) {s = 65;} + + else if ( (synpred267_Java()) ) {s = 67;} + + else if ( (synpred268_Java()) ) {s = 66;} + + else if ( (synpred276_Java()) ) {s = 68;} + + + input.seek(index221_9); + + if ( s>=0 ) return s; + break; + case 9 : + int LA221_10 = input.LA(1); + + + int index221_10 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred263_Java()) ) {s = 64;} + + else if ( (synpred264_Java()) ) {s = 14;} + + else if ( (synpred265_Java()) ) {s = 15;} + + else if ( (synpred266_Java()) ) {s = 65;} + + else if ( (synpred267_Java()) ) {s = 67;} + + else if ( (synpred268_Java()) ) {s = 66;} + + + input.seek(index221_10); + + if ( s>=0 ) return s; + break; + case 10 : + int LA221_11 = input.LA(1); + + + int index221_11 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred263_Java()) ) {s = 64;} + + else if ( (synpred264_Java()) ) {s = 14;} + + else if ( (synpred265_Java()) ) {s = 15;} + + else if ( (synpred266_Java()) ) {s = 65;} + + else if ( (synpred267_Java()) ) {s = 67;} + + else if ( (synpred268_Java()) ) {s = 66;} + + + input.seek(index221_11); + + if ( s>=0 ) return s; + break; + case 11 : + int LA221_12 = input.LA(1); + + + int index221_12 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred263_Java()) ) {s = 64;} + + else if ( (synpred264_Java()) ) {s = 14;} + + else if ( (synpred265_Java()) ) {s = 15;} + + else if ( (synpred266_Java()) ) {s = 65;} + + else if ( (synpred267_Java()) ) {s = 67;} + + else if ( (synpred268_Java()) ) {s = 66;} + + + input.seek(index221_12); + + if ( s>=0 ) return s; + break; + case 12 : + int LA221_13 = input.LA(1); + + + int index221_13 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred263_Java()) ) {s = 64;} + + else if ( (true) ) {s = 39;} + + + input.seek(index221_13); + + if ( s>=0 ) return s; + break; + case 13 : + int LA221_16 = input.LA(1); + + + int index221_16 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred267_Java()) ) {s = 67;} + + else if ( (true) ) {s = 39;} + + + input.seek(index221_16); + + if ( s>=0 ) return s; + break; + case 14 : + int LA221_17 = input.LA(1); + + + int index221_17 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred268_Java()) ) {s = 66;} + + else if ( (synpred283_Java()) ) {s = 69;} + + else if ( (true) ) {s = 39;} + + + input.seek(index221_17); + + if ( s>=0 ) return s; + break; + case 15 : + int LA221_18 = input.LA(1); + + + int index221_18 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred268_Java()) ) {s = 66;} + + else if ( (true) ) {s = 39;} + + + input.seek(index221_18); + + if ( s>=0 ) return s; + break; + case 16 : + int LA221_19 = input.LA(1); + + + int index221_19 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred268_Java()) ) {s = 66;} + + else if ( (true) ) {s = 39;} + + + input.seek(index221_19); + + if ( s>=0 ) return s; + break; + case 17 : + int LA221_20 = input.LA(1); + + + int index221_20 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred268_Java()) ) {s = 66;} + + else if ( (true) ) {s = 39;} + + + input.seek(index221_20); + + if ( s>=0 ) return s; + break; + case 18 : + int LA221_21 = input.LA(1); + + + int index221_21 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred268_Java()) ) {s = 66;} + + else if ( (true) ) {s = 39;} + + + input.seek(index221_21); + + if ( s>=0 ) return s; + break; + case 19 : + int LA221_22 = input.LA(1); + + + int index221_22 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred268_Java()) ) {s = 66;} + + else if ( (true) ) {s = 39;} + + + input.seek(index221_22); + + if ( s>=0 ) return s; + break; + case 20 : + int LA221_23 = input.LA(1); + + + int index221_23 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred268_Java()) ) {s = 66;} + + else if ( (true) ) {s = 39;} + + + input.seek(index221_23); + + if ( s>=0 ) return s; + break; + case 21 : + int LA221_24 = input.LA(1); + + + int index221_24 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred268_Java()) ) {s = 66;} + + else if ( (true) ) {s = 39;} + + + input.seek(index221_24); + + if ( s>=0 ) return s; + break; + case 22 : + int LA221_25 = input.LA(1); + + + int index221_25 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred268_Java()) ) {s = 66;} + + else if ( (true) ) {s = 39;} + + + input.seek(index221_25); + + if ( s>=0 ) return s; + break; + case 23 : + int LA221_26 = input.LA(1); + + + int index221_26 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred268_Java()) ) {s = 66;} + + else if ( (true) ) {s = 39;} + + + input.seek(index221_26); + + if ( s>=0 ) return s; + break; + case 24 : + int LA221_29 = input.LA(1); + + + int index221_29 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred271_Java()) ) {s = 70;} + + else if ( (synpred272_Java()) ) {s = 71;} + + + input.seek(index221_29); + + if ( s>=0 ) return s; + break; + case 25 : + int LA221_31 = input.LA(1); + + + int index221_31 = input.index(); + input.rewind(); + + s = -1; + if ( (synpred273_Java()) ) {s = 30;} + + else if ( (synpred274_Java()) ) {s = 72;} + + + input.seek(index221_31); + + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + + NoViableAltException nvae = + new NoViableAltException(getDescription(), 221, _s, input); + error(nvae); + throw nvae; + } + + } + + + public static final BitSet FOLLOW_parse_org_emftext_language_java_containers_CompilationUnit_in_start82 = new BitSet(new long[]{0x0000000000000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_containers_Package_in_start96 = new BitSet(new long[]{0x0000000000000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_containers_EmptyModel_in_start110 = new BitSet(new long[]{0x0000000000000000L}); + public static final BitSet FOLLOW_EOF_in_start117 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_imports_Import_in_parse_org_emftext_language_java_containers_EmptyModel158 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_containers_EmptyModel186 = new BitSet(new long[]{0x0000040000000002L,0x0000000000004000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_containers_EmptyModel228 = new BitSet(new long[]{0x0000040000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_annotations_AnnotationInstance_in_parse_org_emftext_language_java_containers_Package285 = new BitSet(new long[]{0x0001000000000000L,0x0000000000400000L}); + public static final BitSet FOLLOW_86_in_parse_org_emftext_language_java_containers_Package311 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_containers_Package340 = new BitSet(new long[]{0x0000002000000000L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_containers_Package373 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_containers_Package410 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_containers_Package431 = new BitSet(new long[]{0x0000040000000002L,0x0000000000004000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_containers_Package454 = new BitSet(new long[]{0x0000040000000002L,0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_imports_Import_in_parse_org_emftext_language_java_containers_Package502 = new BitSet(new long[]{0x0000040000000002L,0x0000000000004000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_containers_Package552 = new BitSet(new long[]{0x0000040000000002L}); + public static final BitSet FOLLOW_86_in_parse_org_emftext_language_java_containers_CompilationUnit609 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_containers_CompilationUnit635 = new BitSet(new long[]{0x0000042000000000L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_containers_CompilationUnit681 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_containers_CompilationUnit715 = new BitSet(new long[]{0x0000042000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_containers_CompilationUnit783 = new BitSet(new long[]{0x0101040000000000L,0x00000091338A4141L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_imports_Import_in_parse_org_emftext_language_java_containers_CompilationUnit831 = new BitSet(new long[]{0x0101040000000000L,0x00000091338A4141L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_containers_CompilationUnit881 = new BitSet(new long[]{0x0101040000000000L,0x00000091338A0141L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_ConcreteClassifier_in_parse_org_emftext_language_java_containers_CompilationUnit929 = new BitSet(new long[]{0x0105040000000002L,0x00000091338A0141L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_containers_CompilationUnit970 = new BitSet(new long[]{0x0105040000000002L,0x00000091338A0141L}); + public static final BitSet FOLLOW_50_in_parse_org_emftext_language_java_containers_CompilationUnit1041 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_78_in_parse_org_emftext_language_java_imports_ClassifierImport1089 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_imports_ClassifierImport1118 = new BitSet(new long[]{0x0000002000000000L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_imports_ClassifierImport1151 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_imports_ClassifierImport1188 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_imports_ClassifierImport1209 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_78_in_parse_org_emftext_language_java_imports_PackageImport1238 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_imports_PackageImport1267 = new BitSet(new long[]{0x0000002000000000L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_imports_PackageImport1300 = new BitSet(new long[]{0x0000000010004000L}); + public static final BitSet FOLLOW_28_in_parse_org_emftext_language_java_imports_PackageImport1333 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_imports_PackageImport1347 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_78_in_parse_org_emftext_language_java_imports_StaticMemberImport1376 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Static_in_parse_org_emftext_language_java_imports_StaticMemberImport1394 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_imports_StaticMemberImport1427 = new BitSet(new long[]{0x0000002000000000L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_imports_StaticMemberImport1460 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_imports_StaticMemberImport1497 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_imports_StaticMemberImport1518 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_78_in_parse_org_emftext_language_java_imports_StaticClassifierImport1547 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Static_in_parse_org_emftext_language_java_imports_StaticClassifierImport1565 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_imports_StaticClassifierImport1598 = new BitSet(new long[]{0x0000002000000000L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_imports_StaticClassifierImport1631 = new BitSet(new long[]{0x0000000010004000L}); + public static final BitSet FOLLOW_28_in_parse_org_emftext_language_java_imports_StaticClassifierImport1664 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_imports_StaticClassifierImport1678 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_classifiers_Class1716 = new BitSet(new long[]{0x0101000000000000L,0x0000009133880101L}); + public static final BitSet FOLLOW_64_in_parse_org_emftext_language_java_classifiers_Class1742 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_classifiers_Class1760 = new BitSet(new long[]{0x0000080000000000L,0x0000020000002080L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_classifiers_Class1790 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_classifiers_Class1816 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_classifiers_Class1857 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_classifiers_Class1891 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_classifiers_Class1952 = new BitSet(new long[]{0x0000000000000000L,0x0000020000002080L}); + public static final BitSet FOLLOW_71_in_parse_org_emftext_language_java_classifiers_Class1994 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_classifiers_Class2020 = new BitSet(new long[]{0x0000000000000000L,0x0000020000002000L}); + public static final BitSet FOLLOW_77_in_parse_org_emftext_language_java_classifiers_Class2070 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_classifiers_Class2103 = new BitSet(new long[]{0x0000000200000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_classifiers_Class2151 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_classifiers_Class2189 = new BitSet(new long[]{0x0000000200000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_105_in_parse_org_emftext_language_java_classifiers_Class2286 = new BitSet(new long[]{0x95010C0000004000L,0x000022D13B8F0551L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_Member_in_parse_org_emftext_language_java_classifiers_Class2315 = new BitSet(new long[]{0x95010C0000004000L,0x000022D13B8F0551L}); + public static final BitSet FOLLOW_109_in_parse_org_emftext_language_java_classifiers_Class2356 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_105_in_parse_org_emftext_language_java_classifiers_AnonymousClass2385 = new BitSet(new long[]{0x95010C0000004000L,0x000022D13B8F0551L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_Member_in_parse_org_emftext_language_java_classifiers_AnonymousClass2414 = new BitSet(new long[]{0x95010C0000004000L,0x000022D13B8F0551L}); + public static final BitSet FOLLOW_109_in_parse_org_emftext_language_java_classifiers_AnonymousClass2455 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_classifiers_Interface2493 = new BitSet(new long[]{0x0101000000000000L,0x00000091338A0100L}); + public static final BitSet FOLLOW_81_in_parse_org_emftext_language_java_classifiers_Interface2519 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_classifiers_Interface2537 = new BitSet(new long[]{0x0000080000000000L,0x0000020000000080L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_classifiers_Interface2567 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_classifiers_Interface2593 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_classifiers_Interface2634 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_classifiers_Interface2668 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_classifiers_Interface2729 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000080L}); + public static final BitSet FOLLOW_71_in_parse_org_emftext_language_java_classifiers_Interface2771 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_classifiers_Interface2804 = new BitSet(new long[]{0x0000000200000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_classifiers_Interface2852 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_classifiers_Interface2890 = new BitSet(new long[]{0x0000000200000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_105_in_parse_org_emftext_language_java_classifiers_Interface2987 = new BitSet(new long[]{0x95010C0000004000L,0x000022D13B8F0551L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_Member_in_parse_org_emftext_language_java_classifiers_Interface3016 = new BitSet(new long[]{0x95010C0000004000L,0x000022D13B8F0551L}); + public static final BitSet FOLLOW_109_in_parse_org_emftext_language_java_classifiers_Interface3057 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_classifiers_Enumeration3095 = new BitSet(new long[]{0x0101000000000000L,0x0000009133880140L}); + public static final BitSet FOLLOW_70_in_parse_org_emftext_language_java_classifiers_Enumeration3121 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_classifiers_Enumeration3139 = new BitSet(new long[]{0x0000000000000000L,0x0000020000002000L}); + public static final BitSet FOLLOW_77_in_parse_org_emftext_language_java_classifiers_Enumeration3169 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_classifiers_Enumeration3202 = new BitSet(new long[]{0x0000000200000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_classifiers_Enumeration3250 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_classifiers_Enumeration3288 = new BitSet(new long[]{0x0000000200000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_105_in_parse_org_emftext_language_java_classifiers_Enumeration3385 = new BitSet(new long[]{0x0001040200004000L,0x0000200000000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_EnumConstant_in_parse_org_emftext_language_java_classifiers_Enumeration3414 = new BitSet(new long[]{0x0000040200000000L,0x0000200000000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_classifiers_Enumeration3455 = new BitSet(new long[]{0x0001000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_EnumConstant_in_parse_org_emftext_language_java_classifiers_Enumeration3489 = new BitSet(new long[]{0x0000040200000000L,0x0000200000000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_classifiers_Enumeration3572 = new BitSet(new long[]{0x0000040000000000L,0x0000200000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_classifiers_Enumeration3614 = new BitSet(new long[]{0x95010C0000004000L,0x000022D13B8F0551L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_Member_in_parse_org_emftext_language_java_classifiers_Enumeration3655 = new BitSet(new long[]{0x95010C0000004000L,0x000022D13B8F0551L}); + public static final BitSet FOLLOW_109_in_parse_org_emftext_language_java_classifiers_Enumeration3729 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_classifiers_Annotation3767 = new BitSet(new long[]{0x0101000000000000L,0x0000009133880100L}); + public static final BitSet FOLLOW_48_in_parse_org_emftext_language_java_classifiers_Annotation3793 = new BitSet(new long[]{0x0000000000000000L,0x0000000000020000L}); + public static final BitSet FOLLOW_81_in_parse_org_emftext_language_java_classifiers_Annotation3807 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_classifiers_Annotation3825 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_105_in_parse_org_emftext_language_java_classifiers_Annotation3846 = new BitSet(new long[]{0x95010C0000004000L,0x000022D13B8F0551L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_Member_in_parse_org_emftext_language_java_classifiers_Annotation3875 = new BitSet(new long[]{0x95010C0000004000L,0x000022D13B8F0551L}); + public static final BitSet FOLLOW_109_in_parse_org_emftext_language_java_classifiers_Annotation3916 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_48_in_parse_org_emftext_language_java_annotations_AnnotationInstance3945 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_annotations_AnnotationInstance3974 = new BitSet(new long[]{0x0000002000000000L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_annotations_AnnotationInstance4007 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_annotations_AnnotationInstance4044 = new BitSet(new long[]{0x0000000004000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_annotations_AnnotationParameter_in_parse_org_emftext_language_java_annotations_AnnotationInstance4080 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_annotations_SingleAnnotationParameter4136 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_parse_org_emftext_language_java_annotations_SingleAnnotationParameter4154 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_ConditionalExpression_in_parse_org_emftext_language_java_annotations_SingleAnnotationParameter4168 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_annotations_SingleAnnotationParameter4186 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_annotations_AnnotationParameterList4215 = new BitSet(new long[]{0x0000000008004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_annotations_AnnotationAttributeSetting_in_parse_org_emftext_language_java_annotations_AnnotationParameterList4244 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_annotations_AnnotationParameterList4285 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_annotations_AnnotationAttributeSetting_in_parse_org_emftext_language_java_annotations_AnnotationParameterList4319 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_annotations_AnnotationParameterList4393 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_annotations_AnnotationAttributeSetting4426 = new BitSet(new long[]{0x0000100000000000L}); + public static final BitSet FOLLOW_44_in_parse_org_emftext_language_java_annotations_AnnotationAttributeSetting4447 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_parse_org_emftext_language_java_annotations_AnnotationAttributeSetting4465 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_ConditionalExpression_in_parse_org_emftext_language_java_annotations_AnnotationAttributeSetting4479 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_generics_TypeParameter4516 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L}); + public static final BitSet FOLLOW_71_in_parse_org_emftext_language_java_generics_TypeParameter4546 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_generics_TypeParameter4572 = new BitSet(new long[]{0x0000000001000002L}); + public static final BitSet FOLLOW_24_in_parse_org_emftext_language_java_generics_TypeParameter4613 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_generics_TypeParameter4647 = new BitSet(new long[]{0x0000000001000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_annotations_AnnotationInstance_in_parse_org_emftext_language_java_members_EnumConstant4745 = new BitSet(new long[]{0x0001000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_members_EnumConstant4775 = new BitSet(new long[]{0x0000000004000002L,0x0000020000000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_members_EnumConstant4805 = new BitSet(new long[]{0x9401080CCC2B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_members_EnumConstant4846 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_members_EnumConstant4901 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_members_EnumConstant4943 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_members_EnumConstant5047 = new BitSet(new long[]{0x0000000000000002L,0x0000020000000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_AnonymousClass_in_parse_org_emftext_language_java_members_EnumConstant5095 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Modifier_in_parse_org_emftext_language_java_statements_Block5160 = new BitSet(new long[]{0x0100000000000000L,0x0000029133880100L}); + public static final BitSet FOLLOW_105_in_parse_org_emftext_language_java_statements_Block5186 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000063F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_Block5215 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000063F7FFBF1D5BL}); + public static final BitSet FOLLOW_109_in_parse_org_emftext_language_java_statements_Block5256 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_members_Constructor5294 = new BitSet(new long[]{0x0101080000004000L,0x0000009133880100L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_members_Constructor5329 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_members_Constructor5355 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_members_Constructor5396 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_members_Constructor5430 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_members_Constructor5491 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_members_Constructor5528 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_members_Constructor5549 = new BitSet(new long[]{0x9501000008004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_members_Constructor5578 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_members_Constructor5619 = new BitSet(new long[]{0x9501000000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_members_Constructor5653 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_members_Constructor5727 = new BitSet(new long[]{0x0000000000000000L,0x0000020800000000L}); + public static final BitSet FOLLOW_99_in_parse_org_emftext_language_java_members_Constructor5750 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_members_Constructor5776 = new BitSet(new long[]{0x0000000200000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_members_Constructor5817 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_members_Constructor5851 = new BitSet(new long[]{0x0000000200000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_105_in_parse_org_emftext_language_java_members_Constructor5925 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000063F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_members_Constructor5954 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000063F7FFBF1D5BL}); + public static final BitSet FOLLOW_109_in_parse_org_emftext_language_java_members_Constructor5995 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_members_InterfaceMethod6033 = new BitSet(new long[]{0x9501080000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_members_InterfaceMethod6068 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_members_InterfaceMethod6094 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_members_InterfaceMethod6135 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_members_InterfaceMethod6169 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_members_InterfaceMethod6230 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_members_InterfaceMethod6272 = new BitSet(new long[]{0x0002000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_members_InterfaceMethod6306 = new BitSet(new long[]{0x0002000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_members_InterfaceMethod6350 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_members_InterfaceMethod6371 = new BitSet(new long[]{0x9501000008004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_members_InterfaceMethod6400 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_members_InterfaceMethod6441 = new BitSet(new long[]{0x9501000000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_members_InterfaceMethod6475 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_members_InterfaceMethod6549 = new BitSet(new long[]{0x0002040000000000L,0x0000000800000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_members_InterfaceMethod6572 = new BitSet(new long[]{0x0002040000000000L,0x0000000800000000L}); + public static final BitSet FOLLOW_99_in_parse_org_emftext_language_java_members_InterfaceMethod6607 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_members_InterfaceMethod6633 = new BitSet(new long[]{0x0000040200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_members_InterfaceMethod6674 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_members_InterfaceMethod6708 = new BitSet(new long[]{0x0000040200000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_members_InterfaceMethod6782 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_annotations_AnnotationAttribute_in_parse_org_emftext_language_java_members_InterfaceMethod6801 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_members_ClassMethod6835 = new BitSet(new long[]{0x9501080000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_members_ClassMethod6870 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_members_ClassMethod6896 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_members_ClassMethod6937 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_members_ClassMethod6971 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_members_ClassMethod7032 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_members_ClassMethod7074 = new BitSet(new long[]{0x0002000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_members_ClassMethod7108 = new BitSet(new long[]{0x0002000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_members_ClassMethod7152 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_members_ClassMethod7173 = new BitSet(new long[]{0x9501000008004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_members_ClassMethod7202 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_members_ClassMethod7243 = new BitSet(new long[]{0x9501000000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_members_ClassMethod7277 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_members_ClassMethod7351 = new BitSet(new long[]{0x0002000000000000L,0x0000020800000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_members_ClassMethod7374 = new BitSet(new long[]{0x0002000000000000L,0x0000020800000000L}); + public static final BitSet FOLLOW_99_in_parse_org_emftext_language_java_members_ClassMethod7409 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_members_ClassMethod7435 = new BitSet(new long[]{0x0000000200000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_members_ClassMethod7476 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_members_ClassMethod7510 = new BitSet(new long[]{0x0000000200000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_105_in_parse_org_emftext_language_java_members_ClassMethod7584 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000063F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_members_ClassMethod7613 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000063F7FFBF1D5BL}); + public static final BitSet FOLLOW_109_in_parse_org_emftext_language_java_members_ClassMethod7654 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7692 = new BitSet(new long[]{0x9501080000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7727 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7753 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7794 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7828 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7889 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7931 = new BitSet(new long[]{0x0002000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_annotations_AnnotationAttribute7965 = new BitSet(new long[]{0x0002000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8009 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8030 = new BitSet(new long[]{0x9501000008004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8059 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8100 = new BitSet(new long[]{0x9501000000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8134 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8208 = new BitSet(new long[]{0x0002000000000000L,0x0000000800000004L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8231 = new BitSet(new long[]{0x0002000000000000L,0x0000000800000004L}); + public static final BitSet FOLLOW_99_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8266 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8292 = new BitSet(new long[]{0x0000000200000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8333 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8367 = new BitSet(new long[]{0x0000000200000000L,0x0000000000000004L}); + public static final BitSet FOLLOW_66_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8441 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8459 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_annotations_AnnotationAttribute8477 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8515 = new BitSet(new long[]{0x9501000000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8545 = new BitSet(new long[]{0x0002080000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8572 = new BitSet(new long[]{0x0002080000004000L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8607 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8633 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8674 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8708 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8769 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8806 = new BitSet(new long[]{0x0002000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_parameters_OrdinaryParameter8836 = new BitSet(new long[]{0x0002000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_parameters_VariableLengthParameter8886 = new BitSet(new long[]{0x9501000000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_parameters_VariableLengthParameter8916 = new BitSet(new long[]{0x0002084000000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_parameters_VariableLengthParameter8943 = new BitSet(new long[]{0x0002084000000000L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_parameters_VariableLengthParameter8978 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_parameters_VariableLengthParameter9004 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_parameters_VariableLengthParameter9045 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_parameters_VariableLengthParameter9079 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_parameters_VariableLengthParameter9140 = new BitSet(new long[]{0x0000004000000000L}); + public static final BitSet FOLLOW_38_in_parse_org_emftext_language_java_parameters_VariableLengthParameter9173 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_parameters_VariableLengthParameter9191 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_variables_LocalVariable9236 = new BitSet(new long[]{0x9501000000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_variables_LocalVariable9266 = new BitSet(new long[]{0x0002080000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_variables_LocalVariable9293 = new BitSet(new long[]{0x0002080000004000L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_variables_LocalVariable9328 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_variables_LocalVariable9354 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_variables_LocalVariable9395 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_variables_LocalVariable9429 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_variables_LocalVariable9490 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_variables_LocalVariable9527 = new BitSet(new long[]{0x0002100200000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_variables_LocalVariable9557 = new BitSet(new long[]{0x0002100200000002L}); + public static final BitSet FOLLOW_44_in_parse_org_emftext_language_java_variables_LocalVariable9592 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_variables_LocalVariable9618 = new BitSet(new long[]{0x0000000200000002L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_variables_LocalVariable9668 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_variables_AdditionalLocalVariable_in_parse_org_emftext_language_java_variables_LocalVariable9694 = new BitSet(new long[]{0x0000000200000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_variables_LocalVariable_in_parse_org_emftext_language_java_statements_LocalVariableStatement9754 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_statements_LocalVariableStatement9772 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_variables_AdditionalLocalVariable9805 = new BitSet(new long[]{0x0002100000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_variables_AdditionalLocalVariable9835 = new BitSet(new long[]{0x0002100000000002L}); + public static final BitSet FOLLOW_44_in_parse_org_emftext_language_java_variables_AdditionalLocalVariable9870 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_variables_AdditionalLocalVariable9896 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_parse_org_emftext_language_java_members_Field9961 = new BitSet(new long[]{0x9501000000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_members_Field9991 = new BitSet(new long[]{0x0002080000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_members_Field10018 = new BitSet(new long[]{0x0002080000004000L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_members_Field10053 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_members_Field10079 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_members_Field10120 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_members_Field10154 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_members_Field10215 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_members_Field10252 = new BitSet(new long[]{0x0002140200000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_members_Field10282 = new BitSet(new long[]{0x0002140200000000L}); + public static final BitSet FOLLOW_44_in_parse_org_emftext_language_java_members_Field10317 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_members_Field10343 = new BitSet(new long[]{0x0000040200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_members_Field10393 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_AdditionalField_in_parse_org_emftext_language_java_members_Field10419 = new BitSet(new long[]{0x0000040200000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_members_Field10460 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_members_AdditionalField10493 = new BitSet(new long[]{0x0002100000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_members_AdditionalField10523 = new BitSet(new long[]{0x0002100000000002L}); + public static final BitSet FOLLOW_44_in_parse_org_emftext_language_java_members_AdditionalField10558 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_members_AdditionalField10584 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_members_EmptyMember10640 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_84_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10669 = new BitSet(new long[]{0x9400080000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10692 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10718 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10759 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10793 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10854 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10891 = new BitSet(new long[]{0x0000080004000000L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10918 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10944 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_instantiations_NewConstructorCall10985 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11019 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11080 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11113 = new BitSet(new long[]{0x9401080CCC2B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11142 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11183 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11217 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11291 = new BitSet(new long[]{0x0000002000000002L,0x0000020000000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_AnonymousClass_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11314 = new BitSet(new long[]{0x0000002000000002L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11349 = new BitSet(new long[]{0x9401080004084000L,0x0000024248150411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_instantiations_NewConstructorCall11375 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11440 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11466 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11507 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11541 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11602 = new BitSet(new long[]{0x0000000000000000L,0x0000000240000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_Self_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11639 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11657 = new BitSet(new long[]{0x9401080CCC2B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11686 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11727 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11761 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11835 = new BitSet(new long[]{0x0000002000000002L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11858 = new BitSet(new long[]{0x9401080004084000L,0x0000024248150411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall11884 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_84_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped11940 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped11958 = new BitSet(new long[]{0x0002000000000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped11985 = new BitSet(new long[]{0x0002000000000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped12015 = new BitSet(new long[]{0x0002002000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArraySelector_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped12042 = new BitSet(new long[]{0x0002002000000002L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped12077 = new BitSet(new long[]{0x9401080004084000L,0x0000024248150411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped12103 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped12163 = new BitSet(new long[]{0x0002002000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArraySelector_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped12190 = new BitSet(new long[]{0x0002002000000002L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped12225 = new BitSet(new long[]{0x9401080004084000L,0x0000024248150411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped12251 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_84_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12307 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12325 = new BitSet(new long[]{0x0002000000000000L}); + public static final BitSet FOLLOW_49_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12352 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12378 = new BitSet(new long[]{0x0020000000000000L}); + public static final BitSet FOLLOW_53_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12406 = new BitSet(new long[]{0x0002002000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12448 = new BitSet(new long[]{0x0002002000000002L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12483 = new BitSet(new long[]{0x9401080004084000L,0x0000024248150411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize12509 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_105_in_parse_org_emftext_language_java_arrays_ArrayInitializer12565 = new BitSet(new long[]{0x9401080EC42B7FF0L,0x0000624248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_arrays_ArrayInitializer12594 = new BitSet(new long[]{0x0000000200000000L,0x0000200000000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_parse_org_emftext_language_java_arrays_ArrayInitializer12614 = new BitSet(new long[]{0x0000000200000000L,0x0000200000000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_arrays_ArrayInitializer12655 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_arrays_ArrayInitializer12689 = new BitSet(new long[]{0x0000000200000000L,0x0000200000000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_parse_org_emftext_language_java_arrays_ArrayInitializer12715 = new BitSet(new long[]{0x0000000200000000L,0x0000200000000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_arrays_ArrayInitializer12798 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L}); + public static final BitSet FOLLOW_109_in_parse_org_emftext_language_java_arrays_ArrayInitializer12831 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_49_in_parse_org_emftext_language_java_arrays_ArraySelector12860 = new BitSet(new long[]{0x9421080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_arrays_ArraySelector12883 = new BitSet(new long[]{0x0020000000000000L}); + public static final BitSet FOLLOW_53_in_parse_org_emftext_language_java_arrays_ArraySelector12909 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_types_NamespaceClassifierReference12953 = new BitSet(new long[]{0x0000002000000000L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_types_NamespaceClassifierReference12986 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_ClassifierReference_in_parse_org_emftext_language_java_types_NamespaceClassifierReference13034 = new BitSet(new long[]{0x0000002000000000L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_types_NamespaceClassifierReference13062 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_ClassifierReference_in_parse_org_emftext_language_java_types_NamespaceClassifierReference13099 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_types_ClassifierReference13136 = new BitSet(new long[]{0x0000080000000002L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_types_ClassifierReference13166 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_types_ClassifierReference13192 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_types_ClassifierReference13233 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_types_ClassifierReference13267 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_types_ClassifierReference13328 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_references_MethodCall13385 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_references_MethodCall13411 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_references_MethodCall13452 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_references_MethodCall13486 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_references_MethodCall13547 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_references_MethodCall13584 = new BitSet(new long[]{0x0000080004000000L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_references_MethodCall13614 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_references_MethodCall13640 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_references_MethodCall13681 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_references_MethodCall13715 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_references_MethodCall13776 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_references_MethodCall13809 = new BitSet(new long[]{0x9401080CCC2B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_references_MethodCall13838 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_references_MethodCall13879 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_references_MethodCall13913 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_references_MethodCall13987 = new BitSet(new long[]{0x0002002000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArraySelector_in_parse_org_emftext_language_java_references_MethodCall14010 = new BitSet(new long[]{0x0002002000000002L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_references_MethodCall14045 = new BitSet(new long[]{0x9401080004084000L,0x0000024248150411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_references_MethodCall14071 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_references_IdentifierReference14131 = new BitSet(new long[]{0x0002082000000002L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_references_IdentifierReference14161 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_references_IdentifierReference14187 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_references_IdentifierReference14228 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_parse_org_emftext_language_java_references_IdentifierReference14262 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_references_IdentifierReference14323 = new BitSet(new long[]{0x0002002000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArraySelector_in_parse_org_emftext_language_java_references_IdentifierReference14365 = new BitSet(new long[]{0x0002002000000002L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_references_IdentifierReference14400 = new BitSet(new long[]{0x9401080004084000L,0x0000024248150411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_references_IdentifierReference14426 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_64_in_parse_org_emftext_language_java_references_ReflectiveClassReference14482 = new BitSet(new long[]{0x0000002000000002L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_references_ReflectiveClassReference14505 = new BitSet(new long[]{0x9401080004084000L,0x0000024248150411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_references_ReflectiveClassReference14531 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_Self_in_parse_org_emftext_language_java_references_SelfReference14591 = new BitSet(new long[]{0x0000002000000002L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_references_SelfReference14618 = new BitSet(new long[]{0x9401080004084000L,0x0000024248150411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_references_SelfReference14644 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_PrimitiveType_in_parse_org_emftext_language_java_references_PrimitiveTypeReference14704 = new BitSet(new long[]{0x0002002000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArraySelector_in_parse_org_emftext_language_java_references_PrimitiveTypeReference14731 = new BitSet(new long[]{0x0002002000000002L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_references_PrimitiveTypeReference14766 = new BitSet(new long[]{0x9401080004084000L,0x0000024248150411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_references_PrimitiveTypeReference14792 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_97_in_parse_org_emftext_language_java_literals_This14848 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_94_in_parse_org_emftext_language_java_literals_Super14877 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_parse_org_emftext_language_java_references_StringReference14910 = new BitSet(new long[]{0x0000002000000002L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_references_StringReference14940 = new BitSet(new long[]{0x9401080004084000L,0x0000024248150411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_references_StringReference14966 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_generics_QualifiedTypeArgument15026 = new BitSet(new long[]{0x0002000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_generics_QualifiedTypeArgument15053 = new BitSet(new long[]{0x0002000000000002L}); + public static final BitSet FOLLOW_47_in_parse_org_emftext_language_java_generics_UnknownTypeArgument15094 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_47_in_parse_org_emftext_language_java_generics_ExtendsTypeArgument15123 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L}); + public static final BitSet FOLLOW_71_in_parse_org_emftext_language_java_generics_ExtendsTypeArgument15137 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_generics_ExtendsTypeArgument15155 = new BitSet(new long[]{0x0002000001000002L}); + public static final BitSet FOLLOW_24_in_parse_org_emftext_language_java_generics_ExtendsTypeArgument15182 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_generics_ExtendsTypeArgument15208 = new BitSet(new long[]{0x0002000001000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_generics_ExtendsTypeArgument15258 = new BitSet(new long[]{0x0002000000000002L}); + public static final BitSet FOLLOW_47_in_parse_org_emftext_language_java_generics_SuperTypeArgument15299 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L}); + public static final BitSet FOLLOW_94_in_parse_org_emftext_language_java_generics_SuperTypeArgument15313 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_generics_SuperTypeArgument15331 = new BitSet(new long[]{0x0002000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_generics_SuperTypeArgument15358 = new BitSet(new long[]{0x0002000000000002L}); + public static final BitSet FOLLOW_57_in_parse_org_emftext_language_java_statements_Assert15399 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_Assert15417 = new BitSet(new long[]{0x0000060000000000L}); + public static final BitSet FOLLOW_41_in_parse_org_emftext_language_java_statements_Assert15444 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_Assert15470 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_statements_Assert15511 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_76_in_parse_org_emftext_language_java_statements_Condition15540 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_statements_Condition15554 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_Condition15572 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_statements_Condition15590 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000043F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_Condition15608 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L}); + public static final BitSet FOLLOW_69_in_parse_org_emftext_language_java_statements_Condition15635 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000043F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_Condition15661 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_75_in_parse_org_emftext_language_java_statements_ForLoop15717 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_statements_ForLoop15731 = new BitSet(new long[]{0x95010C0CC42B7FF0L,0x000042D37BBD0511L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_ForLoopInitializer_in_parse_org_emftext_language_java_statements_ForLoop15754 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_statements_ForLoop15780 = new BitSet(new long[]{0x94010C0CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_ForLoop15803 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_statements_ForLoop15829 = new BitSet(new long[]{0x9401080CCC2B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_ForLoop15858 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_statements_ForLoop15899 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_ForLoop15933 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_statements_ForLoop16007 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000043F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_ForLoop16025 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_75_in_parse_org_emftext_language_java_statements_ForEachLoop16058 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_statements_ForEachLoop16072 = new BitSet(new long[]{0x9501000000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_OrdinaryParameter_in_parse_org_emftext_language_java_statements_ForEachLoop16090 = new BitSet(new long[]{0x0000020000000000L}); + public static final BitSet FOLLOW_41_in_parse_org_emftext_language_java_statements_ForEachLoop16108 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_ForEachLoop16126 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_statements_ForEachLoop16144 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000043F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_ForEachLoop16162 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_104_in_parse_org_emftext_language_java_statements_WhileLoop16195 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_statements_WhileLoop16209 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_WhileLoop16227 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_statements_WhileLoop16245 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000043F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_WhileLoop16263 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_DoWhileLoop_in_parse_org_emftext_language_java_statements_WhileLoop16286 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_67_in_parse_org_emftext_language_java_statements_DoWhileLoop16311 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000043F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_DoWhileLoop16329 = new BitSet(new long[]{0x0000000000000000L,0x0000010000000000L}); + public static final BitSet FOLLOW_104_in_parse_org_emftext_language_java_statements_DoWhileLoop16347 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_statements_DoWhileLoop16361 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_DoWhileLoop16379 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_statements_DoWhileLoop16397 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_statements_DoWhileLoop16411 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_statements_EmptyStatement16440 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_96_in_parse_org_emftext_language_java_statements_SynchronizedBlock16469 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_statements_SynchronizedBlock16483 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_SynchronizedBlock16501 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_statements_SynchronizedBlock16519 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_105_in_parse_org_emftext_language_java_statements_SynchronizedBlock16533 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000063F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_SynchronizedBlock16562 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000063F7FFBF1D5BL}); + public static final BitSet FOLLOW_109_in_parse_org_emftext_language_java_statements_SynchronizedBlock16603 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_101_in_parse_org_emftext_language_java_statements_TryBlock16632 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_105_in_parse_org_emftext_language_java_statements_TryBlock16646 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000063F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_TryBlock16675 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000063F7FFBF1D5BL}); + public static final BitSet FOLLOW_109_in_parse_org_emftext_language_java_statements_TryBlock16716 = new BitSet(new long[]{0x4000000000000002L,0x0000000000000200L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_CatchBlock_in_parse_org_emftext_language_java_statements_TryBlock16739 = new BitSet(new long[]{0x4000000000000002L,0x0000000000000200L}); + public static final BitSet FOLLOW_73_in_parse_org_emftext_language_java_statements_TryBlock16774 = new BitSet(new long[]{0x0100000000000000L,0x0000029133880100L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Block_in_parse_org_emftext_language_java_statements_TryBlock16800 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_62_in_parse_org_emftext_language_java_statements_CatchBlock16856 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_statements_CatchBlock16870 = new BitSet(new long[]{0x9501000000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_OrdinaryParameter_in_parse_org_emftext_language_java_statements_CatchBlock16888 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_statements_CatchBlock16906 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_105_in_parse_org_emftext_language_java_statements_CatchBlock16920 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000063F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_CatchBlock16949 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000063F7FFBF1D5BL}); + public static final BitSet FOLLOW_109_in_parse_org_emftext_language_java_statements_CatchBlock16990 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_95_in_parse_org_emftext_language_java_statements_Switch17019 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_statements_Switch17033 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_Switch17051 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_statements_Switch17069 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L}); + public static final BitSet FOLLOW_105_in_parse_org_emftext_language_java_statements_Switch17083 = new BitSet(new long[]{0x2000000000000000L,0x0000200000000004L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_SwitchCase_in_parse_org_emftext_language_java_statements_Switch17112 = new BitSet(new long[]{0x2000000000000000L,0x0000200000000004L}); + public static final BitSet FOLLOW_109_in_parse_org_emftext_language_java_statements_Switch17152 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_61_in_parse_org_emftext_language_java_statements_NormalSwitchCase17181 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_NormalSwitchCase17199 = new BitSet(new long[]{0x0000020000000000L}); + public static final BitSet FOLLOW_41_in_parse_org_emftext_language_java_statements_NormalSwitchCase17217 = new BitSet(new long[]{0x9F010C0CC42B7FF2L,0x000043F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_NormalSwitchCase17246 = new BitSet(new long[]{0x9F010C0CC42B7FF2L,0x000043F7FFBF1D5BL}); + public static final BitSet FOLLOW_66_in_parse_org_emftext_language_java_statements_DefaultSwitchCase17302 = new BitSet(new long[]{0x0000020000000000L}); + public static final BitSet FOLLOW_41_in_parse_org_emftext_language_java_statements_DefaultSwitchCase17316 = new BitSet(new long[]{0x9F010C0CC42B7FF2L,0x000043F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_DefaultSwitchCase17345 = new BitSet(new long[]{0x9F010C0CC42B7FF2L,0x000043F7FFBF1D5BL}); + public static final BitSet FOLLOW_90_in_parse_org_emftext_language_java_statements_Return17401 = new BitSet(new long[]{0x94010C0CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_Return17424 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_statements_Return17450 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_98_in_parse_org_emftext_language_java_statements_Throw17479 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_Throw17497 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_statements_Throw17515 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_59_in_parse_org_emftext_language_java_statements_Break17544 = new BitSet(new long[]{0x0000040000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_statements_Break17573 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_statements_Break17619 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_65_in_parse_org_emftext_language_java_statements_Continue17648 = new BitSet(new long[]{0x0000040000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_statements_Continue17677 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_statements_Continue17723 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IDENTIFIER_in_parse_org_emftext_language_java_statements_JumpLabel17756 = new BitSet(new long[]{0x0000020000000000L}); + public static final BitSet FOLLOW_41_in_parse_org_emftext_language_java_statements_JumpLabel17777 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000043F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_parse_org_emftext_language_java_statements_JumpLabel17795 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_statements_ExpressionStatement17832 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_parse_org_emftext_language_java_statements_ExpressionStatement17850 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_expressions_ExpressionList17883 = new BitSet(new long[]{0x0000000200000002L}); + public static final BitSet FOLLOW_33_in_parse_org_emftext_language_java_expressions_ExpressionList17910 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_expressions_ExpressionList17936 = new BitSet(new long[]{0x0000000200000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_ConditionalExpression_in_parse_org_emftext_language_java_expressions_AssignmentExpression17996 = new BitSet(new long[]{0x0090591122000002L,0x0000080000000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_AssignmentOperator_in_parse_org_emftext_language_java_expressions_AssignmentExpression18029 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_expressions_AssignmentExpression18063 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_ConditionalOrExpression_in_parse_org_emftext_language_java_expressions_ConditionalExpression18123 = new BitSet(new long[]{0x0000800000000002L}); + public static final BitSet FOLLOW_47_in_parse_org_emftext_language_java_expressions_ConditionalExpression18150 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_expressions_ConditionalExpression18176 = new BitSet(new long[]{0x0000020000000000L}); + public static final BitSet FOLLOW_41_in_parse_org_emftext_language_java_expressions_ConditionalExpression18204 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_ConditionalExpression_in_parse_org_emftext_language_java_expressions_ConditionalExpression18230 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_ConditionalAndExpression_in_parse_org_emftext_language_java_expressions_ConditionalOrExpression18290 = new BitSet(new long[]{0x0000000000000002L,0x0000100000000000L}); + public static final BitSet FOLLOW_108_in_parse_org_emftext_language_java_expressions_ConditionalOrExpression18317 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_ConditionalAndExpression_in_parse_org_emftext_language_java_expressions_ConditionalOrExpression18343 = new BitSet(new long[]{0x0000000000000002L,0x0000100000000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_InclusiveOrExpression_in_parse_org_emftext_language_java_expressions_ConditionalAndExpression18403 = new BitSet(new long[]{0x0000000000800002L}); + public static final BitSet FOLLOW_23_in_parse_org_emftext_language_java_expressions_ConditionalAndExpression18430 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_InclusiveOrExpression_in_parse_org_emftext_language_java_expressions_ConditionalAndExpression18456 = new BitSet(new long[]{0x0000000000800002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_ExclusiveOrExpression_in_parse_org_emftext_language_java_expressions_InclusiveOrExpression18516 = new BitSet(new long[]{0x0000000000000002L,0x0000040000000000L}); + public static final BitSet FOLLOW_106_in_parse_org_emftext_language_java_expressions_InclusiveOrExpression18543 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_ExclusiveOrExpression_in_parse_org_emftext_language_java_expressions_InclusiveOrExpression18569 = new BitSet(new long[]{0x0000000000000002L,0x0000040000000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AndExpression_in_parse_org_emftext_language_java_expressions_ExclusiveOrExpression18629 = new BitSet(new long[]{0x0040000000000002L}); + public static final BitSet FOLLOW_54_in_parse_org_emftext_language_java_expressions_ExclusiveOrExpression18656 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AndExpression_in_parse_org_emftext_language_java_expressions_ExclusiveOrExpression18682 = new BitSet(new long[]{0x0040000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_EqualityExpression_in_parse_org_emftext_language_java_expressions_AndExpression18742 = new BitSet(new long[]{0x0000000001000002L}); + public static final BitSet FOLLOW_24_in_parse_org_emftext_language_java_expressions_AndExpression18769 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_EqualityExpression_in_parse_org_emftext_language_java_expressions_AndExpression18795 = new BitSet(new long[]{0x0000000001000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_InstanceOfExpression_in_parse_org_emftext_language_java_expressions_EqualityExpression18855 = new BitSet(new long[]{0x0000200000400002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_EqualityOperator_in_parse_org_emftext_language_java_expressions_EqualityExpression18888 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_InstanceOfExpression_in_parse_org_emftext_language_java_expressions_EqualityExpression18922 = new BitSet(new long[]{0x0000200000400002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_RelationExpression_in_parse_org_emftext_language_java_expressions_InstanceOfExpression18982 = new BitSet(new long[]{0x0000000000000002L,0x0000000000008000L}); + public static final BitSet FOLLOW_79_in_parse_org_emftext_language_java_expressions_InstanceOfExpression19009 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_expressions_InstanceOfExpression19035 = new BitSet(new long[]{0x0002000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_expressions_InstanceOfExpression19076 = new BitSet(new long[]{0x0002000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_ShiftExpression_in_parse_org_emftext_language_java_expressions_RelationExpression19148 = new BitSet(new long[]{0x0000480000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_RelationOperator_in_parse_org_emftext_language_java_expressions_RelationExpression19181 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_ShiftExpression_in_parse_org_emftext_language_java_expressions_RelationExpression19215 = new BitSet(new long[]{0x0000480000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AdditiveExpression_in_parse_org_emftext_language_java_expressions_ShiftExpression19275 = new BitSet(new long[]{0x0000480000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_ShiftOperator_in_parse_org_emftext_language_java_expressions_ShiftExpression19308 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AdditiveExpression_in_parse_org_emftext_language_java_expressions_ShiftExpression19342 = new BitSet(new long[]{0x0000480000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_MultiplicativeExpression_in_parse_org_emftext_language_java_expressions_AdditiveExpression19402 = new BitSet(new long[]{0x0000000440000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_AdditiveOperator_in_parse_org_emftext_language_java_expressions_AdditiveExpression19435 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_MultiplicativeExpression_in_parse_org_emftext_language_java_expressions_AdditiveExpression19469 = new BitSet(new long[]{0x0000000440000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_UnaryExpression_in_parse_org_emftext_language_java_expressions_MultiplicativeExpression19529 = new BitSet(new long[]{0x0008008010000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_MultiplicativeOperator_in_parse_org_emftext_language_java_expressions_MultiplicativeExpression19562 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_UnaryExpression_in_parse_org_emftext_language_java_expressions_MultiplicativeExpression19596 = new BitSet(new long[]{0x0008008010000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_UnaryOperator_in_parse_org_emftext_language_java_expressions_UnaryExpression19661 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_UnaryModificationExpression_in_parse_org_emftext_language_java_expressions_UnaryExpression19691 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild_in_parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression19728 = new BitSet(new long[]{0x0000000880000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_UnaryModificationOperator_in_parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression19761 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_UnaryModificationOperator_in_parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression19832 = new BitSet(new long[]{0x94010800040B7FF0L,0x0000024248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild_in_parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression19877 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_expressions_CastExpression19910 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_parse_org_emftext_language_java_expressions_CastExpression19928 = new BitSet(new long[]{0x0002000008000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_parse_org_emftext_language_java_expressions_CastExpression19955 = new BitSet(new long[]{0x0002000008000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_expressions_CastExpression19981 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_UnaryExpression_in_parse_org_emftext_language_java_expressions_CastExpression19999 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_26_in_parse_org_emftext_language_java_expressions_NestedExpression20032 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_parse_org_emftext_language_java_expressions_NestedExpression20050 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_27_in_parse_org_emftext_language_java_expressions_NestedExpression20068 = new BitSet(new long[]{0x0002002000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArraySelector_in_parse_org_emftext_language_java_expressions_NestedExpression20091 = new BitSet(new long[]{0x0002002000000002L}); + public static final BitSet FOLLOW_37_in_parse_org_emftext_language_java_expressions_NestedExpression20126 = new BitSet(new long[]{0x9401080004084000L,0x0000024248150411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_Reference_in_parse_org_emftext_language_java_expressions_NestedExpression20152 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_44_in_parse_org_emftext_language_java_operators_Assignment20208 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_32_in_parse_org_emftext_language_java_operators_AssignmentPlus20237 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_36_in_parse_org_emftext_language_java_operators_AssignmentMinus20266 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_29_in_parse_org_emftext_language_java_operators_AssignmentMultiplication20295 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_40_in_parse_org_emftext_language_java_operators_AssignmentDivision20324 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_25_in_parse_org_emftext_language_java_operators_AssignmentAnd20353 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_107_in_parse_org_emftext_language_java_operators_AssignmentOr20382 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_55_in_parse_org_emftext_language_java_operators_AssignmentExclusiveOr20411 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_52_in_parse_org_emftext_language_java_operators_AssignmentModulo20440 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_operators_AssignmentLeftShift20469 = new BitSet(new long[]{0x0000080000000000L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_operators_AssignmentLeftShift20483 = new BitSet(new long[]{0x0000100000000000L}); + public static final BitSet FOLLOW_44_in_parse_org_emftext_language_java_operators_AssignmentLeftShift20497 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_operators_AssignmentRightShift20526 = new BitSet(new long[]{0x0000400000000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_operators_AssignmentRightShift20540 = new BitSet(new long[]{0x0000100000000000L}); + public static final BitSet FOLLOW_44_in_parse_org_emftext_language_java_operators_AssignmentRightShift20554 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift20583 = new BitSet(new long[]{0x0000400000000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift20597 = new BitSet(new long[]{0x0000400000000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift20611 = new BitSet(new long[]{0x0000100000000000L}); + public static final BitSet FOLLOW_44_in_parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift20625 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_30_in_parse_org_emftext_language_java_operators_Addition20654 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_34_in_parse_org_emftext_language_java_operators_Subtraction20683 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_28_in_parse_org_emftext_language_java_operators_Multiplication20712 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_39_in_parse_org_emftext_language_java_operators_Division20741 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_51_in_parse_org_emftext_language_java_operators_Remainder20770 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_operators_LessThan20799 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_operators_LessThanOrEqual20828 = new BitSet(new long[]{0x0000100000000000L}); + public static final BitSet FOLLOW_44_in_parse_org_emftext_language_java_operators_LessThanOrEqual20842 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_operators_GreaterThan20871 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_operators_GreaterThanOrEqual20900 = new BitSet(new long[]{0x0000100000000000L}); + public static final BitSet FOLLOW_44_in_parse_org_emftext_language_java_operators_GreaterThanOrEqual20914 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_operators_LeftShift20943 = new BitSet(new long[]{0x0000080000000000L}); + public static final BitSet FOLLOW_43_in_parse_org_emftext_language_java_operators_LeftShift20957 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_operators_RightShift20986 = new BitSet(new long[]{0x0000400000000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_operators_RightShift21000 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_operators_UnsignedRightShift21029 = new BitSet(new long[]{0x0000400000000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_operators_UnsignedRightShift21043 = new BitSet(new long[]{0x0000400000000000L}); + public static final BitSet FOLLOW_46_in_parse_org_emftext_language_java_operators_UnsignedRightShift21057 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_45_in_parse_org_emftext_language_java_operators_Equal21086 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_22_in_parse_org_emftext_language_java_operators_NotEqual21115 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_31_in_parse_org_emftext_language_java_operators_PlusPlus21144 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_35_in_parse_org_emftext_language_java_operators_MinusMinus21173 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_110_in_parse_org_emftext_language_java_operators_Complement21202 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_21_in_parse_org_emftext_language_java_operators_Negate21231 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_49_in_parse_org_emftext_language_java_arrays_ArrayDimension21264 = new BitSet(new long[]{0x0020000000000000L}); + public static final BitSet FOLLOW_53_in_parse_org_emftext_language_java_arrays_ArrayDimension21281 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_85_in_parse_org_emftext_language_java_literals_NullLiteral21320 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_89_in_parse_org_emftext_language_java_modifiers_Public21349 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_56_in_parse_org_emftext_language_java_modifiers_Abstract21378 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_88_in_parse_org_emftext_language_java_modifiers_Protected21407 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_87_in_parse_org_emftext_language_java_modifiers_Private21436 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_72_in_parse_org_emftext_language_java_modifiers_Final21465 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_92_in_parse_org_emftext_language_java_modifiers_Static21494 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_83_in_parse_org_emftext_language_java_modifiers_Native21523 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_96_in_parse_org_emftext_language_java_modifiers_Synchronized21552 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_100_in_parse_org_emftext_language_java_modifiers_Transient21581 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_103_in_parse_org_emftext_language_java_modifiers_Volatile21610 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_93_in_parse_org_emftext_language_java_modifiers_Strictfp21639 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_102_in_parse_org_emftext_language_java_types_Void21668 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_58_in_parse_org_emftext_language_java_types_Boolean21697 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_63_in_parse_org_emftext_language_java_types_Char21726 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_60_in_parse_org_emftext_language_java_types_Byte21755 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_91_in_parse_org_emftext_language_java_types_Short21784 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_80_in_parse_org_emftext_language_java_types_Int21813 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_82_in_parse_org_emftext_language_java_types_Long21842 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_74_in_parse_org_emftext_language_java_types_Float21871 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_68_in_parse_org_emftext_language_java_types_Double21900 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DECIMAL_LONG_LITERAL_in_parse_org_emftext_language_java_literals_DecimalLongLiteral21933 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DECIMAL_FLOAT_LITERAL_in_parse_org_emftext_language_java_literals_DecimalFloatLiteral21973 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DECIMAL_INTEGER_LITERAL_in_parse_org_emftext_language_java_literals_DecimalIntegerLiteral22013 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DECIMAL_DOUBLE_LITERAL_in_parse_org_emftext_language_java_literals_DecimalDoubleLiteral22053 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_HEX_LONG_LITERAL_in_parse_org_emftext_language_java_literals_HexLongLiteral22093 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_HEX_FLOAT_LITERAL_in_parse_org_emftext_language_java_literals_HexFloatLiteral22133 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_HEX_DOUBLE_LITERAL_in_parse_org_emftext_language_java_literals_HexDoubleLiteral22173 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_HEX_INTEGER_LITERAL_in_parse_org_emftext_language_java_literals_HexIntegerLiteral22213 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_OCTAL_LONG_LITERAL_in_parse_org_emftext_language_java_literals_OctalLongLiteral22253 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_OCTAL_INTEGER_LITERAL_in_parse_org_emftext_language_java_literals_OctalIntegerLiteral22293 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CHARACTER_LITERAL_in_parse_org_emftext_language_java_literals_CharacterLiteral22333 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BOOLEAN_LITERAL_in_parse_org_emftext_language_java_literals_BooleanLiteral22373 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_imports_ClassifierImport_in_parse_org_emftext_language_java_imports_Import22405 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_imports_PackageImport_in_parse_org_emftext_language_java_imports_Import22415 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_imports_StaticMemberImport_in_parse_org_emftext_language_java_imports_Import22425 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_imports_StaticClassifierImport_in_parse_org_emftext_language_java_imports_Import22435 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Class_in_parse_org_emftext_language_java_classifiers_ConcreteClassifier22456 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Interface_in_parse_org_emftext_language_java_classifiers_ConcreteClassifier22466 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Enumeration_in_parse_org_emftext_language_java_classifiers_ConcreteClassifier22476 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Annotation_in_parse_org_emftext_language_java_classifiers_ConcreteClassifier22486 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_annotations_AnnotationInstance_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22507 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Public_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22517 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Abstract_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22527 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Protected_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22537 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Private_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22547 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Final_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22557 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Static_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22567 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Native_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22577 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Synchronized_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22587 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Transient_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22597 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Volatile_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22607 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Strictfp_in_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier22617 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_parse_org_emftext_language_java_types_TypeReference22638 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_ClassifierReference_in_parse_org_emftext_language_java_types_TypeReference22648 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Void_in_parse_org_emftext_language_java_types_TypeReference22658 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Boolean_in_parse_org_emftext_language_java_types_TypeReference22668 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Char_in_parse_org_emftext_language_java_types_TypeReference22678 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Byte_in_parse_org_emftext_language_java_types_TypeReference22688 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Short_in_parse_org_emftext_language_java_types_TypeReference22698 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Int_in_parse_org_emftext_language_java_types_TypeReference22708 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Long_in_parse_org_emftext_language_java_types_TypeReference22718 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Float_in_parse_org_emftext_language_java_types_TypeReference22728 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Double_in_parse_org_emftext_language_java_types_TypeReference22738 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Class_in_parse_org_emftext_language_java_members_Member22759 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Interface_in_parse_org_emftext_language_java_members_Member22769 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Enumeration_in_parse_org_emftext_language_java_members_Member22779 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Annotation_in_parse_org_emftext_language_java_members_Member22789 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Block_in_parse_org_emftext_language_java_members_Member22799 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_Constructor_in_parse_org_emftext_language_java_members_Member22809 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_InterfaceMethod_in_parse_org_emftext_language_java_members_Member22819 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_ClassMethod_in_parse_org_emftext_language_java_members_Member22829 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_annotations_AnnotationAttribute_in_parse_org_emftext_language_java_members_Member22839 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_Field_in_parse_org_emftext_language_java_members_Member22849 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_EmptyMember_in_parse_org_emftext_language_java_members_Member22859 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_annotations_SingleAnnotationParameter_in_parse_org_emftext_language_java_annotations_AnnotationParameter22880 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_annotations_AnnotationParameterList_in_parse_org_emftext_language_java_annotations_AnnotationParameter22890 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Public_in_parse_org_emftext_language_java_modifiers_Modifier22911 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Abstract_in_parse_org_emftext_language_java_modifiers_Modifier22921 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Protected_in_parse_org_emftext_language_java_modifiers_Modifier22931 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Private_in_parse_org_emftext_language_java_modifiers_Modifier22941 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Final_in_parse_org_emftext_language_java_modifiers_Modifier22951 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Static_in_parse_org_emftext_language_java_modifiers_Modifier22961 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Native_in_parse_org_emftext_language_java_modifiers_Modifier22971 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Synchronized_in_parse_org_emftext_language_java_modifiers_Modifier22981 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Transient_in_parse_org_emftext_language_java_modifiers_Modifier22991 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Volatile_in_parse_org_emftext_language_java_modifiers_Modifier23001 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_Strictfp_in_parse_org_emftext_language_java_modifiers_Modifier23011 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Class_in_parse_org_emftext_language_java_statements_Statement23032 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Interface_in_parse_org_emftext_language_java_statements_Statement23042 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Enumeration_in_parse_org_emftext_language_java_statements_Statement23052 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Annotation_in_parse_org_emftext_language_java_statements_Statement23062 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Block_in_parse_org_emftext_language_java_statements_Statement23072 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_LocalVariableStatement_in_parse_org_emftext_language_java_statements_Statement23082 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Assert_in_parse_org_emftext_language_java_statements_Statement23092 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Condition_in_parse_org_emftext_language_java_statements_Statement23102 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_ForLoop_in_parse_org_emftext_language_java_statements_Statement23112 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_ForEachLoop_in_parse_org_emftext_language_java_statements_Statement23122 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_WhileLoop_in_parse_org_emftext_language_java_statements_Statement23132 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_DoWhileLoop_in_parse_org_emftext_language_java_statements_Statement23142 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_EmptyStatement_in_parse_org_emftext_language_java_statements_Statement23152 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_SynchronizedBlock_in_parse_org_emftext_language_java_statements_Statement23162 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_TryBlock_in_parse_org_emftext_language_java_statements_Statement23172 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Switch_in_parse_org_emftext_language_java_statements_Statement23182 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Return_in_parse_org_emftext_language_java_statements_Statement23192 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Throw_in_parse_org_emftext_language_java_statements_Statement23202 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Break_in_parse_org_emftext_language_java_statements_Statement23212 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Continue_in_parse_org_emftext_language_java_statements_Statement23222 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_JumpLabel_in_parse_org_emftext_language_java_statements_Statement23232 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_ExpressionStatement_in_parse_org_emftext_language_java_statements_Statement23242 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_OrdinaryParameter_in_parse_org_emftext_language_java_parameters_Parameter23263 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_VariableLengthParameter_in_parse_org_emftext_language_java_parameters_Parameter23273 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_QualifiedTypeArgument_in_parse_org_emftext_language_java_generics_TypeArgument23294 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_UnknownTypeArgument_in_parse_org_emftext_language_java_generics_TypeArgument23304 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_ExtendsTypeArgument_in_parse_org_emftext_language_java_generics_TypeArgument23314 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_SuperTypeArgument_in_parse_org_emftext_language_java_generics_TypeArgument23324 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_annotations_AnnotationInstance_in_parse_org_emftext_language_java_references_Reference23345 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_instantiations_NewConstructorCall_in_parse_org_emftext_language_java_references_Reference23355 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall_in_parse_org_emftext_language_java_references_Reference23365 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped_in_parse_org_emftext_language_java_references_Reference23375 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped_in_parse_org_emftext_language_java_references_Reference23385 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize_in_parse_org_emftext_language_java_references_Reference23395 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_MethodCall_in_parse_org_emftext_language_java_references_Reference23405 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_IdentifierReference_in_parse_org_emftext_language_java_references_Reference23415 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_ReflectiveClassReference_in_parse_org_emftext_language_java_references_Reference23425 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_SelfReference_in_parse_org_emftext_language_java_references_Reference23435 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_PrimitiveTypeReference_in_parse_org_emftext_language_java_references_Reference23445 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_StringReference_in_parse_org_emftext_language_java_references_Reference23455 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_NestedExpression_in_parse_org_emftext_language_java_references_Reference23465 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_This_in_parse_org_emftext_language_java_literals_Self23486 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_Super_in_parse_org_emftext_language_java_literals_Self23496 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Void_in_parse_org_emftext_language_java_types_PrimitiveType23517 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Boolean_in_parse_org_emftext_language_java_types_PrimitiveType23527 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Char_in_parse_org_emftext_language_java_types_PrimitiveType23537 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Byte_in_parse_org_emftext_language_java_types_PrimitiveType23547 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Short_in_parse_org_emftext_language_java_types_PrimitiveType23557 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Int_in_parse_org_emftext_language_java_types_PrimitiveType23567 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Long_in_parse_org_emftext_language_java_types_PrimitiveType23577 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Float_in_parse_org_emftext_language_java_types_PrimitiveType23587 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_Double_in_parse_org_emftext_language_java_types_PrimitiveType23597 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_variables_LocalVariable_in_parse_org_emftext_language_java_statements_ForLoopInitializer23618 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_ExpressionList_in_parse_org_emftext_language_java_statements_ForLoopInitializer23628 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_NormalSwitchCase_in_parse_org_emftext_language_java_statements_SwitchCase23649 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_DefaultSwitchCase_in_parse_org_emftext_language_java_statements_SwitchCase23659 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_Assignment_in_parse_org_emftext_language_java_operators_AssignmentOperator23680 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_AssignmentPlus_in_parse_org_emftext_language_java_operators_AssignmentOperator23690 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_AssignmentMinus_in_parse_org_emftext_language_java_operators_AssignmentOperator23700 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_AssignmentMultiplication_in_parse_org_emftext_language_java_operators_AssignmentOperator23710 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_AssignmentDivision_in_parse_org_emftext_language_java_operators_AssignmentOperator23720 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_AssignmentAnd_in_parse_org_emftext_language_java_operators_AssignmentOperator23730 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_AssignmentOr_in_parse_org_emftext_language_java_operators_AssignmentOperator23740 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_AssignmentExclusiveOr_in_parse_org_emftext_language_java_operators_AssignmentOperator23750 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_AssignmentModulo_in_parse_org_emftext_language_java_operators_AssignmentOperator23760 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_AssignmentLeftShift_in_parse_org_emftext_language_java_operators_AssignmentOperator23770 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_AssignmentRightShift_in_parse_org_emftext_language_java_operators_AssignmentOperator23780 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_AssignmentUnsignedRightShift_in_parse_org_emftext_language_java_operators_AssignmentOperator23790 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_Equal_in_parse_org_emftext_language_java_operators_EqualityOperator23811 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_NotEqual_in_parse_org_emftext_language_java_operators_EqualityOperator23821 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_LessThan_in_parse_org_emftext_language_java_operators_RelationOperator23842 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_LessThanOrEqual_in_parse_org_emftext_language_java_operators_RelationOperator23852 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_GreaterThan_in_parse_org_emftext_language_java_operators_RelationOperator23862 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_GreaterThanOrEqual_in_parse_org_emftext_language_java_operators_RelationOperator23872 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_LeftShift_in_parse_org_emftext_language_java_operators_ShiftOperator23893 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_RightShift_in_parse_org_emftext_language_java_operators_ShiftOperator23903 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_UnsignedRightShift_in_parse_org_emftext_language_java_operators_ShiftOperator23913 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_Addition_in_parse_org_emftext_language_java_operators_AdditiveOperator23934 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_Subtraction_in_parse_org_emftext_language_java_operators_AdditiveOperator23944 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_Multiplication_in_parse_org_emftext_language_java_operators_MultiplicativeOperator23965 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_Division_in_parse_org_emftext_language_java_operators_MultiplicativeOperator23975 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_Remainder_in_parse_org_emftext_language_java_operators_MultiplicativeOperator23985 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_Addition_in_parse_org_emftext_language_java_operators_UnaryOperator24006 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_Subtraction_in_parse_org_emftext_language_java_operators_UnaryOperator24016 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_Complement_in_parse_org_emftext_language_java_operators_UnaryOperator24026 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_Negate_in_parse_org_emftext_language_java_operators_UnaryOperator24036 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression_in_parse_org_emftext_language_java_expressions_UnaryModificationExpression24057 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_PrefixUnaryModificationExpression_in_parse_org_emftext_language_java_expressions_UnaryModificationExpression24067 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_annotations_AnnotationInstance_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24088 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_instantiations_NewConstructorCall_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24098 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24108 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24118 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesUntyped_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24128 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24138 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_MethodCall_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24148 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_IdentifierReference_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24158 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_ReflectiveClassReference_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24168 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_SelfReference_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24178 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_PrimitiveTypeReference_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24188 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_StringReference_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24198 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_CastExpression_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24208 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_NestedExpression_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24218 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_NullLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24228 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_DecimalLongLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24238 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_DecimalFloatLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24248 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_DecimalIntegerLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24258 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_DecimalDoubleLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24268 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_HexLongLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24278 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_HexFloatLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24288 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_HexDoubleLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24298 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_HexIntegerLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24308 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_OctalLongLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24318 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_OctalIntegerLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24328 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_CharacterLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24338 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_literals_BooleanLiteral_in_parse_org_emftext_language_java_expressions_UnaryModificationExpressionChild24348 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_PlusPlus_in_parse_org_emftext_language_java_operators_UnaryModificationOperator24369 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_MinusMinus_in_parse_org_emftext_language_java_operators_UnaryModificationOperator24379 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_containers_CompilationUnit_in_synpred1_Java82 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_containers_Package_in_synpred2_Java96 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_42_in_synpred7_Java454 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_synpred47_Java4154 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInitializer_in_synpred50_Java4465 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_modifiers_AnnotationInstanceOrModifier_in_synpred77_Java6033 = new BitSet(new long[]{0x9501080000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_43_in_synpred77_Java6068 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_synpred77_Java6094 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_synpred77_Java6135 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeParameter_in_synpred77_Java6169 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_synpred77_Java6230 = new BitSet(new long[]{0x9400000000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_TypeReference_in_synpred77_Java6272 = new BitSet(new long[]{0x0002000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_synpred77_Java6306 = new BitSet(new long[]{0x0002000000004000L}); + public static final BitSet FOLLOW_IDENTIFIER_in_synpred77_Java6350 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_26_in_synpred77_Java6371 = new BitSet(new long[]{0x9501000008004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_synpred77_Java6400 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_33_in_synpred77_Java6441 = new BitSet(new long[]{0x9501000000004000L,0x000000D13B8D0510L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_Parameter_in_synpred77_Java6475 = new BitSet(new long[]{0x0000000208000000L}); + public static final BitSet FOLLOW_27_in_synpred77_Java6549 = new BitSet(new long[]{0x0002040000000000L,0x0000000800000000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayDimension_in_synpred77_Java6572 = new BitSet(new long[]{0x0002040000000000L,0x0000000800000000L}); + public static final BitSet FOLLOW_99_in_synpred77_Java6607 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_synpred77_Java6633 = new BitSet(new long[]{0x0000040200000000L}); + public static final BitSet FOLLOW_33_in_synpred77_Java6674 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_synpred77_Java6708 = new BitSet(new long[]{0x0000040200000000L}); + public static final BitSet FOLLOW_42_in_synpred77_Java6782 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_synpred145_Java12594 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AssignmentExpression_in_synpred146_Java12689 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IDENTIFIER_in_synpred151_Java12953 = new BitSet(new long[]{0x0000002000000000L}); + public static final BitSet FOLLOW_37_in_synpred151_Java12986 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_ClassifierReference_in_synpred152_Java13034 = new BitSet(new long[]{0x0000002000000000L}); + public static final BitSet FOLLOW_37_in_synpred152_Java13062 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_43_in_synpred154_Java13166 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_synpred154_Java13192 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_synpred154_Java13233 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_synpred154_Java13267 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_synpred154_Java13328 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_43_in_synpred164_Java14161 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_synpred164_Java14187 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_33_in_synpred164_Java14228 = new BitSet(new long[]{0x9400800000004000L,0x0000004008050410L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_generics_TypeArgument_in_synpred164_Java14262 = new BitSet(new long[]{0x0000400200000000L}); + public static final BitSet FOLLOW_46_in_synpred164_Java14323 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_69_in_synpred177_Java15635 = new BitSet(new long[]{0x9F010C0CC42B7FF0L,0x000043F7FFBF1D5BL}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Statement_in_synpred177_Java15661 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_ShiftOperator_in_synpred206_Java19308 = new BitSet(new long[]{0x9401080CC42B7FF0L,0x0000424248350411L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_AdditiveExpression_in_synpred206_Java19342 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_operators_UnaryModificationOperator_in_synpred210_Java19761 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Class_in_synpred218_Java22456 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Interface_in_synpred219_Java22466 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Enumeration_in_synpred220_Java22476 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_NamespaceClassifierReference_in_synpred232_Java22638 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_types_ClassifierReference_in_synpred233_Java22648 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Class_in_synpred242_Java22759 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Interface_in_synpred243_Java22769 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Enumeration_in_synpred244_Java22779 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Annotation_in_synpred245_Java22789 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Block_in_synpred246_Java22799 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_Constructor_in_synpred247_Java22809 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_InterfaceMethod_in_synpred248_Java22819 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_ClassMethod_in_synpred249_Java22829 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_annotations_AnnotationAttribute_in_synpred250_Java22839 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_members_Field_in_synpred251_Java22849 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Class_in_synpred263_Java23032 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Interface_in_synpred264_Java23042 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Enumeration_in_synpred265_Java23052 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_classifiers_Annotation_in_synpred266_Java23062 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_Block_in_synpred267_Java23072 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_LocalVariableStatement_in_synpred268_Java23082 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_ForLoop_in_synpred271_Java23112 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_ForEachLoop_in_synpred272_Java23122 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_WhileLoop_in_synpred273_Java23132 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_DoWhileLoop_in_synpred274_Java23142 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_SynchronizedBlock_in_synpred276_Java23162 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_statements_JumpLabel_in_synpred283_Java23232 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_parameters_OrdinaryParameter_in_synpred284_Java23263 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_instantiations_NewConstructorCall_in_synpred289_Java23355 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall_in_synpred290_Java23365 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped_in_synpred291_Java23375 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize_in_synpred293_Java23395 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_MethodCall_in_synpred294_Java23405 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_IdentifierReference_in_synpred295_Java23415 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_SelfReference_in_synpred297_Java23435 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_variables_LocalVariable_in_synpred309_Java23618 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_SuffixUnaryModificationExpression_in_synpred334_Java24057 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_instantiations_NewConstructorCall_in_synpred336_Java24098 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_instantiations_ExplicitConstructorCall_in_synpred337_Java24108 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationByValuesTyped_in_synpred338_Java24118 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_arrays_ArrayInstantiationBySize_in_synpred340_Java24138 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_MethodCall_in_synpred341_Java24148 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_IdentifierReference_in_synpred342_Java24158 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_references_SelfReference_in_synpred344_Java24178 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_CastExpression_in_synpred347_Java24208 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parse_org_emftext_language_java_expressions_NestedExpression_in_synpred348_Java24218 = new BitSet(new long[]{0x0000000000000002L}); + +} \ No newline at end of file diff --git a/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/mopp/JavaResourcePostProcessor.java b/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/mopp/JavaResourcePostProcessor.java index d9ad4550..38505ff2 100644 --- a/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/mopp/JavaResourcePostProcessor.java +++ b/Core/org.emftext.language.java.resource.java/src/org/emftext/language/java/resource/java/mopp/JavaResourcePostProcessor.java @@ -1,62 +1,67 @@ -/******************************************************************************* - * Copyright (c) 2006-2012 - * Software Technology Group, Dresden University of Technology - * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 - * - * 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: - * Software Technology Group - TU Dresden, Germany; - * DevBoost GmbH - Berlin, Germany - * - initial API and implementation - ******************************************************************************/ -package org.emftext.language.java.resource.java.mopp; - -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EReference; -import org.eclipse.emf.ecore.resource.Resource; -import org.emftext.language.java.references.ElementReference; -import org.emftext.language.java.references.IdentifierReference; -import org.emftext.language.java.references.ReferenceableElement; -import org.emftext.language.java.resource.java.IJavaResourcePostProcessor; -import org.emftext.language.java.util.JavaModelCompletion; -import org.emftext.language.java.util.JavaModelRepairer; - -public class JavaResourcePostProcessor implements IJavaResourcePostProcessor { - - public void process(JavaResource resource) { - repairAndComplete(resource); - } - - public void terminate() { - // To signal termination to the process() method, setting a boolean field is - // recommended. Depending on the value of this field process() can stop its - // computation. However, this is only required for computation intensive - // post-processors. - } - - protected void repairAndComplete(JavaResource resource) { - new JavaModelRepairer() { - protected void registerContextDependentProxy( - Resource resource, - IdentifierReference mainIdReference, EReference targetReference, - String id, EObject proxy) { - assert !targetReference.isMany(); - - ((JavaResource)resource).registerContextDependentProxy( - new JavaContextDependentURIFragmentFactory( - new JavaReferenceResolverSwitch().getElementReferenceTargetReferenceResolver()), - mainIdReference, - targetReference, - id, - proxy, - -1); - } - }.repair(resource); - - JavaModelCompletion.complete(resource); - } -} +/******************************************************************************* + * Copyright (c) 2006-2012 + * Software Technology Group, Dresden University of Technology + * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 + * + * 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: + * Software Technology Group - TU Dresden, Germany; + * DevBoost GmbH - Berlin, Germany + * - initial API and implementation + ******************************************************************************/ +package org.emftext.language.java.resource.java.mopp; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.emf.ecore.resource.Resource; +import org.emftext.language.java.references.ElementReference; +import org.emftext.language.java.references.IdentifierReference; +import org.emftext.language.java.references.ReferenceableElement; +import org.emftext.language.java.resource.java.IJavaResourcePostProcessor; +import org.emftext.language.java.resource.java.JavaReferenceResolverSwitchFactory; +import org.emftext.language.java.util.JavaModelCompletion; +import org.emftext.language.java.util.JavaModelRepairer; + +public class JavaResourcePostProcessor implements IJavaResourcePostProcessor { + + public void process(JavaResource resource) { + repairAndComplete(resource); + } + + public void terminate() { + // To signal termination to the process() method, setting a boolean field is + // recommended. Depending on the value of this field process() can stop its + // computation. However, this is only required for computation intensive + // post-processors. + } + + /** Thread safe singleton instance of the factory to create uri fragments. */ + private static JavaContextDependentURIFragmentFactory uriFragmentFactory = new JavaContextDependentURIFragmentFactory( + JavaReferenceResolverSwitchFactory.getSwitch().getElementReferenceTargetReferenceResolver()); + + protected void repairAndComplete(JavaResource resource) { + new JavaModelRepairer() { + protected void registerContextDependentProxy( + Resource resource, + IdentifierReference mainIdReference, EReference targetReference, + String id, EObject proxy) { + assert !targetReference.isMany(); + + + ((JavaResource)resource).registerContextDependentProxy( + uriFragmentFactory, + mainIdReference, + targetReference, + id, + proxy, + -1); + } + }.repair(resource); + + JavaModelCompletion.complete(resource); + } +} diff --git a/Core/org.emftext.language.java.resource/.classpath b/Core/org.emftext.language.java.resource/.classpath index 065ac06e..48482498 100755 --- a/Core/org.emftext.language.java.resource/.classpath +++ b/Core/org.emftext.language.java.resource/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/Core/org.emftext.language.java.resource/plugin.xml b/Core/org.emftext.language.java.resource/plugin.xml index 155d0e0a..71e0cc4c 100755 --- a/Core/org.emftext.language.java.resource/plugin.xml +++ b/Core/org.emftext.language.java.resource/plugin.xml @@ -1,18 +1,18 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/Core/org.emftext.language.java.resource/src/org/emftext/language/java/resource/ClassFileModelLoader.java b/Core/org.emftext.language.java.resource/src/org/emftext/language/java/resource/ClassFileModelLoader.java index 4f8c2d97..7d2c0216 100755 --- a/Core/org.emftext.language.java.resource/src/org/emftext/language/java/resource/ClassFileModelLoader.java +++ b/Core/org.emftext.language.java.resource/src/org/emftext/language/java/resource/ClassFileModelLoader.java @@ -2,12 +2,12 @@ * Copyright (c) 2006-2012 * Software Technology Group, Dresden University of Technology * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 - * + * * 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: * Software Technology Group - TU Dresden, Germany; * DevBoost GmbH - Berlin, Germany @@ -29,6 +29,7 @@ import org.eclipse.emf.common.util.BasicEList; import org.eclipse.emf.common.util.EList; import org.emftext.language.java.JavaClasspath; +import org.emftext.language.java.JavaUniquePathConstructor; import org.emftext.language.java.annotations.AnnotationsFactory; import org.emftext.language.java.arrays.ArraysFactory; import org.emftext.language.java.classifiers.Annotation; @@ -86,10 +87,10 @@ public CompilationUnit parse(InputStream inputStream, String classFileName) thro ConcreteClassifier classifier = constructClassifier(myClass); CompilationUnit cu = ContainersFactory.eINSTANCE.createCompilationUnit(); cu.setName(classFileName); - List namespace1 = Arrays.asList(myClass.getClassName().split("\\.")); - List namespace2 = Arrays.asList(namespace1.get(namespace1.size() - 1).split("\\$")); + List namespace1 = Arrays.asList(JavaUniquePathConstructor.PACKAGE_SEPARATOR_REGEX_PATTERN.split(myClass.getClassName())); + List namespace2 = Arrays.asList(JavaUniquePathConstructor.CLASSIFIER_SEPARATOR_REGEX_PATTERN.split(namespace1.get(namespace1.size() - 1))); cu.getNamespaces().addAll(namespace1.subList(0, namespace1.size() - 1)); - if (myClass.getClassName().endsWith("$")) { + if (myClass.getClassName().endsWith(JavaUniquePathConstructor.CLASSIFIER_SEPARATOR)) { //empty class name cu.getNamespaces().addAll(namespace2.subList(0, namespace2.size())); } @@ -124,12 +125,12 @@ else if (clazz.isInterface()) { } String className = clazz.getClassName(); - int idx = clazz.getClassName().lastIndexOf("$"); + int idx = clazz.getClassName().lastIndexOf(JavaUniquePathConstructor.CLASSIFIER_SEPARATOR); if (idx >= 0) { className = className.substring(idx + 1); } else { - idx = clazz.getClassName().lastIndexOf("."); + idx = clazz.getClassName().lastIndexOf(JavaUniquePathConstructor.PACKAGE_SEPARATOR); if (idx >= 0) { className = className.substring(idx + 1); } @@ -269,7 +270,7 @@ else if(emfClassifier instanceof Interface) { } List parameterNames = extractParameterNames(method); - + for(int i = 0; i < method.getArgumentTypes().length; i++) { org.apache.bcel5_2_0.generic.Type argType = method.getArgumentTypes()[i]; String paramName; @@ -793,7 +794,7 @@ protected String constructTypeArguments(String s, ClassifierReference typeRef, T } protected TypeReference createReferenceToClassifier(String fullClassifierName) { - fullClassifierName = fullClassifierName.replaceAll("/", "."); + fullClassifierName = fullClassifierName.replaceAll("/", JavaUniquePathConstructor.PACKAGE_SEPARATOR); Classifier classifier = (Classifier) javaClasspath.getClassifier(fullClassifierName); ClassifierReference classifierReference = TypesFactory.eINSTANCE.createClassifierReference(); @@ -809,7 +810,7 @@ protected int getArrayDimension(String signature) { } return arrayDimension; } - + protected List extractParameterNames(final org.apache.bcel5_2_0.classfile.Method method) { final List names = new ArrayList(); if (method.getLocalVariableTable() != null) { diff --git a/Core/org.emftext.language.java.resource/src/org/emftext/language/java/resource/JavaSourceOrClassFileResource.java b/Core/org.emftext.language.java.resource/src/org/emftext/language/java/resource/JavaSourceOrClassFileResource.java index 1b0878d1..048d860f 100755 --- a/Core/org.emftext.language.java.resource/src/org/emftext/language/java/resource/JavaSourceOrClassFileResource.java +++ b/Core/org.emftext.language.java.resource/src/org/emftext/language/java/resource/JavaSourceOrClassFileResource.java @@ -2,16 +2,17 @@ * Copyright (c) 2006-2013 * Software Technology Group, Dresden University of Technology * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 - * + * * 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: * Software Technology Group - TU Dresden, Germany; * DevBoost GmbH - Berlin, Germany * - initial API and implementation + * Benjamin Klatt - Adaptation for performance improvement ******************************************************************************/ package org.emftext.language.java.resource; @@ -50,6 +51,7 @@ import org.emftext.language.java.resource.java.IJavaOptions; import org.emftext.language.java.resource.java.IJavaReferenceResolverSwitch; import org.emftext.language.java.resource.java.IJavaTextPrinter; +import org.emftext.language.java.resource.java.JavaReferenceResolverSwitchFactory; import org.emftext.language.java.resource.java.mopp.JavaInputStreamProcessor; import org.emftext.language.java.resource.java.mopp.JavaParser; import org.emftext.language.java.resource.java.mopp.JavaResource; @@ -64,36 +66,47 @@ */ public class JavaSourceOrClassFileResource extends JavaResource { - private final JavaLayoutUtil layoutUtil = new JavaLayoutUtil(); - + private final static JavaLayoutUtil layoutUtil = new JavaLayoutUtil(); + public JavaSourceOrClassFileResource(URI uri) { super(uri); } + /** + * Override the {@link JavaResource} getReferenceResolverSwitch() to make use of the + * {@link JavaReferenceResolverSwitchFactory}.
          + * + * {@inheritDoc} + */ + @Override + public IJavaReferenceResolverSwitch getReferenceResolverSwitch() { + return JavaReferenceResolverSwitchFactory.getSwitch(); + } + protected boolean isClassFile() { if (uri == null) { return false; } - + // Is there a physical source file behind this URI? URI normalizedURI = getURIConverter().normalize(uri); String fileExtension = normalizedURI.fileExtension(); if ("class".equals(fileExtension)) { return true; } - + return false; } - + protected boolean isPackage() { List contents = getContentsInternal(); if (contents.isEmpty()) { return false; } - + return contents.get(0) instanceof Package; } - + protected boolean hasJavaClassifierURI() { if (uri == null) { return false; @@ -105,7 +118,7 @@ protected boolean hasJavaClassifierURI() { @Override protected void doLoad(InputStream inputStream, Map options) throws IOException { - + if (isClassFile()) { JavaClasspath javaClasspath = JavaClasspath.get(this); ClassFileModelLoader classFileParser = new ClassFileModelLoader(javaClasspath); @@ -119,11 +132,11 @@ protected void doLoad(InputStream inputStream, Map options) } if (!optionsWithUnicodeConverter.containsKey(IJavaOptions.INPUT_STREAM_PREPROCESSOR_PROVIDER)) { optionsWithUnicodeConverter.put( - IJavaOptions.INPUT_STREAM_PREPROCESSOR_PROVIDER, + IJavaOptions.INPUT_STREAM_PREPROCESSOR_PROVIDER, new IJavaInputStreamProcessorProvider() { - + public JavaInputStreamProcessor getInputStreamProcessor(InputStream inputStream) { - return new JavaUnicodeConverter(inputStream); + return new JavaUnicodeConverter(inputStream); } }); } @@ -179,13 +192,13 @@ public void regis @Override public EObject getEObject(String id) { EObject result = null; - + // check whether proxy resolving is turned off Object disableProxyResolvingValue = getResourceSet().getLoadOptions().get(IExtendedJavaOptions.DISABLE_ON_DEMAND_PROXY_RESOLVING); if (Boolean.TRUE.equals(disableProxyResolvingValue)) { return null; } - + if ((isClassFile() || isPackage()) && id.startsWith("//" + JavaUniquePathConstructor.CLASSIFIERS_ROOT_PATH_PREFIX)) { if (!getContentsInternal().isEmpty()) { @@ -297,12 +310,12 @@ protected void register() throws IOException { CompilationUnit cu = (CompilationUnit) root; setCompilationUnitName(cu); } - + //only for physical URIs if(hasJavaClassifierURI()) { return; } - + //could also be a package-info.java without CU if (root instanceof CompilationUnit) { CompilationUnit cu = (CompilationUnit) root; @@ -338,7 +351,7 @@ protected void populatePackage(Package p) { JavaClasspath classpath = JavaClasspath.get(this); List classifiers = classpath.getClassifiers( fullPackageName, "*"); - + for (EObject classifier : classifiers) { classifier = (ConcreteClassifier) EcoreUtil.resolve(classifier, getResourceSet()); @@ -351,7 +364,7 @@ protected void populatePackage(Package p) { if (cu == null) { continue; } - + p.getCompilationUnits().add(cu); } } @@ -359,7 +372,7 @@ protected void populatePackage(Package p) { @Override protected void doSave(OutputStream outputStream, Map options) throws IOException { - + if (isClassFile()) { // Saving is not supported for class files. return; @@ -444,7 +457,7 @@ protected boolean containsMultipleCompilationUnits() { } return false; } - + /** * This method adds a package declaration (namespaces) to the given * compilation unit if none is defined and this resource has a logical URI. @@ -456,7 +469,7 @@ protected void addPackageDeclaration(CompilationUnit cu) { // If there is no package and this is a logical URI, we guess the // package based on the URI. String[] fullName = uri.lastSegment().split("\\."); - for (int i = 0; i < fullName.length - 2; i++) { + for (int i = 0; i < fullName.length - 2; i++) { cu.getNamespaces().add(fullName[i]); } } diff --git a/Core/org.emftext.language.java/.checkstyle b/Core/org.emftext.language.java/.checkstyle index 61cb55e4..fe0b70ee 100644 --- a/Core/org.emftext.language.java/.checkstyle +++ b/Core/org.emftext.language.java/.checkstyle @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/Core/org.emftext.language.java/.classpath b/Core/org.emftext.language.java/.classpath index fe87a083..a1e4b83a 100644 --- a/Core/org.emftext.language.java/.classpath +++ b/Core/org.emftext.language.java/.classpath @@ -1,8 +1,8 @@ - - - - - - - - + + + + + + + + diff --git a/Core/org.emftext.language.java/.project b/Core/org.emftext.language.java/.project index 390a3d8a..df1baedf 100644 --- a/Core/org.emftext.language.java/.project +++ b/Core/org.emftext.language.java/.project @@ -1,46 +1,46 @@ - - - org.emftext.language.java - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder - - - - - org.emftext.language.java.ejava.resource.ejava.builder - - - - - org.emftext.sdk.concretesyntax.resource.cs.builder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.pde.PluginNature - com.atlassw.tools.eclipse.checkstyle.CheckstyleNature - org.emftext.language.java.ejava.resource.ejava.nature - org.emftext.sdk.concretesyntax.resource.cs.nature - - + + + org.emftext.language.java + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder + + + + + org.emftext.language.java.ejava.resource.ejava.builder + + + + + org.emftext.sdk.concretesyntax.resource.cs.builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + com.atlassw.tools.eclipse.checkstyle.CheckstyleNature + org.emftext.language.java.ejava.resource.ejava.nature + org.emftext.sdk.concretesyntax.resource.cs.nature + + diff --git a/Core/org.emftext.language.java/.settings/org.eclipse.jdt.core.prefs b/Core/org.emftext.language.java/.settings/org.eclipse.jdt.core.prefs index e5109ece..f0c083e5 100644 --- a/Core/org.emftext.language.java/.settings/org.eclipse.jdt.core.prefs +++ b/Core/org.emftext.language.java/.settings/org.eclipse.jdt.core.prefs @@ -1,12 +1,12 @@ -#Fri Jun 19 09:34:06 CEST 2009 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.6 -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.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.6 +#Fri Jun 19 09:34:06 CEST 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +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.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/Core/org.emftext.language.java/documentation/antlr_java.g b/Core/org.emftext.language.java/documentation/antlr_java.g index fa5342a8..35173e54 100755 --- a/Core/org.emftext.language.java/documentation/antlr_java.g +++ b/Core/org.emftext.language.java/documentation/antlr_java.g @@ -1,1042 +1,1042 @@ -/* - * This Java grammar inspired java.ecore and java.cs - * source: http://www.antlr.org/grammar/1152141644268/Java.g - * (more information at the end of the file) - */ -grammar Java; -options {backtrack=true; memoize=true;} - -@lexer::members { - protected boolean enumIsKeyword = true; - protected boolean assertIsKeyword = true; -} - -// starting point for parsing a java file -/* The annotations are separated out to make parsing faster, but must be associated with - a packageDeclaration or a typeDeclaration (and not an empty one). */ -compilationUnit - : annotations - ( packageDeclaration importDeclaration* typeDeclaration* - | classOrInterfaceDeclaration typeDeclaration* - ) - | packageDeclaration? importDeclaration* typeDeclaration* - ; - -packageDeclaration - : 'package' qualifiedName ';' - ; - -importDeclaration - : 'import' 'static'? qualifiedName ('.' '*')? ';' - ; - -typeDeclaration - : classOrInterfaceDeclaration - | ';' - ; - -classOrInterfaceDeclaration - : classOrInterfaceModifiers (classDeclaration | interfaceDeclaration) - ; - -classOrInterfaceModifiers - : classOrInterfaceModifier* - ; - -classOrInterfaceModifier - : annotation // class or interface - | 'public' // class or interface - | 'protected' // class or interface - | 'private' // class or interface - | 'abstract' // class or interface - | 'static' // class or interface - | 'final' // class only -- does not apply to interfaces - | 'strictfp' // class or interface - ; - -modifiers - : modifier* - ; - -classDeclaration - : normalClassDeclaration - | enumDeclaration - ; - -normalClassDeclaration - : 'class' Identifier typeParameters? - ('extends' type)? - ('implements' typeList)? - classBody - ; - -typeParameters - : '<' typeParameter (',' typeParameter)* '>' - ; - -typeParameter - : Identifier ('extends' typeBound)? - ; - -typeBound - : type ('&' type)* - ; - -enumDeclaration - : ENUM Identifier ('implements' typeList)? enumBody - ; - -enumBody - : '{' enumConstants? ','? enumBodyDeclarations? '}' - ; - -enumConstants - : enumConstant (',' enumConstant)* - ; - -enumConstant - : annotations? Identifier arguments? classBody? - ; - -enumBodyDeclarations - : ';' (classBodyDeclaration)* - ; - - -interfaceDeclaration - : normalInterfaceDeclaration - | annotationTypeDeclaration - ; - -normalInterfaceDeclaration - : 'interface' Identifier typeParameters? ('extends' typeList)? interfaceBody - ; - -typeList - : type (',' type)* - ; - -classBody - : '{' classBodyDeclaration* '}' - ; - -interfaceBody - : '{' interfaceBodyDeclaration* '}' - ; - -classBodyDeclaration - : ';' - | 'static'? block - | modifiers memberDecl - ; - -memberDecl - : genericMethodOrConstructorDecl - | memberDeclaration - | 'void' Identifier voidMethodDeclaratorRest - | Identifier constructorDeclaratorRest - | interfaceDeclaration - | classDeclaration - ; - -memberDeclaration - : type (methodDeclaration | fieldDeclaration) - ; - -genericMethodOrConstructorDecl - : typeParameters genericMethodOrConstructorRest - ; - -genericMethodOrConstructorRest - : (type | 'void') Identifier methodDeclaratorRest - | Identifier constructorDeclaratorRest - ; - -methodDeclaration - : Identifier methodDeclaratorRest - ; - -fieldDeclaration - : variableDeclarators ';' - ; - -interfaceBodyDeclaration - : modifiers interfaceMemberDecl - | ';' - ; - -interfaceMemberDecl - : interfaceMethodOrFieldDecl - | interfaceGenericMethodDecl - | 'void' Identifier voidInterfaceMethodDeclaratorRest - | interfaceDeclaration - | classDeclaration - ; - -interfaceMethodOrFieldDecl - : type Identifier interfaceMethodOrFieldRest - ; - -interfaceMethodOrFieldRest - : constantDeclaratorsRest ';' - | interfaceMethodDeclaratorRest - ; - -methodDeclaratorRest - : formalParameters ('[' ']')* - ('throws' qualifiedNameList)? - ( methodBody - | ';' - ) - ; - -voidMethodDeclaratorRest - : formalParameters ('throws' qualifiedNameList)? - ( methodBody - | ';' - ) - ; - -interfaceMethodDeclaratorRest - : formalParameters ('[' ']')* ('throws' qualifiedNameList)? ';' - ; - -interfaceGenericMethodDecl - : typeParameters (type | 'void') Identifier - interfaceMethodDeclaratorRest - ; - -voidInterfaceMethodDeclaratorRest - : formalParameters ('throws' qualifiedNameList)? ';' - ; - -constructorDeclaratorRest - : formalParameters ('throws' qualifiedNameList)? constructorBody - ; - -constantDeclarator - : Identifier constantDeclaratorRest - ; - -variableDeclarators - : variableDeclarator (',' variableDeclarator)* - ; - -variableDeclarator - : variableDeclaratorId ('=' variableInitializer)? - ; - -constantDeclaratorsRest - : constantDeclaratorRest (',' constantDeclarator)* - ; - -constantDeclaratorRest - : ('[' ']')* '=' variableInitializer - ; - -variableDeclaratorId - : Identifier ('[' ']')* - ; - -variableInitializer - : arrayInitializer - | expression - ; - -arrayInitializer - : '{' (variableInitializer (',' variableInitializer)* (',')? )? '}' - ; - -modifier - : annotation - | 'public' - | 'protected' - | 'private' - | 'static' - | 'abstract' - | 'final' - | 'native' - | 'synchronized' - | 'transient' - | 'volatile' - | 'strictfp' - ; - -packageOrTypeName - : qualifiedName - ; - -enumConstantName - : Identifier - ; - -typeName - : qualifiedName - ; - -type - : classOrInterfaceType ('[' ']')* - | primitiveType ('[' ']')* - ; - -classOrInterfaceType - : Identifier typeArguments? ('.' Identifier typeArguments? )* - ; - -primitiveType - : 'boolean' - | 'char' - | 'byte' - | 'short' - | 'int' - | 'long' - | 'float' - | 'double' - ; - -variableModifier - : 'final' - | annotation - ; - -typeArguments - : '<' typeArgument (',' typeArgument)* '>' - ; - -typeArgument - : type - | '?' (('extends' | 'super') type)? - ; - -qualifiedNameList - : qualifiedName (',' qualifiedName)* - ; - -formalParameters - : '(' formalParameterDecls? ')' - ; - -formalParameterDecls - : variableModifiers type formalParameterDeclsRest - ; - -formalParameterDeclsRest - : variableDeclaratorId (',' formalParameterDecls)? - | '...' variableDeclaratorId - ; - -methodBody - : block - ; - -constructorBody - : '{' explicitConstructorInvocation? blockStatement* '}' - ; - -// done? - i can't see support for the second case (with primary upfront) -explicitConstructorInvocation - : nonWildcardTypeArguments? ('this' | 'super') arguments ';' - | primary '.' nonWildcardTypeArguments? 'super' arguments ';' - ; - -qualifiedName - : Identifier ('.' Identifier)* - ; - -literal - : integerLiteral - | FloatingPointLiteral - | CharacterLiteral - | StringLiteral - | booleanLiteral - | 'null' - ; - -integerLiteral - : HexLiteral - | OctalLiteral - | DecimalLiteral - ; - -booleanLiteral - : 'true' - | 'false' - ; - -// ANNOTATIONS -annotations - : annotation+ - ; - -annotation - : '@' annotationName ( '(' ( elementValuePairs | elementValue )? ')' )? - ; - -annotationName - : Identifier ('.' Identifier)* - ; - -elementValuePairs - : elementValuePair (',' elementValuePair)* - ; - -elementValuePair - : Identifier '=' elementValue - ; - -elementValue - : conditionalExpression - | annotation - | elementValueArrayInitializer - ; - -elementValueArrayInitializer - : '{' (elementValue (',' elementValue)*)? (',')? '}' - ; - -annotationTypeDeclaration - : '@' 'interface' Identifier annotationTypeBody - ; - -annotationTypeBody - : '{' (annotationTypeElementDeclaration)* '}' - ; - -annotationTypeElementDeclaration - : modifiers annotationTypeElementRest - ; - -annotationTypeElementRest - : type annotationMethodOrConstantRest ';' - | normalClassDeclaration ';'? - | normalInterfaceDeclaration ';'? - | enumDeclaration ';'? - | annotationTypeDeclaration ';'? - ; - -annotationMethodOrConstantRest - : annotationMethodRest - | annotationConstantRest - ; - -annotationMethodRest - : Identifier '(' ')' defaultValue? - ; - -annotationConstantRest - : variableDeclarators - ; - -defaultValue - : 'default' elementValue - ; - -// STATEMENTS / BLOCKS -block - : '{' blockStatement* '}' - ; - -blockStatement - : localVariableDeclarationStatement - | classOrInterfaceDeclaration - | statement - ; - -localVariableDeclarationStatement - : localVariableDeclaration ';' - ; - -localVariableDeclaration - : variableModifiers type variableDeclarators - ; - -variableModifiers - : variableModifier* - ; - -statement - : block - | ASSERT expression (':' expression)? ';' - | 'if' parExpression statement (options {k=1;}:'else' statement)? - | 'for' '(' forControl ')' statement - | 'while' parExpression statement - | 'do' statement 'while' parExpression ';' - | 'try' block - ( catches 'finally' block - | catches - | 'finally' block - ) - | 'switch' parExpression '{' switchBlockStatementGroups '}' - | 'synchronized' parExpression block - | 'return' expression? ';' - | 'throw' expression ';' - | 'break' Identifier? ';' - | 'continue' Identifier? ';' - | ';' - | statementExpression ';' - | Identifier ':' statement - ; - -catches - : catchClause (catchClause)* - ; - -catchClause - : 'catch' '(' formalParameter ')' block - ; - -formalParameter - : variableModifiers type variableDeclaratorId - ; - - -switchBlockStatementGroups - : (switchBlockStatementGroup)* - ; - -/* The change here (switchLabel -> switchLabel+) technically makes this grammar - ambiguous; but with appropriately greedy parsing it yields the most - appropriate AST, one in which each group, except possibly the last one, has - labels and statements. */ -switchBlockStatementGroup - : switchLabel+ blockStatement* - ; - -switchLabel - : 'case' constantExpression ':' - | 'case' enumConstantName ':' - | 'default' ':' - ; -forControl -options {k=3;} // be efficient for common case: for (ID ID : ID) ... - : enhancedForControl - | forInit? ';' expression? ';' forUpdate? - ; - -forInit - : localVariableDeclaration - | expressionList - ; - -enhancedForControl - : variableModifiers type Identifier ':' expression - ; - -forUpdate - : expressionList - ; - -// currently transferred to java.cs up to this line -// EXPRESSIONS - -parExpression - : '(' expression ')' - ; - -expressionList - : expression (',' expression)* - ; - -statementExpression - : expression - ; - -constantExpression - : expression - ; - -expression - : conditionalExpression (assignmentOperator expression)? - ; - -assignmentOperator - : '=' - | '+=' - | '-=' - | '*=' - | '/=' - | '&=' - | '|=' - | '^=' - | '%=' - | ('<' '<' '=')=> t1='<' t2='<' t3='=' - { $t1.getLine() == $t2.getLine() && - $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && - $t2.getLine() == $t3.getLine() && - $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() }? - | ('>' '>' '>' '=')=> t1='>' t2='>' t3='>' t4='=' - { $t1.getLine() == $t2.getLine() && - $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && - $t2.getLine() == $t3.getLine() && - $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() && - $t3.getLine() == $t4.getLine() && - $t3.getCharPositionInLine() + 1 == $t4.getCharPositionInLine() }? - | ('>' '>' '=')=> t1='>' t2='>' t3='=' - { $t1.getLine() == $t2.getLine() && - $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && - $t2.getLine() == $t3.getLine() && - $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() }? - ; - -conditionalExpression - : conditionalOrExpression ( '?' expression ':' expression )? - ; - -conditionalOrExpression - : conditionalAndExpression ( '||' conditionalAndExpression )* - ; - -conditionalAndExpression - : inclusiveOrExpression ( '&&' inclusiveOrExpression )* - ; - -inclusiveOrExpression - : exclusiveOrExpression ( '|' exclusiveOrExpression )* - ; - -exclusiveOrExpression - : andExpression ( '^' andExpression )* - ; - -andExpression - : equalityExpression ( '&' equalityExpression )* - ; - -equalityExpression - : instanceOfExpression ( ('==' | '!=') instanceOfExpression )* - ; - -instanceOfExpression - : relationalExpression ('instanceof' type)? - ; - -relationalExpression - : shiftExpression ( relationalOp shiftExpression )* - ; - -relationalOp - : ('<' '=')=> t1='<' t2='=' - { $t1.getLine() == $t2.getLine() && - $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? - | ('>' '=')=> t1='>' t2='=' - { $t1.getLine() == $t2.getLine() && - $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? - | '<' - | '>' - ; - -shiftExpression - : additiveExpression ( shiftOp additiveExpression )* - ; - -shiftOp - : ('<' '<')=> t1='<' t2='<' - { $t1.getLine() == $t2.getLine() && - $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? - | ('>' '>' '>')=> t1='>' t2='>' t3='>' - { $t1.getLine() == $t2.getLine() && - $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && - $t2.getLine() == $t3.getLine() && - $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() }? - | ('>' '>')=> t1='>' t2='>' - { $t1.getLine() == $t2.getLine() && - $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? - ; - -// done -additiveExpression - : multiplicativeExpression ( ('+' | '-') multiplicativeExpression )* - ; - -// done -multiplicativeExpression - : unaryExpression ( ( '*' | '/' | '%' ) unaryExpression )* - ; - -// done -unaryExpression - : '+' unaryExpression - | '-' unaryExpression - | '++' unaryExpression - | '--' unaryExpression - | unaryExpressionNotPlusMinus - ; - -// done -unaryExpressionNotPlusMinus - : '~' unaryExpression - | '!' unaryExpression - | castExpression - | primary selector* ('++'|'--')? - ; - -// done -castExpression - : '(' primitiveType ')' unaryExpression - | '(' (type | expression) ')' unaryExpressionNotPlusMinus //without expression, is it necessary? - ; - -//done, split only in "reference", "literal" and "parExpression" -primary - : parExpression // DONE - | 'this' ('.' Identifier)* identifierSuffix? // DONE without the suffix - | 'super' superSuffix // DONE - | literal // DONE - | 'new' creator // DONE - | Identifier ('.' Identifier)* identifierSuffix? // DONE without the suffix - | primitiveType ('[' ']')* '.' 'class' // DONE - | 'void' '.' 'class' // DONE - ; - -// done -identifierSuffix - : ('[' ']')+ '.' 'class' // DONE - | ('[' expression ']')+ // DONE (can also be matched by selector, but do here) - | arguments // DONE - | '.' 'class' // DONE - | '.' explicitGenericInvocation // DONE - | '.' 'this' // DONE - | '.' 'super' arguments // TODO can't find an example for this case - | '.' 'new' innerCreator // DONE - ; - -// done -creator - : nonWildcardTypeArguments createdName classCreatorRest - | createdName (arrayCreatorRest | classCreatorRest) - ; - -// done -createdName - : classOrInterfaceType - | primitiveType - ; - -// done -innerCreator - : nonWildcardTypeArguments? Identifier classCreatorRest - ; - -// done -arrayCreatorRest - : '[' - ( ']' ('[' ']')* arrayInitializer - | expression ']' ('[' expression ']')* ('[' ']')* - ) - ; - -// done -classCreatorRest - : arguments classBody? - ; - -// done -explicitGenericInvocation - : nonWildcardTypeArguments Identifier arguments - ; - -// done -nonWildcardTypeArguments - : '<' typeList '>' - ; - -// done -selector - : '.' Identifier arguments? // DONE - | '.' 'this' // DONE - | '.' 'super' superSuffix // DONE - | '.' 'new' innerCreator // DONE - | '[' expression ']' // DONE - ; - -// done -superSuffix - : arguments - | '.' Identifier arguments? - ; - -// done -arguments - : '(' expressionList? ')' - ; - -// LEXER - -HexLiteral : '0' ('x'|'X') HexDigit+ IntegerTypeSuffix? ; - -DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) IntegerTypeSuffix? ; - -OctalLiteral : '0' ('0'..'7')+ IntegerTypeSuffix? ; - -fragment -HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ; - -fragment -IntegerTypeSuffix : ('l'|'L') ; - -FloatingPointLiteral - : ('0'..'9')+ '.' ('0'..'9')* Exponent? FloatTypeSuffix? - | '.' ('0'..'9')+ Exponent? FloatTypeSuffix? - | ('0'..'9')+ Exponent FloatTypeSuffix? - | ('0'..'9')+ FloatTypeSuffix - ; - -fragment -Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+ ; - -fragment -FloatTypeSuffix : ('f'|'F'|'d'|'D') ; - -CharacterLiteral - : '\'' ( EscapeSequence | ~('\''|'\\') ) '\'' - ; - -StringLiteral - : '"' ( EscapeSequence | ~('\\'|'"') )* '"' - ; - -fragment -EscapeSequence - : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') - | UnicodeEscape - | OctalEscape - ; - -fragment -OctalEscape - : '\\' ('0'..'3') ('0'..'7') ('0'..'7') - | '\\' ('0'..'7') ('0'..'7') - | '\\' ('0'..'7') - ; - -fragment -UnicodeEscape - : '\\' 'u' HexDigit HexDigit HexDigit HexDigit - ; - -ENUM: 'enum' {if (!enumIsKeyword) $type=Identifier;} - ; - -ASSERT - : 'assert' {if (!assertIsKeyword) $type=Identifier;} - ; - -Identifier - : Letter (Letter|JavaIDDigit)* - ; - -/**I found this char range in JavaCC's grammar, but Letter and Digit overlap. - Still works, but... - */ -fragment -Letter - : '\u0024' | - '\u0041'..'\u005a' | - '\u005f' | - '\u0061'..'\u007a' | - '\u00c0'..'\u00d6' | - '\u00d8'..'\u00f6' | - '\u00f8'..'\u00ff' | - '\u0100'..'\u1fff' | - '\u3040'..'\u318f' | - '\u3300'..'\u337f' | - '\u3400'..'\u3d2d' | - '\u4e00'..'\u9fff' | - '\uf900'..'\ufaff' - ; - -fragment -JavaIDDigit - : '\u0030'..'\u0039' | - '\u0660'..'\u0669' | - '\u06f0'..'\u06f9' | - '\u0966'..'\u096f' | - '\u09e6'..'\u09ef' | - '\u0a66'..'\u0a6f' | - '\u0ae6'..'\u0aef' | - '\u0b66'..'\u0b6f' | - '\u0be7'..'\u0bef' | - '\u0c66'..'\u0c6f' | - '\u0ce6'..'\u0cef' | - '\u0d66'..'\u0d6f' | - '\u0e50'..'\u0e59' | - '\u0ed0'..'\u0ed9' | - '\u1040'..'\u1049' - ; - -WS : (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;} - ; - -COMMENT - : '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;} - ; - -LINE_COMMENT - : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;} - ; -/* - [The "BSD licence"] - Copyright (c) 2007-2008 Terence Parr - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -/** A Java 1.5 grammar for ANTLR v3 derived from the spec - * - * This is a very close representation of the spec; the changes - * are comestic (remove left recursion) and also fixes (the spec - * isn't exactly perfect). I have run this on the 1.4.2 source - * and some nasty looking enums from 1.5, but have not really - * tested for 1.5 compatibility. - * - * I built this with: java -Xmx100M org.antlr.Tool java.g - * and got two errors that are ok (for now): - * java.g:691:9: Decision can match input such as - * "'0'..'9'{'E', 'e'}{'+', '-'}'0'..'9'{'D', 'F', 'd', 'f'}" - * using multiple alternatives: 3, 4 - * As a result, alternative(s) 4 were disabled for that input - * java.g:734:35: Decision can match input such as "{'$', 'A'..'Z', - * '_', 'a'..'z', '\u00C0'..'\u00D6', '\u00D8'..'\u00F6', - * '\u00F8'..'\u1FFF', '\u3040'..'\u318F', '\u3300'..'\u337F', - * '\u3400'..'\u3D2D', '\u4E00'..'\u9FFF', '\uF900'..'\uFAFF'}" - * using multiple alternatives: 1, 2 - * As a result, alternative(s) 2 were disabled for that input - * - * You can turn enum on/off as a keyword :) - * - * Version 1.0 -- initial release July 5, 2006 (requires 3.0b2 or higher) - * - * Primary author: Terence Parr, July 2006 - * - * Version 1.0.1 -- corrections by Koen Vanderkimpen & Marko van Dooren, - * October 25, 2006; - * fixed normalInterfaceDeclaration: now uses typeParameters instead - * of typeParameter (according to JLS, 3rd edition) - * fixed castExpression: no longer allows expression next to type - * (according to semantics in JLS, in contrast with syntax in JLS) - * - * Version 1.0.2 -- Terence Parr, Nov 27, 2006 - * java spec I built this from had some bizarre for-loop control. - * Looked weird and so I looked elsewhere...Yep, it's messed up. - * simplified. - * - * Version 1.0.3 -- Chris Hogue, Feb 26, 2007 - * Factored out an annotationName rule and used it in the annotation rule. - * Not sure why, but typeName wasn't recognizing references to inner - * annotations (e.g. @InterfaceName.InnerAnnotation()) - * Factored out the elementValue section of an annotation reference. Created - * elementValuePair and elementValuePairs rules, then used them in the - * annotation rule. Allows it to recognize annotation references with - * multiple, comma separated attributes. - * Updated elementValueArrayInitializer so that it allows multiple elements. - * (It was only allowing 0 or 1 element). - * Updated localVariableDeclaration to allow annotations. Interestingly the JLS - * doesn't appear to indicate this is legal, but it does work as of at least - * JDK 1.5.0_06. - * Moved the Identifier portion of annotationTypeElementRest to annotationMethodRest. - * Because annotationConstantRest already references variableDeclarator which - * has the Identifier portion in it, the parser would fail on constants in - * annotation definitions because it expected two identifiers. - * Added optional trailing ';' to the alternatives in annotationTypeElementRest. - * Wouldn't handle an inner interface that has a trailing ';'. - * Swapped the expression and type rule reference order in castExpression to - * make it check for genericized casts first. It was failing to recognize a - * statement like "Class TYPE = (Class)...;" because it was seeing - * 'Class'. - * Changed createdName to use typeArguments instead of nonWildcardTypeArguments. - * Again, JLS doesn't seem to allow this, but java.lang.Class has an example of - * of this construct. - * Changed the 'this' alternative in primary to allow 'identifierSuffix' rather than - * just 'arguments'. The case it couldn't handle was a call to an explicit - * generic method invocation (e.g. this.doSomething()). Using identifierSuffix - * may be overly aggressive--perhaps should create a more constrained thisSuffix rule? - * - * Version 1.0.4 -- Hiroaki Nakamura, May 3, 2007 - * - * Fixed formalParameterDecls, localVariableDeclaration, forInit, - * and forVarControl to use variableModifier* not 'final'? (annotation)? - * - * Version 1.0.5 -- Terence, June 21, 2007 - * --a[i].foo didn't work. Fixed unaryExpression - * - * Version 1.0.6 -- John Ridgway, March 17, 2008 - * Made "assert" a switchable keyword like "enum". - * Fixed compilationUnit to disallow "annotation importDeclaration ...". - * Changed "Identifier ('.' Identifier)*" to "qualifiedName" in more - * places. - * Changed modifier* and/or variableModifier* to classOrInterfaceModifiers, - * modifiers or variableModifiers, as appropriate. - * Renamed "bound" to "typeBound" to better match language in the JLS. - * Added "memberDeclaration" which rewrites to methodDeclaration or - * fieldDeclaration and pulled type into memberDeclaration. So we parse - * type and then move on to decide whether we're dealing with a field - * or a method. - * Modified "constructorDeclaration" to use "constructorBody" instead of - * "methodBody". constructorBody starts with explicitConstructorInvocation, - * then goes on to blockStatement*. Pulling explicitConstructorInvocation - * out of expressions allowed me to simplify "primary". - * Changed variableDeclarator to simplify it. - * Changed type to use classOrInterfaceType, thus simplifying it; of course - * I then had to add classOrInterfaceType, but it is used in several - * places. - * Fixed annotations, old version allowed "@X(y,z)", which is illegal. - * Added optional comma to end of "elementValueArrayInitializer"; as per JLS. - * Changed annotationTypeElementRest to use normalClassDeclaration and - * normalInterfaceDeclaration rather than classDeclaration and - * interfaceDeclaration, thus getting rid of a couple of grammar ambiguities. - * Split localVariableDeclaration into localVariableDeclarationStatement - * (includes the terminating semi-colon) and localVariableDeclaration. - * This allowed me to use localVariableDeclaration in "forInit" clauses, - * simplifying them. - * Changed switchBlockStatementGroup to use multiple labels. This adds an - * ambiguity, but if one uses appropriately greedy parsing it yields the - * parse that is closest to the meaning of the switch statement. - * Renamed "forVarControl" to "enhancedForControl" -- JLS language. - * Added semantic predicates to test for shift operations rather than other - * things. Thus, for instance, the string "< <" will never be treated - * as a left-shift operator. - * In "creator" we rule out "nonWildcardTypeArguments" on arrayCreation, - * which are illegal. - * Moved "nonWildcardTypeArguments into innerCreator. - * Removed 'super' superSuffix from explicitGenericInvocation, since that - * is only used in explicitConstructorInvocation at the beginning of a - * constructorBody. (This is part of the simplification of expressions - * mentioned earlier.) - * Simplified primary (got rid of those things that are only used in - * explicitConstructorInvocation). - * Lexer -- removed "Exponent?" from FloatingPointLiteral choice 4, since it - * led to an ambiguity. - * - * This grammar successfully parses every .java file in the JDK 1.5 source - * tree (excluding those whose file names include '-', which are not - * valid Java compilation units). - * - * Known remaining problems: - * "Letter" and "JavaIDDigit" are wrong. The actual specification of - * "Letter" should be "a character for which the method - * Character.isJavaIdentifierStart(int) returns true." A "Java - * letter-or-digit is a character for which the method - * Character.isJavaIdentifierPart(int) returns true." - */ +/* + * This Java grammar inspired java.ecore and java.cs + * source: http://www.antlr.org/grammar/1152141644268/Java.g + * (more information at the end of the file) + */ +grammar Java; +options {backtrack=true; memoize=true;} + +@lexer::members { + protected boolean enumIsKeyword = true; + protected boolean assertIsKeyword = true; +} + +// starting point for parsing a java file +/* The annotations are separated out to make parsing faster, but must be associated with + a packageDeclaration or a typeDeclaration (and not an empty one). */ +compilationUnit + : annotations + ( packageDeclaration importDeclaration* typeDeclaration* + | classOrInterfaceDeclaration typeDeclaration* + ) + | packageDeclaration? importDeclaration* typeDeclaration* + ; + +packageDeclaration + : 'package' qualifiedName ';' + ; + +importDeclaration + : 'import' 'static'? qualifiedName ('.' '*')? ';' + ; + +typeDeclaration + : classOrInterfaceDeclaration + | ';' + ; + +classOrInterfaceDeclaration + : classOrInterfaceModifiers (classDeclaration | interfaceDeclaration) + ; + +classOrInterfaceModifiers + : classOrInterfaceModifier* + ; + +classOrInterfaceModifier + : annotation // class or interface + | 'public' // class or interface + | 'protected' // class or interface + | 'private' // class or interface + | 'abstract' // class or interface + | 'static' // class or interface + | 'final' // class only -- does not apply to interfaces + | 'strictfp' // class or interface + ; + +modifiers + : modifier* + ; + +classDeclaration + : normalClassDeclaration + | enumDeclaration + ; + +normalClassDeclaration + : 'class' Identifier typeParameters? + ('extends' type)? + ('implements' typeList)? + classBody + ; + +typeParameters + : '<' typeParameter (',' typeParameter)* '>' + ; + +typeParameter + : Identifier ('extends' typeBound)? + ; + +typeBound + : type ('&' type)* + ; + +enumDeclaration + : ENUM Identifier ('implements' typeList)? enumBody + ; + +enumBody + : '{' enumConstants? ','? enumBodyDeclarations? '}' + ; + +enumConstants + : enumConstant (',' enumConstant)* + ; + +enumConstant + : annotations? Identifier arguments? classBody? + ; + +enumBodyDeclarations + : ';' (classBodyDeclaration)* + ; + + +interfaceDeclaration + : normalInterfaceDeclaration + | annotationTypeDeclaration + ; + +normalInterfaceDeclaration + : 'interface' Identifier typeParameters? ('extends' typeList)? interfaceBody + ; + +typeList + : type (',' type)* + ; + +classBody + : '{' classBodyDeclaration* '}' + ; + +interfaceBody + : '{' interfaceBodyDeclaration* '}' + ; + +classBodyDeclaration + : ';' + | 'static'? block + | modifiers memberDecl + ; + +memberDecl + : genericMethodOrConstructorDecl + | memberDeclaration + | 'void' Identifier voidMethodDeclaratorRest + | Identifier constructorDeclaratorRest + | interfaceDeclaration + | classDeclaration + ; + +memberDeclaration + : type (methodDeclaration | fieldDeclaration) + ; + +genericMethodOrConstructorDecl + : typeParameters genericMethodOrConstructorRest + ; + +genericMethodOrConstructorRest + : (type | 'void') Identifier methodDeclaratorRest + | Identifier constructorDeclaratorRest + ; + +methodDeclaration + : Identifier methodDeclaratorRest + ; + +fieldDeclaration + : variableDeclarators ';' + ; + +interfaceBodyDeclaration + : modifiers interfaceMemberDecl + | ';' + ; + +interfaceMemberDecl + : interfaceMethodOrFieldDecl + | interfaceGenericMethodDecl + | 'void' Identifier voidInterfaceMethodDeclaratorRest + | interfaceDeclaration + | classDeclaration + ; + +interfaceMethodOrFieldDecl + : type Identifier interfaceMethodOrFieldRest + ; + +interfaceMethodOrFieldRest + : constantDeclaratorsRest ';' + | interfaceMethodDeclaratorRest + ; + +methodDeclaratorRest + : formalParameters ('[' ']')* + ('throws' qualifiedNameList)? + ( methodBody + | ';' + ) + ; + +voidMethodDeclaratorRest + : formalParameters ('throws' qualifiedNameList)? + ( methodBody + | ';' + ) + ; + +interfaceMethodDeclaratorRest + : formalParameters ('[' ']')* ('throws' qualifiedNameList)? ';' + ; + +interfaceGenericMethodDecl + : typeParameters (type | 'void') Identifier + interfaceMethodDeclaratorRest + ; + +voidInterfaceMethodDeclaratorRest + : formalParameters ('throws' qualifiedNameList)? ';' + ; + +constructorDeclaratorRest + : formalParameters ('throws' qualifiedNameList)? constructorBody + ; + +constantDeclarator + : Identifier constantDeclaratorRest + ; + +variableDeclarators + : variableDeclarator (',' variableDeclarator)* + ; + +variableDeclarator + : variableDeclaratorId ('=' variableInitializer)? + ; + +constantDeclaratorsRest + : constantDeclaratorRest (',' constantDeclarator)* + ; + +constantDeclaratorRest + : ('[' ']')* '=' variableInitializer + ; + +variableDeclaratorId + : Identifier ('[' ']')* + ; + +variableInitializer + : arrayInitializer + | expression + ; + +arrayInitializer + : '{' (variableInitializer (',' variableInitializer)* (',')? )? '}' + ; + +modifier + : annotation + | 'public' + | 'protected' + | 'private' + | 'static' + | 'abstract' + | 'final' + | 'native' + | 'synchronized' + | 'transient' + | 'volatile' + | 'strictfp' + ; + +packageOrTypeName + : qualifiedName + ; + +enumConstantName + : Identifier + ; + +typeName + : qualifiedName + ; + +type + : classOrInterfaceType ('[' ']')* + | primitiveType ('[' ']')* + ; + +classOrInterfaceType + : Identifier typeArguments? ('.' Identifier typeArguments? )* + ; + +primitiveType + : 'boolean' + | 'char' + | 'byte' + | 'short' + | 'int' + | 'long' + | 'float' + | 'double' + ; + +variableModifier + : 'final' + | annotation + ; + +typeArguments + : '<' typeArgument (',' typeArgument)* '>' + ; + +typeArgument + : type + | '?' (('extends' | 'super') type)? + ; + +qualifiedNameList + : qualifiedName (',' qualifiedName)* + ; + +formalParameters + : '(' formalParameterDecls? ')' + ; + +formalParameterDecls + : variableModifiers type formalParameterDeclsRest + ; + +formalParameterDeclsRest + : variableDeclaratorId (',' formalParameterDecls)? + | '...' variableDeclaratorId + ; + +methodBody + : block + ; + +constructorBody + : '{' explicitConstructorInvocation? blockStatement* '}' + ; + +// done? - i can't see support for the second case (with primary upfront) +explicitConstructorInvocation + : nonWildcardTypeArguments? ('this' | 'super') arguments ';' + | primary '.' nonWildcardTypeArguments? 'super' arguments ';' + ; + +qualifiedName + : Identifier ('.' Identifier)* + ; + +literal + : integerLiteral + | FloatingPointLiteral + | CharacterLiteral + | StringLiteral + | booleanLiteral + | 'null' + ; + +integerLiteral + : HexLiteral + | OctalLiteral + | DecimalLiteral + ; + +booleanLiteral + : 'true' + | 'false' + ; + +// ANNOTATIONS +annotations + : annotation+ + ; + +annotation + : '@' annotationName ( '(' ( elementValuePairs | elementValue )? ')' )? + ; + +annotationName + : Identifier ('.' Identifier)* + ; + +elementValuePairs + : elementValuePair (',' elementValuePair)* + ; + +elementValuePair + : Identifier '=' elementValue + ; + +elementValue + : conditionalExpression + | annotation + | elementValueArrayInitializer + ; + +elementValueArrayInitializer + : '{' (elementValue (',' elementValue)*)? (',')? '}' + ; + +annotationTypeDeclaration + : '@' 'interface' Identifier annotationTypeBody + ; + +annotationTypeBody + : '{' (annotationTypeElementDeclaration)* '}' + ; + +annotationTypeElementDeclaration + : modifiers annotationTypeElementRest + ; + +annotationTypeElementRest + : type annotationMethodOrConstantRest ';' + | normalClassDeclaration ';'? + | normalInterfaceDeclaration ';'? + | enumDeclaration ';'? + | annotationTypeDeclaration ';'? + ; + +annotationMethodOrConstantRest + : annotationMethodRest + | annotationConstantRest + ; + +annotationMethodRest + : Identifier '(' ')' defaultValue? + ; + +annotationConstantRest + : variableDeclarators + ; + +defaultValue + : 'default' elementValue + ; + +// STATEMENTS / BLOCKS +block + : '{' blockStatement* '}' + ; + +blockStatement + : localVariableDeclarationStatement + | classOrInterfaceDeclaration + | statement + ; + +localVariableDeclarationStatement + : localVariableDeclaration ';' + ; + +localVariableDeclaration + : variableModifiers type variableDeclarators + ; + +variableModifiers + : variableModifier* + ; + +statement + : block + | ASSERT expression (':' expression)? ';' + | 'if' parExpression statement (options {k=1;}:'else' statement)? + | 'for' '(' forControl ')' statement + | 'while' parExpression statement + | 'do' statement 'while' parExpression ';' + | 'try' block + ( catches 'finally' block + | catches + | 'finally' block + ) + | 'switch' parExpression '{' switchBlockStatementGroups '}' + | 'synchronized' parExpression block + | 'return' expression? ';' + | 'throw' expression ';' + | 'break' Identifier? ';' + | 'continue' Identifier? ';' + | ';' + | statementExpression ';' + | Identifier ':' statement + ; + +catches + : catchClause (catchClause)* + ; + +catchClause + : 'catch' '(' formalParameter ')' block + ; + +formalParameter + : variableModifiers type variableDeclaratorId + ; + + +switchBlockStatementGroups + : (switchBlockStatementGroup)* + ; + +/* The change here (switchLabel -> switchLabel+) technically makes this grammar + ambiguous; but with appropriately greedy parsing it yields the most + appropriate AST, one in which each group, except possibly the last one, has + labels and statements. */ +switchBlockStatementGroup + : switchLabel+ blockStatement* + ; + +switchLabel + : 'case' constantExpression ':' + | 'case' enumConstantName ':' + | 'default' ':' + ; +forControl +options {k=3;} // be efficient for common case: for (ID ID : ID) ... + : enhancedForControl + | forInit? ';' expression? ';' forUpdate? + ; + +forInit + : localVariableDeclaration + | expressionList + ; + +enhancedForControl + : variableModifiers type Identifier ':' expression + ; + +forUpdate + : expressionList + ; + +// currently transferred to java.cs up to this line +// EXPRESSIONS + +parExpression + : '(' expression ')' + ; + +expressionList + : expression (',' expression)* + ; + +statementExpression + : expression + ; + +constantExpression + : expression + ; + +expression + : conditionalExpression (assignmentOperator expression)? + ; + +assignmentOperator + : '=' + | '+=' + | '-=' + | '*=' + | '/=' + | '&=' + | '|=' + | '^=' + | '%=' + | ('<' '<' '=')=> t1='<' t2='<' t3='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && + $t2.getLine() == $t3.getLine() && + $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() }? + | ('>' '>' '>' '=')=> t1='>' t2='>' t3='>' t4='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && + $t2.getLine() == $t3.getLine() && + $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() && + $t3.getLine() == $t4.getLine() && + $t3.getCharPositionInLine() + 1 == $t4.getCharPositionInLine() }? + | ('>' '>' '=')=> t1='>' t2='>' t3='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && + $t2.getLine() == $t3.getLine() && + $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() }? + ; + +conditionalExpression + : conditionalOrExpression ( '?' expression ':' expression )? + ; + +conditionalOrExpression + : conditionalAndExpression ( '||' conditionalAndExpression )* + ; + +conditionalAndExpression + : inclusiveOrExpression ( '&&' inclusiveOrExpression )* + ; + +inclusiveOrExpression + : exclusiveOrExpression ( '|' exclusiveOrExpression )* + ; + +exclusiveOrExpression + : andExpression ( '^' andExpression )* + ; + +andExpression + : equalityExpression ( '&' equalityExpression )* + ; + +equalityExpression + : instanceOfExpression ( ('==' | '!=') instanceOfExpression )* + ; + +instanceOfExpression + : relationalExpression ('instanceof' type)? + ; + +relationalExpression + : shiftExpression ( relationalOp shiftExpression )* + ; + +relationalOp + : ('<' '=')=> t1='<' t2='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? + | ('>' '=')=> t1='>' t2='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? + | '<' + | '>' + ; + +shiftExpression + : additiveExpression ( shiftOp additiveExpression )* + ; + +shiftOp + : ('<' '<')=> t1='<' t2='<' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? + | ('>' '>' '>')=> t1='>' t2='>' t3='>' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && + $t2.getLine() == $t3.getLine() && + $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() }? + | ('>' '>')=> t1='>' t2='>' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? + ; + +// done +additiveExpression + : multiplicativeExpression ( ('+' | '-') multiplicativeExpression )* + ; + +// done +multiplicativeExpression + : unaryExpression ( ( '*' | '/' | '%' ) unaryExpression )* + ; + +// done +unaryExpression + : '+' unaryExpression + | '-' unaryExpression + | '++' unaryExpression + | '--' unaryExpression + | unaryExpressionNotPlusMinus + ; + +// done +unaryExpressionNotPlusMinus + : '~' unaryExpression + | '!' unaryExpression + | castExpression + | primary selector* ('++'|'--')? + ; + +// done +castExpression + : '(' primitiveType ')' unaryExpression + | '(' (type | expression) ')' unaryExpressionNotPlusMinus //without expression, is it necessary? + ; + +//done, split only in "reference", "literal" and "parExpression" +primary + : parExpression // DONE + | 'this' ('.' Identifier)* identifierSuffix? // DONE without the suffix + | 'super' superSuffix // DONE + | literal // DONE + | 'new' creator // DONE + | Identifier ('.' Identifier)* identifierSuffix? // DONE without the suffix + | primitiveType ('[' ']')* '.' 'class' // DONE + | 'void' '.' 'class' // DONE + ; + +// done +identifierSuffix + : ('[' ']')+ '.' 'class' // DONE + | ('[' expression ']')+ // DONE (can also be matched by selector, but do here) + | arguments // DONE + | '.' 'class' // DONE + | '.' explicitGenericInvocation // DONE + | '.' 'this' // DONE + | '.' 'super' arguments // TODO can't find an example for this case + | '.' 'new' innerCreator // DONE + ; + +// done +creator + : nonWildcardTypeArguments createdName classCreatorRest + | createdName (arrayCreatorRest | classCreatorRest) + ; + +// done +createdName + : classOrInterfaceType + | primitiveType + ; + +// done +innerCreator + : nonWildcardTypeArguments? Identifier classCreatorRest + ; + +// done +arrayCreatorRest + : '[' + ( ']' ('[' ']')* arrayInitializer + | expression ']' ('[' expression ']')* ('[' ']')* + ) + ; + +// done +classCreatorRest + : arguments classBody? + ; + +// done +explicitGenericInvocation + : nonWildcardTypeArguments Identifier arguments + ; + +// done +nonWildcardTypeArguments + : '<' typeList '>' + ; + +// done +selector + : '.' Identifier arguments? // DONE + | '.' 'this' // DONE + | '.' 'super' superSuffix // DONE + | '.' 'new' innerCreator // DONE + | '[' expression ']' // DONE + ; + +// done +superSuffix + : arguments + | '.' Identifier arguments? + ; + +// done +arguments + : '(' expressionList? ')' + ; + +// LEXER + +HexLiteral : '0' ('x'|'X') HexDigit+ IntegerTypeSuffix? ; + +DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) IntegerTypeSuffix? ; + +OctalLiteral : '0' ('0'..'7')+ IntegerTypeSuffix? ; + +fragment +HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ; + +fragment +IntegerTypeSuffix : ('l'|'L') ; + +FloatingPointLiteral + : ('0'..'9')+ '.' ('0'..'9')* Exponent? FloatTypeSuffix? + | '.' ('0'..'9')+ Exponent? FloatTypeSuffix? + | ('0'..'9')+ Exponent FloatTypeSuffix? + | ('0'..'9')+ FloatTypeSuffix + ; + +fragment +Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+ ; + +fragment +FloatTypeSuffix : ('f'|'F'|'d'|'D') ; + +CharacterLiteral + : '\'' ( EscapeSequence | ~('\''|'\\') ) '\'' + ; + +StringLiteral + : '"' ( EscapeSequence | ~('\\'|'"') )* '"' + ; + +fragment +EscapeSequence + : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') + | UnicodeEscape + | OctalEscape + ; + +fragment +OctalEscape + : '\\' ('0'..'3') ('0'..'7') ('0'..'7') + | '\\' ('0'..'7') ('0'..'7') + | '\\' ('0'..'7') + ; + +fragment +UnicodeEscape + : '\\' 'u' HexDigit HexDigit HexDigit HexDigit + ; + +ENUM: 'enum' {if (!enumIsKeyword) $type=Identifier;} + ; + +ASSERT + : 'assert' {if (!assertIsKeyword) $type=Identifier;} + ; + +Identifier + : Letter (Letter|JavaIDDigit)* + ; + +/**I found this char range in JavaCC's grammar, but Letter and Digit overlap. + Still works, but... + */ +fragment +Letter + : '\u0024' | + '\u0041'..'\u005a' | + '\u005f' | + '\u0061'..'\u007a' | + '\u00c0'..'\u00d6' | + '\u00d8'..'\u00f6' | + '\u00f8'..'\u00ff' | + '\u0100'..'\u1fff' | + '\u3040'..'\u318f' | + '\u3300'..'\u337f' | + '\u3400'..'\u3d2d' | + '\u4e00'..'\u9fff' | + '\uf900'..'\ufaff' + ; + +fragment +JavaIDDigit + : '\u0030'..'\u0039' | + '\u0660'..'\u0669' | + '\u06f0'..'\u06f9' | + '\u0966'..'\u096f' | + '\u09e6'..'\u09ef' | + '\u0a66'..'\u0a6f' | + '\u0ae6'..'\u0aef' | + '\u0b66'..'\u0b6f' | + '\u0be7'..'\u0bef' | + '\u0c66'..'\u0c6f' | + '\u0ce6'..'\u0cef' | + '\u0d66'..'\u0d6f' | + '\u0e50'..'\u0e59' | + '\u0ed0'..'\u0ed9' | + '\u1040'..'\u1049' + ; + +WS : (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;} + ; + +COMMENT + : '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;} + ; + +LINE_COMMENT + : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;} + ; +/* + [The "BSD licence"] + Copyright (c) 2007-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/** A Java 1.5 grammar for ANTLR v3 derived from the spec + * + * This is a very close representation of the spec; the changes + * are comestic (remove left recursion) and also fixes (the spec + * isn't exactly perfect). I have run this on the 1.4.2 source + * and some nasty looking enums from 1.5, but have not really + * tested for 1.5 compatibility. + * + * I built this with: java -Xmx100M org.antlr.Tool java.g + * and got two errors that are ok (for now): + * java.g:691:9: Decision can match input such as + * "'0'..'9'{'E', 'e'}{'+', '-'}'0'..'9'{'D', 'F', 'd', 'f'}" + * using multiple alternatives: 3, 4 + * As a result, alternative(s) 4 were disabled for that input + * java.g:734:35: Decision can match input such as "{'$', 'A'..'Z', + * '_', 'a'..'z', '\u00C0'..'\u00D6', '\u00D8'..'\u00F6', + * '\u00F8'..'\u1FFF', '\u3040'..'\u318F', '\u3300'..'\u337F', + * '\u3400'..'\u3D2D', '\u4E00'..'\u9FFF', '\uF900'..'\uFAFF'}" + * using multiple alternatives: 1, 2 + * As a result, alternative(s) 2 were disabled for that input + * + * You can turn enum on/off as a keyword :) + * + * Version 1.0 -- initial release July 5, 2006 (requires 3.0b2 or higher) + * + * Primary author: Terence Parr, July 2006 + * + * Version 1.0.1 -- corrections by Koen Vanderkimpen & Marko van Dooren, + * October 25, 2006; + * fixed normalInterfaceDeclaration: now uses typeParameters instead + * of typeParameter (according to JLS, 3rd edition) + * fixed castExpression: no longer allows expression next to type + * (according to semantics in JLS, in contrast with syntax in JLS) + * + * Version 1.0.2 -- Terence Parr, Nov 27, 2006 + * java spec I built this from had some bizarre for-loop control. + * Looked weird and so I looked elsewhere...Yep, it's messed up. + * simplified. + * + * Version 1.0.3 -- Chris Hogue, Feb 26, 2007 + * Factored out an annotationName rule and used it in the annotation rule. + * Not sure why, but typeName wasn't recognizing references to inner + * annotations (e.g. @InterfaceName.InnerAnnotation()) + * Factored out the elementValue section of an annotation reference. Created + * elementValuePair and elementValuePairs rules, then used them in the + * annotation rule. Allows it to recognize annotation references with + * multiple, comma separated attributes. + * Updated elementValueArrayInitializer so that it allows multiple elements. + * (It was only allowing 0 or 1 element). + * Updated localVariableDeclaration to allow annotations. Interestingly the JLS + * doesn't appear to indicate this is legal, but it does work as of at least + * JDK 1.5.0_06. + * Moved the Identifier portion of annotationTypeElementRest to annotationMethodRest. + * Because annotationConstantRest already references variableDeclarator which + * has the Identifier portion in it, the parser would fail on constants in + * annotation definitions because it expected two identifiers. + * Added optional trailing ';' to the alternatives in annotationTypeElementRest. + * Wouldn't handle an inner interface that has a trailing ';'. + * Swapped the expression and type rule reference order in castExpression to + * make it check for genericized casts first. It was failing to recognize a + * statement like "Class TYPE = (Class)...;" because it was seeing + * 'Class'. + * Changed createdName to use typeArguments instead of nonWildcardTypeArguments. + * Again, JLS doesn't seem to allow this, but java.lang.Class has an example of + * of this construct. + * Changed the 'this' alternative in primary to allow 'identifierSuffix' rather than + * just 'arguments'. The case it couldn't handle was a call to an explicit + * generic method invocation (e.g. this.doSomething()). Using identifierSuffix + * may be overly aggressive--perhaps should create a more constrained thisSuffix rule? + * + * Version 1.0.4 -- Hiroaki Nakamura, May 3, 2007 + * + * Fixed formalParameterDecls, localVariableDeclaration, forInit, + * and forVarControl to use variableModifier* not 'final'? (annotation)? + * + * Version 1.0.5 -- Terence, June 21, 2007 + * --a[i].foo didn't work. Fixed unaryExpression + * + * Version 1.0.6 -- John Ridgway, March 17, 2008 + * Made "assert" a switchable keyword like "enum". + * Fixed compilationUnit to disallow "annotation importDeclaration ...". + * Changed "Identifier ('.' Identifier)*" to "qualifiedName" in more + * places. + * Changed modifier* and/or variableModifier* to classOrInterfaceModifiers, + * modifiers or variableModifiers, as appropriate. + * Renamed "bound" to "typeBound" to better match language in the JLS. + * Added "memberDeclaration" which rewrites to methodDeclaration or + * fieldDeclaration and pulled type into memberDeclaration. So we parse + * type and then move on to decide whether we're dealing with a field + * or a method. + * Modified "constructorDeclaration" to use "constructorBody" instead of + * "methodBody". constructorBody starts with explicitConstructorInvocation, + * then goes on to blockStatement*. Pulling explicitConstructorInvocation + * out of expressions allowed me to simplify "primary". + * Changed variableDeclarator to simplify it. + * Changed type to use classOrInterfaceType, thus simplifying it; of course + * I then had to add classOrInterfaceType, but it is used in several + * places. + * Fixed annotations, old version allowed "@X(y,z)", which is illegal. + * Added optional comma to end of "elementValueArrayInitializer"; as per JLS. + * Changed annotationTypeElementRest to use normalClassDeclaration and + * normalInterfaceDeclaration rather than classDeclaration and + * interfaceDeclaration, thus getting rid of a couple of grammar ambiguities. + * Split localVariableDeclaration into localVariableDeclarationStatement + * (includes the terminating semi-colon) and localVariableDeclaration. + * This allowed me to use localVariableDeclaration in "forInit" clauses, + * simplifying them. + * Changed switchBlockStatementGroup to use multiple labels. This adds an + * ambiguity, but if one uses appropriately greedy parsing it yields the + * parse that is closest to the meaning of the switch statement. + * Renamed "forVarControl" to "enhancedForControl" -- JLS language. + * Added semantic predicates to test for shift operations rather than other + * things. Thus, for instance, the string "< <" will never be treated + * as a left-shift operator. + * In "creator" we rule out "nonWildcardTypeArguments" on arrayCreation, + * which are illegal. + * Moved "nonWildcardTypeArguments into innerCreator. + * Removed 'super' superSuffix from explicitGenericInvocation, since that + * is only used in explicitConstructorInvocation at the beginning of a + * constructorBody. (This is part of the simplification of expressions + * mentioned earlier.) + * Simplified primary (got rid of those things that are only used in + * explicitConstructorInvocation). + * Lexer -- removed "Exponent?" from FloatingPointLiteral choice 4, since it + * led to an ambiguity. + * + * This grammar successfully parses every .java file in the JDK 1.5 source + * tree (excluding those whose file names include '-', which are not + * valid Java compilation units). + * + * Known remaining problems: + * "Letter" and "JavaIDDigit" are wrong. The actual specification of + * "Letter" should be "a character for which the method + * Character.isJavaIdentifierStart(int) returns true." A "Java + * letter-or-digit is a character for which the method + * Character.isJavaIdentifierPart(int) returns true." + */ \ No newline at end of file diff --git a/Core/org.emftext.language.java/metamodel/java.cs b/Core/org.emftext.language.java/metamodel/java.cs index 5f0ff9ad..73caabc0 100755 --- a/Core/org.emftext.language.java/metamodel/java.cs +++ b/Core/org.emftext.language.java/metamodel/java.cs @@ -1,670 +1,673 @@ -//******************************************************************************* -// Copyright (c) 2006-2012 -// Software Technology Group, Dresden University of Technology -// -// 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: -// Software Technology Group - TU Dresden, Germany -// - initial API and implementation -// ******************************************************************************/ - -SYNTAXDEF java -FOR -START containers.CompilationUnit, containers.Package, containers.EmptyModel - -IMPORTS { - annotations : - arrays : - classifiers : - commons : - containers : - expressions : - generics : - imports : - instantiations : - literals : - members : - modifiers : - operators : - parameters : - references : - statements : - types : - variables : -} - -OPTIONS { - licenceHeader ="../../org.dropsbox/licence.txt"; - defaultTokenName = "IDENTIFIER"; - generateCodeFromGeneratorModel = "false"; - memoize = "true"; - usePredefinedTokens = "false"; - resolveProxyElementsAfterParsing = "false"; - disableLaunchSupport = "true"; - disableDebugSupport = "true"; - ignoreTypeRestrictionsForPrinting = "true"; - overrideResourcePostProcessor = "false"; -} - -TOKENS { - DEFINE SL_COMMENT $'//'(~('\n'|'\r'|'\uffff'))* $; - DEFINE ML_COMMENT $'/*'.*'*/'$; - - DEFINE BOOLEAN_LITERAL $'true'|'false'$; - - DEFINE CHARACTER_LITERAL $'\''('\\'('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')|('\\''u'('0'..'9'|'a'..'f'|'A'..'F')('0'..'9'|'a'..'f'|'A'..'F')('0'..'9'|'a'..'f'|'A'..'F')('0'..'9'|'a'..'f'|'A'..'F'))|('\\'('0'..'3')('0'..'7')('0'..'7')|'\\'('0'..'7')('0'..'7')|'\\'('0'..'7'))|~('\''|'\\'))'\''$; - DEFINE STRING_LITERAL $'"'('\\'('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')|('\\''u'('0'..'9'|'a'..'f'|'A'..'F')('0'..'9'|'a'..'f'|'A'..'F')('0'..'9'|'a'..'f'|'A'..'F')('0'..'9'|'a'..'f'|'A'..'F'))|'\\'('0'..'7')|~('\\'|'"'))*'"'$; - - @SuppressWarnings(tokenOverlapping) - DEFINE IDENTIFIER $('\u0024'|'\u0041'..'\u005a'|'\u005f'|'\u0061'..'\u007a'|'\u00a2'..'\u00a5'|'\u00aa'|'\u00b5'|'\u00ba'|'\u00c0'..'\u00d6'|'\u00d8'..'\u00f6'|'\u00f8'..'\u0236'|'\u0250'..'\u02c1'|'\u02c6'..'\u02d1'|'\u02e0'..'\u02e4'|'\u02ee'|'\u037a'|'\u0386'|'\u0388'..'\u038a'|'\u038c'|'\u038e'..'\u03a1'|'\u03a3'..'\u03ce'|'\u03d0'..'\u03f5'|'\u03f7'..'\u03fb'|'\u0400'..'\u0481'|'\u048a'..'\u04ce'|'\u04d0'..'\u04f5'|'\u04f8'..'\u04f9'|'\u0500'..'\u050f'|'\u0531'..'\u0556'|'\u0559'|'\u0561'..'\u0587'|'\u05d0'..'\u05ea'|'\u05f0'..'\u05f2'|'\u0621'..'\u063a'|'\u0640'..'\u064a'|'\u066e'..'\u066f'|'\u0671'..'\u06d3'|'\u06d5'|'\u06e5'..'\u06e6'|'\u06ee'..'\u06ef'|'\u06fa'..'\u06fc'|'\u06ff'|'\u0710'|'\u0712'..'\u072f'|'\u074d'..'\u074f'|'\u0780'..'\u07a5'|'\u07b1'|'\u0904'..'\u0939'|'\u093d'|'\u0950'|'\u0958'..'\u0961'|'\u0985'..'\u098c'|'\u098f'..'\u0990'|'\u0993'..'\u09a8'|'\u09aa'..'\u09b0'|'\u09b2'|'\u09b6'..'\u09b9'|'\u09bd'|'\u09dc'..'\u09dd'|'\u09df'..'\u09e1'|'\u09f0'..'\u09f3'|'\u0a05'..'\u0a0a'|'\u0a0f'..'\u0a10'|'\u0a13'..'\u0a28'|'\u0a2a'..'\u0a30'|'\u0a32'..'\u0a33'|'\u0a35'..'\u0a36'|'\u0a38'..'\u0a39'|'\u0a59'..'\u0a5c'|'\u0a5e'|'\u0a72'..'\u0a74'|'\u0a85'..'\u0a8d'|'\u0a8f'..'\u0a91'|'\u0a93'..'\u0aa8'|'\u0aaa'..'\u0ab0'|'\u0ab2'..'\u0ab3'|'\u0ab5'..'\u0ab9'|'\u0abd'|'\u0ad0'|'\u0ae0'..'\u0ae1'|'\u0af1'|'\u0b05'..'\u0b0c'|'\u0b0f'..'\u0b10'|'\u0b13'..'\u0b28'|'\u0b2a'..'\u0b30'|'\u0b32'..'\u0b33'|'\u0b35'..'\u0b39'|'\u0b3d'|'\u0b5c'..'\u0b5d'|'\u0b5f'..'\u0b61'|'\u0b71'|'\u0b83'|'\u0b85'..'\u0b8a'|'\u0b8e'..'\u0b90'|'\u0b92'..'\u0b95'|'\u0b99'..'\u0b9a'|'\u0b9c'|'\u0b9e'..'\u0b9f'|'\u0ba3'..'\u0ba4'|'\u0ba8'..'\u0baa'|'\u0bae'..'\u0bb5'|'\u0bb7'..'\u0bb9'|'\u0bf9'|'\u0c05'..'\u0c0c'|'\u0c0e'..'\u0c10'|'\u0c12'..'\u0c28'|'\u0c2a'..'\u0c33'|'\u0c35'..'\u0c39'|'\u0c60'..'\u0c61'|'\u0c85'..'\u0c8c'|'\u0c8e'..'\u0c90'|'\u0c92'..'\u0ca8'|'\u0caa'..'\u0cb3'|'\u0cb5'..'\u0cb9'|'\u0cbd'|'\u0cde'|'\u0ce0'..'\u0ce1'|'\u0d05'..'\u0d0c'|'\u0d0e'..'\u0d10'|'\u0d12'..'\u0d28'|'\u0d2a'..'\u0d39'|'\u0d60'..'\u0d61'|'\u0d85'..'\u0d96'|'\u0d9a'..'\u0db1'|'\u0db3'..'\u0dbb'|'\u0dbd'|'\u0dc0'..'\u0dc6'|'\u0e01'..'\u0e30'|'\u0e32'..'\u0e33'|'\u0e3f'..'\u0e46'|'\u0e81'..'\u0e82'|'\u0e84'|'\u0e87'..'\u0e88'|'\u0e8a'|'\u0e8d'|'\u0e94'..'\u0e97'|'\u0e99'..'\u0e9f'|'\u0ea1'..'\u0ea3'|'\u0ea5'|'\u0ea7'|'\u0eaa'..'\u0eab'|'\u0ead'..'\u0eb0'|'\u0eb2'..'\u0eb3'|'\u0ebd'|'\u0ec0'..'\u0ec4'|'\u0ec6'|'\u0edc'..'\u0edd'|'\u0f00'|'\u0f40'..'\u0f47'|'\u0f49'..'\u0f6a'|'\u0f88'..'\u0f8b'|'\u1000'..'\u1021'|'\u1023'..'\u1027'|'\u1029'..'\u102a'|'\u1050'..'\u1055'|'\u10a0'..'\u10c5'|'\u10d0'..'\u10f8'|'\u1100'..'\u1159'|'\u115f'..'\u11a2'|'\u11a8'..'\u11f9'|'\u1200'..'\u1206'|'\u1208'..'\u1246'|'\u1248'|'\u124a'..'\u124d'|'\u1250'..'\u1256'|'\u1258'|'\u125a'..'\u125d'|'\u1260'..'\u1286'|'\u1288'|'\u128a'..'\u128d'|'\u1290'..'\u12ae'|'\u12b0'|'\u12b2'..'\u12b5'|'\u12b8'..'\u12be'|'\u12c0'|'\u12c2'..'\u12c5'|'\u12c8'..'\u12ce'|'\u12d0'..'\u12d6'|'\u12d8'..'\u12ee'|'\u12f0'..'\u130e'|'\u1310'|'\u1312'..'\u1315'|'\u1318'..'\u131e'|'\u1320'..'\u1346'|'\u1348'..'\u135a'|'\u13a0'..'\u13f4'|'\u1401'..'\u166c'|'\u166f'..'\u1676'|'\u1681'..'\u169a'|'\u16a0'..'\u16ea'|'\u16ee'..'\u16f0'|'\u1700'..'\u170c'|'\u170e'..'\u1711'|'\u1720'..'\u1731'|'\u1740'..'\u1751'|'\u1760'..'\u176c'|'\u176e'..'\u1770'|'\u1780'..'\u17b3'|'\u17d7'|'\u17db'..'\u17dc'|'\u1820'..'\u1877'|'\u1880'..'\u18a8'|'\u1900'..'\u191c'|'\u1950'..'\u196d'|'\u1970'..'\u1974'|'\u1d00'..'\u1d6b'|'\u1e00'..'\u1e9b'|'\u1ea0'..'\u1ef9'|'\u1f00'..'\u1f15'|'\u1f18'..'\u1f1d'|'\u1f20'..'\u1f45'|'\u1f48'..'\u1f4d'|'\u1f50'..'\u1f57'|'\u1f59'|'\u1f5b'|'\u1f5d'|'\u1f5f'..'\u1f7d'|'\u1f80'..'\u1fb4'|'\u1fb6'..'\u1fbc'|'\u1fbe'|'\u1fc2'..'\u1fc4'|'\u1fc6'..'\u1fcc'|'\u1fd0'..'\u1fd3'|'\u1fd6'..'\u1fdb'|'\u1fe0'..'\u1fec'|'\u1ff2'..'\u1ff4'|'\u1ff6'..'\u1ffc'|'\u203f'..'\u2040'|'\u2054'|'\u2071'|'\u207f'|'\u20a0'..'\u20b1'|'\u2102'|'\u2107'|'\u210a'..'\u2113'|'\u2115'|'\u2119'..'\u211d'|'\u2124'|'\u2126'|'\u2128'|'\u212a'..'\u212d'|'\u212f'..'\u2131'|'\u2133'..'\u2139'|'\u213d'..'\u213f'|'\u2145'..'\u2149'|'\u2160'..'\u2183'|'\u3005'..'\u3007'|'\u3021'..'\u3029'|'\u3031'..'\u3035'|'\u3038'..'\u303c'|'\u3041'..'\u3096'|'\u309d'..'\u309f'|'\u30a1'..'\u30ff'|'\u3105'..'\u312c'|'\u3131'..'\u318e'|'\u31a0'..'\u31b7'|'\u31f0'..'\u31ff'|'\u3400'..'\u4db5'|'\u4e00'..'\u9fa5'|'\ua000'..'\ua48c'|'\uac00'..'\ud7a3'|'\ud800'..'\udbff'|'\uf900'..'\ufa2d'|'\ufa30'..'\ufa6a'|'\ufb00'..'\ufb06'|'\ufb13'..'\ufb17'|'\ufb1d'|'\ufb1f'..'\ufb28'|'\ufb2a'..'\ufb36'|'\ufb38'..'\ufb3c'|'\ufb3e'|'\ufb40'..'\ufb41'|'\ufb43'..'\ufb44'|'\ufb46'..'\ufbb1'|'\ufbd3'..'\ufd3d'|'\ufd50'..'\ufd8f'|'\ufd92'..'\ufdc7'|'\ufdf0'..'\ufdfc'|'\ufe33'..'\ufe34'|'\ufe4d'..'\ufe4f'|'\ufe69'|'\ufe70'..'\ufe74'|'\ufe76'..'\ufefc'|'\uff04'|'\uff21'..'\uff3a'|'\uff3f'|'\uff41'..'\uff5a'|'\uff65'..'\uffbe'|'\uffc2'..'\uffc7'|'\uffca'..'\uffcf'|'\uffd2'..'\uffd7'|'\uffda'..'\uffdc'|'\uffe0'..'\uffe1'|'\uffe5'..'\uffe6')('\u0000'..'\u0008'|'\u000e'..'\u001b'|'\u0024'|'\u0030'..'\u0039'|'\u0041'..'\u005a'|'\u005f'|'\u0061'..'\u007a'|'\u007f'..'\u009f'|'\u00a2'..'\u00a5'|'\u00aa'|'\u00ad'|'\u00b5'|'\u00ba'|'\u00c0'..'\u00d6'|'\u00d8'..'\u00f6'|'\u00f8'..'\u0236'|'\u0250'..'\u02c1'|'\u02c6'..'\u02d1'|'\u02e0'..'\u02e4'|'\u02ee'|'\u0300'..'\u0357'|'\u035d'..'\u036f'|'\u037a'|'\u0386'|'\u0388'..'\u038a'|'\u038c'|'\u038e'..'\u03a1'|'\u03a3'..'\u03ce'|'\u03d0'..'\u03f5'|'\u03f7'..'\u03fb'|'\u0400'..'\u0481'|'\u0483'..'\u0486'|'\u048a'..'\u04ce'|'\u04d0'..'\u04f5'|'\u04f8'..'\u04f9'|'\u0500'..'\u050f'|'\u0531'..'\u0556'|'\u0559'|'\u0561'..'\u0587'|'\u0591'..'\u05a1'|'\u05a3'..'\u05b9'|'\u05bb'..'\u05bd'|'\u05bf'|'\u05c1'..'\u05c2'|'\u05c4'|'\u05d0'..'\u05ea'|'\u05f0'..'\u05f2'|'\u0600'..'\u0603'|'\u0610'..'\u0615'|'\u0621'..'\u063a'|'\u0640'..'\u0658'|'\u0660'..'\u0669'|'\u066e'..'\u06d3'|'\u06d5'..'\u06dd'|'\u06df'..'\u06e8'|'\u06ea'..'\u06fc'|'\u06ff'|'\u070f'..'\u074a'|'\u074d'..'\u074f'|'\u0780'..'\u07b1'|'\u0901'..'\u0939'|'\u093c'..'\u094d'|'\u0950'..'\u0954'|'\u0958'..'\u0963'|'\u0966'..'\u096f'|'\u0981'..'\u0983'|'\u0985'..'\u098c'|'\u098f'..'\u0990'|'\u0993'..'\u09a8'|'\u09aa'..'\u09b0'|'\u09b2'|'\u09b6'..'\u09b9'|'\u09bc'..'\u09c4'|'\u09c7'..'\u09c8'|'\u09cb'..'\u09cd'|'\u09d7'|'\u09dc'..'\u09dd'|'\u09df'..'\u09e3'|'\u09e6'..'\u09f3'|'\u0a01'..'\u0a03'|'\u0a05'..'\u0a0a'|'\u0a0f'..'\u0a10'|'\u0a13'..'\u0a28'|'\u0a2a'..'\u0a30'|'\u0a32'..'\u0a33'|'\u0a35'..'\u0a36'|'\u0a38'..'\u0a39'|'\u0a3c'|'\u0a3e'..'\u0a42'|'\u0a47'..'\u0a48'|'\u0a4b'..'\u0a4d'|'\u0a59'..'\u0a5c'|'\u0a5e'|'\u0a66'..'\u0a74'|'\u0a81'..'\u0a83'|'\u0a85'..'\u0a8d'|'\u0a8f'..'\u0a91'|'\u0a93'..'\u0aa8'|'\u0aaa'..'\u0ab0'|'\u0ab2'..'\u0ab3'|'\u0ab5'..'\u0ab9'|'\u0abc'..'\u0ac5'|'\u0ac7'..'\u0ac9'|'\u0acb'..'\u0acd'|'\u0ad0'|'\u0ae0'..'\u0ae3'|'\u0ae6'..'\u0aef'|'\u0af1'|'\u0b01'..'\u0b03'|'\u0b05'..'\u0b0c'|'\u0b0f'..'\u0b10'|'\u0b13'..'\u0b28'|'\u0b2a'..'\u0b30'|'\u0b32'..'\u0b33'|'\u0b35'..'\u0b39'|'\u0b3c'..'\u0b43'|'\u0b47'..'\u0b48'|'\u0b4b'..'\u0b4d'|'\u0b56'..'\u0b57'|'\u0b5c'..'\u0b5d'|'\u0b5f'..'\u0b61'|'\u0b66'..'\u0b6f'|'\u0b71'|'\u0b82'..'\u0b83'|'\u0b85'..'\u0b8a'|'\u0b8e'..'\u0b90'|'\u0b92'..'\u0b95'|'\u0b99'..'\u0b9a'|'\u0b9c'|'\u0b9e'..'\u0b9f'|'\u0ba3'..'\u0ba4'|'\u0ba8'..'\u0baa'|'\u0bae'..'\u0bb5'|'\u0bb7'..'\u0bb9'|'\u0bbe'..'\u0bc2'|'\u0bc6'..'\u0bc8'|'\u0bca'..'\u0bcd'|'\u0bd7'|'\u0be7'..'\u0bef'|'\u0bf9'|'\u0c01'..'\u0c03'|'\u0c05'..'\u0c0c'|'\u0c0e'..'\u0c10'|'\u0c12'..'\u0c28'|'\u0c2a'..'\u0c33'|'\u0c35'..'\u0c39'|'\u0c3e'..'\u0c44'|'\u0c46'..'\u0c48'|'\u0c4a'..'\u0c4d'|'\u0c55'..'\u0c56'|'\u0c60'..'\u0c61'|'\u0c66'..'\u0c6f'|'\u0c82'..'\u0c83'|'\u0c85'..'\u0c8c'|'\u0c8e'..'\u0c90'|'\u0c92'..'\u0ca8'|'\u0caa'..'\u0cb3'|'\u0cb5'..'\u0cb9'|'\u0cbc'..'\u0cc4'|'\u0cc6'..'\u0cc8'|'\u0cca'..'\u0ccd'|'\u0cd5'..'\u0cd6'|'\u0cde'|'\u0ce0'..'\u0ce1'|'\u0ce6'..'\u0cef'|'\u0d02'..'\u0d03'|'\u0d05'..'\u0d0c'|'\u0d0e'..'\u0d10'|'\u0d12'..'\u0d28'|'\u0d2a'..'\u0d39'|'\u0d3e'..'\u0d43'|'\u0d46'..'\u0d48'|'\u0d4a'..'\u0d4d'|'\u0d57'|'\u0d60'..'\u0d61'|'\u0d66'..'\u0d6f'|'\u0d82'..'\u0d83'|'\u0d85'..'\u0d96'|'\u0d9a'..'\u0db1'|'\u0db3'..'\u0dbb'|'\u0dbd'|'\u0dc0'..'\u0dc6'|'\u0dca'|'\u0dcf'..'\u0dd4'|'\u0dd6'|'\u0dd8'..'\u0ddf'|'\u0df2'..'\u0df3'|'\u0e01'..'\u0e3a'|'\u0e3f'..'\u0e4e'|'\u0e50'..'\u0e59'|'\u0e81'..'\u0e82'|'\u0e84'|'\u0e87'..'\u0e88'|'\u0e8a'|'\u0e8d'|'\u0e94'..'\u0e97'|'\u0e99'..'\u0e9f'|'\u0ea1'..'\u0ea3'|'\u0ea5'|'\u0ea7'|'\u0eaa'..'\u0eab'|'\u0ead'..'\u0eb9'|'\u0ebb'..'\u0ebd'|'\u0ec0'..'\u0ec4'|'\u0ec6'|'\u0ec8'..'\u0ecd'|'\u0ed0'..'\u0ed9'|'\u0edc'..'\u0edd'|'\u0f00'|'\u0f18'..'\u0f19'|'\u0f20'..'\u0f29'|'\u0f35'|'\u0f37'|'\u0f39'|'\u0f3e'..'\u0f47'|'\u0f49'..'\u0f6a'|'\u0f71'..'\u0f84'|'\u0f86'..'\u0f8b'|'\u0f90'..'\u0f97'|'\u0f99'..'\u0fbc'|'\u0fc6'|'\u1000'..'\u1021'|'\u1023'..'\u1027'|'\u1029'..'\u102a'|'\u102c'..'\u1032'|'\u1036'..'\u1039'|'\u1040'..'\u1049'|'\u1050'..'\u1059'|'\u10a0'..'\u10c5'|'\u10d0'..'\u10f8'|'\u1100'..'\u1159'|'\u115f'..'\u11a2'|'\u11a8'..'\u11f9'|'\u1200'..'\u1206'|'\u1208'..'\u1246'|'\u1248'|'\u124a'..'\u124d'|'\u1250'..'\u1256'|'\u1258'|'\u125a'..'\u125d'|'\u1260'..'\u1286'|'\u1288'|'\u128a'..'\u128d'|'\u1290'..'\u12ae'|'\u12b0'|'\u12b2'..'\u12b5'|'\u12b8'..'\u12be'|'\u12c0'|'\u12c2'..'\u12c5'|'\u12c8'..'\u12ce'|'\u12d0'..'\u12d6'|'\u12d8'..'\u12ee'|'\u12f0'..'\u130e'|'\u1310'|'\u1312'..'\u1315'|'\u1318'..'\u131e'|'\u1320'..'\u1346'|'\u1348'..'\u135a'|'\u1369'..'\u1371'|'\u13a0'..'\u13f4'|'\u1401'..'\u166c'|'\u166f'..'\u1676'|'\u1681'..'\u169a'|'\u16a0'..'\u16ea'|'\u16ee'..'\u16f0'|'\u1700'..'\u170c'|'\u170e'..'\u1714'|'\u1720'..'\u1734'|'\u1740'..'\u1753'|'\u1760'..'\u176c'|'\u176e'..'\u1770'|'\u1772'..'\u1773'|'\u1780'..'\u17d3'|'\u17d7'|'\u17db'..'\u17dd'|'\u17e0'..'\u17e9'|'\u180b'..'\u180d'|'\u1810'..'\u1819'|'\u1820'..'\u1877'|'\u1880'..'\u18a9'|'\u1900'..'\u191c'|'\u1920'..'\u192b'|'\u1930'..'\u193b'|'\u1946'..'\u196d'|'\u1970'..'\u1974'|'\u1d00'..'\u1d6b'|'\u1e00'..'\u1e9b'|'\u1ea0'..'\u1ef9'|'\u1f00'..'\u1f15'|'\u1f18'..'\u1f1d'|'\u1f20'..'\u1f45'|'\u1f48'..'\u1f4d'|'\u1f50'..'\u1f57'|'\u1f59'|'\u1f5b'|'\u1f5d'|'\u1f5f'..'\u1f7d'|'\u1f80'..'\u1fb4'|'\u1fb6'..'\u1fbc'|'\u1fbe'|'\u1fc2'..'\u1fc4'|'\u1fc6'..'\u1fcc'|'\u1fd0'..'\u1fd3'|'\u1fd6'..'\u1fdb'|'\u1fe0'..'\u1fec'|'\u1ff2'..'\u1ff4'|'\u1ff6'..'\u1ffc'|'\u200c'..'\u200f'|'\u202a'..'\u202e'|'\u203f'..'\u2040'|'\u2054'|'\u2060'..'\u2063'|'\u206a'..'\u206f'|'\u2071'|'\u207f'|'\u20a0'..'\u20b1'|'\u20d0'..'\u20dc'|'\u20e1'|'\u20e5'..'\u20ea'|'\u2102'|'\u2107'|'\u210a'..'\u2113'|'\u2115'|'\u2119'..'\u211d'|'\u2124'|'\u2126'|'\u2128'|'\u212a'..'\u212d'|'\u212f'..'\u2131'|'\u2133'..'\u2139'|'\u213d'..'\u213f'|'\u2145'..'\u2149'|'\u2160'..'\u2183'|'\u3005'..'\u3007'|'\u3021'..'\u302f'|'\u3031'..'\u3035'|'\u3038'..'\u303c'|'\u3041'..'\u3096'|'\u3099'..'\u309a'|'\u309d'..'\u309f'|'\u30a1'..'\u30ff'|'\u3105'..'\u312c'|'\u3131'..'\u318e'|'\u31a0'..'\u31b7'|'\u31f0'..'\u31ff'|'\u3400'..'\u4db5'|'\u4e00'..'\u9fa5'|'\ua000'..'\ua48c'|'\uac00'..'\ud7a3'|'\ud800'..'\udfff'|'\uf900'..'\ufa2d'|'\ufa30'..'\ufa6a'|'\ufb00'..'\ufb06'|'\ufb13'..'\ufb17'|'\ufb1d'..'\ufb28'|'\ufb2a'..'\ufb36'|'\ufb38'..'\ufb3c'|'\ufb3e'|'\ufb40'..'\ufb41'|'\ufb43'..'\ufb44'|'\ufb46'..'\ufbb1'|'\ufbd3'..'\ufd3d'|'\ufd50'..'\ufd8f'|'\ufd92'..'\ufdc7'|'\ufdf0'..'\ufdfc'|'\ufe00'..'\ufe0f'|'\ufe20'..'\ufe23'|'\ufe33'..'\ufe34'|'\ufe4d'..'\ufe4f'|'\ufe69'|'\ufe70'..'\ufe74'|'\ufe76'..'\ufefc'|'\ufeff'|'\uff04'|'\uff10'..'\uff19'|'\uff21'..'\uff3a'|'\uff3f'|'\uff41'..'\uff5a'|'\uff65'..'\uffbe'|'\uffc2'..'\uffc7'|'\uffca'..'\uffcf'|'\uffd2'..'\uffd7'|'\uffda'..'\uffdc'|'\uffe0'..'\uffe1'|'\uffe5'..'\uffe6'|'\ufff9'..'\ufffb')*$; - - DEFINE HEX_FLOAT_LITERAL $'0'('x'|'X')('0'..'9'|'a'..'f'|'A'..'F')* (('.' ('0'..'9'|'a'..'f'|'A'..'F')+ (('p'|'P') ('+'|'-')? ('0'..'9')+ ('f'|'F') )?) | ((('p'|'P') ('+'|'-')? ('0'..'9')+ ('f'|'F') )))$; - @SuppressWarnings(tokenOverlapping) - DEFINE HEX_DOUBLE_LITERAL $'0'('x'|'X')('0'..'9'|'a'..'f'|'A'..'F')* (('.' ('0'..'9'|'a'..'f'|'A'..'F')+ (('p'|'P') ('+'|'-')? ('0'..'9')+ ('d'|'D')?)?) | ((('p'|'P') ('+'|'-')? ('0'..'9')+ ('d'|'D')?)))$; - DEFINE HEX_LONG_LITERAL $'0'('x'|'X')('0'..'9'|'a'..'f'|'A'..'F')+ ('l'|'L')$; - DEFINE HEX_INTEGER_LITERAL $'0'('x'|'X')('0'..'9'|'a'..'f'|'A'..'F')+$; - - DEFINE DECIMAL_FLOAT_LITERAL $('0'..'9')+ '.' ('0'..'9')* (('e'|'E'|'p'|'P') ('+'|'-')? ('0'..'9')+)? ('f'|'F') | ('.' ('0'..'9')+ (('e'|'E'|'p'|'P') ('+'|'-')? ('0'..'9')+)?) ('f'|'F') | (('0'..'9')+ (('e'|'E'|'p'|'P') ('+'|'-')? ('0'..'9')+) ('f'|'F') | ('0'..'9')+ ('f'|'F'))$; - DEFINE DECIMAL_DOUBLE_LITERAL $('0'..'9')+ '.' ('0'..'9')* (('e'|'E'|'p'|'P') ('+'|'-')? ('0'..'9')+)? ('d'|'D')? | ('.' ('0'..'9')+ (('e'|'E'|'p'|'P') ('+'|'-')? ('0'..'9')+)?) ('d'|'D')? | (('0'..'9')+ (('e'|'E'|'p'|'P') ('+'|'-')? ('0'..'9')+) ('d'|'D')? | ('0'..'9')+ ('d'|'D'))$; - DEFINE DECIMAL_LONG_LITERAL $('0'|'1'..'9''0'..'9'*)('l'|'L')$; - DEFINE DECIMAL_INTEGER_LITERAL $('0'|'1'..'9''0'..'9'*)$; - - DEFINE OCTAL_LONG_LITERAL $'0'('0'..'7')+('l'|'L')$; - DEFINE OCTAL_INTEGER_LITERAL $'0'('0'..'7')+$; - - @SuppressWarnings(unusedToken) - DEFINE WHITESPACE $(' '|'\t'|'\f'|'\r'|'\n')+$; -} - -TOKENSTYLES { - "ML_COMMENT" COLOR #008000, ITALIC; - "SL_COMMENT" COLOR #000080, ITALIC; - "STRING_LITERAL" COLOR #2A00FF; - "IDENTIFIER" COLOR #000000; - - "abstract", "assert", - "boolean", "byte", - "case", "catch", "class", "continue", "char", - "default", "double", "do", - "enum", "extends", "else", - "for", "float", "final", - "if", "import", "implements", "int", "interface", "instanceof", - "package", "private", "protected", "public", - "super", "switch", "strictfp", "static", "synchronized", - "this", "try", "throws", "transient", - "new", "null", - "while", - "void", - "long", - "return" COLOR #7F0055, BOLD; -} - -RULES { - -@SuppressWarnings(optionalKeyword) -@SuppressWarnings(featureWithoutSyntax) //name is set by JavaSourceOrClassFileResource.load() -containers.EmptyModel - ::= (imports ";" !0 )* (";")* - ; - -@SuppressWarnings(optionalKeyword) -@SuppressWarnings(featureWithoutSyntax) //subpackages is filled by JavaSourceOrClassFileResource.load() -containers.Package - ::= annotations* "package" (namespaces[] "." )* name[] ";" - (";")? //TODO this is required to let T7312 of JacksTest pass... not sure if this is correct or if it should be * instead of ? - !0 !0 - (imports !0 )* (";")* - ; - -@SuppressWarnings(optionalKeyword) -@SuppressWarnings(featureWithoutSyntax) //name is set by JavaSourceOrClassFileResource or ClassFileModelLoader -containers.CompilationUnit - ::= ("package" namespaces[] ( "." namespaces[])* ";" )? - !0 !0 - (imports !0 )* - (";" !0)* - !0 - (classifiers (";")* !0 !0)+ - ("\u001a")? - ; - -imports.ClassifierImport - ::= "import" (namespaces[] "." )* classifier[] ";"; - -@SuppressWarnings(minOccurenceMismatch) //the minimal occurence of namespaces[] is in other cases 0 -imports.PackageImport - ::= "import" (namespaces[] "." )+ "*" ";"; - -imports.StaticMemberImport - ::= "import" static (namespaces[] "." )* staticMembers[] ";"; - -@SuppressWarnings(minOccurenceMismatch) //the minimal occurence of namespaces[] is in other cases 0 -imports.StaticClassifierImport - ::= "import" static (namespaces[] "." )+ "*" ";"; - -@SuppressWarnings(featureWithoutSyntax) //defaultExtends is filled by post processor -classifiers.Class - ::= annotationsAndModifiers* - "class" name[] ("<" typeParameters ("," typeParameters)* ">")? - ("extends" extends)? - ("implements" (implements ("," implements)*))? - #1 "{" - (!1 members)* !0 - "}" - ; - -@SuppressWarnings(featureWithoutSyntax) //defaultMembers is filled by post processor -classifiers.AnonymousClass - ::= #1 "{" - (!1 members)* !0 - "}" - ; - -@SuppressWarnings(featureWithoutSyntax) //defaultMembers is set during reference resolving -classifiers.Interface - ::= annotationsAndModifiers* - "interface" name[] ("<" typeParameters ( "," typeParameters)* ">")? - ("extends" (extends ("," extends)*))? - #1 "{" - (!1 members)* !0 - "}" - ; - -@SuppressWarnings(featureWithoutSyntax) //defaultMembers is set during reference resolving -@SuppressWarnings(optionalKeyword) -classifiers.Enumeration - ::= annotationsAndModifiers* - "enum" name[] - ("implements" (implements ("," implements)*))? - #1 "{" - (!1 constants ("," !1 constants)*)? (",")? - (";" (!1 members)* !0)? - "}" - ; - -@SuppressWarnings(featureWithoutSyntax) //defaultMembers is set during reference resolving -classifiers.Annotation - ::= annotationsAndModifiers* - "@" "interface" name[] - #1 "{" - (!1 members)* !0 - "}" - ; - -@SuppressWarnings(featureWithoutSyntax) //typeArguments -annotations.AnnotationInstance - ::= "@" (namespaces[] "." )* annotation[] - (parameter)? - ; - -annotations.SingleAnnotationParameter - ::= "(" value:arrays.ArrayInitializer,expressions.ConditionalExpression ")" - ; - -annotations.AnnotationParameterList - ::= "(" (settings ("," settings)*)? ")" - ; - -annotations.AnnotationAttributeSetting - ::= attribute[] #1 "=" #1 - value:arrays.ArrayInitializer,expressions.ConditionalExpression - ; - -generics.TypeParameter - ::= name[] ("extends" extendTypes ("&" extendTypes)*)? - ; - -@SuppressWarnings(optionalKeyword) -members.EnumConstant - ::= annotations* name[] (#1 "(" (arguments:expressions.AssignmentExpression ("," arguments:expressions.AssignmentExpression)*)? ")" )? - (anonymousClass)? - ; - -@SuppressWarnings(featureWithoutSyntax) //name is set by JavaModelCompletion.setBlockName() -statements.Block - ::= modifiers* #1 "{" (!1 statements)* !0 "}" - ; - -members.Constructor - ::= annotationsAndModifiers* ("<" typeParameters ("," typeParameters)* ">")? name[] - "(" (parameters ("," parameters)* )? ")" - ("throws" exceptions ("," exceptions)*)? #1 "{" (!2 statements)* !1 "}" - ; - -members.InterfaceMethod - ::= annotationsAndModifiers* ("<" typeParameters ( "," typeParameters)* ">")? (typeReference arrayDimensionsBefore*) name[] - "(" (parameters ("," parameters)* )? ")" arrayDimensionsAfter* - ("throws" exceptions ("," exceptions)*)? ";" - ; - -members.ClassMethod - ::= annotationsAndModifiers* ("<" typeParameters ("," typeParameters)* ">")? (typeReference arrayDimensionsBefore*) name[] - "(" (parameters ("," parameters)* )? ")" arrayDimensionsAfter* - ("throws" exceptions ("," exceptions)*)? #1 "{" (!2 statements)* !1 "}" - ; - -annotations.AnnotationAttribute - ::= annotationsAndModifiers* ("<" typeParameters ("," typeParameters)* ">")? (typeReference arrayDimensionsBefore*) name[] - "(" (parameters ("," parameters)* )? ")" arrayDimensionsAfter* - ("throws" exceptions ("," exceptions)*)? "default" defaultValue:expressions.AssignmentExpression ";" - ; - -parameters.OrdinaryParameter - ::= annotationsAndModifiers* typeReference arrayDimensionsBefore* ("<" typeArguments ("," typeArguments)* ">")? name[] arrayDimensionsAfter* - ; - -@SuppressWarnings(featureWithoutSyntax) -parameters.VariableLengthParameter - ::= annotationsAndModifiers* typeReference arrayDimensionsBefore* ("<" typeArguments ("," typeArguments)* ">")? "..." name[] - ; - -variables.LocalVariable - ::= annotationsAndModifiers* typeReference arrayDimensionsBefore* ("<" typeArguments ("," typeArguments)* ">")? name[] arrayDimensionsAfter* (#1 "=" #1 initialValue:expressions.AssignmentExpression)? ("," additionalLocalVariables)* - ; - -statements.LocalVariableStatement - ::= variable ";" ; - -@SuppressWarnings(featureWithoutSyntax) -variables.AdditionalLocalVariable - ::= name[] arrayDimensionsAfter* (#1 "=" #1 initialValue:expressions.AssignmentExpression)? - ; - -members.Field - ::= annotationsAndModifiers* typeReference arrayDimensionsBefore* ("<" typeArguments ("," typeArguments)* ">")? name[] arrayDimensionsAfter* (#1 "=" #1 initialValue:expressions.AssignmentExpression)? ("," additionalFields)* ";" - ; - -@SuppressWarnings(featureWithoutSyntax) -members.AdditionalField - ::= name[] arrayDimensionsAfter* (#1 "=" #1 initialValue:expressions.AssignmentExpression)? - ; - -@SuppressWarnings(featureWithoutSyntax) //name is set by JavaModelCompletion.setEmptyMemberName() -members.EmptyMember - ::= ";" - ; - -// INSTANTIATIONS -@SuppressWarnings(featureWithoutSyntax) //arraySelectors -instantiations.NewConstructorCall - ::= "new" - // these are the arguments for the constructor type parameters - ("<" typeArguments ("," typeArguments)* ">")? - typeReference - // these are the arguments for the class type parameters - ("<" callTypeArguments ("," callTypeArguments)* ">")? - "(" (arguments:expressions.AssignmentExpression ("," arguments:expressions.AssignmentExpression)* )? ")" - anonymousClass? - ("." next)? - ; - -@SuppressWarnings(featureWithoutSyntax) //arraySelectors -instantiations.ExplicitConstructorCall - ::= ("<" typeArguments ("," typeArguments)* ">")? - callTarget "(" (arguments:expressions.AssignmentExpression ("," arguments:expressions.AssignmentExpression)* )? ")" - ("." next)? - ; - -@SuppressWarnings(featureWithoutSyntax) //arrayDimensionsAfter -@SuppressWarnings(minOccurenceMismatch) //arrayDimensionsBefore required here -arrays.ArrayInstantiationByValuesTyped - ::= "new" typeReference arrayDimensionsBefore+ arrayInitializer - arraySelectors* ("." next)? - ; - -@SuppressWarnings(featureWithoutSyntax) //typeArguments not applicable -arrays.ArrayInstantiationByValuesUntyped - ::= arrayInitializer - arraySelectors* ("." next)? - ; - -@SuppressWarnings(featureWithoutSyntax) -arrays.ArrayInstantiationBySize - ::= "new" typeReference - ("[" sizes:expressions.AssignmentExpression "]")+ - arrayDimensionsBefore* - ("." next)? - ; - -@SuppressWarnings(optionalKeyword) -arrays.ArrayInitializer - ::= #1 "{" (initialValues:expressions.AssignmentExpression,arrays.ArrayInitializer - ("," initialValues:expressions.AssignmentExpression,arrays.ArrayInitializer )*)? (",")? "}" - ; - -arrays.ArraySelector - ::= "[" position:expressions.AssignmentExpression? "]" - ; - -types.NamespaceClassifierReference - ::= (namespaces[] ".")* (classifierReferences ".")* classifierReferences - ; - -types.ClassifierReference - ::= target[] - ("<" typeArguments ("," typeArguments)* ">")? - ; - - -references.MethodCall - ::= ("<" callTypeArguments ("," callTypeArguments)* ">")? - target[] - ("<" typeArguments ("," typeArguments)* ">")? - "(" (arguments:expressions.AssignmentExpression ("," arguments:expressions.AssignmentExpression)* )? ")" - arraySelectors* ("." next)? - ; - -references.IdentifierReference - ::= target[] - ("<" typeArguments ("," typeArguments)* ">")? - arraySelectors* ("." next)? - ; - -@SuppressWarnings(featureWithoutSyntax) //typeArguments -references.ReflectiveClassReference ::= "class" - ("." next)? - ; - -@SuppressWarnings(featureWithoutSyntax) //typeArguments -references.SelfReference ::= self - ("." next)? - ; - -@SuppressWarnings(featureWithoutSyntax) //typeArguments -references.PrimitiveTypeReference ::= primitiveType - arraySelectors* ("." next)? - ; - -literals.This ::= "this"; -literals.Super ::= "super"; - -@SuppressWarnings(featureWithoutSyntax) //typeArguments -references.StringReference - ::= value[STRING_LITERAL] - ("." next)? - ; - -@SuppressWarnings(featureWithoutSyntax) -generics.QualifiedTypeArgument - ::= typeReference arrayDimensionsBefore* - ; - -@SuppressWarnings(featureWithoutSyntax) -generics.UnknownTypeArgument - ::= "?" - ; - -@SuppressWarnings(featureWithoutSyntax) -generics.ExtendsTypeArgument - ::= "?" "extends" extendTypes ("&" extendTypes)* arrayDimensionsBefore* - ; - -@SuppressWarnings(featureWithoutSyntax) -generics.SuperTypeArgument - ::= "?" "super" superType arrayDimensionsBefore* - ; - -@SuppressWarnings(minOccurenceMismatch) //condition can be empty in other cases -statements.Assert - ::= "assert" condition:expressions.AssignmentExpression (":" errorMessage:expressions.AssignmentExpression)? ";" ; - -@SuppressWarnings(minOccurenceMismatch) //condition can be empty in other cases -statements.Condition - ::= "if" #1 "(" condition:expressions.AssignmentExpression ")" statement ("else" elseStatement)? ; - -statements.ForLoop - ::= "for" #1 "(" init? ";" condition:expressions.AssignmentExpression? ";" (updates:expressions.AssignmentExpression ("," updates:expressions.AssignmentExpression)* )? ")" statement; - -statements.ForEachLoop - ::= "for" #1 "(" next ":" collection:expressions.AssignmentExpression ")" statement; - -statements.WhileLoop - ::= "while" #1 "(" condition:expressions.AssignmentExpression ")" statement; - -statements.DoWhileLoop - ::= "do" statement "while" #1 "(" condition:expressions.AssignmentExpression ")" ";" ; - -statements.EmptyStatement - ::= ";" ; - -statements.SynchronizedBlock - ::= "synchronized" #1 "(" lockProvider:expressions.AssignmentExpression ")" #1 "{" (!1 statements)* !0 "}" ; - -statements.TryBlock - ::= "try" #1 "{" (!1 statements)* !0 "}" - catcheBlocks* - ("finally" finallyBlock)?; - -statements.CatchBlock - ::= "catch" #1 "(" parameter ")" #1 "{" (!1 statements)* !0 "}" - ; - -statements.Switch - ::= "switch" #1 "(" variable:expressions.AssignmentExpression ")" #1 "{" (cases*) "}"; - -@SuppressWarnings(minOccurenceMismatch) //condition can be empty in other cases -statements.NormalSwitchCase - ::= "case" condition:expressions.AssignmentExpression ":" (!1 statements)* !0 ; - -statements.DefaultSwitchCase - ::= "default" ":" (!1 statements)* !0 ; - -statements.Return - ::= "return" returnValue:expressions.AssignmentExpression? ";" ; - -statements.Throw - ::= "throw" throwable:expressions.AssignmentExpression ";" ; - -statements.Break - ::= "break" (target[])? ";" ; - -statements.Continue - ::= "continue" (target[])? ";" ; - -statements.JumpLabel - ::= name[] ":" statement ; - -statements.ExpressionStatement - ::= expression:expressions.AssignmentExpression ";" - ; - -@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match -expressions.ExpressionList - ::= expressions:expressions.AssignmentExpression ("," expressions:expressions.AssignmentExpression)* - ; - -@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match -expressions.AssignmentExpression - ::= child:expressions.ConditionalExpression (#1 assignmentOperator #1 value:expressions.AssignmentExpression)? - ; - -@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match -expressions.ConditionalExpression - ::= child:expressions.ConditionalOrExpression ("?" expressionIf:expressions.AssignmentExpression ":" expressionElse:expressions.ConditionalExpression)? - ; - -expressions.ConditionalOrExpression - ::= children:expressions.ConditionalAndExpression ( "||" children:expressions.ConditionalAndExpression )* - ; - -expressions.ConditionalAndExpression - ::= children:expressions.InclusiveOrExpression ( "&&" children:expressions.InclusiveOrExpression )* - ; - -expressions.InclusiveOrExpression - ::= children:expressions.ExclusiveOrExpression ( "|" children:expressions.ExclusiveOrExpression )* - ; - -expressions.ExclusiveOrExpression - ::= children:expressions.AndExpression ( "^" children:expressions.AndExpression )* - ; - -expressions.AndExpression - ::= children:expressions.EqualityExpression ( "&" children:expressions.EqualityExpression )* - ; - -@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match -expressions.EqualityExpression - ::= children:expressions.InstanceOfExpression ( #1 equalityOperators #1 children:expressions.InstanceOfExpression )* - ; - -@SuppressWarnings(featureWithoutSyntax) -@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match -expressions.InstanceOfExpression - ::= child:expressions.RelationExpression ("instanceof" typeReference arrayDimensionsBefore*)? - ; - -@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match -expressions.RelationExpression - ::= children:expressions.ShiftExpression ( #1 relationOperators #1 children:expressions.ShiftExpression)* - ; - -@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match -expressions.ShiftExpression - ::= children:expressions.AdditiveExpression ( #1 shiftOperators #1 children:expressions.AdditiveExpression)* - ; - -@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match -expressions.AdditiveExpression - ::= children:expressions.MultiplicativeExpression ( #1 additiveOperators #1 children:expressions.MultiplicativeExpression )* - ; - -@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match -expressions.MultiplicativeExpression - ::= children:expressions.UnaryExpression ( #1 multiplicativeOperators #1 children:expressions.UnaryExpression )* - ; - -@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match -expressions.UnaryExpression - ::= operators* child:expressions.UnaryModificationExpression - // TODO why does UnaryExpression have multiple operators? - ; - -@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match -expressions.SuffixUnaryModificationExpression - ::= child (operator)? - ; - -@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match -expressions.PrefixUnaryModificationExpression - ::= (operator)? child - ; - -@SuppressWarnings(featureWithoutSyntax) -expressions.CastExpression - ::= "(" typeReference arrayDimensionsBefore* ")" #1 child:expressions.UnaryExpression - ; - -@SuppressWarnings(featureWithoutSyntax) //typeArguments -expressions.NestedExpression ::= "(" expression:expressions.AssignmentExpression ")" arraySelectors* ("." next)? - ; - - - - - -operators.Assignment ::= "="; -operators.AssignmentPlus ::= "+="; -operators.AssignmentMinus ::= "-="; -operators.AssignmentMultiplication ::= "*="; -operators.AssignmentDivision ::= "/="; -operators.AssignmentAnd ::= "&="; -operators.AssignmentOr ::= "|="; -operators.AssignmentExclusiveOr ::= "^="; -operators.AssignmentModulo ::= "%="; -operators.AssignmentLeftShift ::= "<" "<" "="; -operators.AssignmentRightShift ::= ">" ">" "="; -operators.AssignmentUnsignedRightShift ::= ">" ">" ">" "="; - -operators.Addition ::= "+"; -operators.Subtraction ::= "-"; - -operators.Multiplication ::= "*" ; -operators.Division ::= "/" ; -operators.Remainder ::= "%" ; - -operators.LessThan ::= "<"; -operators.LessThanOrEqual ::= "<" "="; -operators.GreaterThan ::= ">"; -operators.GreaterThanOrEqual ::= ">" "="; - -operators.LeftShift ::= "<" "<" ; -operators.RightShift ::= ">" ">" ; -operators.UnsignedRightShift ::= ">" ">" ">" ; - -operators.Equal ::= "=="; -operators.NotEqual ::= "!="; -operators.PlusPlus ::= "++" ; -operators.MinusMinus ::= "--" ; -operators.Complement ::= "~" ; -operators.Negate ::= "!" ; - -arrays.ArrayDimension ::= ("[" "]"); - -literals.NullLiteral ::= "null"; - -modifiers.Public ::= "public"; -modifiers.Abstract ::= "abstract"; -modifiers.Protected ::= "protected"; -modifiers.Private ::= "private"; -modifiers.Final ::= "final"; -modifiers.Static ::= "static"; - -modifiers.Native ::= "native"; -modifiers.Synchronized ::= "synchronized"; -modifiers.Transient ::= "transient"; -modifiers.Volatile ::= "volatile"; -modifiers.Strictfp ::= "strictfp"; - -types.Void ::= "void"; -types.Boolean ::= "boolean"; -types.Char ::= "char"; -types.Byte ::= "byte"; -types.Short ::= "short"; -types.Int ::= "int"; -types.Long ::= "long"; -types.Float ::= "float"; -types.Double ::= "double"; - -// do not change the order of the literals! -literals.DecimalLongLiteral - ::= decimalValue[DECIMAL_LONG_LITERAL]; - -literals.DecimalFloatLiteral - ::= decimalValue[DECIMAL_FLOAT_LITERAL]; - -literals.DecimalIntegerLiteral - ::= decimalValue[DECIMAL_INTEGER_LITERAL]; - -literals.DecimalDoubleLiteral - ::= decimalValue[DECIMAL_DOUBLE_LITERAL]; - -literals.HexLongLiteral - ::= hexValue[HEX_LONG_LITERAL]; - -literals.HexFloatLiteral - ::= hexValue[HEX_FLOAT_LITERAL]; - -literals.HexDoubleLiteral - ::= hexValue[HEX_DOUBLE_LITERAL]; - -literals.HexIntegerLiteral - ::= hexValue[HEX_INTEGER_LITERAL]; - -literals.OctalLongLiteral - ::= octalValue[OCTAL_LONG_LITERAL]; - -literals.OctalIntegerLiteral - ::= octalValue[OCTAL_INTEGER_LITERAL]; - -literals.CharacterLiteral - ::= value[CHARACTER_LITERAL]; - -literals.BooleanLiteral - ::= value[BOOLEAN_LITERAL]; - -} +//******************************************************************************* +// Copyright (c) 2006-2012 +// Software Technology Group, Dresden University of Technology +// +// 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: +// Software Technology Group - TU Dresden, Germany +// - initial API and implementation +// ******************************************************************************/ + +SYNTAXDEF java +FOR +START containers.CompilationUnit, containers.Package, containers.EmptyModel + +IMPORTS { + annotations : + arrays : + classifiers : + commons : + containers : + expressions : + generics : + imports : + instantiations : + literals : + members : + modifiers : + operators : + parameters : + references : + statements : + types : + variables : +} + +OPTIONS { + licenceHeader ="../../org.dropsbox/licence.txt"; + defaultTokenName = "IDENTIFIER"; + generateCodeFromGeneratorModel = "false"; + memoize = "true"; + usePredefinedTokens = "false"; + resolveProxyElementsAfterParsing = "false"; + disableLaunchSupport = "true"; + disableDebugSupport = "true"; + ignoreTypeRestrictionsForPrinting = "true"; + overrideResourcePostProcessor = "false"; + overrideGrammarInformationProvider = "false"; + overrideMetaInformation = "false"; + overrideParser = "false"; +} + +TOKENS { + DEFINE SL_COMMENT $'//'(~('\n'|'\r'|'\uffff'))* $; + DEFINE ML_COMMENT $'/*'.*'*/'$; + + DEFINE BOOLEAN_LITERAL $'true'|'false'$; + + DEFINE CHARACTER_LITERAL $'\''('\\'('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')|('\\''u'('0'..'9'|'a'..'f'|'A'..'F')('0'..'9'|'a'..'f'|'A'..'F')('0'..'9'|'a'..'f'|'A'..'F')('0'..'9'|'a'..'f'|'A'..'F'))|('\\'('0'..'3')('0'..'7')('0'..'7')|'\\'('0'..'7')('0'..'7')|'\\'('0'..'7'))|~('\''|'\\'))'\''$; + DEFINE STRING_LITERAL $'"'('\\'('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')|('\\''u'('0'..'9'|'a'..'f'|'A'..'F')('0'..'9'|'a'..'f'|'A'..'F')('0'..'9'|'a'..'f'|'A'..'F')('0'..'9'|'a'..'f'|'A'..'F'))|'\\'('0'..'7')|~('\\'|'"'))*'"'$; + + @SuppressWarnings(tokenOverlapping) + DEFINE IDENTIFIER $('\u0024'|'\u0041'..'\u005a'|'\u005f'|'\u0061'..'\u007a'|'\u00a2'..'\u00a5'|'\u00aa'|'\u00b5'|'\u00ba'|'\u00c0'..'\u00d6'|'\u00d8'..'\u00f6'|'\u00f8'..'\u0236'|'\u0250'..'\u02c1'|'\u02c6'..'\u02d1'|'\u02e0'..'\u02e4'|'\u02ee'|'\u037a'|'\u0386'|'\u0388'..'\u038a'|'\u038c'|'\u038e'..'\u03a1'|'\u03a3'..'\u03ce'|'\u03d0'..'\u03f5'|'\u03f7'..'\u03fb'|'\u0400'..'\u0481'|'\u048a'..'\u04ce'|'\u04d0'..'\u04f5'|'\u04f8'..'\u04f9'|'\u0500'..'\u050f'|'\u0531'..'\u0556'|'\u0559'|'\u0561'..'\u0587'|'\u05d0'..'\u05ea'|'\u05f0'..'\u05f2'|'\u0621'..'\u063a'|'\u0640'..'\u064a'|'\u066e'..'\u066f'|'\u0671'..'\u06d3'|'\u06d5'|'\u06e5'..'\u06e6'|'\u06ee'..'\u06ef'|'\u06fa'..'\u06fc'|'\u06ff'|'\u0710'|'\u0712'..'\u072f'|'\u074d'..'\u074f'|'\u0780'..'\u07a5'|'\u07b1'|'\u0904'..'\u0939'|'\u093d'|'\u0950'|'\u0958'..'\u0961'|'\u0985'..'\u098c'|'\u098f'..'\u0990'|'\u0993'..'\u09a8'|'\u09aa'..'\u09b0'|'\u09b2'|'\u09b6'..'\u09b9'|'\u09bd'|'\u09dc'..'\u09dd'|'\u09df'..'\u09e1'|'\u09f0'..'\u09f3'|'\u0a05'..'\u0a0a'|'\u0a0f'..'\u0a10'|'\u0a13'..'\u0a28'|'\u0a2a'..'\u0a30'|'\u0a32'..'\u0a33'|'\u0a35'..'\u0a36'|'\u0a38'..'\u0a39'|'\u0a59'..'\u0a5c'|'\u0a5e'|'\u0a72'..'\u0a74'|'\u0a85'..'\u0a8d'|'\u0a8f'..'\u0a91'|'\u0a93'..'\u0aa8'|'\u0aaa'..'\u0ab0'|'\u0ab2'..'\u0ab3'|'\u0ab5'..'\u0ab9'|'\u0abd'|'\u0ad0'|'\u0ae0'..'\u0ae1'|'\u0af1'|'\u0b05'..'\u0b0c'|'\u0b0f'..'\u0b10'|'\u0b13'..'\u0b28'|'\u0b2a'..'\u0b30'|'\u0b32'..'\u0b33'|'\u0b35'..'\u0b39'|'\u0b3d'|'\u0b5c'..'\u0b5d'|'\u0b5f'..'\u0b61'|'\u0b71'|'\u0b83'|'\u0b85'..'\u0b8a'|'\u0b8e'..'\u0b90'|'\u0b92'..'\u0b95'|'\u0b99'..'\u0b9a'|'\u0b9c'|'\u0b9e'..'\u0b9f'|'\u0ba3'..'\u0ba4'|'\u0ba8'..'\u0baa'|'\u0bae'..'\u0bb5'|'\u0bb7'..'\u0bb9'|'\u0bf9'|'\u0c05'..'\u0c0c'|'\u0c0e'..'\u0c10'|'\u0c12'..'\u0c28'|'\u0c2a'..'\u0c33'|'\u0c35'..'\u0c39'|'\u0c60'..'\u0c61'|'\u0c85'..'\u0c8c'|'\u0c8e'..'\u0c90'|'\u0c92'..'\u0ca8'|'\u0caa'..'\u0cb3'|'\u0cb5'..'\u0cb9'|'\u0cbd'|'\u0cde'|'\u0ce0'..'\u0ce1'|'\u0d05'..'\u0d0c'|'\u0d0e'..'\u0d10'|'\u0d12'..'\u0d28'|'\u0d2a'..'\u0d39'|'\u0d60'..'\u0d61'|'\u0d85'..'\u0d96'|'\u0d9a'..'\u0db1'|'\u0db3'..'\u0dbb'|'\u0dbd'|'\u0dc0'..'\u0dc6'|'\u0e01'..'\u0e30'|'\u0e32'..'\u0e33'|'\u0e3f'..'\u0e46'|'\u0e81'..'\u0e82'|'\u0e84'|'\u0e87'..'\u0e88'|'\u0e8a'|'\u0e8d'|'\u0e94'..'\u0e97'|'\u0e99'..'\u0e9f'|'\u0ea1'..'\u0ea3'|'\u0ea5'|'\u0ea7'|'\u0eaa'..'\u0eab'|'\u0ead'..'\u0eb0'|'\u0eb2'..'\u0eb3'|'\u0ebd'|'\u0ec0'..'\u0ec4'|'\u0ec6'|'\u0edc'..'\u0edd'|'\u0f00'|'\u0f40'..'\u0f47'|'\u0f49'..'\u0f6a'|'\u0f88'..'\u0f8b'|'\u1000'..'\u1021'|'\u1023'..'\u1027'|'\u1029'..'\u102a'|'\u1050'..'\u1055'|'\u10a0'..'\u10c5'|'\u10d0'..'\u10f8'|'\u1100'..'\u1159'|'\u115f'..'\u11a2'|'\u11a8'..'\u11f9'|'\u1200'..'\u1206'|'\u1208'..'\u1246'|'\u1248'|'\u124a'..'\u124d'|'\u1250'..'\u1256'|'\u1258'|'\u125a'..'\u125d'|'\u1260'..'\u1286'|'\u1288'|'\u128a'..'\u128d'|'\u1290'..'\u12ae'|'\u12b0'|'\u12b2'..'\u12b5'|'\u12b8'..'\u12be'|'\u12c0'|'\u12c2'..'\u12c5'|'\u12c8'..'\u12ce'|'\u12d0'..'\u12d6'|'\u12d8'..'\u12ee'|'\u12f0'..'\u130e'|'\u1310'|'\u1312'..'\u1315'|'\u1318'..'\u131e'|'\u1320'..'\u1346'|'\u1348'..'\u135a'|'\u13a0'..'\u13f4'|'\u1401'..'\u166c'|'\u166f'..'\u1676'|'\u1681'..'\u169a'|'\u16a0'..'\u16ea'|'\u16ee'..'\u16f0'|'\u1700'..'\u170c'|'\u170e'..'\u1711'|'\u1720'..'\u1731'|'\u1740'..'\u1751'|'\u1760'..'\u176c'|'\u176e'..'\u1770'|'\u1780'..'\u17b3'|'\u17d7'|'\u17db'..'\u17dc'|'\u1820'..'\u1877'|'\u1880'..'\u18a8'|'\u1900'..'\u191c'|'\u1950'..'\u196d'|'\u1970'..'\u1974'|'\u1d00'..'\u1d6b'|'\u1e00'..'\u1e9b'|'\u1ea0'..'\u1ef9'|'\u1f00'..'\u1f15'|'\u1f18'..'\u1f1d'|'\u1f20'..'\u1f45'|'\u1f48'..'\u1f4d'|'\u1f50'..'\u1f57'|'\u1f59'|'\u1f5b'|'\u1f5d'|'\u1f5f'..'\u1f7d'|'\u1f80'..'\u1fb4'|'\u1fb6'..'\u1fbc'|'\u1fbe'|'\u1fc2'..'\u1fc4'|'\u1fc6'..'\u1fcc'|'\u1fd0'..'\u1fd3'|'\u1fd6'..'\u1fdb'|'\u1fe0'..'\u1fec'|'\u1ff2'..'\u1ff4'|'\u1ff6'..'\u1ffc'|'\u203f'..'\u2040'|'\u2054'|'\u2071'|'\u207f'|'\u20a0'..'\u20b1'|'\u2102'|'\u2107'|'\u210a'..'\u2113'|'\u2115'|'\u2119'..'\u211d'|'\u2124'|'\u2126'|'\u2128'|'\u212a'..'\u212d'|'\u212f'..'\u2131'|'\u2133'..'\u2139'|'\u213d'..'\u213f'|'\u2145'..'\u2149'|'\u2160'..'\u2183'|'\u3005'..'\u3007'|'\u3021'..'\u3029'|'\u3031'..'\u3035'|'\u3038'..'\u303c'|'\u3041'..'\u3096'|'\u309d'..'\u309f'|'\u30a1'..'\u30ff'|'\u3105'..'\u312c'|'\u3131'..'\u318e'|'\u31a0'..'\u31b7'|'\u31f0'..'\u31ff'|'\u3400'..'\u4db5'|'\u4e00'..'\u9fa5'|'\ua000'..'\ua48c'|'\uac00'..'\ud7a3'|'\ud800'..'\udbff'|'\uf900'..'\ufa2d'|'\ufa30'..'\ufa6a'|'\ufb00'..'\ufb06'|'\ufb13'..'\ufb17'|'\ufb1d'|'\ufb1f'..'\ufb28'|'\ufb2a'..'\ufb36'|'\ufb38'..'\ufb3c'|'\ufb3e'|'\ufb40'..'\ufb41'|'\ufb43'..'\ufb44'|'\ufb46'..'\ufbb1'|'\ufbd3'..'\ufd3d'|'\ufd50'..'\ufd8f'|'\ufd92'..'\ufdc7'|'\ufdf0'..'\ufdfc'|'\ufe33'..'\ufe34'|'\ufe4d'..'\ufe4f'|'\ufe69'|'\ufe70'..'\ufe74'|'\ufe76'..'\ufefc'|'\uff04'|'\uff21'..'\uff3a'|'\uff3f'|'\uff41'..'\uff5a'|'\uff65'..'\uffbe'|'\uffc2'..'\uffc7'|'\uffca'..'\uffcf'|'\uffd2'..'\uffd7'|'\uffda'..'\uffdc'|'\uffe0'..'\uffe1'|'\uffe5'..'\uffe6')('\u0000'..'\u0008'|'\u000e'..'\u001b'|'\u0024'|'\u0030'..'\u0039'|'\u0041'..'\u005a'|'\u005f'|'\u0061'..'\u007a'|'\u007f'..'\u009f'|'\u00a2'..'\u00a5'|'\u00aa'|'\u00ad'|'\u00b5'|'\u00ba'|'\u00c0'..'\u00d6'|'\u00d8'..'\u00f6'|'\u00f8'..'\u0236'|'\u0250'..'\u02c1'|'\u02c6'..'\u02d1'|'\u02e0'..'\u02e4'|'\u02ee'|'\u0300'..'\u0357'|'\u035d'..'\u036f'|'\u037a'|'\u0386'|'\u0388'..'\u038a'|'\u038c'|'\u038e'..'\u03a1'|'\u03a3'..'\u03ce'|'\u03d0'..'\u03f5'|'\u03f7'..'\u03fb'|'\u0400'..'\u0481'|'\u0483'..'\u0486'|'\u048a'..'\u04ce'|'\u04d0'..'\u04f5'|'\u04f8'..'\u04f9'|'\u0500'..'\u050f'|'\u0531'..'\u0556'|'\u0559'|'\u0561'..'\u0587'|'\u0591'..'\u05a1'|'\u05a3'..'\u05b9'|'\u05bb'..'\u05bd'|'\u05bf'|'\u05c1'..'\u05c2'|'\u05c4'|'\u05d0'..'\u05ea'|'\u05f0'..'\u05f2'|'\u0600'..'\u0603'|'\u0610'..'\u0615'|'\u0621'..'\u063a'|'\u0640'..'\u0658'|'\u0660'..'\u0669'|'\u066e'..'\u06d3'|'\u06d5'..'\u06dd'|'\u06df'..'\u06e8'|'\u06ea'..'\u06fc'|'\u06ff'|'\u070f'..'\u074a'|'\u074d'..'\u074f'|'\u0780'..'\u07b1'|'\u0901'..'\u0939'|'\u093c'..'\u094d'|'\u0950'..'\u0954'|'\u0958'..'\u0963'|'\u0966'..'\u096f'|'\u0981'..'\u0983'|'\u0985'..'\u098c'|'\u098f'..'\u0990'|'\u0993'..'\u09a8'|'\u09aa'..'\u09b0'|'\u09b2'|'\u09b6'..'\u09b9'|'\u09bc'..'\u09c4'|'\u09c7'..'\u09c8'|'\u09cb'..'\u09cd'|'\u09d7'|'\u09dc'..'\u09dd'|'\u09df'..'\u09e3'|'\u09e6'..'\u09f3'|'\u0a01'..'\u0a03'|'\u0a05'..'\u0a0a'|'\u0a0f'..'\u0a10'|'\u0a13'..'\u0a28'|'\u0a2a'..'\u0a30'|'\u0a32'..'\u0a33'|'\u0a35'..'\u0a36'|'\u0a38'..'\u0a39'|'\u0a3c'|'\u0a3e'..'\u0a42'|'\u0a47'..'\u0a48'|'\u0a4b'..'\u0a4d'|'\u0a59'..'\u0a5c'|'\u0a5e'|'\u0a66'..'\u0a74'|'\u0a81'..'\u0a83'|'\u0a85'..'\u0a8d'|'\u0a8f'..'\u0a91'|'\u0a93'..'\u0aa8'|'\u0aaa'..'\u0ab0'|'\u0ab2'..'\u0ab3'|'\u0ab5'..'\u0ab9'|'\u0abc'..'\u0ac5'|'\u0ac7'..'\u0ac9'|'\u0acb'..'\u0acd'|'\u0ad0'|'\u0ae0'..'\u0ae3'|'\u0ae6'..'\u0aef'|'\u0af1'|'\u0b01'..'\u0b03'|'\u0b05'..'\u0b0c'|'\u0b0f'..'\u0b10'|'\u0b13'..'\u0b28'|'\u0b2a'..'\u0b30'|'\u0b32'..'\u0b33'|'\u0b35'..'\u0b39'|'\u0b3c'..'\u0b43'|'\u0b47'..'\u0b48'|'\u0b4b'..'\u0b4d'|'\u0b56'..'\u0b57'|'\u0b5c'..'\u0b5d'|'\u0b5f'..'\u0b61'|'\u0b66'..'\u0b6f'|'\u0b71'|'\u0b82'..'\u0b83'|'\u0b85'..'\u0b8a'|'\u0b8e'..'\u0b90'|'\u0b92'..'\u0b95'|'\u0b99'..'\u0b9a'|'\u0b9c'|'\u0b9e'..'\u0b9f'|'\u0ba3'..'\u0ba4'|'\u0ba8'..'\u0baa'|'\u0bae'..'\u0bb5'|'\u0bb7'..'\u0bb9'|'\u0bbe'..'\u0bc2'|'\u0bc6'..'\u0bc8'|'\u0bca'..'\u0bcd'|'\u0bd7'|'\u0be7'..'\u0bef'|'\u0bf9'|'\u0c01'..'\u0c03'|'\u0c05'..'\u0c0c'|'\u0c0e'..'\u0c10'|'\u0c12'..'\u0c28'|'\u0c2a'..'\u0c33'|'\u0c35'..'\u0c39'|'\u0c3e'..'\u0c44'|'\u0c46'..'\u0c48'|'\u0c4a'..'\u0c4d'|'\u0c55'..'\u0c56'|'\u0c60'..'\u0c61'|'\u0c66'..'\u0c6f'|'\u0c82'..'\u0c83'|'\u0c85'..'\u0c8c'|'\u0c8e'..'\u0c90'|'\u0c92'..'\u0ca8'|'\u0caa'..'\u0cb3'|'\u0cb5'..'\u0cb9'|'\u0cbc'..'\u0cc4'|'\u0cc6'..'\u0cc8'|'\u0cca'..'\u0ccd'|'\u0cd5'..'\u0cd6'|'\u0cde'|'\u0ce0'..'\u0ce1'|'\u0ce6'..'\u0cef'|'\u0d02'..'\u0d03'|'\u0d05'..'\u0d0c'|'\u0d0e'..'\u0d10'|'\u0d12'..'\u0d28'|'\u0d2a'..'\u0d39'|'\u0d3e'..'\u0d43'|'\u0d46'..'\u0d48'|'\u0d4a'..'\u0d4d'|'\u0d57'|'\u0d60'..'\u0d61'|'\u0d66'..'\u0d6f'|'\u0d82'..'\u0d83'|'\u0d85'..'\u0d96'|'\u0d9a'..'\u0db1'|'\u0db3'..'\u0dbb'|'\u0dbd'|'\u0dc0'..'\u0dc6'|'\u0dca'|'\u0dcf'..'\u0dd4'|'\u0dd6'|'\u0dd8'..'\u0ddf'|'\u0df2'..'\u0df3'|'\u0e01'..'\u0e3a'|'\u0e3f'..'\u0e4e'|'\u0e50'..'\u0e59'|'\u0e81'..'\u0e82'|'\u0e84'|'\u0e87'..'\u0e88'|'\u0e8a'|'\u0e8d'|'\u0e94'..'\u0e97'|'\u0e99'..'\u0e9f'|'\u0ea1'..'\u0ea3'|'\u0ea5'|'\u0ea7'|'\u0eaa'..'\u0eab'|'\u0ead'..'\u0eb9'|'\u0ebb'..'\u0ebd'|'\u0ec0'..'\u0ec4'|'\u0ec6'|'\u0ec8'..'\u0ecd'|'\u0ed0'..'\u0ed9'|'\u0edc'..'\u0edd'|'\u0f00'|'\u0f18'..'\u0f19'|'\u0f20'..'\u0f29'|'\u0f35'|'\u0f37'|'\u0f39'|'\u0f3e'..'\u0f47'|'\u0f49'..'\u0f6a'|'\u0f71'..'\u0f84'|'\u0f86'..'\u0f8b'|'\u0f90'..'\u0f97'|'\u0f99'..'\u0fbc'|'\u0fc6'|'\u1000'..'\u1021'|'\u1023'..'\u1027'|'\u1029'..'\u102a'|'\u102c'..'\u1032'|'\u1036'..'\u1039'|'\u1040'..'\u1049'|'\u1050'..'\u1059'|'\u10a0'..'\u10c5'|'\u10d0'..'\u10f8'|'\u1100'..'\u1159'|'\u115f'..'\u11a2'|'\u11a8'..'\u11f9'|'\u1200'..'\u1206'|'\u1208'..'\u1246'|'\u1248'|'\u124a'..'\u124d'|'\u1250'..'\u1256'|'\u1258'|'\u125a'..'\u125d'|'\u1260'..'\u1286'|'\u1288'|'\u128a'..'\u128d'|'\u1290'..'\u12ae'|'\u12b0'|'\u12b2'..'\u12b5'|'\u12b8'..'\u12be'|'\u12c0'|'\u12c2'..'\u12c5'|'\u12c8'..'\u12ce'|'\u12d0'..'\u12d6'|'\u12d8'..'\u12ee'|'\u12f0'..'\u130e'|'\u1310'|'\u1312'..'\u1315'|'\u1318'..'\u131e'|'\u1320'..'\u1346'|'\u1348'..'\u135a'|'\u1369'..'\u1371'|'\u13a0'..'\u13f4'|'\u1401'..'\u166c'|'\u166f'..'\u1676'|'\u1681'..'\u169a'|'\u16a0'..'\u16ea'|'\u16ee'..'\u16f0'|'\u1700'..'\u170c'|'\u170e'..'\u1714'|'\u1720'..'\u1734'|'\u1740'..'\u1753'|'\u1760'..'\u176c'|'\u176e'..'\u1770'|'\u1772'..'\u1773'|'\u1780'..'\u17d3'|'\u17d7'|'\u17db'..'\u17dd'|'\u17e0'..'\u17e9'|'\u180b'..'\u180d'|'\u1810'..'\u1819'|'\u1820'..'\u1877'|'\u1880'..'\u18a9'|'\u1900'..'\u191c'|'\u1920'..'\u192b'|'\u1930'..'\u193b'|'\u1946'..'\u196d'|'\u1970'..'\u1974'|'\u1d00'..'\u1d6b'|'\u1e00'..'\u1e9b'|'\u1ea0'..'\u1ef9'|'\u1f00'..'\u1f15'|'\u1f18'..'\u1f1d'|'\u1f20'..'\u1f45'|'\u1f48'..'\u1f4d'|'\u1f50'..'\u1f57'|'\u1f59'|'\u1f5b'|'\u1f5d'|'\u1f5f'..'\u1f7d'|'\u1f80'..'\u1fb4'|'\u1fb6'..'\u1fbc'|'\u1fbe'|'\u1fc2'..'\u1fc4'|'\u1fc6'..'\u1fcc'|'\u1fd0'..'\u1fd3'|'\u1fd6'..'\u1fdb'|'\u1fe0'..'\u1fec'|'\u1ff2'..'\u1ff4'|'\u1ff6'..'\u1ffc'|'\u200c'..'\u200f'|'\u202a'..'\u202e'|'\u203f'..'\u2040'|'\u2054'|'\u2060'..'\u2063'|'\u206a'..'\u206f'|'\u2071'|'\u207f'|'\u20a0'..'\u20b1'|'\u20d0'..'\u20dc'|'\u20e1'|'\u20e5'..'\u20ea'|'\u2102'|'\u2107'|'\u210a'..'\u2113'|'\u2115'|'\u2119'..'\u211d'|'\u2124'|'\u2126'|'\u2128'|'\u212a'..'\u212d'|'\u212f'..'\u2131'|'\u2133'..'\u2139'|'\u213d'..'\u213f'|'\u2145'..'\u2149'|'\u2160'..'\u2183'|'\u3005'..'\u3007'|'\u3021'..'\u302f'|'\u3031'..'\u3035'|'\u3038'..'\u303c'|'\u3041'..'\u3096'|'\u3099'..'\u309a'|'\u309d'..'\u309f'|'\u30a1'..'\u30ff'|'\u3105'..'\u312c'|'\u3131'..'\u318e'|'\u31a0'..'\u31b7'|'\u31f0'..'\u31ff'|'\u3400'..'\u4db5'|'\u4e00'..'\u9fa5'|'\ua000'..'\ua48c'|'\uac00'..'\ud7a3'|'\ud800'..'\udfff'|'\uf900'..'\ufa2d'|'\ufa30'..'\ufa6a'|'\ufb00'..'\ufb06'|'\ufb13'..'\ufb17'|'\ufb1d'..'\ufb28'|'\ufb2a'..'\ufb36'|'\ufb38'..'\ufb3c'|'\ufb3e'|'\ufb40'..'\ufb41'|'\ufb43'..'\ufb44'|'\ufb46'..'\ufbb1'|'\ufbd3'..'\ufd3d'|'\ufd50'..'\ufd8f'|'\ufd92'..'\ufdc7'|'\ufdf0'..'\ufdfc'|'\ufe00'..'\ufe0f'|'\ufe20'..'\ufe23'|'\ufe33'..'\ufe34'|'\ufe4d'..'\ufe4f'|'\ufe69'|'\ufe70'..'\ufe74'|'\ufe76'..'\ufefc'|'\ufeff'|'\uff04'|'\uff10'..'\uff19'|'\uff21'..'\uff3a'|'\uff3f'|'\uff41'..'\uff5a'|'\uff65'..'\uffbe'|'\uffc2'..'\uffc7'|'\uffca'..'\uffcf'|'\uffd2'..'\uffd7'|'\uffda'..'\uffdc'|'\uffe0'..'\uffe1'|'\uffe5'..'\uffe6'|'\ufff9'..'\ufffb')*$; + + DEFINE HEX_FLOAT_LITERAL $'0'('x'|'X')('0'..'9'|'a'..'f'|'A'..'F')* (('.' ('0'..'9'|'a'..'f'|'A'..'F')+ (('p'|'P') ('+'|'-')? ('0'..'9')+ ('f'|'F') )?) | ((('p'|'P') ('+'|'-')? ('0'..'9')+ ('f'|'F') )))$; + @SuppressWarnings(tokenOverlapping) + DEFINE HEX_DOUBLE_LITERAL $'0'('x'|'X')('0'..'9'|'a'..'f'|'A'..'F')* (('.' ('0'..'9'|'a'..'f'|'A'..'F')+ (('p'|'P') ('+'|'-')? ('0'..'9')+ ('d'|'D')?)?) | ((('p'|'P') ('+'|'-')? ('0'..'9')+ ('d'|'D')?)))$; + DEFINE HEX_LONG_LITERAL $'0'('x'|'X')('0'..'9'|'a'..'f'|'A'..'F')+ ('l'|'L')$; + DEFINE HEX_INTEGER_LITERAL $'0'('x'|'X')('0'..'9'|'a'..'f'|'A'..'F')+$; + + DEFINE DECIMAL_FLOAT_LITERAL $('0'..'9')+ '.' ('0'..'9')* (('e'|'E'|'p'|'P') ('+'|'-')? ('0'..'9')+)? ('f'|'F') | ('.' ('0'..'9')+ (('e'|'E'|'p'|'P') ('+'|'-')? ('0'..'9')+)?) ('f'|'F') | (('0'..'9')+ (('e'|'E'|'p'|'P') ('+'|'-')? ('0'..'9')+) ('f'|'F') | ('0'..'9')+ ('f'|'F'))$; + DEFINE DECIMAL_DOUBLE_LITERAL $('0'..'9')+ '.' ('0'..'9')* (('e'|'E'|'p'|'P') ('+'|'-')? ('0'..'9')+)? ('d'|'D')? | ('.' ('0'..'9')+ (('e'|'E'|'p'|'P') ('+'|'-')? ('0'..'9')+)?) ('d'|'D')? | (('0'..'9')+ (('e'|'E'|'p'|'P') ('+'|'-')? ('0'..'9')+) ('d'|'D')? | ('0'..'9')+ ('d'|'D'))$; + DEFINE DECIMAL_LONG_LITERAL $('0'|'1'..'9''0'..'9'*)('l'|'L')$; + DEFINE DECIMAL_INTEGER_LITERAL $('0'|'1'..'9''0'..'9'*)$; + + DEFINE OCTAL_LONG_LITERAL $'0'('0'..'7')+('l'|'L')$; + DEFINE OCTAL_INTEGER_LITERAL $'0'('0'..'7')+$; + + @SuppressWarnings(unusedToken) + DEFINE WHITESPACE $(' '|'\t'|'\f'|'\r'|'\n')+$; +} + +TOKENSTYLES { + "ML_COMMENT" COLOR #008000, ITALIC; + "SL_COMMENT" COLOR #000080, ITALIC; + "STRING_LITERAL" COLOR #2A00FF; + "IDENTIFIER" COLOR #000000; + + "abstract", "assert", + "boolean", "byte", + "case", "catch", "class", "continue", "char", + "default", "double", "do", + "enum", "extends", "else", + "for", "float", "final", + "if", "import", "implements", "int", "interface", "instanceof", + "package", "private", "protected", "public", + "super", "switch", "strictfp", "static", "synchronized", + "this", "try", "throws", "transient", + "new", "null", + "while", + "void", + "long", + "return" COLOR #7F0055, BOLD; +} + +RULES { + +@SuppressWarnings(optionalKeyword) +@SuppressWarnings(featureWithoutSyntax) //name is set by JavaSourceOrClassFileResource.load() +containers.EmptyModel + ::= (imports ";" !0 )* (";")* + ; + +@SuppressWarnings(optionalKeyword) +@SuppressWarnings(featureWithoutSyntax) //subpackages is filled by JavaSourceOrClassFileResource.load() +containers.Package + ::= annotations* "package" (namespaces[] "." )* name[] ";" + (";")? //TODO this is required to let T7312 of JacksTest pass... not sure if this is correct or if it should be * instead of ? + !0 !0 + (imports !0 )* (";")* + ; + +@SuppressWarnings(optionalKeyword) +@SuppressWarnings(featureWithoutSyntax) //name is set by JavaSourceOrClassFileResource or ClassFileModelLoader +containers.CompilationUnit + ::= ("package" namespaces[] ( "." namespaces[])* ";" )? + !0 !0 + (imports !0 )* + (";" !0)* + !0 + (classifiers (";")* !0 !0)+ + ("\u001a")? + ; + +imports.ClassifierImport + ::= "import" (namespaces[] "." )* classifier[] ";"; + +@SuppressWarnings(minOccurenceMismatch) //the minimal occurence of namespaces[] is in other cases 0 +imports.PackageImport + ::= "import" (namespaces[] "." )+ "*" ";"; + +imports.StaticMemberImport + ::= "import" static (namespaces[] "." )* staticMembers[] ";"; + +@SuppressWarnings(minOccurenceMismatch) //the minimal occurence of namespaces[] is in other cases 0 +imports.StaticClassifierImport + ::= "import" static (namespaces[] "." )+ "*" ";"; + +@SuppressWarnings(featureWithoutSyntax) //defaultExtends is filled by post processor +classifiers.Class + ::= annotationsAndModifiers* + "class" name[] ("<" typeParameters ("," typeParameters)* ">")? + ("extends" extends)? + ("implements" (implements ("," implements)*))? + #1 "{" + (!1 members)* !0 + "}" + ; + +@SuppressWarnings(featureWithoutSyntax) //defaultMembers is filled by post processor +classifiers.AnonymousClass + ::= #1 "{" + (!1 members)* !0 + "}" + ; + +@SuppressWarnings(featureWithoutSyntax) //defaultMembers is set during reference resolving +classifiers.Interface + ::= annotationsAndModifiers* + "interface" name[] ("<" typeParameters ( "," typeParameters)* ">")? + ("extends" (extends ("," extends)*))? + #1 "{" + (!1 members)* !0 + "}" + ; + +@SuppressWarnings(featureWithoutSyntax) //defaultMembers is set during reference resolving +@SuppressWarnings(optionalKeyword) +classifiers.Enumeration + ::= annotationsAndModifiers* + "enum" name[] + ("implements" (implements ("," implements)*))? + #1 "{" + (!1 constants ("," !1 constants)*)? (",")? + (";" (!1 members)* !0)? + "}" + ; + +@SuppressWarnings(featureWithoutSyntax) //defaultMembers is set during reference resolving +classifiers.Annotation + ::= annotationsAndModifiers* + "@" "interface" name[] + #1 "{" + (!1 members)* !0 + "}" + ; + +@SuppressWarnings(featureWithoutSyntax) //typeArguments +annotations.AnnotationInstance + ::= "@" (namespaces[] "." )* annotation[] + (parameter)? + ; + +annotations.SingleAnnotationParameter + ::= "(" value:arrays.ArrayInitializer,expressions.ConditionalExpression ")" + ; + +annotations.AnnotationParameterList + ::= "(" (settings ("," settings)*)? ")" + ; + +annotations.AnnotationAttributeSetting + ::= attribute[] #1 "=" #1 + value:arrays.ArrayInitializer,expressions.ConditionalExpression + ; + +generics.TypeParameter + ::= name[] ("extends" extendTypes ("&" extendTypes)*)? + ; + +@SuppressWarnings(optionalKeyword) +members.EnumConstant + ::= annotations* name[] (#1 "(" (arguments:expressions.AssignmentExpression ("," arguments:expressions.AssignmentExpression)*)? ")" )? + (anonymousClass)? + ; + +@SuppressWarnings(featureWithoutSyntax) //name is set by JavaModelCompletion.setBlockName() +statements.Block + ::= modifiers* #1 "{" (!1 statements)* !0 "}" + ; + +members.Constructor + ::= annotationsAndModifiers* ("<" typeParameters ("," typeParameters)* ">")? name[] + "(" (parameters ("," parameters)* )? ")" + ("throws" exceptions ("," exceptions)*)? #1 "{" (!2 statements)* !1 "}" + ; + +members.InterfaceMethod + ::= annotationsAndModifiers* ("<" typeParameters ( "," typeParameters)* ">")? (typeReference arrayDimensionsBefore*) name[] + "(" (parameters ("," parameters)* )? ")" arrayDimensionsAfter* + ("throws" exceptions ("," exceptions)*)? ";" + ; + +members.ClassMethod + ::= annotationsAndModifiers* ("<" typeParameters ("," typeParameters)* ">")? (typeReference arrayDimensionsBefore*) name[] + "(" (parameters ("," parameters)* )? ")" arrayDimensionsAfter* + ("throws" exceptions ("," exceptions)*)? #1 "{" (!2 statements)* !1 "}" + ; + +annotations.AnnotationAttribute + ::= annotationsAndModifiers* ("<" typeParameters ("," typeParameters)* ">")? (typeReference arrayDimensionsBefore*) name[] + "(" (parameters ("," parameters)* )? ")" arrayDimensionsAfter* + ("throws" exceptions ("," exceptions)*)? "default" defaultValue:expressions.AssignmentExpression ";" + ; + +parameters.OrdinaryParameter + ::= annotationsAndModifiers* typeReference arrayDimensionsBefore* ("<" typeArguments ("," typeArguments)* ">")? name[] arrayDimensionsAfter* + ; + +@SuppressWarnings(featureWithoutSyntax) +parameters.VariableLengthParameter + ::= annotationsAndModifiers* typeReference arrayDimensionsBefore* ("<" typeArguments ("," typeArguments)* ">")? "..." name[] + ; + +variables.LocalVariable + ::= annotationsAndModifiers* typeReference arrayDimensionsBefore* ("<" typeArguments ("," typeArguments)* ">")? name[] arrayDimensionsAfter* (#1 "=" #1 initialValue:expressions.AssignmentExpression)? ("," additionalLocalVariables)* + ; + +statements.LocalVariableStatement + ::= variable ";" ; + +@SuppressWarnings(featureWithoutSyntax) +variables.AdditionalLocalVariable + ::= name[] arrayDimensionsAfter* (#1 "=" #1 initialValue:expressions.AssignmentExpression)? + ; + +members.Field + ::= annotationsAndModifiers* typeReference arrayDimensionsBefore* ("<" typeArguments ("," typeArguments)* ">")? name[] arrayDimensionsAfter* (#1 "=" #1 initialValue:expressions.AssignmentExpression)? ("," additionalFields)* ";" + ; + +@SuppressWarnings(featureWithoutSyntax) +members.AdditionalField + ::= name[] arrayDimensionsAfter* (#1 "=" #1 initialValue:expressions.AssignmentExpression)? + ; + +@SuppressWarnings(featureWithoutSyntax) //name is set by JavaModelCompletion.setEmptyMemberName() +members.EmptyMember + ::= ";" + ; + +// INSTANTIATIONS +@SuppressWarnings(featureWithoutSyntax) //arraySelectors +instantiations.NewConstructorCall + ::= "new" + // these are the arguments for the constructor type parameters + ("<" typeArguments ("," typeArguments)* ">")? + typeReference + // these are the arguments for the class type parameters + ("<" callTypeArguments ("," callTypeArguments)* ">")? + "(" (arguments:expressions.AssignmentExpression ("," arguments:expressions.AssignmentExpression)* )? ")" + anonymousClass? + ("." next)? + ; + +@SuppressWarnings(featureWithoutSyntax) //arraySelectors +instantiations.ExplicitConstructorCall + ::= ("<" typeArguments ("," typeArguments)* ">")? + callTarget "(" (arguments:expressions.AssignmentExpression ("," arguments:expressions.AssignmentExpression)* )? ")" + ("." next)? + ; + +@SuppressWarnings(featureWithoutSyntax) //arrayDimensionsAfter +@SuppressWarnings(minOccurenceMismatch) //arrayDimensionsBefore required here +arrays.ArrayInstantiationByValuesTyped + ::= "new" typeReference arrayDimensionsBefore+ arrayInitializer + arraySelectors* ("." next)? + ; + +@SuppressWarnings(featureWithoutSyntax) //typeArguments not applicable +arrays.ArrayInstantiationByValuesUntyped + ::= arrayInitializer + arraySelectors* ("." next)? + ; + +@SuppressWarnings(featureWithoutSyntax) +arrays.ArrayInstantiationBySize + ::= "new" typeReference + ("[" sizes:expressions.AssignmentExpression "]")+ + arrayDimensionsBefore* + ("." next)? + ; + +@SuppressWarnings(optionalKeyword) +arrays.ArrayInitializer + ::= #1 "{" (initialValues:expressions.AssignmentExpression,arrays.ArrayInitializer + ("," initialValues:expressions.AssignmentExpression,arrays.ArrayInitializer )*)? (",")? "}" + ; + +arrays.ArraySelector + ::= "[" position:expressions.AssignmentExpression? "]" + ; + +types.NamespaceClassifierReference + ::= (namespaces[] ".")* (classifierReferences ".")* classifierReferences + ; + +types.ClassifierReference + ::= target[] + ("<" typeArguments ("," typeArguments)* ">")? + ; + + +references.MethodCall + ::= ("<" callTypeArguments ("," callTypeArguments)* ">")? + target[] + ("<" typeArguments ("," typeArguments)* ">")? + "(" (arguments:expressions.AssignmentExpression ("," arguments:expressions.AssignmentExpression)* )? ")" + arraySelectors* ("." next)? + ; + +references.IdentifierReference + ::= target[] + ("<" typeArguments ("," typeArguments)* ">")? + arraySelectors* ("." next)? + ; + +@SuppressWarnings(featureWithoutSyntax) //typeArguments +references.ReflectiveClassReference ::= "class" + ("." next)? + ; + +@SuppressWarnings(featureWithoutSyntax) //typeArguments +references.SelfReference ::= self + ("." next)? + ; + +@SuppressWarnings(featureWithoutSyntax) //typeArguments +references.PrimitiveTypeReference ::= primitiveType + arraySelectors* ("." next)? + ; + +literals.This ::= "this"; +literals.Super ::= "super"; + +@SuppressWarnings(featureWithoutSyntax) //typeArguments +references.StringReference + ::= value[STRING_LITERAL] + ("." next)? + ; + +@SuppressWarnings(featureWithoutSyntax) +generics.QualifiedTypeArgument + ::= typeReference arrayDimensionsBefore* + ; + +@SuppressWarnings(featureWithoutSyntax) +generics.UnknownTypeArgument + ::= "?" + ; + +@SuppressWarnings(featureWithoutSyntax) +generics.ExtendsTypeArgument + ::= "?" "extends" extendTypes ("&" extendTypes)* arrayDimensionsBefore* + ; + +@SuppressWarnings(featureWithoutSyntax) +generics.SuperTypeArgument + ::= "?" "super" superType arrayDimensionsBefore* + ; + +@SuppressWarnings(minOccurenceMismatch) //condition can be empty in other cases +statements.Assert + ::= "assert" condition:expressions.AssignmentExpression (":" errorMessage:expressions.AssignmentExpression)? ";" ; + +@SuppressWarnings(minOccurenceMismatch) //condition can be empty in other cases +statements.Condition + ::= "if" #1 "(" condition:expressions.AssignmentExpression ")" statement ("else" elseStatement)? ; + +statements.ForLoop + ::= "for" #1 "(" init? ";" condition:expressions.AssignmentExpression? ";" (updates:expressions.AssignmentExpression ("," updates:expressions.AssignmentExpression)* )? ")" statement; + +statements.ForEachLoop + ::= "for" #1 "(" next ":" collection:expressions.AssignmentExpression ")" statement; + +statements.WhileLoop + ::= "while" #1 "(" condition:expressions.AssignmentExpression ")" statement; + +statements.DoWhileLoop + ::= "do" statement "while" #1 "(" condition:expressions.AssignmentExpression ")" ";" ; + +statements.EmptyStatement + ::= ";" ; + +statements.SynchronizedBlock + ::= "synchronized" #1 "(" lockProvider:expressions.AssignmentExpression ")" #1 "{" (!1 statements)* !0 "}" ; + +statements.TryBlock + ::= "try" #1 "{" (!1 statements)* !0 "}" + catcheBlocks* + ("finally" finallyBlock)?; + +statements.CatchBlock + ::= "catch" #1 "(" parameter ")" #1 "{" (!1 statements)* !0 "}" + ; + +statements.Switch + ::= "switch" #1 "(" variable:expressions.AssignmentExpression ")" #1 "{" (cases*) "}"; + +@SuppressWarnings(minOccurenceMismatch) //condition can be empty in other cases +statements.NormalSwitchCase + ::= "case" condition:expressions.AssignmentExpression ":" (!1 statements)* !0 ; + +statements.DefaultSwitchCase + ::= "default" ":" (!1 statements)* !0 ; + +statements.Return + ::= "return" returnValue:expressions.AssignmentExpression? ";" ; + +statements.Throw + ::= "throw" throwable:expressions.AssignmentExpression ";" ; + +statements.Break + ::= "break" (target[])? ";" ; + +statements.Continue + ::= "continue" (target[])? ";" ; + +statements.JumpLabel + ::= name[] ":" statement ; + +statements.ExpressionStatement + ::= expression:expressions.AssignmentExpression ";" + ; + +@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match +expressions.ExpressionList + ::= expressions:expressions.AssignmentExpression ("," expressions:expressions.AssignmentExpression)* + ; + +@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match +expressions.AssignmentExpression + ::= child:expressions.ConditionalExpression (#1 assignmentOperator #1 value:expressions.AssignmentExpression)? + ; + +@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match +expressions.ConditionalExpression + ::= child:expressions.ConditionalOrExpression ("?" expressionIf:expressions.AssignmentExpression ":" expressionElse:expressions.ConditionalExpression)? + ; + +expressions.ConditionalOrExpression + ::= children:expressions.ConditionalAndExpression ( "||" children:expressions.ConditionalAndExpression )* + ; + +expressions.ConditionalAndExpression + ::= children:expressions.InclusiveOrExpression ( "&&" children:expressions.InclusiveOrExpression )* + ; + +expressions.InclusiveOrExpression + ::= children:expressions.ExclusiveOrExpression ( "|" children:expressions.ExclusiveOrExpression )* + ; + +expressions.ExclusiveOrExpression + ::= children:expressions.AndExpression ( "^" children:expressions.AndExpression )* + ; + +expressions.AndExpression + ::= children:expressions.EqualityExpression ( "&" children:expressions.EqualityExpression )* + ; + +@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match +expressions.EqualityExpression + ::= children:expressions.InstanceOfExpression ( #1 equalityOperators #1 children:expressions.InstanceOfExpression )* + ; + +@SuppressWarnings(featureWithoutSyntax) +@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match +expressions.InstanceOfExpression + ::= child:expressions.RelationExpression ("instanceof" typeReference arrayDimensionsBefore*)? + ; + +@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match +expressions.RelationExpression + ::= children:expressions.ShiftExpression ( #1 relationOperators #1 children:expressions.ShiftExpression)* + ; + +@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match +expressions.ShiftExpression + ::= children:expressions.AdditiveExpression ( #1 shiftOperators #1 children:expressions.AdditiveExpression)* + ; + +@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match +expressions.AdditiveExpression + ::= children:expressions.MultiplicativeExpression ( #1 additiveOperators #1 children:expressions.MultiplicativeExpression )* + ; + +@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match +expressions.MultiplicativeExpression + ::= children:expressions.UnaryExpression ( #1 multiplicativeOperators #1 children:expressions.UnaryExpression )* + ; + +@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match +expressions.UnaryExpression + ::= operators* child:expressions.UnaryModificationExpression + // TODO why does UnaryExpression have multiple operators? + ; + +@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match +expressions.SuffixUnaryModificationExpression + ::= child (operator)? + ; + +@SuppressWarnings(minOccurenceMismatch) //the expression simplifier removes the cases where min occurrence does not match +expressions.PrefixUnaryModificationExpression + ::= (operator)? child + ; + +@SuppressWarnings(featureWithoutSyntax) +expressions.CastExpression + ::= "(" typeReference arrayDimensionsBefore* ")" #1 child:expressions.UnaryExpression + ; + +@SuppressWarnings(featureWithoutSyntax) //typeArguments +expressions.NestedExpression ::= "(" expression:expressions.AssignmentExpression ")" arraySelectors* ("." next)? + ; + + + + + +operators.Assignment ::= "="; +operators.AssignmentPlus ::= "+="; +operators.AssignmentMinus ::= "-="; +operators.AssignmentMultiplication ::= "*="; +operators.AssignmentDivision ::= "/="; +operators.AssignmentAnd ::= "&="; +operators.AssignmentOr ::= "|="; +operators.AssignmentExclusiveOr ::= "^="; +operators.AssignmentModulo ::= "%="; +operators.AssignmentLeftShift ::= "<" "<" "="; +operators.AssignmentRightShift ::= ">" ">" "="; +operators.AssignmentUnsignedRightShift ::= ">" ">" ">" "="; + +operators.Addition ::= "+"; +operators.Subtraction ::= "-"; + +operators.Multiplication ::= "*" ; +operators.Division ::= "/" ; +operators.Remainder ::= "%" ; + +operators.LessThan ::= "<"; +operators.LessThanOrEqual ::= "<" "="; +operators.GreaterThan ::= ">"; +operators.GreaterThanOrEqual ::= ">" "="; + +operators.LeftShift ::= "<" "<" ; +operators.RightShift ::= ">" ">" ; +operators.UnsignedRightShift ::= ">" ">" ">" ; + +operators.Equal ::= "=="; +operators.NotEqual ::= "!="; +operators.PlusPlus ::= "++" ; +operators.MinusMinus ::= "--" ; +operators.Complement ::= "~" ; +operators.Negate ::= "!" ; + +arrays.ArrayDimension ::= ("[" "]"); + +literals.NullLiteral ::= "null"; + +modifiers.Public ::= "public"; +modifiers.Abstract ::= "abstract"; +modifiers.Protected ::= "protected"; +modifiers.Private ::= "private"; +modifiers.Final ::= "final"; +modifiers.Static ::= "static"; + +modifiers.Native ::= "native"; +modifiers.Synchronized ::= "synchronized"; +modifiers.Transient ::= "transient"; +modifiers.Volatile ::= "volatile"; +modifiers.Strictfp ::= "strictfp"; + +types.Void ::= "void"; +types.Boolean ::= "boolean"; +types.Char ::= "char"; +types.Byte ::= "byte"; +types.Short ::= "short"; +types.Int ::= "int"; +types.Long ::= "long"; +types.Float ::= "float"; +types.Double ::= "double"; + +// do not change the order of the literals! +literals.DecimalLongLiteral + ::= decimalValue[DECIMAL_LONG_LITERAL]; + +literals.DecimalFloatLiteral + ::= decimalValue[DECIMAL_FLOAT_LITERAL]; + +literals.DecimalIntegerLiteral + ::= decimalValue[DECIMAL_INTEGER_LITERAL]; + +literals.DecimalDoubleLiteral + ::= decimalValue[DECIMAL_DOUBLE_LITERAL]; + +literals.HexLongLiteral + ::= hexValue[HEX_LONG_LITERAL]; + +literals.HexFloatLiteral + ::= hexValue[HEX_FLOAT_LITERAL]; + +literals.HexDoubleLiteral + ::= hexValue[HEX_DOUBLE_LITERAL]; + +literals.HexIntegerLiteral + ::= hexValue[HEX_INTEGER_LITERAL]; + +literals.OctalLongLiteral + ::= octalValue[OCTAL_LONG_LITERAL]; + +literals.OctalIntegerLiteral + ::= octalValue[OCTAL_INTEGER_LITERAL]; + +literals.CharacterLiteral + ::= value[CHARACTER_LITERAL]; + +literals.BooleanLiteral + ::= value[BOOLEAN_LITERAL]; + +} diff --git a/Core/org.emftext.language.java/metamodel/java.ecore.notes.txt b/Core/org.emftext.language.java/metamodel/java.ecore.notes.txt index a28c2727..9ea7b002 100644 --- a/Core/org.emftext.language.java/metamodel/java.ecore.notes.txt +++ b/Core/org.emftext.language.java/metamodel/java.ecore.notes.txt @@ -1,4 +1,4 @@ -- Why does meta class ExplicitConstructorCall has a reference to Self? -- Should class Instantiation inherit from class Reference? -- Should NamespaceClassifierReference better be called QualifiedClassifierReference? -- EnumConstant subclass of Member? +- Why does meta class ExplicitConstructorCall has a reference to Self? +- Should class Instantiation inherit from class Reference? +- Should NamespaceClassifierReference better be called QualifiedClassifierReference? +- EnumConstant subclass of Member? diff --git a/Core/org.emftext.language.java/metamodel/java/arrays/ArrayTypable.ejava b/Core/org.emftext.language.java/metamodel/java/arrays/ArrayTypable.ejava index 903c30ab..48597dd3 100644 --- a/Core/org.emftext.language.java/metamodel/java/arrays/ArrayTypable.ejava +++ b/Core/org.emftext.language.java/metamodel/java/arrays/ArrayTypable.ejava @@ -1,7 +1,7 @@ -epackage java.arrays; - -import java.parameters.VariableLengthParameter; - -eclass ArrayTypeable { - +epackage java.arrays; + +import java.parameters.VariableLengthParameter; + +eclass ArrayTypeable { + } \ No newline at end of file diff --git a/Core/org.emftext.language.java/metamodel/java/classifiers/Annotation.ejava b/Core/org.emftext.language.java/metamodel/java/classifiers/Annotation.ejava index 44ee5a79..7bc94680 100644 --- a/Core/org.emftext.language.java/metamodel/java/classifiers/Annotation.ejava +++ b/Core/org.emftext.language.java/metamodel/java/classifiers/Annotation.ejava @@ -1,18 +1,18 @@ -epackage java.classifiers; - -//java -import org.emftext.language.java.util.UniqueEList; -import org.eclipse.emf.common.util.EList; - -eclass Annotation { - - /** - * @return java.lang.annotation.Annotation - */ - getAllSuperClassifiers() { - EList result = new UniqueEList(); - result.add(getAnnotationInterface()); - return result; - } - +epackage java.classifiers; + +//java +import org.emftext.language.java.util.UniqueEList; +import org.eclipse.emf.common.util.EList; + +eclass Annotation { + + /** + * @return java.lang.annotation.Annotation + */ + getAllSuperClassifiers() { + EList result = new UniqueEList(); + result.add(getAnnotationInterface()); + return result; + } + } \ No newline at end of file diff --git a/Core/org.emftext.language.java/metamodel/java/classifiers/AnonymousClass.ejava b/Core/org.emftext.language.java/metamodel/java/classifiers/AnonymousClass.ejava index f8a7f4e9..62ea2a38 100644 --- a/Core/org.emftext.language.java/metamodel/java/classifiers/AnonymousClass.ejava +++ b/Core/org.emftext.language.java/metamodel/java/classifiers/AnonymousClass.ejava @@ -1,97 +1,97 @@ -epackage java.classifiers; - -//ecore -import java.classifiers.AnonymousClass; -import java.classifiers.ConcreteClassifier; -import java.classifiers.Enumeration; -import java.instantiations.NewConstructorCall; -import java.members.EnumConstant; -import java.members.Member; -import java.modifiers.AnnotableAndModifiable; - - -//java -import org.emftext.language.java.util.UniqueEList; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.util.EcoreUtil; - - -eclass AnonymousClass { - - /** - * @param context to check protected visibility - * @return a view on all members including super classifiers' members - */ - getAllMembers() { - EList memberList = new UniqueEList(); - memberList.addAll(this.getMembers()); - memberList.addAll(this.getDefaultMembers()); - - NewConstructorCall ncCall = null; - if (this.eContainer() instanceof NewConstructorCall) { - ncCall = (NewConstructorCall) this.eContainer();; - } - if (ncCall == null) { - return memberList; - } - else { - ConcreteClassifier classifier = (ConcreteClassifier) ncCall.getTypeReference().getTarget(); - if (classifier != null) { - EList superMemberList = classifier.getAllMembers(context); - for(Member superMember : superMemberList) { - //exclude private members - if(superMember instanceof AnnotableAndModifiable) { - if (superMember.eIsProxy()) { - superMember = (Member) EcoreUtil.resolve(superMember, this); - } - AnnotableAndModifiable modifiable = (AnnotableAndModifiable) superMember; - if(!modifiable.isHidden(context)) { - memberList.add(superMember); - } - } - else { - memberList.add(superMember); - } - } - } - return memberList; - } - } - - /** - * @return a view on all super classifiers - */ - getAllSuperClassifiers() { - EList superClassifierList = new UniqueEList(); - - ConcreteClassifier superClassifier = getSuperClassifier(); - - if (superClassifier != null) { - superClassifierList.add(superClassifier); - superClassifierList.addAll(superClassifier.getAllSuperClassifiers()); - } - else { - superClassifierList.add(getObjectClass()); - } - return superClassifierList; - } - - /** - * @return the direct super classifier - */ - getSuperClassifier() { - NewConstructorCall ncCall = null; - if (this.eContainer() instanceof NewConstructorCall) { - ncCall = (NewConstructorCall) this.eContainer(); - ConcreteClassifier superClassifier = (ConcreteClassifier) ncCall.getTypeReference().getTarget(); - return superClassifier; - } - else if (this.eContainer() instanceof EnumConstant) { - if (this.eContainer().eContainer() instanceof Enumeration) { - return (Enumeration) this.eContainer().eContainer(); - } - } - return null; - } -} +epackage java.classifiers; + +//ecore +import java.classifiers.AnonymousClass; +import java.classifiers.ConcreteClassifier; +import java.classifiers.Enumeration; +import java.instantiations.NewConstructorCall; +import java.members.EnumConstant; +import java.members.Member; +import java.modifiers.AnnotableAndModifiable; + + +//java +import org.emftext.language.java.util.UniqueEList; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.util.EcoreUtil; + + +eclass AnonymousClass { + + /** + * @param context to check protected visibility + * @return a view on all members including super classifiers' members + */ + getAllMembers() { + EList memberList = new UniqueEList(); + memberList.addAll(this.getMembers()); + memberList.addAll(this.getDefaultMembers()); + + NewConstructorCall ncCall = null; + if (this.eContainer() instanceof NewConstructorCall) { + ncCall = (NewConstructorCall) this.eContainer();; + } + if (ncCall == null) { + return memberList; + } + else { + ConcreteClassifier classifier = (ConcreteClassifier) ncCall.getTypeReference().getTarget(); + if (classifier != null) { + EList superMemberList = classifier.getAllMembers(context); + for(Member superMember : superMemberList) { + //exclude private members + if(superMember instanceof AnnotableAndModifiable) { + if (superMember.eIsProxy()) { + superMember = (Member) EcoreUtil.resolve(superMember, this); + } + AnnotableAndModifiable modifiable = (AnnotableAndModifiable) superMember; + if(!modifiable.isHidden(context)) { + memberList.add(superMember); + } + } + else { + memberList.add(superMember); + } + } + } + return memberList; + } + } + + /** + * @return a view on all super classifiers + */ + getAllSuperClassifiers() { + EList superClassifierList = new UniqueEList(); + + ConcreteClassifier superClassifier = getSuperClassifier(); + + if (superClassifier != null) { + superClassifierList.add(superClassifier); + superClassifierList.addAll(superClassifier.getAllSuperClassifiers()); + } + else { + superClassifierList.add(getObjectClass()); + } + return superClassifierList; + } + + /** + * @return the direct super classifier + */ + getSuperClassifier() { + NewConstructorCall ncCall = null; + if (this.eContainer() instanceof NewConstructorCall) { + ncCall = (NewConstructorCall) this.eContainer(); + ConcreteClassifier superClassifier = (ConcreteClassifier) ncCall.getTypeReference().getTarget(); + return superClassifier; + } + else if (this.eContainer() instanceof EnumConstant) { + if (this.eContainer().eContainer() instanceof Enumeration) { + return (Enumeration) this.eContainer().eContainer(); + } + } + return null; + } +} diff --git a/Core/org.emftext.language.java/metamodel/java/classifiers/Class.ejava b/Core/org.emftext.language.java/metamodel/java/classifiers/Class.ejava index 45f9b14c..a93e062e 100644 --- a/Core/org.emftext.language.java/metamodel/java/classifiers/Class.ejava +++ b/Core/org.emftext.language.java/metamodel/java/classifiers/Class.ejava @@ -1,106 +1,106 @@ -epackage java.classifiers; - -//import plain Java types -import org.emftext.language.java.util.UniqueEList; -import org.eclipse.emf.common.util.EList; - -//import types from other EPackages -import java.types.*; - -eclass Class { - - /** - * Recursively collects all super types (extended classes and implemented interfaces) - * of the given class. - * - * @param classifierList the list for the result - */ - getAllSuperClassifiers() { - EList result = - new UniqueEList(); - - //collects all superclasses first - Class superClass = this; - while (superClass != null && !superClass.eIsProxy() && - !superClass.equals(getObjectClass())) { - superClass = superClass.getSuperClass(); - if (superClass != null) { - result.add(superClass); - } - } - - //collect all implemented interfaces - for (TypeReference typeArg : this.getImplements()) { - ConcreteClassifier superInterface = (ConcreteClassifier) typeArg.getTarget(); - if (superInterface != null) { - result.add(superInterface); - if (superInterface instanceof Interface) { - result.addAll(((Interface)superInterface).getAllSuperClassifiers()); - } - } - } - - //collect all implemented interfaces of super classes - superClass = this.getSuperClass(); - if (superClass != null && !superClass.eIsProxy() && - !superClass.equals(getObjectClass())) { - result.addAll(superClass.getAllSuperClassifiers()); - } - - return result; - } - - /** - * @param this - * @return the direct super class - */ - getSuperClass() { - TypeReference superClassReference = this.getExtends(); - if (superClassReference == null) { - superClassReference = this.getDefaultExtends(); - } - if (superClassReference == null) { - return null; - } - Type result = superClassReference.getTarget(); - if (result instanceof Class) { - return (Class) result; - } - return null; - } - - /** - * @param this - * @return primitive type, if the class can be wrapped - */ - unWrapPrimitiveType() { - if (getLibClass("Boolean").equals(this)) { - return #Boolean; - } - if (getLibClass("Byte").equals(this)) { - return #Byte; - } - if (getLibClass("Character").equals(this)) { - return #Char; - } - if (getLibClass("Float").equals(this)) { - return #Float; - } - if (getLibClass("Double").equals(this)) { - return #Double; - } - if (getLibClass("Integer").equals(this)) { - return #Int; - } - if (getLibClass("Long").equals(this)) { - return #Long; - } - if (getLibClass("Short").equals(this)) { - return #Short; - } - if (getLibClass("Void").equals(this)) { - return #Void; - } - return null; - } -} +epackage java.classifiers; + +//import plain Java types +import org.emftext.language.java.util.UniqueEList; +import org.eclipse.emf.common.util.EList; + +//import types from other EPackages +import java.types.*; + +eclass Class { + + /** + * Recursively collects all super types (extended classes and implemented interfaces) + * of the given class. + * + * @param classifierList the list for the result + */ + getAllSuperClassifiers() { + EList result = + new UniqueEList(); + + //collects all superclasses first + Class superClass = this; + while (superClass != null && !superClass.eIsProxy() && + !superClass.equals(getObjectClass())) { + superClass = superClass.getSuperClass(); + if (superClass != null) { + result.add(superClass); + } + } + + //collect all implemented interfaces + for (TypeReference typeArg : this.getImplements()) { + ConcreteClassifier superInterface = (ConcreteClassifier) typeArg.getTarget(); + if (superInterface != null) { + result.add(superInterface); + if (superInterface instanceof Interface) { + result.addAll(((Interface)superInterface).getAllSuperClassifiers()); + } + } + } + + //collect all implemented interfaces of super classes + superClass = this.getSuperClass(); + if (superClass != null && !superClass.eIsProxy() && + !superClass.equals(getObjectClass())) { + result.addAll(superClass.getAllSuperClassifiers()); + } + + return result; + } + + /** + * @param this + * @return the direct super class + */ + getSuperClass() { + TypeReference superClassReference = this.getExtends(); + if (superClassReference == null) { + superClassReference = this.getDefaultExtends(); + } + if (superClassReference == null) { + return null; + } + Type result = superClassReference.getTarget(); + if (result instanceof Class) { + return (Class) result; + } + return null; + } + + /** + * @param this + * @return primitive type, if the class can be wrapped + */ + unWrapPrimitiveType() { + if (getLibClass("Boolean").equals(this)) { + return #Boolean; + } + if (getLibClass("Byte").equals(this)) { + return #Byte; + } + if (getLibClass("Character").equals(this)) { + return #Char; + } + if (getLibClass("Float").equals(this)) { + return #Float; + } + if (getLibClass("Double").equals(this)) { + return #Double; + } + if (getLibClass("Integer").equals(this)) { + return #Int; + } + if (getLibClass("Long").equals(this)) { + return #Long; + } + if (getLibClass("Short").equals(this)) { + return #Short; + } + if (getLibClass("Void").equals(this)) { + return #Void; + } + return null; + } +} diff --git a/Core/org.emftext.language.java/metamodel/java/classifiers/Classifier.ejava b/Core/org.emftext.language.java/metamodel/java/classifiers/Classifier.ejava index 4078f4a6..7b59d2c5 100644 --- a/Core/org.emftext.language.java/metamodel/java/classifiers/Classifier.ejava +++ b/Core/org.emftext.language.java/metamodel/java/classifiers/Classifier.ejava @@ -1,28 +1,28 @@ -epackage java.classifiers; - -import java.containers.*; -import java.imports.*; - -eclass Classifier { - - getAllSuperClassifiers() { - //method has to be specified in subclasses - throw new UnsupportedOperationException(); - } - - /** - * Adds an import of the given class to the compilation unit that contains this classifier. - */ - addImport() { - CompilationUnit compilationUnit = getParentByType(CompilationUnit.class); - compilationUnit.addImport(nameOfClassToImport); - } - - /** - * Adds an import of the given package to this compilation unit that contains this classifier. - */ - addPackageImport() { - CompilationUnit compilationUnit = getParentByType(CompilationUnit.class); - addPackageImport(packageName); - } -} +epackage java.classifiers; + +import java.containers.*; +import java.imports.*; + +eclass Classifier { + + getAllSuperClassifiers() { + //method has to be specified in subclasses + throw new UnsupportedOperationException(); + } + + /** + * Adds an import of the given class to the compilation unit that contains this classifier. + */ + addImport() { + CompilationUnit compilationUnit = getParentByType(CompilationUnit.class); + compilationUnit.addImport(nameOfClassToImport); + } + + /** + * Adds an import of the given package to this compilation unit that contains this classifier. + */ + addPackageImport() { + CompilationUnit compilationUnit = getParentByType(CompilationUnit.class); + addPackageImport(packageName); + } +} diff --git a/Core/org.emftext.language.java/metamodel/java/classifiers/ConcreteClassifier.ejava b/Core/org.emftext.language.java/metamodel/java/classifiers/ConcreteClassifier.ejava index 35675f84..a2b04e1c 100644 --- a/Core/org.emftext.language.java/metamodel/java/classifiers/ConcreteClassifier.ejava +++ b/Core/org.emftext.language.java/metamodel/java/classifiers/ConcreteClassifier.ejava @@ -1,162 +1,162 @@ -epackage java.classifiers; - -//ecore -import java.containers.*; -import java.members.*; -import java.types.*; -import java.modifiers.AnnotableAndModifiable; - -//java -import java.util.List; -import org.eclipse.emf.ecore.*; -import org.eclipse.emf.ecore.util.*; -import org.eclipse.emf.common.util.EList; -import org.emftext.language.java.JavaUniquePathConstructor; -import org.emftext.language.java.util.UniqueEList; - -eclass ConcreteClassifier { - - getAllInnerClassifiers() { - EList innerClassifierList = new UniqueEList(); - - innerClassifierList.addAll(getInnerClassifiers()); - - for (ConcreteClassifier superClassifier : getAllSuperClassifiers()) { - EList superInnerList = superClassifier - .getInnerClassifiers(); - - for (ConcreteClassifier superInner : superInnerList) { - if (superInner.eIsProxy()) { - superInner = (ConcreteClassifier) EcoreUtil.resolve( - superInner, this); - } - if (!superInner.isHidden(this)) { - innerClassifierList.add(superInner); - } - } - } - return innerClassifierList; - } - - getInnerClassifiers() { - if (this.eIsProxy()) { - String uriString = ((InternalEObject)this).eProxyURI().trimFragment().toString(); - String fullName = uriString.substring(JavaUniquePathConstructor.JAVA_CLASSIFIER_PATHMAP.length(), - uriString.length() - ".java".length()) + "$"; - return getConcreteClassifierProxies(fullName, "*"); - } - else { - String suffix = ""; - ConcreteClassifier containingClass = this; - while (containingClass.eContainer() instanceof ConcreteClassifier) { - containingClass = (ConcreteClassifier) containingClass.eContainer(); - suffix = containingClass.getName() + JavaUniquePathConstructor.CLASSIFIER_SEPARATOR + suffix; - } - if (containingClass.eContainer() instanceof CompilationUnit) { - CompilationUnit compilationUnit = (CompilationUnit) containingClass.eContainer(); - String fullName = compilationUnit.getNamespacesAsString() + suffix + - getName() + JavaUniquePathConstructor.CLASSIFIER_SEPARATOR; - return getConcreteClassifierProxies(fullName, "*"); - } - } - - //for classes declared locally inside methods that are not registered in the class path - EList result = new UniqueEList(); - //can not call ClassifierUtil.getAllMembers, because it will try to call this method! - for(Member member : getMembers()) { - if(member instanceof ConcreteClassifier) { - result.add((ConcreteClassifier) member); - } - } - for(ConcreteClassifier superClassifier : getAllSuperClassifiers()) { - for(Member member : superClassifier.getMembers()) { - if(member instanceof ConcreteClassifier) { - result.add((ConcreteClassifier) member); - } - } - } - - return result; - } - - getSuperTypeReferences() { - EList typeReferenceList = new UniqueEList(); - if(this == null) { - return typeReferenceList; - } - - if (this instanceof Class) { - Class javaClass = (Class) this; - if (javaClass.getExtends() != null) { - ClassifierReference classifierReference = javaClass.getExtends().getPureClassifierReference(); - typeReferenceList.add(classifierReference); - ConcreteClassifier target = (ConcreteClassifier) classifierReference.getTarget(); - if (!target.equals(getObjectClass())) { - typeReferenceList.addAll(target.getSuperTypeReferences()); - } - } - for(TypeReference interfaceReference : javaClass.getImplements()) { - ClassifierReference classifierReference = interfaceReference.getPureClassifierReference(); - typeReferenceList.add(classifierReference); - typeReferenceList.addAll(((ConcreteClassifier) classifierReference.getTarget()).getSuperTypeReferences()); - } - } else if (this instanceof Interface) { - Interface javaInterface = (Interface) this; - for(TypeReference interfaceReference : javaInterface.getExtends()) { - ClassifierReference classifierReference = interfaceReference.getPureClassifierReference(); - typeReferenceList.add(classifierReference); - typeReferenceList.addAll(((ConcreteClassifier) classifierReference.getTarget()).getSuperTypeReferences()); - } - } - return typeReferenceList; - } - - /** - * Returns all members of the given classifier including inner classes and - * all members of super types (extended classes and implemented interfaces). - * - * @param context to check protected visibility - * @return member list - */ - getAllMembers() { - EList memberList = new UniqueEList(); - - ConcreteClassifier concreteClassifier = (ConcreteClassifier) this; - memberList.addAll(concreteClassifier.getMembers()); - memberList.addAll(concreteClassifier.getDefaultMembers()); - //because inner classes are found in separate class files - memberList.addAll(concreteClassifier.getAllInnerClassifiers()); - - for (ConcreteClassifier superClassifier : getAllSuperClassifiers()) { - for(Member member : superClassifier.getMembers()) { - if(member instanceof AnnotableAndModifiable) { - AnnotableAndModifiable modifiable = (AnnotableAndModifiable) member; - - if(!modifiable.isHidden(context)) { - memberList.add(member); - } - } - else { - memberList.add(member); - } - } - memberList.addAll(superClassifier.getDefaultMembers()); - } - return memberList; - } - - /** - * Returns the qualified name of this concrete classifier. - */ - getQualifiedName() { - - StringBuilder qualifiedName = new StringBuilder(); - List packageParts = getContainingPackageName(); - for (String packagePart : packageParts) { - qualifiedName.append(packagePart); - qualifiedName.append("."); - } - qualifiedName.append(getName()); - return qualifiedName.toString(); - } -} +epackage java.classifiers; + +//ecore +import java.containers.*; +import java.members.*; +import java.types.*; +import java.modifiers.AnnotableAndModifiable; + +//java +import java.util.List; +import org.eclipse.emf.ecore.*; +import org.eclipse.emf.ecore.util.*; +import org.eclipse.emf.common.util.EList; +import org.emftext.language.java.JavaUniquePathConstructor; +import org.emftext.language.java.util.UniqueEList; + +eclass ConcreteClassifier { + + getAllInnerClassifiers() { + EList innerClassifierList = new UniqueEList(); + + innerClassifierList.addAll(getInnerClassifiers()); + + for (ConcreteClassifier superClassifier : getAllSuperClassifiers()) { + EList superInnerList = superClassifier + .getInnerClassifiers(); + + for (ConcreteClassifier superInner : superInnerList) { + if (superInner.eIsProxy()) { + superInner = (ConcreteClassifier) EcoreUtil.resolve( + superInner, this); + } + if (!superInner.isHidden(this)) { + innerClassifierList.add(superInner); + } + } + } + return innerClassifierList; + } + + getInnerClassifiers() { + if (this.eIsProxy()) { + String uriString = ((InternalEObject)this).eProxyURI().trimFragment().toString(); + String fullName = uriString.substring(JavaUniquePathConstructor.JAVA_CLASSIFIER_PATHMAP.length(), + uriString.length() - ".java".length()) + "$"; + return getConcreteClassifierProxies(fullName, "*"); + } + else { + String suffix = ""; + ConcreteClassifier containingClass = this; + while (containingClass.eContainer() instanceof ConcreteClassifier) { + containingClass = (ConcreteClassifier) containingClass.eContainer(); + suffix = containingClass.getName() + JavaUniquePathConstructor.CLASSIFIER_SEPARATOR + suffix; + } + if (containingClass.eContainer() instanceof CompilationUnit) { + CompilationUnit compilationUnit = (CompilationUnit) containingClass.eContainer(); + String fullName = compilationUnit.getNamespacesAsString() + suffix + + getName() + JavaUniquePathConstructor.CLASSIFIER_SEPARATOR; + return getConcreteClassifierProxies(fullName, "*"); + } + } + + //for classes declared locally inside methods that are not registered in the class path + EList result = new UniqueEList(); + //can not call ClassifierUtil.getAllMembers, because it will try to call this method! + for(Member member : getMembers()) { + if(member instanceof ConcreteClassifier) { + result.add((ConcreteClassifier) member); + } + } + for(ConcreteClassifier superClassifier : getAllSuperClassifiers()) { + for(Member member : superClassifier.getMembers()) { + if(member instanceof ConcreteClassifier) { + result.add((ConcreteClassifier) member); + } + } + } + + return result; + } + + getSuperTypeReferences() { + EList typeReferenceList = new UniqueEList(); + if(this == null) { + return typeReferenceList; + } + + if (this instanceof Class) { + Class javaClass = (Class) this; + if (javaClass.getExtends() != null) { + ClassifierReference classifierReference = javaClass.getExtends().getPureClassifierReference(); + typeReferenceList.add(classifierReference); + ConcreteClassifier target = (ConcreteClassifier) classifierReference.getTarget(); + if (!target.equals(getObjectClass())) { + typeReferenceList.addAll(target.getSuperTypeReferences()); + } + } + for(TypeReference interfaceReference : javaClass.getImplements()) { + ClassifierReference classifierReference = interfaceReference.getPureClassifierReference(); + typeReferenceList.add(classifierReference); + typeReferenceList.addAll(((ConcreteClassifier) classifierReference.getTarget()).getSuperTypeReferences()); + } + } else if (this instanceof Interface) { + Interface javaInterface = (Interface) this; + for(TypeReference interfaceReference : javaInterface.getExtends()) { + ClassifierReference classifierReference = interfaceReference.getPureClassifierReference(); + typeReferenceList.add(classifierReference); + typeReferenceList.addAll(((ConcreteClassifier) classifierReference.getTarget()).getSuperTypeReferences()); + } + } + return typeReferenceList; + } + + /** + * Returns all members of the given classifier including inner classes and + * all members of super types (extended classes and implemented interfaces). + * + * @param context to check protected visibility + * @return member list + */ + getAllMembers() { + EList memberList = new UniqueEList(); + + ConcreteClassifier concreteClassifier = (ConcreteClassifier) this; + memberList.addAll(concreteClassifier.getMembers()); + memberList.addAll(concreteClassifier.getDefaultMembers()); + //because inner classes are found in separate class files + memberList.addAll(concreteClassifier.getAllInnerClassifiers()); + + for (ConcreteClassifier superClassifier : getAllSuperClassifiers()) { + for(Member member : superClassifier.getMembers()) { + if(member instanceof AnnotableAndModifiable) { + AnnotableAndModifiable modifiable = (AnnotableAndModifiable) member; + + if(!modifiable.isHidden(context)) { + memberList.add(member); + } + } + else { + memberList.add(member); + } + } + memberList.addAll(superClassifier.getDefaultMembers()); + } + return memberList; + } + + /** + * Returns the qualified name of this concrete classifier. + */ + getQualifiedName() { + + StringBuilder qualifiedName = new StringBuilder(); + List packageParts = getContainingPackageName(); + for (String packagePart : packageParts) { + qualifiedName.append(packagePart); + qualifiedName.append("."); + } + qualifiedName.append(getName()); + return qualifiedName.toString(); + } +} diff --git a/Core/org.emftext.language.java/metamodel/java/classifiers/Enumeration.ejava b/Core/org.emftext.language.java/metamodel/java/classifiers/Enumeration.ejava index 2b34c64a..aac6cd19 100644 --- a/Core/org.emftext.language.java/metamodel/java/classifiers/Enumeration.ejava +++ b/Core/org.emftext.language.java/metamodel/java/classifiers/Enumeration.ejava @@ -1,47 +1,47 @@ -epackage java.classifiers; - -//ecore -import java.types.TypeReference; -import java.members.EnumConstant; - -//java -import org.emftext.language.java.util.UniqueEList; -import org.eclipse.emf.common.util.EList; - -eclass Enumeration { - - /** - * @return all interfaces extended by this enumeration. - */ - getAllSuperClassifiers() { - EList result = new UniqueEList(); - - //enumerations inherit from java.lang.Enum - Class enumClass = getLibClass("Enum"); - result.add(enumClass); - result.addAll(enumClass.getAllSuperClassifiers()); - - //collect all implemented interfaces - for (TypeReference typeArg : this.getImplements()) { - ConcreteClassifier superInterface = (ConcreteClassifier) typeArg.getTarget(); - if (superInterface != null) { - result.add(superInterface); - if (superInterface instanceof Interface) { - result.addAll(((Interface)superInterface).getAllSuperClassifiers()); - } - } - } - - return result; - } - - getContainedConstant() { - for(EnumConstant constant : getConstants()) { - if (name.equals(constant.getName())) { - return constant; - } - } - return null; - } - +epackage java.classifiers; + +//ecore +import java.types.TypeReference; +import java.members.EnumConstant; + +//java +import org.emftext.language.java.util.UniqueEList; +import org.eclipse.emf.common.util.EList; + +eclass Enumeration { + + /** + * @return all interfaces extended by this enumeration. + */ + getAllSuperClassifiers() { + EList result = new UniqueEList(); + + //enumerations inherit from java.lang.Enum + Class enumClass = getLibClass("Enum"); + result.add(enumClass); + result.addAll(enumClass.getAllSuperClassifiers()); + + //collect all implemented interfaces + for (TypeReference typeArg : this.getImplements()) { + ConcreteClassifier superInterface = (ConcreteClassifier) typeArg.getTarget(); + if (superInterface != null) { + result.add(superInterface); + if (superInterface instanceof Interface) { + result.addAll(((Interface)superInterface).getAllSuperClassifiers()); + } + } + } + + return result; + } + + getContainedConstant() { + for(EnumConstant constant : getConstants()) { + if (name.equals(constant.getName())) { + return constant; + } + } + return null; + } + } \ No newline at end of file diff --git a/Core/org.emftext.language.java/metamodel/java/classifiers/Interface.ejava b/Core/org.emftext.language.java/metamodel/java/classifiers/Interface.ejava index e2ed14ab..2b2d947b 100644 --- a/Core/org.emftext.language.java/metamodel/java/classifiers/Interface.ejava +++ b/Core/org.emftext.language.java/metamodel/java/classifiers/Interface.ejava @@ -1,45 +1,45 @@ -epackage java.classifiers; - -//ecore -import java.types.TypeReference; - -//java -import org.emftext.language.java.util.UniqueEList; -import org.eclipse.emf.common.util.ECollections; -import org.eclipse.emf.common.util.EList; - -eclass Interface { - - /** - * @return all interfaces extended by this interface. The type is - * ConcreteClassifier, because java.lang.Object is also extended although - * it is a Class. - */ - getAllSuperClassifiers() { - EList result = new UniqueEList(); - - for (TypeReference typeArg : this.getExtends()) { - //use ConcreteClassifier instead of Interface because java.lang.Object can also act as implemented interface - ConcreteClassifier superInterface = (ConcreteClassifier) typeArg.getTarget(); - if (superInterface != null) { - result.add(superInterface); - if (superInterface instanceof Interface) { - result.addAll(((Interface)superInterface).getAllSuperClassifiers()); - } - } - } - - for (TypeReference typeArg : this.getDefaultExtends()) { - //use ConcreteClassifier instead of Interface because java.lang.Object can also act as implemented interface - ConcreteClassifier superInterface = (ConcreteClassifier) typeArg.getTarget(); - if (superInterface != null) { - result.add(superInterface); - if (superInterface instanceof Interface) { - result.addAll(((Interface)superInterface).getAllSuperClassifiers()); - } - } - } - return result; - } - +epackage java.classifiers; + +//ecore +import java.types.TypeReference; + +//java +import org.emftext.language.java.util.UniqueEList; +import org.eclipse.emf.common.util.ECollections; +import org.eclipse.emf.common.util.EList; + +eclass Interface { + + /** + * @return all interfaces extended by this interface. The type is + * ConcreteClassifier, because java.lang.Object is also extended although + * it is a Class. + */ + getAllSuperClassifiers() { + EList result = new UniqueEList(); + + for (TypeReference typeArg : this.getExtends()) { + //use ConcreteClassifier instead of Interface because java.lang.Object can also act as implemented interface + ConcreteClassifier superInterface = (ConcreteClassifier) typeArg.getTarget(); + if (superInterface != null) { + result.add(superInterface); + if (superInterface instanceof Interface) { + result.addAll(((Interface)superInterface).getAllSuperClassifiers()); + } + } + } + + for (TypeReference typeArg : this.getDefaultExtends()) { + //use ConcreteClassifier instead of Interface because java.lang.Object can also act as implemented interface + ConcreteClassifier superInterface = (ConcreteClassifier) typeArg.getTarget(); + if (superInterface != null) { + result.add(superInterface); + if (superInterface instanceof Interface) { + result.addAll(((Interface)superInterface).getAllSuperClassifiers()); + } + } + } + return result; + } + } \ No newline at end of file diff --git a/Core/org.emftext.language.java/metamodel/java/commons/Commentable.ejava b/Core/org.emftext.language.java/metamodel/java/commons/Commentable.ejava index bc9cbbf8..e02b1fec 100644 --- a/Core/org.emftext.language.java/metamodel/java/commons/Commentable.ejava +++ b/Core/org.emftext.language.java/metamodel/java/commons/Commentable.ejava @@ -1,419 +1,419 @@ -epackage java.commons; - -//Java -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.util.EcoreUtil; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.common.util.ECollections; -import org.emftext.language.java.util.UniqueEList; -import org.eclipse.emf.common.util.BasicEList; -import org.emftext.language.java.JavaClasspath; - -import java.util.Arrays; -import java.util.Iterator; - -//ecore -import java.classifiers.AnonymousClass; -import java.classifiers.Class; -import java.classifiers.Classifier; -import java.classifiers.ConcreteClassifier; -import java.classifiers.Interface; -import java.containers.CompilationUnit; -import java.annotations.AnnotationInstance; -import java.modifiers.AnnotableAndModifiable; -import java.modifiers.AnnotationInstanceOrModifier; -import java.statements.Statement; -import java.statements.StatementListContainer; - -import layout.LayoutInformation; - -eclass Commentable { - - /** - * Adds the given statement before the statement that contains this element. - */ - /* void */ addBeforeContainingStatement(/* Statement statementToAdd */) { - EObject container = this.eContainer(); - EObject statement = this; - while (container != null) { - if (container instanceof StatementListContainer) { - break; - } - container = container.eContainer(); - statement = statement.eContainer(); - } - if (container == null) { - throw new IllegalArgumentException("Element " + this + " is not contained in a StatementListContainer."); - } - StatementListContainer statementListContainer = (StatementListContainer) container; - EList statements = statementListContainer.getStatements(); - int index = statements.indexOf(statement); - - statements.add(index, statementToAdd); - } - - /** - * Adds the given statement after the statement that contains this element. - */ - /* void */ addAfterContainingStatement(/* Statement statementToAdd */) { - EObject container = this.eContainer(); - EObject statement = this; - while (container != null) { - if (container instanceof StatementListContainer) { - break; - } - container = container.eContainer(); - statement = statement.eContainer(); - } - if (container == null) { - throw new IllegalArgumentException("Element " + this + " is not contained in a StatementListContainer."); - } - StatementListContainer statementListContainer = (StatementListContainer) container; - EList statements = statementListContainer.getStatements(); - int index = statements.indexOf(statement); - - if (index == statements.size() - 1) { - // statement is the last one - statements.add(statementToAdd); - } else { - statements.add(index + 1, statementToAdd); - } - } - - /** - * Walks up the containment hierarchy and returns the first parent with the - * given type. If no such parent is found, null is returned. - */ - getParentByEType() { - EObject container = this.eContainer(); - while (container != null) { - if (type.isInstance(container)) { - return container; - } - container = container.eContainer(); - } - return null; - } - - /** - * Walks up the containment hierarchy and returns the first parent with the - * given type. If no such parent is found, null is returned. - */ - getParentByType() { - EObject container = this.eContainer(); - while (container != null) { - if (type.isInstance(container)) { - return type.cast(container); - } - container = container.eContainer(); - } - return null; - } - - /** - * Searches for the first child with the given type. If no such child is found, null is returned. - */ - getFirstChildByEType() { - Iterator it = this.eAllContents(); - while (it.hasNext()) { - EObject next = it.next(); - if (type.isInstance(next)) { - return next; - } - } - return null; - } - - /** - * Searches for the first child with the given type. If no such child is found, null is returned. - */ - getFirstChildByType() { - Iterator it = this.eAllContents(); - while (it.hasNext()) { - EObject next = it.next(); - if (type.isInstance(next)) { - return type.cast(next); - } - } - return null; - } - - /** - * Returns all children of the given type. - */ - getChildrenByEType() { - EList children = new BasicEList(); - Iterator it = this.eAllContents(); - while (it.hasNext()) { - EObject next = it.next(); - if (type.isInstance(next)) { - children.add(next); - } - } - return children; - } - - /** - * Returns all children of the given type. - */ - getChildrenByType() { - EList children = new BasicEList(); - Iterator it = this.eAllContents(); - while (it.hasNext()) { - EObject next = it.next(); - if (type.isInstance(next)) { - children.add(type.cast(next)); - } - } - return children; - } - - /** - * Finds the org.emftext.language.java.classifiers.ConcreteClassifier - * representing the class with the given classified name. - * - * @param name classified name of the ConcreteClassifier - */ - getConcreteClassifier() { - return (ConcreteClassifier) EcoreUtil.resolve( - JavaClasspath.get(this).getClassifier(name), this); - } - - /** - * Finds all org.emftext.language.java.classifiers.ConcreteClassifier - * representing the classes in the given package or a single class from that package. - * - * @param packageName name of the package - * @param classifierQuery * for all classifiers or name of a single classifier - */ - getConcreteClassifiers() { - EList result = new UniqueEList(); - for(EObject classifier : JavaClasspath.get(this).getClassifiers(packageName, classifierQuery)) { - result.add((ConcreteClassifier) EcoreUtil.resolve(classifier, this)); - } - return result; - } - - getConcreteClassifierProxy() { - return (ConcreteClassifier) JavaClasspath.get(this).getClassifier(name); - } - - getConcreteClassifierProxies() { - EList result = new UniqueEList(); - for(EObject classifier : JavaClasspath.get(this).getClassifiers(packageName, classifierQuery)) { - result.add((ConcreteClassifier)classifier); - } - return result; - } - - /** - * Finds the org.emftext.language.java.classifiers.Class - * representing the class with the given name located in java.lang. - * - * @param name name of the Class - * @return the Class - */ - getLibClass() { - Class classClass = (Class) getConcreteClassifierProxy( - "java.lang." + name); - EObject resolved = (ConcreteClassifier) EcoreUtil.resolve(classClass, this); - if (resolved instanceof Class) { - return (Class) resolved; - } - return null; - } - - /** - * Finds the org.emftext.language.java.classifiers.Interface - * representing the interface with the given name located in java.lang. - * - * @param name name of the Interface - * @return the Class - */ - getLibInterface() { - ConcreteClassifier interfaceClass = getConcreteClassifierProxy( - "java.lang." + name); - EObject resolved = EcoreUtil.resolve(interfaceClass, this); - if (resolved instanceof Interface) { - return (Interface) resolved; - } - return null; - } - - /** - * Finds the org.emftext.language.java.classifiers.Class - * representing java.lang.Class. - * - * @return the Class - */ - getClassClass() { - return getLibClass("Class"); - } - - /** - * Finds the org.emftext.language.java.classifiers.Class - * representing java.lang.Object. - * - * @return the Class - */ - getObjectClass() { - return getLibClass("Object"); - } - - /** - * Finds the org.emftext.language.java.classifiers.Class - * representing java.lang.String. - * - * @return the Class - */ - getStringClass() { - return getLibClass("String"); - } - - /** - * Finds the org.emftext.language.java.classifiers.Interface - * representing java.lang.annotation.Annotation. - * - * @return the Class - */ - getAnnotationInterface() { - Interface annotationClass = (Interface) EcoreUtil.resolve( - getConcreteClassifierProxy("java.lang.annotation.Annotation"), this); - EObject resolved = EcoreUtil.resolve(annotationClass, this); - if (resolved instanceof Interface) { - return (Interface) resolved; - } - return null; - } - - //===== Container look up ===== - - /** - * Finds the containing classifier for the given element. - * - * @param value - * @return containing classifier - */ - getContainingConcreteClassifier() { - EObject value = this; - while (!(value instanceof ConcreteClassifier) && value != null) { - value = value.eContainer(); - } - return (ConcreteClassifier) value; - } - - /** - * Finds the classifier that is the parent of this element. If - * this element is an inner classifier the parent classifier does - * not necessarily contain this element, since it can reside in - * a different compilation unit when stored in byte code. - * - * @param value - * @return containing classifier - */ - getParentConcreteClassifier() { - ConcreteClassifier classifier = getContainingConcreteClassifier(); - if(classifier == null) { - CompilationUnit cu = getContainingCompilationUnit(); - //maybe the outer classifier is in an extra cu - if (cu != null && cu.getName() != null && cu.getName().contains("$")) { - classifier = (ConcreteClassifier) EcoreUtil.resolve( - getConcreteClassifierProxy(cu.getNamespacesAsString()), this); - if(classifier.eIsProxy()) { - classifier = null; - } - } - } - return classifier; - } - - /** - * Finds the containing anonymous class for the given element. - * - * @param value - * @return containing anonymous class - */ - getContainingAnonymousClass() { - EObject value = this; - while (!(value instanceof AnonymousClass) - && !(value instanceof ConcreteClassifier) //do not jump over other classifiers - && value != null) { - value = value.eContainer(); - } - if (!(value instanceof AnonymousClass)) { - return null; - } - return (AnonymousClass) value; - } - - /** - * Finds the containing compilation unit for the given element. - * - * @param value - * @return containing compilation unit - */ - getContainingCompilationUnit() { - EObject value = this; - while (!(value instanceof CompilationUnit) && value != null) { - value = value.eContainer(); - } - return (CompilationUnit) value; - } - - /** - * Finds the containing annotation instance for the given element. - * - * @param value - * @return containing annotation instance - */ - getContainingAnnotationInstance() { - EObject value = this; - while (!(value instanceof AnnotationInstance) && value != null) { - value = value.eContainer(); - } - return (AnnotationInstance) value; - } - - getContainingPackageName() { - CompilationUnit cu = getContainingCompilationUnit(); - if (cu == null) { - return null; - } - - int idx = cu.getNamespaces().size(); - if(cu.getName() != null) { - char[] fullName = cu.getName().toCharArray(); - for(int i = 0; i < fullName.length; i++) { - if (fullName[i] == '$') { - idx--; - } - } - } - return ECollections.unmodifiableEList(new BasicEList( - cu.getNamespaces().subList(0, idx))); - } - - getContainingContainerName() { - CompilationUnit cu = getContainingCompilationUnit(); - if (cu == null) { - return null; - } - return ECollections.unmodifiableEList(cu.getNamespaces()); - } - - getComments() { - EList comments = new BasicEList(); - if (this instanceof AnnotableAndModifiable) { - for (AnnotationInstanceOrModifier aom : ((AnnotableAndModifiable) this).getAnnotationsAndModifiers()) { - comments.addAll(aom.getComments()); - } - } - for (LayoutInformation layoutInformation : getLayoutInformations()) { - String text = layoutInformation.getHiddenTokenText(); - if (text.contains("/*") || text.contains("//")) { - comments.add(layoutInformation.getHiddenTokenText().trim()); - } - } - return ECollections.unmodifiableEList(comments); - } -} +epackage java.commons; + +//Java +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.util.EcoreUtil; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.ECollections; +import org.emftext.language.java.util.UniqueEList; +import org.eclipse.emf.common.util.BasicEList; +import org.emftext.language.java.JavaClasspath; + +import java.util.Arrays; +import java.util.Iterator; + +//ecore +import java.classifiers.AnonymousClass; +import java.classifiers.Class; +import java.classifiers.Classifier; +import java.classifiers.ConcreteClassifier; +import java.classifiers.Interface; +import java.containers.CompilationUnit; +import java.annotations.AnnotationInstance; +import java.modifiers.AnnotableAndModifiable; +import java.modifiers.AnnotationInstanceOrModifier; +import java.statements.Statement; +import java.statements.StatementListContainer; + +import layout.LayoutInformation; + +eclass Commentable { + + /** + * Adds the given statement before the statement that contains this element. + */ + /* void */ addBeforeContainingStatement(/* Statement statementToAdd */) { + EObject container = this.eContainer(); + EObject statement = this; + while (container != null) { + if (container instanceof StatementListContainer) { + break; + } + container = container.eContainer(); + statement = statement.eContainer(); + } + if (container == null) { + throw new IllegalArgumentException("Element " + this + " is not contained in a StatementListContainer."); + } + StatementListContainer statementListContainer = (StatementListContainer) container; + EList statements = statementListContainer.getStatements(); + int index = statements.indexOf(statement); + + statements.add(index, statementToAdd); + } + + /** + * Adds the given statement after the statement that contains this element. + */ + /* void */ addAfterContainingStatement(/* Statement statementToAdd */) { + EObject container = this.eContainer(); + EObject statement = this; + while (container != null) { + if (container instanceof StatementListContainer) { + break; + } + container = container.eContainer(); + statement = statement.eContainer(); + } + if (container == null) { + throw new IllegalArgumentException("Element " + this + " is not contained in a StatementListContainer."); + } + StatementListContainer statementListContainer = (StatementListContainer) container; + EList statements = statementListContainer.getStatements(); + int index = statements.indexOf(statement); + + if (index == statements.size() - 1) { + // statement is the last one + statements.add(statementToAdd); + } else { + statements.add(index + 1, statementToAdd); + } + } + + /** + * Walks up the containment hierarchy and returns the first parent with the + * given type. If no such parent is found, null is returned. + */ + getParentByEType() { + EObject container = this.eContainer(); + while (container != null) { + if (type.isInstance(container)) { + return container; + } + container = container.eContainer(); + } + return null; + } + + /** + * Walks up the containment hierarchy and returns the first parent with the + * given type. If no such parent is found, null is returned. + */ + getParentByType() { + EObject container = this.eContainer(); + while (container != null) { + if (type.isInstance(container)) { + return type.cast(container); + } + container = container.eContainer(); + } + return null; + } + + /** + * Searches for the first child with the given type. If no such child is found, null is returned. + */ + getFirstChildByEType() { + Iterator it = this.eAllContents(); + while (it.hasNext()) { + EObject next = it.next(); + if (type.isInstance(next)) { + return next; + } + } + return null; + } + + /** + * Searches for the first child with the given type. If no such child is found, null is returned. + */ + getFirstChildByType() { + Iterator it = this.eAllContents(); + while (it.hasNext()) { + EObject next = it.next(); + if (type.isInstance(next)) { + return type.cast(next); + } + } + return null; + } + + /** + * Returns all children of the given type. + */ + getChildrenByEType() { + EList children = new BasicEList(); + Iterator it = this.eAllContents(); + while (it.hasNext()) { + EObject next = it.next(); + if (type.isInstance(next)) { + children.add(next); + } + } + return children; + } + + /** + * Returns all children of the given type. + */ + getChildrenByType() { + EList children = new BasicEList(); + Iterator it = this.eAllContents(); + while (it.hasNext()) { + EObject next = it.next(); + if (type.isInstance(next)) { + children.add(type.cast(next)); + } + } + return children; + } + + /** + * Finds the org.emftext.language.java.classifiers.ConcreteClassifier + * representing the class with the given classified name. + * + * @param name classified name of the ConcreteClassifier + */ + getConcreteClassifier() { + return (ConcreteClassifier) EcoreUtil.resolve( + JavaClasspath.get(this).getClassifier(name), this); + } + + /** + * Finds all org.emftext.language.java.classifiers.ConcreteClassifier + * representing the classes in the given package or a single class from that package. + * + * @param packageName name of the package + * @param classifierQuery * for all classifiers or name of a single classifier + */ + getConcreteClassifiers() { + EList result = new UniqueEList(); + for(EObject classifier : JavaClasspath.get(this).getClassifiers(packageName, classifierQuery)) { + result.add((ConcreteClassifier) EcoreUtil.resolve(classifier, this)); + } + return result; + } + + getConcreteClassifierProxy() { + return (ConcreteClassifier) JavaClasspath.get(this).getClassifier(name); + } + + getConcreteClassifierProxies() { + EList result = new UniqueEList(); + for(EObject classifier : JavaClasspath.get(this).getClassifiers(packageName, classifierQuery)) { + result.add((ConcreteClassifier)classifier); + } + return result; + } + + /** + * Finds the org.emftext.language.java.classifiers.Class + * representing the class with the given name located in java.lang. + * + * @param name name of the Class + * @return the Class + */ + getLibClass() { + Class classClass = (Class) getConcreteClassifierProxy( + "java.lang." + name); + EObject resolved = (ConcreteClassifier) EcoreUtil.resolve(classClass, this); + if (resolved instanceof Class) { + return (Class) resolved; + } + return null; + } + + /** + * Finds the org.emftext.language.java.classifiers.Interface + * representing the interface with the given name located in java.lang. + * + * @param name name of the Interface + * @return the Class + */ + getLibInterface() { + ConcreteClassifier interfaceClass = getConcreteClassifierProxy( + "java.lang." + name); + EObject resolved = EcoreUtil.resolve(interfaceClass, this); + if (resolved instanceof Interface) { + return (Interface) resolved; + } + return null; + } + + /** + * Finds the org.emftext.language.java.classifiers.Class + * representing java.lang.Class. + * + * @return the Class + */ + getClassClass() { + return getLibClass("Class"); + } + + /** + * Finds the org.emftext.language.java.classifiers.Class + * representing java.lang.Object. + * + * @return the Class + */ + getObjectClass() { + return getLibClass("Object"); + } + + /** + * Finds the org.emftext.language.java.classifiers.Class + * representing java.lang.String. + * + * @return the Class + */ + getStringClass() { + return getLibClass("String"); + } + + /** + * Finds the org.emftext.language.java.classifiers.Interface + * representing java.lang.annotation.Annotation. + * + * @return the Class + */ + getAnnotationInterface() { + Interface annotationClass = (Interface) EcoreUtil.resolve( + getConcreteClassifierProxy("java.lang.annotation.Annotation"), this); + EObject resolved = EcoreUtil.resolve(annotationClass, this); + if (resolved instanceof Interface) { + return (Interface) resolved; + } + return null; + } + + //===== Container look up ===== + + /** + * Finds the containing classifier for the given element. + * + * @param value + * @return containing classifier + */ + getContainingConcreteClassifier() { + EObject value = this; + while (!(value instanceof ConcreteClassifier) && value != null) { + value = value.eContainer(); + } + return (ConcreteClassifier) value; + } + + /** + * Finds the classifier that is the parent of this element. If + * this element is an inner classifier the parent classifier does + * not necessarily contain this element, since it can reside in + * a different compilation unit when stored in byte code. + * + * @param value + * @return containing classifier + */ + getParentConcreteClassifier() { + ConcreteClassifier classifier = getContainingConcreteClassifier(); + if(classifier == null) { + CompilationUnit cu = getContainingCompilationUnit(); + //maybe the outer classifier is in an extra cu + if (cu != null && cu.getName() != null && cu.getName().contains("$")) { + classifier = (ConcreteClassifier) EcoreUtil.resolve( + getConcreteClassifierProxy(cu.getNamespacesAsString()), this); + if(classifier.eIsProxy()) { + classifier = null; + } + } + } + return classifier; + } + + /** + * Finds the containing anonymous class for the given element. + * + * @param value + * @return containing anonymous class + */ + getContainingAnonymousClass() { + EObject value = this; + while (!(value instanceof AnonymousClass) + && !(value instanceof ConcreteClassifier) //do not jump over other classifiers + && value != null) { + value = value.eContainer(); + } + if (!(value instanceof AnonymousClass)) { + return null; + } + return (AnonymousClass) value; + } + + /** + * Finds the containing compilation unit for the given element. + * + * @param value + * @return containing compilation unit + */ + getContainingCompilationUnit() { + EObject value = this; + while (!(value instanceof CompilationUnit) && value != null) { + value = value.eContainer(); + } + return (CompilationUnit) value; + } + + /** + * Finds the containing annotation instance for the given element. + * + * @param value + * @return containing annotation instance + */ + getContainingAnnotationInstance() { + EObject value = this; + while (!(value instanceof AnnotationInstance) && value != null) { + value = value.eContainer(); + } + return (AnnotationInstance) value; + } + + getContainingPackageName() { + CompilationUnit cu = getContainingCompilationUnit(); + if (cu == null) { + return null; + } + + int idx = cu.getNamespaces().size(); + if(cu.getName() != null) { + char[] fullName = cu.getName().toCharArray(); + for(int i = 0; i < fullName.length; i++) { + if (fullName[i] == '$') { + idx--; + } + } + } + return ECollections.unmodifiableEList(new BasicEList( + cu.getNamespaces().subList(0, idx))); + } + + getContainingContainerName() { + CompilationUnit cu = getContainingCompilationUnit(); + if (cu == null) { + return null; + } + return ECollections.unmodifiableEList(cu.getNamespaces()); + } + + getComments() { + EList comments = new BasicEList(); + if (this instanceof AnnotableAndModifiable) { + for (AnnotationInstanceOrModifier aom : ((AnnotableAndModifiable) this).getAnnotationsAndModifiers()) { + comments.addAll(aom.getComments()); + } + } + for (LayoutInformation layoutInformation : getLayoutInformations()) { + String text = layoutInformation.getHiddenTokenText(); + if (text.contains("/*") || text.contains("//")) { + comments.add(layoutInformation.getHiddenTokenText().trim()); + } + } + return ECollections.unmodifiableEList(comments); + } +} diff --git a/Core/org.emftext.language.java/metamodel/java/commons/NamespaceAwareElement.ejava b/Core/org.emftext.language.java/metamodel/java/commons/NamespaceAwareElement.ejava index ae42cf54..50f0d4dc 100644 --- a/Core/org.emftext.language.java/metamodel/java/commons/NamespaceAwareElement.ejava +++ b/Core/org.emftext.language.java/metamodel/java/commons/NamespaceAwareElement.ejava @@ -1,72 +1,72 @@ -epackage java.commons; - -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import org.emftext.language.java.*; -import org.eclipse.emf.ecore.util.*; - -import java.classifiers.ConcreteClassifier; - -eclass NamespaceAwareElement { - - /** - * Converts the namespaces array of the given namespace aware element into - * a String representation using package (.) and class ($) delimiters. The method - * uses the classpath to determine for each element of the namespace if it - * identifies a package or a class. - * - * @param naElement - * @return single string representation of namespace - */ - getNamespacesAsString() { - String containerName = ""; - for(Iterator it = getNamespaces().iterator(); it.hasNext(); ) { - String namespaceFragment = it.next(); - //does it point at a classifier or a package as container? - String assumedPackageName = containerName + namespaceFragment + JavaUniquePathConstructor.PACKAGE_SEPARATOR; - String assumedClassifierName = containerName + namespaceFragment + JavaUniquePathConstructor.CLASSIFIER_SEPARATOR; - - if (it.hasNext()) { - if (JavaClasspath.get(this).existsPackage(assumedClassifierName)) { - containerName = assumedClassifierName; - } - else { - //assume package - containerName = assumedPackageName; - } - } - else { - if (JavaClasspath.get(this).existsPackage(assumedPackageName)) { - //a package is always available as key - containerName = assumedPackageName; - } - else { - //assume classifier that is not key, but value in the map - containerName = assumedClassifierName; - } - } - } - - return containerName; - } - - /** - * Assuming the namespace - * identifies a classifier, that classifier is returned. - * - * @return classifier at namespace - */ - getClassifierAtNamespaces() { - String fullQualifiedName = getNamespacesAsString(); - if (fullQualifiedName == null || fullQualifiedName.endsWith(JavaUniquePathConstructor.PACKAGE_SEPARATOR)) { - return null; - } - //cut the trailing separator - fullQualifiedName = fullQualifiedName.substring(0,fullQualifiedName.length() - 1); - - return (ConcreteClassifier) EcoreUtil.resolve( - getConcreteClassifierProxy(fullQualifiedName), this); - } - +epackage java.commons; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import org.emftext.language.java.*; +import org.eclipse.emf.ecore.util.*; + +import java.classifiers.ConcreteClassifier; + +eclass NamespaceAwareElement { + + /** + * Converts the namespaces array of the given namespace aware element into + * a String representation using package (.) and class ($) delimiters. The method + * uses the classpath to determine for each element of the namespace if it + * identifies a package or a class. + * + * @param naElement + * @return single string representation of namespace + */ + getNamespacesAsString() { + String containerName = ""; + for(Iterator it = getNamespaces().iterator(); it.hasNext(); ) { + String namespaceFragment = it.next(); + //does it point at a classifier or a package as container? + String assumedPackageName = containerName + namespaceFragment + JavaUniquePathConstructor.PACKAGE_SEPARATOR; + String assumedClassifierName = containerName + namespaceFragment + JavaUniquePathConstructor.CLASSIFIER_SEPARATOR; + + if (it.hasNext()) { + if (JavaClasspath.get(this).existsPackage(assumedClassifierName)) { + containerName = assumedClassifierName; + } + else { + //assume package + containerName = assumedPackageName; + } + } + else { + if (JavaClasspath.get(this).existsPackage(assumedPackageName)) { + //a package is always available as key + containerName = assumedPackageName; + } + else { + //assume classifier that is not key, but value in the map + containerName = assumedClassifierName; + } + } + } + + return containerName; + } + + /** + * Assuming the namespace + * identifies a classifier, that classifier is returned. + * + * @return classifier at namespace + */ + getClassifierAtNamespaces() { + String fullQualifiedName = getNamespacesAsString(); + if (fullQualifiedName == null || fullQualifiedName.endsWith(JavaUniquePathConstructor.PACKAGE_SEPARATOR)) { + return null; + } + //cut the trailing separator + fullQualifiedName = fullQualifiedName.substring(0,fullQualifiedName.length() - 1); + + return (ConcreteClassifier) EcoreUtil.resolve( + getConcreteClassifierProxy(fullQualifiedName), this); + } + } \ No newline at end of file diff --git a/Core/org.emftext.language.java/metamodel/java/containers/CompilationUnit.ejava b/Core/org.emftext.language.java/metamodel/java/containers/CompilationUnit.ejava index 24b70116..731fe709 100644 --- a/Core/org.emftext.language.java/metamodel/java/containers/CompilationUnit.ejava +++ b/Core/org.emftext.language.java/metamodel/java/containers/CompilationUnit.ejava @@ -1,123 +1,123 @@ -epackage java.containers; - -import java.classifiers.ConcreteClassifier; -import java.classifiers.Class; -import java.classifiers.Interface; -import java.classifiers.Annotation; -import java.classifiers.Enumeration; -import java.containers.*; -import java.imports.*; - -import org.eclipse.emf.common.util.EList; -import org.emftext.language.java.util.UniqueEList; - -eclass CompilationUnit { - - /** - * @param name name of the contained Classifier - * @return the Classifier - */ - getContainedClassifier() { - if (name == null) { - return null; - } - for(ConcreteClassifier candidate : getClassifiers()) { - if(name.equals(candidate.getName())) { - return candidate; - } - } - return null; - } - - /** - * @return all classes in the same package imports - */ - getClassifiersInSamePackage() { - EList defaultImportList = new UniqueEList(); - - String packageName = getNamespacesAsString(); - - //locally defined in this container - defaultImportList.addAll(getClassifiers()); - - defaultImportList.addAll(getConcreteClassifierProxies( - packageName, "*")); - - return defaultImportList; - } - - /** - * @return the only class contained directly in the compilation unit (if one exists) - */ - getContainedClass() { - if (getClassifiers().size() != 1) { - return null; - } - if (getClassifiers().get(0) instanceof Class) { - return (Class) getClassifiers().get(0); - } - return null; - } - - /** - * @return the only interface contained directly in the compilation unit (if one exists) - */ - getContainedInterface() { - if (getClassifiers().size() != 1) { - return null; - } - if (getClassifiers().get(0) instanceof Interface) { - return (Interface) getClassifiers().get(0); - } - return null; - } - - /** - * @return the only annotation contained directly in the compilation unit (if one exists) - */ - getContainedAnnotation() { - if (getClassifiers().size() != 1) { - return null; - } - if (getClassifiers().get(0) instanceof Annotation) { - return (Annotation) getClassifiers().get(0); - } - return null; - } - - /** - * @return the only enumeration contained directly in the compilation unit (if one exists) - */ - getContainedEnumeration() { - if (getClassifiers().size() != 1) { - return null; - } - if (getClassifiers().get(0) instanceof Enumeration) { - return (Enumeration) getClassifiers().get(0); - } - return null; - } - - - /** - * Adds an import of the given class to this compilation unit. - */ - addImport() { - ClassifierImport import_ = #ClassifierImport; - ConcreteClassifier classToImport = getConcreteClassifier(nameOfClassToImport); - import_.setClassifier(classToImport); - import_.getNamespaces().addAll(classToImport.getContainingCompilationUnit().getNamespaces()); - getImports().add(import_); - } - - /** - * Adds an import of the given package to this compilation unit. - */ - addPackageImport() { - PackageImport nsImport = #PackageImport; - for (String name : packageName.split("\\.")) { - nsImport.getNamespaces().add(name); - } - getImports().add(nsImport); - } -} +epackage java.containers; + +import java.classifiers.ConcreteClassifier; +import java.classifiers.Class; +import java.classifiers.Interface; +import java.classifiers.Annotation; +import java.classifiers.Enumeration; +import java.containers.*; +import java.imports.*; + +import org.eclipse.emf.common.util.EList; +import org.emftext.language.java.util.UniqueEList; + +eclass CompilationUnit { + + /** + * @param name name of the contained Classifier + * @return the Classifier + */ + getContainedClassifier() { + if (name == null) { + return null; + } + for(ConcreteClassifier candidate : getClassifiers()) { + if(name.equals(candidate.getName())) { + return candidate; + } + } + return null; + } + + /** + * @return all classes in the same package imports + */ + getClassifiersInSamePackage() { + EList defaultImportList = new UniqueEList(); + + String packageName = getNamespacesAsString(); + + //locally defined in this container + defaultImportList.addAll(getClassifiers()); + + defaultImportList.addAll(getConcreteClassifierProxies( + packageName, "*")); + + return defaultImportList; + } + + /** + * @return the only class contained directly in the compilation unit (if one exists) + */ + getContainedClass() { + if (getClassifiers().size() != 1) { + return null; + } + if (getClassifiers().get(0) instanceof Class) { + return (Class) getClassifiers().get(0); + } + return null; + } + + /** + * @return the only interface contained directly in the compilation unit (if one exists) + */ + getContainedInterface() { + if (getClassifiers().size() != 1) { + return null; + } + if (getClassifiers().get(0) instanceof Interface) { + return (Interface) getClassifiers().get(0); + } + return null; + } + + /** + * @return the only annotation contained directly in the compilation unit (if one exists) + */ + getContainedAnnotation() { + if (getClassifiers().size() != 1) { + return null; + } + if (getClassifiers().get(0) instanceof Annotation) { + return (Annotation) getClassifiers().get(0); + } + return null; + } + + /** + * @return the only enumeration contained directly in the compilation unit (if one exists) + */ + getContainedEnumeration() { + if (getClassifiers().size() != 1) { + return null; + } + if (getClassifiers().get(0) instanceof Enumeration) { + return (Enumeration) getClassifiers().get(0); + } + return null; + } + + + /** + * Adds an import of the given class to this compilation unit. + */ + addImport() { + ClassifierImport import_ = #ClassifierImport; + ConcreteClassifier classToImport = getConcreteClassifier(nameOfClassToImport); + import_.setClassifier(classToImport); + import_.getNamespaces().addAll(classToImport.getContainingCompilationUnit().getNamespaces()); + getImports().add(import_); + } + + /** + * Adds an import of the given package to this compilation unit. + */ + addPackageImport() { + PackageImport nsImport = #PackageImport; + for (String name : packageName.split("\\.")) { + nsImport.getNamespaces().add(name); + } + getImports().add(nsImport); + } +} diff --git a/Core/org.emftext.language.java/metamodel/java/containers/JavaRoot.ejava b/Core/org.emftext.language.java/metamodel/java/containers/JavaRoot.ejava index 1c2daa05..641ecfff 100644 --- a/Core/org.emftext.language.java/metamodel/java/containers/JavaRoot.ejava +++ b/Core/org.emftext.language.java/metamodel/java/containers/JavaRoot.ejava @@ -1,24 +1,24 @@ -epackage java.containers; - -import java.classifiers.ConcreteClassifier; - -import org.eclipse.emf.common.util.EList; -import org.emftext.language.java.util.UniqueEList; - -eclass JavaRoot { - - /** - * @return all classes in the same package imports - */ - getClassifiersInSamePackage() { - EList defaultImportList = new UniqueEList(); - - String packageName = getNamespacesAsString(); - - defaultImportList.addAll(getConcreteClassifierProxies( - packageName, "*")); - - return defaultImportList; - } - -} +epackage java.containers; + +import java.classifiers.ConcreteClassifier; + +import org.eclipse.emf.common.util.EList; +import org.emftext.language.java.util.UniqueEList; + +eclass JavaRoot { + + /** + * @return all classes in the same package imports + */ + getClassifiersInSamePackage() { + EList defaultImportList = new UniqueEList(); + + String packageName = getNamespacesAsString(); + + defaultImportList.addAll(getConcreteClassifierProxies( + packageName, "*")); + + return defaultImportList; + } + +} diff --git a/Core/org.emftext.language.java/metamodel/java/containers/Package.ejava b/Core/org.emftext.language.java/metamodel/java/containers/Package.ejava index 3dace5e1..0569d4e6 100644 --- a/Core/org.emftext.language.java/metamodel/java/containers/Package.ejava +++ b/Core/org.emftext.language.java/metamodel/java/containers/Package.ejava @@ -1,35 +1,35 @@ -epackage java.containers; - -import java.classifiers.ConcreteClassifier; - -import java.util.Iterator; -import org.eclipse.emf.common.util.EList; -import org.emftext.language.java.util.*; -import org.emftext.language.java.*; - -eclass Package { - - /** - * @return all classes in the same package - */ - getClassifiersInSamePackage() { - EList defaultImportList = new UniqueEList(); - - String packageName = getNamespacesAsString(); - - defaultImportList.addAll(getConcreteClassifierProxies( - packageName + getName(), "*")); - - return defaultImportList; - } - - getNamespacesAsString() { - String packageName = ""; - for(Iterator it = getNamespaces().iterator(); it.hasNext(); ) { - String namespaceFragment = it.next(); - packageName = packageName + namespaceFragment + JavaUniquePathConstructor.PACKAGE_SEPARATOR; - } - return packageName; - } - -} +epackage java.containers; + +import java.classifiers.ConcreteClassifier; + +import java.util.Iterator; +import org.eclipse.emf.common.util.EList; +import org.emftext.language.java.util.*; +import org.emftext.language.java.*; + +eclass Package { + + /** + * @return all classes in the same package + */ + getClassifiersInSamePackage() { + EList defaultImportList = new UniqueEList(); + + String packageName = getNamespacesAsString(); + + defaultImportList.addAll(getConcreteClassifierProxies( + packageName + getName(), "*")); + + return defaultImportList; + } + + getNamespacesAsString() { + String packageName = ""; + for(Iterator it = getNamespaces().iterator(); it.hasNext(); ) { + String namespaceFragment = it.next(); + packageName = packageName + namespaceFragment + JavaUniquePathConstructor.PACKAGE_SEPARATOR; + } + return packageName; + } + +} diff --git a/Core/org.emftext.language.java/metamodel/java/expressions/Expression.ejava b/Core/org.emftext.language.java/metamodel/java/expressions/Expression.ejava index 7e982465..870dd3b7 100644 --- a/Core/org.emftext.language.java/metamodel/java/expressions/Expression.ejava +++ b/Core/org.emftext.language.java/metamodel/java/expressions/Expression.ejava @@ -1,231 +1,231 @@ -epackage java.expressions; - -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.common.util.TreeIterator; -import org.eclipse.emf.ecore.EObject; - -import java.arrays.ArrayInstantiationBySize; -import java.arrays.ArrayTypeable; -import java.classifiers.Class; -import java.literals.Literal; -import java.members.AdditionalField; -import java.members.Field; -import java.members.Method; -import java.references.ElementReference; -import java.references.Reference; -import java.references.ReferenceableElement; -import java.types.Type; -import java.variables.AdditionalLocalVariable; -import java.variables.LocalVariable; -import java.parameters.VariableLengthParameter; - -eclass Expression { - - /** - * Returns the type of the expression considering all concrete - * subtypes of Expression. - * - * @return type of expression - */ - getType() { - return getOneType(false); - } - - getAlternativeType() { - return getOneType(true); - } - - - - getOneType() { - Class stringClass = getStringClass(); - - Type type = null; - - if (this instanceof Reference) { - Reference reference = (Reference) this; - //navigate down references - while(reference.getNext() != null) { - reference = reference.getNext(); - } - type = reference.getReferencedType(); - } - else if (this instanceof Literal) { - type = ((Literal) this).getType(); - } - else if (this instanceof CastExpression) { - type = ((CastExpression)this).getTypeReference().getTarget(); - } - else if (this instanceof AssignmentExpression) { - type = ((AssignmentExpression) this).getChild().getOneType(alternative); - } - else if (this instanceof ConditionalExpression && - ((ConditionalExpression)this).getExpressionIf() != null) { - if (alternative) { - type = ((ConditionalExpression)this).getExpressionElse().getOneType(alternative); - } - else { - type = ((ConditionalExpression)this).getExpressionIf().getOneType(alternative); - } - - } - else if (this instanceof EqualityExpression || - this instanceof RelationExpression || - this instanceof ConditionalOrExpression || - this instanceof ConditionalAndExpression || - this instanceof InstanceOfExpression ) { - type = getLibClass("Boolean"); - } - else if (this instanceof AdditiveExpression || - this instanceof MultiplicativeExpression || - this instanceof InclusiveOrExpression || - this instanceof ExclusiveOrExpression || - this instanceof AndExpression || - this instanceof ShiftExpression ) { - - if (this instanceof AdditiveExpression) { - AdditiveExpression additiveExpression = (AdditiveExpression) this; - for(Expression subExp : additiveExpression.getChildren()) { - if (stringClass.equals(subExp.getOneType(alternative))) { - //special case: string concatenation - return stringClass; - } - } - } - - @SuppressWarnings("unchecked") - Expression subExp = ((EList) - this.eGet(this.eClass().getEStructuralFeature("children"))).get(0); - - return subExp.getOneType(alternative); - } - else if (this instanceof UnaryExpression) { - Expression subExp = ((UnaryExpression)this).getChild(); - - return subExp.getOneType(alternative); - } - else for(TreeIterator i = this.eAllContents(); i.hasNext(); ) { - EObject next = i.next(); - Type nextType = null; - - if (next instanceof PrimaryExpression) { - - if (next instanceof Reference) { - Reference ref = (Reference) next; - //navigate down references - while(ref.getNext() != null) { - ref = ref.getNext(); - } - next = ref; - } - if (next instanceof Literal) { - nextType = ((Literal) next).getType(); - } - else if (next instanceof CastExpression) { - nextType = ((CastExpression)next).getTypeReference().getTarget(); - } - else { - nextType = ((Reference) next).getReferencedType(); - } - i.prune(); - - } - if (nextType != null) { - type = nextType; - //in the special case that this is an expression with - //some string included, everything is converted to string - if (stringClass.equals(type)) { - break; - } - } - } - //type can be null in cases of unresolved/unresolvable proxies - return type; - } - - getArrayDimension() { - long size = 0; - ArrayTypeable arrayType = null; - if (this instanceof NestedExpression && - ((NestedExpression)this).getNext() == null) { - return ((NestedExpression) this).getExpression().getArrayDimension() - - ((NestedExpression)this).getArraySelectors().size(); - } - if (this instanceof ConditionalExpression && - ((ConditionalExpression)this).getExpressionIf() != null) { - return ((ConditionalExpression)this).getExpressionIf().getArrayDimension(); - } - if (this instanceof AssignmentExpression) { - Expression value = ((AssignmentExpression) this).getValue(); - if (value == null) { - return 0; - } - return value.getArrayDimension(); - } - if (this instanceof InstanceOfExpression) { - return 0; - } - if (this instanceof Reference) { - Reference reference = (Reference) this; - while (reference.getNext() != null) { - reference = reference.getNext(); - } - //an array clone? -> dimension defined by cloned array - if (reference instanceof ElementReference && - reference.getPrevious() != null) { - ReferenceableElement target = ((ElementReference)reference).getTarget(); - if (target instanceof Method) { - if("clone".equals(((Method)target).getName())) { - reference = (Reference) reference.eContainer(); - } - } - } - - if (reference instanceof ElementReference) { - ElementReference elementReference = (ElementReference) reference; - if (elementReference.getTarget() instanceof ArrayTypeable) { - arrayType = (ArrayTypeable) elementReference.getTarget(); - } - if (elementReference.getTarget() instanceof AdditionalLocalVariable) { - AdditionalLocalVariable additionalLocalVariable = (AdditionalLocalVariable) elementReference.getTarget(); - arrayType = (LocalVariable) additionalLocalVariable.eContainer(); - size += additionalLocalVariable.getArrayDimensionsAfter().size(); - size -= arrayType.getArrayDimensionsAfter().size(); - } - if (elementReference.getTarget() instanceof AdditionalField) { - AdditionalField additionalField = (AdditionalField) elementReference.getTarget(); - arrayType = (Field) additionalField.eContainer(); - size += additionalField.getArrayDimensionsAfter().size(); - size -= arrayType.getArrayDimensionsAfter().size(); - } - } - else if (this instanceof ArrayTypeable) { - size += ((ArrayTypeable)this).getArrayDimensionsBefore().size() + ((ArrayTypeable)this).getArrayDimensionsAfter().size(); - if (this instanceof VariableLengthParameter) { - size++; - } - } - size -= reference.getArraySelectors().size(); - } - else if (this instanceof ArrayTypeable) { - size += ((ArrayTypeable)this).getArrayDimensionsBefore().size() + ((ArrayTypeable)this).getArrayDimensionsAfter().size(); - if (this instanceof VariableLengthParameter) { - size++; - } - } - - if(this instanceof ArrayInstantiationBySize) { - size += ((ArrayInstantiationBySize)this).getSizes().size(); - } - - if(arrayType != null) { - size += arrayType.getArrayDimension(); - } - - return size; - } - - - - -} +epackage java.expressions; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.TreeIterator; +import org.eclipse.emf.ecore.EObject; + +import java.arrays.ArrayInstantiationBySize; +import java.arrays.ArrayTypeable; +import java.classifiers.Class; +import java.literals.Literal; +import java.members.AdditionalField; +import java.members.Field; +import java.members.Method; +import java.references.ElementReference; +import java.references.Reference; +import java.references.ReferenceableElement; +import java.types.Type; +import java.variables.AdditionalLocalVariable; +import java.variables.LocalVariable; +import java.parameters.VariableLengthParameter; + +eclass Expression { + + /** + * Returns the type of the expression considering all concrete + * subtypes of Expression. + * + * @return type of expression + */ + getType() { + return getOneType(false); + } + + getAlternativeType() { + return getOneType(true); + } + + + + getOneType() { + Class stringClass = getStringClass(); + + Type type = null; + + if (this instanceof Reference) { + Reference reference = (Reference) this; + //navigate down references + while(reference.getNext() != null) { + reference = reference.getNext(); + } + type = reference.getReferencedType(); + } + else if (this instanceof Literal) { + type = ((Literal) this).getType(); + } + else if (this instanceof CastExpression) { + type = ((CastExpression)this).getTypeReference().getTarget(); + } + else if (this instanceof AssignmentExpression) { + type = ((AssignmentExpression) this).getChild().getOneType(alternative); + } + else if (this instanceof ConditionalExpression && + ((ConditionalExpression)this).getExpressionIf() != null) { + if (alternative) { + type = ((ConditionalExpression)this).getExpressionElse().getOneType(alternative); + } + else { + type = ((ConditionalExpression)this).getExpressionIf().getOneType(alternative); + } + + } + else if (this instanceof EqualityExpression || + this instanceof RelationExpression || + this instanceof ConditionalOrExpression || + this instanceof ConditionalAndExpression || + this instanceof InstanceOfExpression ) { + type = getLibClass("Boolean"); + } + else if (this instanceof AdditiveExpression || + this instanceof MultiplicativeExpression || + this instanceof InclusiveOrExpression || + this instanceof ExclusiveOrExpression || + this instanceof AndExpression || + this instanceof ShiftExpression ) { + + if (this instanceof AdditiveExpression) { + AdditiveExpression additiveExpression = (AdditiveExpression) this; + for(Expression subExp : additiveExpression.getChildren()) { + if (stringClass.equals(subExp.getOneType(alternative))) { + //special case: string concatenation + return stringClass; + } + } + } + + @SuppressWarnings("unchecked") + Expression subExp = ((EList) + this.eGet(this.eClass().getEStructuralFeature("children"))).get(0); + + return subExp.getOneType(alternative); + } + else if (this instanceof UnaryExpression) { + Expression subExp = ((UnaryExpression)this).getChild(); + + return subExp.getOneType(alternative); + } + else for(TreeIterator i = this.eAllContents(); i.hasNext(); ) { + EObject next = i.next(); + Type nextType = null; + + if (next instanceof PrimaryExpression) { + + if (next instanceof Reference) { + Reference ref = (Reference) next; + //navigate down references + while(ref.getNext() != null) { + ref = ref.getNext(); + } + next = ref; + } + if (next instanceof Literal) { + nextType = ((Literal) next).getType(); + } + else if (next instanceof CastExpression) { + nextType = ((CastExpression)next).getTypeReference().getTarget(); + } + else { + nextType = ((Reference) next).getReferencedType(); + } + i.prune(); + + } + if (nextType != null) { + type = nextType; + //in the special case that this is an expression with + //some string included, everything is converted to string + if (stringClass.equals(type)) { + break; + } + } + } + //type can be null in cases of unresolved/unresolvable proxies + return type; + } + + getArrayDimension() { + long size = 0; + ArrayTypeable arrayType = null; + if (this instanceof NestedExpression && + ((NestedExpression)this).getNext() == null) { + return ((NestedExpression) this).getExpression().getArrayDimension() + - ((NestedExpression)this).getArraySelectors().size(); + } + if (this instanceof ConditionalExpression && + ((ConditionalExpression)this).getExpressionIf() != null) { + return ((ConditionalExpression)this).getExpressionIf().getArrayDimension(); + } + if (this instanceof AssignmentExpression) { + Expression value = ((AssignmentExpression) this).getValue(); + if (value == null) { + return 0; + } + return value.getArrayDimension(); + } + if (this instanceof InstanceOfExpression) { + return 0; + } + if (this instanceof Reference) { + Reference reference = (Reference) this; + while (reference.getNext() != null) { + reference = reference.getNext(); + } + //an array clone? -> dimension defined by cloned array + if (reference instanceof ElementReference && + reference.getPrevious() != null) { + ReferenceableElement target = ((ElementReference)reference).getTarget(); + if (target instanceof Method) { + if("clone".equals(((Method)target).getName())) { + reference = (Reference) reference.eContainer(); + } + } + } + + if (reference instanceof ElementReference) { + ElementReference elementReference = (ElementReference) reference; + if (elementReference.getTarget() instanceof ArrayTypeable) { + arrayType = (ArrayTypeable) elementReference.getTarget(); + } + if (elementReference.getTarget() instanceof AdditionalLocalVariable) { + AdditionalLocalVariable additionalLocalVariable = (AdditionalLocalVariable) elementReference.getTarget(); + arrayType = (LocalVariable) additionalLocalVariable.eContainer(); + size += additionalLocalVariable.getArrayDimensionsAfter().size(); + size -= arrayType.getArrayDimensionsAfter().size(); + } + if (elementReference.getTarget() instanceof AdditionalField) { + AdditionalField additionalField = (AdditionalField) elementReference.getTarget(); + arrayType = (Field) additionalField.eContainer(); + size += additionalField.getArrayDimensionsAfter().size(); + size -= arrayType.getArrayDimensionsAfter().size(); + } + } + else if (this instanceof ArrayTypeable) { + size += ((ArrayTypeable)this).getArrayDimensionsBefore().size() + ((ArrayTypeable)this).getArrayDimensionsAfter().size(); + if (this instanceof VariableLengthParameter) { + size++; + } + } + size -= reference.getArraySelectors().size(); + } + else if (this instanceof ArrayTypeable) { + size += ((ArrayTypeable)this).getArrayDimensionsBefore().size() + ((ArrayTypeable)this).getArrayDimensionsAfter().size(); + if (this instanceof VariableLengthParameter) { + size++; + } + } + + if(this instanceof ArrayInstantiationBySize) { + size += ((ArrayInstantiationBySize)this).getSizes().size(); + } + + if(arrayType != null) { + size += arrayType.getArrayDimension(); + } + + return size; + } + + + + +} diff --git a/Core/org.emftext.language.java/metamodel/java/imports/Import.ejava b/Core/org.emftext.language.java/metamodel/java/imports/Import.ejava index ac267f89..739ec56e 100644 --- a/Core/org.emftext.language.java/metamodel/java/imports/Import.ejava +++ b/Core/org.emftext.language.java/metamodel/java/imports/Import.ejava @@ -1,71 +1,71 @@ -epackage java.imports; - -import org.emftext.language.java.util.UniqueEList; -import org.eclipse.emf.common.util.ECollections; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.util.EcoreUtil; - -import java.classifiers.ConcreteClassifier; -import java.classifiers.Enumeration; -import java.commons.NamedElement; - -eclass Import { - - /** - * Returns the classifier with the given name - * located in the namespace defined by the import. - * - * @param name the name of the classifier - * @return imported classifier (proxy) - */ - getImportedClassifier() { - String containerName = getNamespacesAsString(); - if (containerName == null) { - return null; - } - - String fullQualifiedName = containerName + name; - return getConcreteClassifierProxy(fullQualifiedName); - } - - - /** - * Returns all imported members assuming the import's namespace - * identifies a classifier. - * - * @param _this - * @return list of imported classifiers (proxies) - */ - getImportedMembers() { - ConcreteClassifier concreteClassifier = getClassifierAtNamespaces(); - - if(concreteClassifier == null || concreteClassifier.eIsProxy()) { - return ECollections.emptyEList(); - } - - EList result = new UniqueEList(); - result.addAll(concreteClassifier.getAllMembers(this)); - if (concreteClassifier instanceof Enumeration) { - result.addAll(((Enumeration)concreteClassifier).getConstants()); - } - - return result; - } - - /** - * Returns a list of imported classifiers assuming the import's namespace - * identifies a package. - * - * @param _this - * @return imported classifier (proxy) - */ - getImportedClassifiers() { - String containerName = getNamespacesAsString(); - if (containerName == null) { - return ECollections.emptyEList(); - } - - return getConcreteClassifierProxies(containerName, "*"); - } - -} +epackage java.imports; + +import org.emftext.language.java.util.UniqueEList; +import org.eclipse.emf.common.util.ECollections; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.util.EcoreUtil; + +import java.classifiers.ConcreteClassifier; +import java.classifiers.Enumeration; +import java.commons.NamedElement; + +eclass Import { + + /** + * Returns the classifier with the given name + * located in the namespace defined by the import. + * + * @param name the name of the classifier + * @return imported classifier (proxy) + */ + getImportedClassifier() { + String containerName = getNamespacesAsString(); + if (containerName == null) { + return null; + } + + String fullQualifiedName = containerName + name; + return getConcreteClassifierProxy(fullQualifiedName); + } + + + /** + * Returns all imported members assuming the import's namespace + * identifies a classifier. + * + * @param _this + * @return list of imported classifiers (proxies) + */ + getImportedMembers() { + ConcreteClassifier concreteClassifier = getClassifierAtNamespaces(); + + if(concreteClassifier == null || concreteClassifier.eIsProxy()) { + return ECollections.emptyEList(); + } + + EList result = new UniqueEList(); + result.addAll(concreteClassifier.getAllMembers(this)); + if (concreteClassifier instanceof Enumeration) { + result.addAll(((Enumeration)concreteClassifier).getConstants()); + } + + return result; + } + + /** + * Returns a list of imported classifiers assuming the import's namespace + * identifies a package. + * + * @param _this + * @return imported classifier (proxy) + */ + getImportedClassifiers() { + String containerName = getNamespacesAsString(); + if (containerName == null) { + return ECollections.emptyEList(); + } + + return getConcreteClassifierProxies(containerName, "*"); + } + +} diff --git a/Core/org.emftext.language.java/metamodel/java/imports/ImportingElement.ejava b/Core/org.emftext.language.java/metamodel/java/imports/ImportingElement.ejava index 319de963..cbef0b0b 100644 --- a/Core/org.emftext.language.java/metamodel/java/imports/ImportingElement.ejava +++ b/Core/org.emftext.language.java/metamodel/java/imports/ImportingElement.ejava @@ -1,23 +1,23 @@ -epackage java.imports; - -//ecore -import java.classifiers.ConcreteClassifier; - -//java -import org.emftext.language.java.util.UniqueEList; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.EObject; -import org.emftext.language.java.JavaClasspath; - - -eclass ImportingElement { - - getDefaultImports() { - EList result = new UniqueEList(); - for(EObject classifier : JavaClasspath.get(this).getDefaultImports()) { - result.add((ConcreteClassifier)classifier); - } - return result; - } - +epackage java.imports; + +//ecore +import java.classifiers.ConcreteClassifier; + +//java +import org.emftext.language.java.util.UniqueEList; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EObject; +import org.emftext.language.java.JavaClasspath; + + +eclass ImportingElement { + + getDefaultImports() { + EList result = new UniqueEList(); + for(EObject classifier : JavaClasspath.get(this).getDefaultImports()) { + result.add((ConcreteClassifier)classifier); + } + return result; + } + } \ No newline at end of file diff --git a/Core/org.emftext.language.java/metamodel/java/literals/Literal.ejava b/Core/org.emftext.language.java/metamodel/java/literals/Literal.ejava index 92fbe717..6df84822 100644 --- a/Core/org.emftext.language.java/metamodel/java/literals/Literal.ejava +++ b/Core/org.emftext.language.java/metamodel/java/literals/Literal.ejava @@ -1,39 +1,39 @@ -epackage java.literals; - -import java.classifiers.Class; -import java.types.Type; - -eclass Literal { - - /** - * @return type of the literal - */ - getOneType() { - //Overrides implementation in Expression - Class javaClass = null; - - if (this instanceof NullLiteral) { - javaClass = getLibClass("Void"); - } - else if (this instanceof BooleanLiteral) { - javaClass = getLibClass("Boolean"); - } - else if (this instanceof DoubleLiteral) { - javaClass = getLibClass("Double"); - } - else if (this instanceof FloatLiteral) { - javaClass = getLibClass("Float"); - } - else if (this instanceof IntegerLiteral) { - javaClass = getLibClass("Integer"); - } - else if (this instanceof LongLiteral) { - javaClass = getLibClass("Long"); - } - else if (this instanceof CharacterLiteral) { - javaClass = getLibClass("Character"); - } - - return javaClass; - } -} +epackage java.literals; + +import java.classifiers.Class; +import java.types.Type; + +eclass Literal { + + /** + * @return type of the literal + */ + getOneType() { + //Overrides implementation in Expression + Class javaClass = null; + + if (this instanceof NullLiteral) { + javaClass = getLibClass("Void"); + } + else if (this instanceof BooleanLiteral) { + javaClass = getLibClass("Boolean"); + } + else if (this instanceof DoubleLiteral) { + javaClass = getLibClass("Double"); + } + else if (this instanceof FloatLiteral) { + javaClass = getLibClass("Float"); + } + else if (this instanceof IntegerLiteral) { + javaClass = getLibClass("Integer"); + } + else if (this instanceof LongLiteral) { + javaClass = getLibClass("Long"); + } + else if (this instanceof CharacterLiteral) { + javaClass = getLibClass("Character"); + } + + return javaClass; + } +} diff --git a/Core/org.emftext.language.java/metamodel/java/members/AdditionalField.ejava b/Core/org.emftext.language.java/metamodel/java/members/AdditionalField.ejava index 157114ed..6e0a5e2c 100644 --- a/Core/org.emftext.language.java/metamodel/java/members/AdditionalField.ejava +++ b/Core/org.emftext.language.java/metamodel/java/members/AdditionalField.ejava @@ -1,12 +1,12 @@ -epackage java.members; - -import java.parameters.VariableLengthParameter; - -eclass AdditionalField { - - getArrayDimension() { - long size = this.getArrayDimensionsBefore().size() + this.getArrayDimensionsAfter().size(); - return size; - } - +epackage java.members; + +import java.parameters.VariableLengthParameter; + +eclass AdditionalField { + + getArrayDimension() { + long size = this.getArrayDimensionsBefore().size() + this.getArrayDimensionsAfter().size(); + return size; + } + } \ No newline at end of file diff --git a/Core/org.emftext.language.java/metamodel/java/members/MemberContainer.ejava b/Core/org.emftext.language.java/metamodel/java/members/MemberContainer.ejava index 524d6969..cafad415 100644 --- a/Core/org.emftext.language.java/metamodel/java/members/MemberContainer.ejava +++ b/Core/org.emftext.language.java/metamodel/java/members/MemberContainer.ejava @@ -1,154 +1,154 @@ -epackage java.members; - -import java.classifiers.ConcreteClassifier; -import java.members.Field; -import java.members.Member; -import java.members.MemberContainer; -import java.members.Method; -import java.types.ClassifierReference; - -import org.eclipse.emf.common.util.BasicEList; -import org.eclipse.emf.common.util.ECollections; -import org.eclipse.emf.common.util.EList; - -/** - * A utility class that provides methods that belong to class - * MemberContainer, but can not go there, because MemberContainer - * is generated. - */ -eclass MemberContainer { - - getMethods() { - EList methodList = new BasicEList(); - - for (Member member : getMembers()) { - if (member instanceof Method) { - methodList.add((Method) member); - } - } - return ECollections.unmodifiableEList(methodList); - } - - getFields() { - EList fieldList = new BasicEList(); - - for (Member member : getMembers()) { - if (member instanceof Field) { - fieldList.add((Field) member); - } - } - return ECollections.unmodifiableEList(fieldList); - } - - getConstructors() { - EList constructorList = new BasicEList(); - - for (Member member : getMembers()) { - if (member instanceof Constructor) { - constructorList.add((Constructor) member); - } - } - return ECollections.unmodifiableEList(constructorList); - } - - getMembersByName() { - EList matchingMembers = new BasicEList(); - - for (Member member : getMembers()) { - if (name.equals(member.getName())) { - matchingMembers.add(member); - } - } - return ECollections.unmodifiableEList(matchingMembers); - } - - removeMethods() { - EList methodsToRemove = new BasicEList(); - - for (Member member : getMembers()) { - if (member instanceof Method) { - if (name.equals(member.getName())) { - methodsToRemove.add((Method) member); - } - } - } - getMembers().removeAll(methodsToRemove); - } - - /** - * @param name - * @return classifier with the given name defined in this member container - */ - getContainedClassifier() { - for(Member member : getMembers()) { - if (member instanceof ConcreteClassifier && name.equals(member.getName())) { - return (ConcreteClassifier) member; - } - } - for(Member member : getDefaultMembers()) { - if (member instanceof ConcreteClassifier && name.equals(member.getName())) { - return (ConcreteClassifier) member; - } - } - return null; - } - - /** - * @param name - * @return field with the given name defined in this member container - */ - getContainedField() { - for(Member member : getMembers()) { - if (member instanceof Field && name.equals(member.getName())) { - return (Field) member; - } - } - for(Member member : getDefaultMembers()) { - if (member instanceof Field && name.equals(member.getName())) { - return (Field) member; - } - } - return null; - } - - /** - * @param name - * @return method with the given name defined in this member container; - * null, if there is no such method - * or if there are multiple methods with the same name - */ - getContainedMethod() { - Method found = null; - for(Member member : getMembers()) { - if (member instanceof Method && name.equals(member.getName())) { - if(found != null) { - return null; - } - else { - found = (Method) member; - } - } - } - for(Member member : getDefaultMembers()) { - if (member instanceof Method && name.equals(member.getName())) { - if(found != null) { - return null; - } - else { - found = (Method) member; - } - } - } - return found; - } - - createField() { - Field field = #Field; - field.setName(name); - ClassifierReference typeRef = #ClassifierReference; - typeRef.setTarget(getConcreteClassifier(qualifiedTypeName)); - field.setTypeReference(typeRef); - getMembers().add(field); - return field; - } -} +epackage java.members; + +import java.classifiers.ConcreteClassifier; +import java.members.Field; +import java.members.Member; +import java.members.MemberContainer; +import java.members.Method; +import java.types.ClassifierReference; + +import org.eclipse.emf.common.util.BasicEList; +import org.eclipse.emf.common.util.ECollections; +import org.eclipse.emf.common.util.EList; + +/** + * A utility class that provides methods that belong to class + * MemberContainer, but can not go there, because MemberContainer + * is generated. + */ +eclass MemberContainer { + + getMethods() { + EList methodList = new BasicEList(); + + for (Member member : getMembers()) { + if (member instanceof Method) { + methodList.add((Method) member); + } + } + return ECollections.unmodifiableEList(methodList); + } + + getFields() { + EList fieldList = new BasicEList(); + + for (Member member : getMembers()) { + if (member instanceof Field) { + fieldList.add((Field) member); + } + } + return ECollections.unmodifiableEList(fieldList); + } + + getConstructors() { + EList constructorList = new BasicEList(); + + for (Member member : getMembers()) { + if (member instanceof Constructor) { + constructorList.add((Constructor) member); + } + } + return ECollections.unmodifiableEList(constructorList); + } + + getMembersByName() { + EList matchingMembers = new BasicEList(); + + for (Member member : getMembers()) { + if (name.equals(member.getName())) { + matchingMembers.add(member); + } + } + return ECollections.unmodifiableEList(matchingMembers); + } + + removeMethods() { + EList methodsToRemove = new BasicEList(); + + for (Member member : getMembers()) { + if (member instanceof Method) { + if (name.equals(member.getName())) { + methodsToRemove.add((Method) member); + } + } + } + getMembers().removeAll(methodsToRemove); + } + + /** + * @param name + * @return classifier with the given name defined in this member container + */ + getContainedClassifier() { + for(Member member : getMembers()) { + if (member instanceof ConcreteClassifier && name.equals(member.getName())) { + return (ConcreteClassifier) member; + } + } + for(Member member : getDefaultMembers()) { + if (member instanceof ConcreteClassifier && name.equals(member.getName())) { + return (ConcreteClassifier) member; + } + } + return null; + } + + /** + * @param name + * @return field with the given name defined in this member container + */ + getContainedField() { + for(Member member : getMembers()) { + if (member instanceof Field && name.equals(member.getName())) { + return (Field) member; + } + } + for(Member member : getDefaultMembers()) { + if (member instanceof Field && name.equals(member.getName())) { + return (Field) member; + } + } + return null; + } + + /** + * @param name + * @return method with the given name defined in this member container; + * null, if there is no such method + * or if there are multiple methods with the same name + */ + getContainedMethod() { + Method found = null; + for(Member member : getMembers()) { + if (member instanceof Method && name.equals(member.getName())) { + if(found != null) { + return null; + } + else { + found = (Method) member; + } + } + } + for(Member member : getDefaultMembers()) { + if (member instanceof Method && name.equals(member.getName())) { + if(found != null) { + return null; + } + else { + found = (Method) member; + } + } + } + return found; + } + + createField() { + Field field = #Field; + field.setName(name); + ClassifierReference typeRef = #ClassifierReference; + typeRef.setTarget(getConcreteClassifier(qualifiedTypeName)); + field.setTypeReference(typeRef); + getMembers().add(field); + return field; + } +} diff --git a/Core/org.emftext.language.java/metamodel/java/members/Method.ejava b/Core/org.emftext.language.java/metamodel/java/members/Method.ejava index 5ae7cd7e..459b44ca 100644 --- a/Core/org.emftext.language.java/metamodel/java/members/Method.ejava +++ b/Core/org.emftext.language.java/metamodel/java/members/Method.ejava @@ -1,138 +1,138 @@ -epackage java.members; - -import org.eclipse.emf.common.util.BasicEList; -import org.eclipse.emf.common.util.EList; - -import java.expressions.Expression; -import java.parameters.Parameter; -import java.parameters.VariableLengthParameter; -import java.references.MethodCall; -import java.types.Type; -import java.classifiers.ConcreteClassifier; - -eclass Method { - - /** - * Decides if the given method matches the given call. - * - * @param methodCall - * @return - */ - isSomeMethodForCall() { - return isMethodForCall(methodCall, false); - } - - /** - * Only returns true if the given Method is a better match for the given calls than the - * otherMethod given. - * - * @param otherMethod - * @param methodCall - * @return - */ - isBetterMethodForCall() { - if (!isMethodForCall(methodCall, false)) { - return false; - } - if (otherMethod.isMethodForCall(methodCall, true)) { - if (isMethodForCall(methodCall, true)) { - //we both match perfectly; lets compare our return types - Type target = getTypeReference().getTarget(); - if (target instanceof ConcreteClassifier) { - if (((ConcreteClassifier) target).getAllSuperClassifiers().contains( - otherMethod.getTypeReference().getTarget())) { - // I am the more concrete type - return true; - } - } - } - //the other already matches perfectly; I am not better - return false; - } - if (!otherMethod.isMethodForCall(methodCall, false)) { - //I match, but the other does not - return true; - } - //we both match, I am only better if I match perfectly <- - //TODO #763: this is not enough: we need to check for "nearest subtype" here - return isMethodForCall(methodCall, true); - } - - isMethodForCall() { - EList argumentTypeList = methodCall.getArgumentTypes(); - EList parameterList = new BasicEList(this.getParameters()); - - EList parameterTypeList = new BasicEList(); - for(Parameter parameter : parameterList) { - //determine types before messing with the parameters - parameterTypeList.add( - parameter.getTypeReference().getBoundTarget(methodCall)); - } - - if (!parameterList.isEmpty()) { - Parameter lastParameter = parameterList.get(parameterList.size() - 1); - Type lastParameterType = parameterTypeList.get(parameterTypeList.size() - 1);; - if (lastParameter instanceof VariableLengthParameter) { - //in case of variable length add/remove some parameters - while(parameterList.size() < argumentTypeList.size()) { - if (needsPerfectMatch) return false; - parameterList.add(lastParameter); - parameterTypeList.add(lastParameterType); - } - if(parameterList.size() > argumentTypeList.size()) { - if (needsPerfectMatch) return false; - parameterList.remove(lastParameter); - parameterTypeList.remove(parameterTypeList.size() - 1); - } - - } - } - - if (parameterList.size() == argumentTypeList.size()) { - boolean parametersMatch = true; - for (int i = 0; i < argumentTypeList.size(); i++) { - Parameter parameter = parameterList.get(i); - Expression argument = methodCall.getArguments().get(i); - - Type parameterType = parameterTypeList.get(i); - Type argumentType = argumentTypeList.get(i); - - if (argumentType == null || parameterType == null) { - return false; - } - - if (parameterType != null && argumentType != null) { - if (!parameterType.eIsProxy() || !argumentType.eIsProxy()) { - if (needsPerfectMatch) { - parametersMatch = parametersMatch - && argumentType.equalsType(argument.getArrayDimension(), - parameterType, parameter.getArrayDimension()); - } - else { - parametersMatch = parametersMatch - && argumentType.isSuperType(argument.getArrayDimension(), - parameterType, parameter); - } - } - else { - return false; - } - } - else { - return false; - } - } - return parametersMatch; - } - return false; - } - - getArrayDimension() { - long size = this.getArrayDimensionsBefore().size() + this.getArrayDimensionsAfter().size(); - if (this instanceof VariableLengthParameter) { - size++; - } - return size; - } - -} +epackage java.members; + +import org.eclipse.emf.common.util.BasicEList; +import org.eclipse.emf.common.util.EList; + +import java.expressions.Expression; +import java.parameters.Parameter; +import java.parameters.VariableLengthParameter; +import java.references.MethodCall; +import java.types.Type; +import java.classifiers.ConcreteClassifier; + +eclass Method { + + /** + * Decides if the given method matches the given call. + * + * @param methodCall + * @return + */ + isSomeMethodForCall() { + return isMethodForCall(methodCall, false); + } + + /** + * Only returns true if the given Method is a better match for the given calls than the + * otherMethod given. + * + * @param otherMethod + * @param methodCall + * @return + */ + isBetterMethodForCall() { + if (!isMethodForCall(methodCall, false)) { + return false; + } + if (otherMethod.isMethodForCall(methodCall, true)) { + if (isMethodForCall(methodCall, true)) { + //we both match perfectly; lets compare our return types + Type target = getTypeReference().getTarget(); + if (target instanceof ConcreteClassifier) { + if (((ConcreteClassifier) target).getAllSuperClassifiers().contains( + otherMethod.getTypeReference().getTarget())) { + // I am the more concrete type + return true; + } + } + } + //the other already matches perfectly; I am not better + return false; + } + if (!otherMethod.isMethodForCall(methodCall, false)) { + //I match, but the other does not + return true; + } + //we both match, I am only better if I match perfectly <- + //TODO #763: this is not enough: we need to check for "nearest subtype" here + return isMethodForCall(methodCall, true); + } + + isMethodForCall() { + EList argumentTypeList = methodCall.getArgumentTypes(); + EList parameterList = new BasicEList(this.getParameters()); + + EList parameterTypeList = new BasicEList(); + for(Parameter parameter : parameterList) { + //determine types before messing with the parameters + parameterTypeList.add( + parameter.getTypeReference().getBoundTarget(methodCall)); + } + + if (!parameterList.isEmpty()) { + Parameter lastParameter = parameterList.get(parameterList.size() - 1); + Type lastParameterType = parameterTypeList.get(parameterTypeList.size() - 1);; + if (lastParameter instanceof VariableLengthParameter) { + //in case of variable length add/remove some parameters + while(parameterList.size() < argumentTypeList.size()) { + if (needsPerfectMatch) return false; + parameterList.add(lastParameter); + parameterTypeList.add(lastParameterType); + } + if(parameterList.size() > argumentTypeList.size()) { + if (needsPerfectMatch) return false; + parameterList.remove(lastParameter); + parameterTypeList.remove(parameterTypeList.size() - 1); + } + + } + } + + if (parameterList.size() == argumentTypeList.size()) { + boolean parametersMatch = true; + for (int i = 0; i < argumentTypeList.size(); i++) { + Parameter parameter = parameterList.get(i); + Expression argument = methodCall.getArguments().get(i); + + Type parameterType = parameterTypeList.get(i); + Type argumentType = argumentTypeList.get(i); + + if (argumentType == null || parameterType == null) { + return false; + } + + if (parameterType != null && argumentType != null) { + if (!parameterType.eIsProxy() || !argumentType.eIsProxy()) { + if (needsPerfectMatch) { + parametersMatch = parametersMatch + && argumentType.equalsType(argument.getArrayDimension(), + parameterType, parameter.getArrayDimension()); + } + else { + parametersMatch = parametersMatch + && argumentType.isSuperType(argument.getArrayDimension(), + parameterType, parameter); + } + } + else { + return false; + } + } + else { + return false; + } + } + return parametersMatch; + } + return false; + } + + getArrayDimension() { + long size = this.getArrayDimensionsBefore().size() + this.getArrayDimensionsAfter().size(); + if (this instanceof VariableLengthParameter) { + size++; + } + return size; + } + +} diff --git a/Core/org.emftext.language.java/metamodel/java/modifiers/AnnotableAndModifiable.ejava b/Core/org.emftext.language.java/metamodel/java/modifiers/AnnotableAndModifiable.ejava index 15a2fb3b..2bf789ae 100644 --- a/Core/org.emftext.language.java/metamodel/java/modifiers/AnnotableAndModifiable.ejava +++ b/Core/org.emftext.language.java/metamodel/java/modifiers/AnnotableAndModifiable.ejava @@ -1,269 +1,269 @@ -epackage java.modifiers; - -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.util.EcoreUtil; - -import java.classifiers.AnonymousClass; -import java.classifiers.Classifier; -import java.annotations.AnnotationInstance; -import java.classifiers.ConcreteClassifier; -import java.classifiers.Interface; -import java.commons.Commentable; -import java.containers.CompilationUnit; -import java.literals.Self; -import java.modifiers.AnnotableAndModifiable; -import java.modifiers.AnnotationInstanceOrModifier; -import java.modifiers.Private; -import java.modifiers.Protected; -import java.modifiers.Public; -import java.modifiers.Static; -import java.references.Reference; -import java.references.SelfReference; -import java.types.Type; -import java.util.List; -import java.util.ArrayList; -import java.util.Collections; - -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.common.util.BasicEList; -import org.eclipse.emf.common.util.ECollections; - -eclass AnnotableAndModifiable { - - /** - * Sets the visibility of this element to private. - */ - makePrivate() { - if (isPrivate()) { - return; - } - removeModifier(Public.class); - removeModifier(Protected.class); - getAnnotationsAndModifiers().add(#Private); - } - - /** - * Sets the visibility of this element to public. - */ - makePublic() { - if (isPublic()) { - return; - } - removeModifier(Private.class); - removeModifier(Protected.class); - getAnnotationsAndModifiers().add(#Public); - } - - /** - * Sets the visibility of this element to protected. - */ - makeProtected() { - if (isProtected()) { - return; - } - removeModifier(Private.class); - removeModifier(Public.class); - getAnnotationsAndModifiers().add(#Protected); - } - - /** - * Removes all modifiers from this element. - */ - removeAllModifiers() { - List modifiers = getModifiers(); - EList elements = getAnnotationsAndModifiers(); - elements.removeAll(modifiers); - } - - /** - * Returns an unmodifiable list of the modifiers that apply to this element. - */ - getModifiers() { - EList elements = getAnnotationsAndModifiers(); - EList modifiers = new BasicEList(); - for (AnnotationInstanceOrModifier next : elements) { - if (next instanceof Modifier) { - modifiers.add((Modifier) next); - } - } - return ECollections.unmodifiableEList(modifiers); - } - - /** - * Returns an unmodifiable list of the annotations that apply to this element. - */ - getAnnotationInstances() { - EList elements = getAnnotationsAndModifiers(); - EList annotations = new BasicEList(); - for (AnnotationInstanceOrModifier next : elements) { - if (next instanceof AnnotationInstance) { - annotations.add((AnnotationInstance) next); - } - } - return ECollections.unmodifiableEList(annotations); - } - - /** - * Adds the given type of modifier to this element. This method does not - * check for duplicate modifiers! - */ - addModifier() { - getAnnotationsAndModifiers().add(newModifier); - } - - /** - * Removes the given type of modifier from this element. - */ - removeModifier() { - List modifiers = getAnnotationsAndModifiers(); - List modifiersToRemove = new ArrayList(); - for (AnnotationInstanceOrModifier modifier : modifiers) { - if (modifierType.isInstance(modifier)) { - modifiersToRemove.add(modifier); - } - } - modifiers.removeAll(modifiersToRemove); - } - - isPublic() { - return hasModifier(Public.class); - } - - isPrivate() { - return hasModifier(Private.class); - } - - isProtected() { - return hasModifier(Protected.class); - } - - /** - * Checks whether this element has an modifier of the given type. - */ - hasModifier() { - List modifiers = getAnnotationsAndModifiers(); - for (AnnotationInstanceOrModifier modifier : modifiers) { - if (type.isInstance(modifier)) { - return true; - } - } - return false; - } - - /** - * Returns true if this element is static (either by an explicit modifier static - * or because this element is part of an interface). - */ - isStatic() { - //all members of an interface are static by default - if (this.eContainer() instanceof Interface) { - return true; - } - - for(AnnotationInstanceOrModifier modifier : this.getAnnotationsAndModifiers()) { - if(modifier instanceof Static) { - return true; - } - } - return false; - } - - isHidden() { - Commentable lContext = context; - if (this.eIsProxy()) { - return false; - } - //all members of an interface are public by default - if (this.eContainer() instanceof Interface) { - return false; - } - - if(lContext.eIsProxy()) { - lContext = (Commentable) EcoreUtil.resolve(lContext, this); - } - - ConcreteClassifier lContextClassifier = lContext.getContainingConcreteClassifier(); - if (!(eContainer() instanceof Commentable)) { - return true; - } - ConcreteClassifier myClassifier = ((Commentable) eContainer()).getParentConcreteClassifier(); - //special case: self reference to outer instance - if(lContext instanceof Reference) { - if (((Reference)lContext).getPrevious() instanceof SelfReference) { - SelfReference selfReference = (SelfReference) ((Reference)lContext).getPrevious(); - if (selfReference.getSelf() instanceof Self) { - if(selfReference.getPrevious() != null) { - Type type = selfReference.getPrevious().getReferencedType(); - if (type instanceof ConcreteClassifier) { - lContextClassifier = (ConcreteClassifier) type; - } - } - } - } - } - - for(AnnotationInstanceOrModifier modifier : this.getAnnotationsAndModifiers()) { - if(modifier instanceof Private) { - if (myClassifier.equalsType(0, lContextClassifier, 0)) { - return false; - } - return true; - } - if(modifier instanceof Public) { - return false; - } - if(modifier instanceof Protected) { - //package visibility - if (getContainingPackageName() != null && - getContainingPackageName().equals(lContext.getContainingPackageName())) { - return false; - } - //try outer classifiers as well - while(lContextClassifier instanceof Classifier) { - if (lContextClassifier.isSuperType(0, myClassifier, null)) { - return false; - } - - EObject container = lContextClassifier.eContainer(); - if (container instanceof Commentable) { - lContextClassifier = ((Commentable) container).getParentConcreteClassifier(); - } else { - lContextClassifier = null; - } - - if (lContextClassifier != null && !lContextClassifier.eIsProxy() && - lContextClassifier.isSuperType(0, myClassifier, null)) { - return false; - } - } - //visibility through anonymous subclass - AnonymousClass anonymousClass = lContext.getContainingAnonymousClass(); - while (anonymousClass != null) { - lContextClassifier = anonymousClass.getSuperClassifier(); - if (lContextClassifier == null) { - return true; - } - if (lContextClassifier.isSuperType(0, myClassifier, null)) { - return false; - } - - EObject container = anonymousClass.eContainer(); - if (container instanceof Commentable) { - anonymousClass = ((Commentable) container).getContainingAnonymousClass(); - } else { - anonymousClass = null; - } - } - return true; - } - } - //package visibility? - if (getContainingPackageName() != null && - getContainingPackageName().equals(lContext.getContainingPackageName())) { - return false; - } - - return true; - } -} - +epackage java.modifiers; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.util.EcoreUtil; + +import java.classifiers.AnonymousClass; +import java.classifiers.Classifier; +import java.annotations.AnnotationInstance; +import java.classifiers.ConcreteClassifier; +import java.classifiers.Interface; +import java.commons.Commentable; +import java.containers.CompilationUnit; +import java.literals.Self; +import java.modifiers.AnnotableAndModifiable; +import java.modifiers.AnnotationInstanceOrModifier; +import java.modifiers.Private; +import java.modifiers.Protected; +import java.modifiers.Public; +import java.modifiers.Static; +import java.references.Reference; +import java.references.SelfReference; +import java.types.Type; +import java.util.List; +import java.util.ArrayList; +import java.util.Collections; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.BasicEList; +import org.eclipse.emf.common.util.ECollections; + +eclass AnnotableAndModifiable { + + /** + * Sets the visibility of this element to private. + */ + makePrivate() { + if (isPrivate()) { + return; + } + removeModifier(Public.class); + removeModifier(Protected.class); + getAnnotationsAndModifiers().add(#Private); + } + + /** + * Sets the visibility of this element to public. + */ + makePublic() { + if (isPublic()) { + return; + } + removeModifier(Private.class); + removeModifier(Protected.class); + getAnnotationsAndModifiers().add(#Public); + } + + /** + * Sets the visibility of this element to protected. + */ + makeProtected() { + if (isProtected()) { + return; + } + removeModifier(Private.class); + removeModifier(Public.class); + getAnnotationsAndModifiers().add(#Protected); + } + + /** + * Removes all modifiers from this element. + */ + removeAllModifiers() { + List modifiers = getModifiers(); + EList elements = getAnnotationsAndModifiers(); + elements.removeAll(modifiers); + } + + /** + * Returns an unmodifiable list of the modifiers that apply to this element. + */ + getModifiers() { + EList elements = getAnnotationsAndModifiers(); + EList modifiers = new BasicEList(); + for (AnnotationInstanceOrModifier next : elements) { + if (next instanceof Modifier) { + modifiers.add((Modifier) next); + } + } + return ECollections.unmodifiableEList(modifiers); + } + + /** + * Returns an unmodifiable list of the annotations that apply to this element. + */ + getAnnotationInstances() { + EList elements = getAnnotationsAndModifiers(); + EList annotations = new BasicEList(); + for (AnnotationInstanceOrModifier next : elements) { + if (next instanceof AnnotationInstance) { + annotations.add((AnnotationInstance) next); + } + } + return ECollections.unmodifiableEList(annotations); + } + + /** + * Adds the given type of modifier to this element. This method does not + * check for duplicate modifiers! + */ + addModifier() { + getAnnotationsAndModifiers().add(newModifier); + } + + /** + * Removes the given type of modifier from this element. + */ + removeModifier() { + List modifiers = getAnnotationsAndModifiers(); + List modifiersToRemove = new ArrayList(); + for (AnnotationInstanceOrModifier modifier : modifiers) { + if (modifierType.isInstance(modifier)) { + modifiersToRemove.add(modifier); + } + } + modifiers.removeAll(modifiersToRemove); + } + + isPublic() { + return hasModifier(Public.class); + } + + isPrivate() { + return hasModifier(Private.class); + } + + isProtected() { + return hasModifier(Protected.class); + } + + /** + * Checks whether this element has an modifier of the given type. + */ + hasModifier() { + List modifiers = getAnnotationsAndModifiers(); + for (AnnotationInstanceOrModifier modifier : modifiers) { + if (type.isInstance(modifier)) { + return true; + } + } + return false; + } + + /** + * Returns true if this element is static (either by an explicit modifier static + * or because this element is part of an interface). + */ + isStatic() { + //all members of an interface are static by default + if (this.eContainer() instanceof Interface) { + return true; + } + + for(AnnotationInstanceOrModifier modifier : this.getAnnotationsAndModifiers()) { + if(modifier instanceof Static) { + return true; + } + } + return false; + } + + isHidden() { + Commentable lContext = context; + if (this.eIsProxy()) { + return false; + } + //all members of an interface are public by default + if (this.eContainer() instanceof Interface) { + return false; + } + + if(lContext.eIsProxy()) { + lContext = (Commentable) EcoreUtil.resolve(lContext, this); + } + + ConcreteClassifier lContextClassifier = lContext.getContainingConcreteClassifier(); + if (!(eContainer() instanceof Commentable)) { + return true; + } + ConcreteClassifier myClassifier = ((Commentable) eContainer()).getParentConcreteClassifier(); + //special case: self reference to outer instance + if(lContext instanceof Reference) { + if (((Reference)lContext).getPrevious() instanceof SelfReference) { + SelfReference selfReference = (SelfReference) ((Reference)lContext).getPrevious(); + if (selfReference.getSelf() instanceof Self) { + if(selfReference.getPrevious() != null) { + Type type = selfReference.getPrevious().getReferencedType(); + if (type instanceof ConcreteClassifier) { + lContextClassifier = (ConcreteClassifier) type; + } + } + } + } + } + + for(AnnotationInstanceOrModifier modifier : this.getAnnotationsAndModifiers()) { + if(modifier instanceof Private) { + if (myClassifier.equalsType(0, lContextClassifier, 0)) { + return false; + } + return true; + } + if(modifier instanceof Public) { + return false; + } + if(modifier instanceof Protected) { + //package visibility + if (getContainingPackageName() != null && + getContainingPackageName().equals(lContext.getContainingPackageName())) { + return false; + } + //try outer classifiers as well + while(lContextClassifier instanceof Classifier) { + if (lContextClassifier.isSuperType(0, myClassifier, null)) { + return false; + } + + EObject container = lContextClassifier.eContainer(); + if (container instanceof Commentable) { + lContextClassifier = ((Commentable) container).getParentConcreteClassifier(); + } else { + lContextClassifier = null; + } + + if (lContextClassifier != null && !lContextClassifier.eIsProxy() && + lContextClassifier.isSuperType(0, myClassifier, null)) { + return false; + } + } + //visibility through anonymous subclass + AnonymousClass anonymousClass = lContext.getContainingAnonymousClass(); + while (anonymousClass != null) { + lContextClassifier = anonymousClass.getSuperClassifier(); + if (lContextClassifier == null) { + return true; + } + if (lContextClassifier.isSuperType(0, myClassifier, null)) { + return false; + } + + EObject container = anonymousClass.eContainer(); + if (container instanceof Commentable) { + anonymousClass = ((Commentable) container).getContainingAnonymousClass(); + } else { + anonymousClass = null; + } + } + return true; + } + } + //package visibility? + if (getContainingPackageName() != null && + getContainingPackageName().equals(lContext.getContainingPackageName())) { + return false; + } + + return true; + } +} + diff --git a/Core/org.emftext.language.java/metamodel/java/references/Argumentable.ejava b/Core/org.emftext.language.java/metamodel/java/references/Argumentable.ejava index 4155682d..11e1cf38 100644 --- a/Core/org.emftext.language.java/metamodel/java/references/Argumentable.ejava +++ b/Core/org.emftext.language.java/metamodel/java/references/Argumentable.ejava @@ -1,24 +1,24 @@ -epackage java.references; - -import org.eclipse.emf.common.util.BasicEList; -import org.eclipse.emf.common.util.EList; - -import java.expressions.Expression; -import java.types.Type; - -eclass Argumentable { - - /** - * @return list of types of my arguments - */ - getArgumentTypes() { - EList resultList = new BasicEList(); - - for(Expression exp : getArguments()) { - Type type = exp.getType(); - resultList.add(type); - } - return resultList; - } - -} +epackage java.references; + +import org.eclipse.emf.common.util.BasicEList; +import org.eclipse.emf.common.util.EList; + +import java.expressions.Expression; +import java.types.Type; + +eclass Argumentable { + + /** + * @return list of types of my arguments + */ + getArgumentTypes() { + EList resultList = new BasicEList(); + + for(Expression exp : getArguments()) { + Type type = exp.getType(); + resultList.add(type); + } + return resultList; + } + +} diff --git a/Core/org.emftext.language.java/metamodel/java/references/Reference.ejava b/Core/org.emftext.language.java/metamodel/java/references/Reference.ejava index 7ebb93b7..f2ea510d 100644 --- a/Core/org.emftext.language.java/metamodel/java/references/Reference.ejava +++ b/Core/org.emftext.language.java/metamodel/java/references/Reference.ejava @@ -1,123 +1,123 @@ -epackage java.references; - -import java.classifiers.AnonymousClass; -import java.classifiers.Class; -import java.classifiers.Enumeration; -import java.expressions.NestedExpression; -import java.literals.Literal; -import java.literals.Super; -import java.members.AdditionalField; -import java.members.EnumConstant; -import java.types.Type; -import java.types.TypeReference; -import java.types.TypedElement; -import java.variables.AdditionalLocalVariable; - -eclass Reference { - - getPrevious() { - if (eContainer() instanceof Reference) { - Reference container = (Reference) eContainer( ) ; - if (this.equals(container.getNext())) { - return container; - } - } - return null; - } - - /** - * Determines the Type of the reference. That is, - * either the type to which the reference points directly, or the - * type of the element to which the reference points. - * - * @return the determined type - */ - getReferencedType() { - if (this instanceof Literal) { - return ((Literal) this).getType(); - } - - Type type = null; - - //referenced element point to a type - if (this instanceof TypedElement) { - TypeReference typeRef = ((TypedElement) this).getTypeReference(); - type = typeRef.getBoundTarget(this); - } - //element points to this or super - else if (this instanceof SelfReference) { - Type thisClass = null; - if (this.getPrevious() != null) { - thisClass = this.getPrevious().getReferencedType(); - } - else { - AnonymousClass anonymousContainer = getContainingAnonymousClass(); - if (anonymousContainer != null) { - thisClass = anonymousContainer; - } - else { - thisClass = getContainingConcreteClassifier(); - } - } - - //find super class if "self" is "super" - if (((SelfReference) this).getSelf() instanceof Super) { - if (thisClass instanceof Class) { - return ((Class)thisClass).getSuperClass(); - } - if (thisClass instanceof AnonymousClass) { - return ((AnonymousClass)thisClass).getSuperClassifier(); - } - } - - return thisClass; - } - //element points to the object's class object - else if(this instanceof ReflectiveClassReference) { - return getClassClass(); - } - //referenced element points to an element with a type - else if (this instanceof ElementReference) { - ReferenceableElement target = - (ReferenceableElement) ((ElementReference) this).getTarget(); - if (target.eIsProxy()) { - type = null; - } - - //Navigate through AdditionalLocalVariable or Field - if(target instanceof AdditionalLocalVariable) { - target = (ReferenceableElement) target.eContainer(); - } - if(target instanceof AdditionalField) { - target = (ReferenceableElement) target.eContainer(); - } - if (target instanceof TypedElement) { - TypeReference typeRef = ((TypedElement) target).getTypeReference(); - if (typeRef != null) { - type = typeRef.getBoundTarget(this); - } - } - else if (target instanceof Type /*e.g. Annotation*/ ) { - return (Type) target; - } - else if(target instanceof EnumConstant) { - type = (Enumeration)target.eContainer(); - } - } - //Strings may also appear as reference - else if (this instanceof StringReference) { - return getStringClass(); - } - else if (this instanceof NestedExpression) { - type = ((NestedExpression) this).getExpression().getType(); - } - else if (this instanceof PrimitiveTypeReference) { - type = ((PrimitiveTypeReference)this).getPrimitiveType(); - } - else { - assert(false); - } - return type; - } - -} +epackage java.references; + +import java.classifiers.AnonymousClass; +import java.classifiers.Class; +import java.classifiers.Enumeration; +import java.expressions.NestedExpression; +import java.literals.Literal; +import java.literals.Super; +import java.members.AdditionalField; +import java.members.EnumConstant; +import java.types.Type; +import java.types.TypeReference; +import java.types.TypedElement; +import java.variables.AdditionalLocalVariable; + +eclass Reference { + + getPrevious() { + if (eContainer() instanceof Reference) { + Reference container = (Reference) eContainer( ) ; + if (this.equals(container.getNext())) { + return container; + } + } + return null; + } + + /** + * Determines the Type of the reference. That is, + * either the type to which the reference points directly, or the + * type of the element to which the reference points. + * + * @return the determined type + */ + getReferencedType() { + if (this instanceof Literal) { + return ((Literal) this).getType(); + } + + Type type = null; + + //referenced element point to a type + if (this instanceof TypedElement) { + TypeReference typeRef = ((TypedElement) this).getTypeReference(); + type = typeRef.getBoundTarget(this); + } + //element points to this or super + else if (this instanceof SelfReference) { + Type thisClass = null; + if (this.getPrevious() != null) { + thisClass = this.getPrevious().getReferencedType(); + } + else { + AnonymousClass anonymousContainer = getContainingAnonymousClass(); + if (anonymousContainer != null) { + thisClass = anonymousContainer; + } + else { + thisClass = getContainingConcreteClassifier(); + } + } + + //find super class if "self" is "super" + if (((SelfReference) this).getSelf() instanceof Super) { + if (thisClass instanceof Class) { + return ((Class)thisClass).getSuperClass(); + } + if (thisClass instanceof AnonymousClass) { + return ((AnonymousClass)thisClass).getSuperClassifier(); + } + } + + return thisClass; + } + //element points to the object's class object + else if(this instanceof ReflectiveClassReference) { + return getClassClass(); + } + //referenced element points to an element with a type + else if (this instanceof ElementReference) { + ReferenceableElement target = + (ReferenceableElement) ((ElementReference) this).getTarget(); + if (target.eIsProxy()) { + type = null; + } + + //Navigate through AdditionalLocalVariable or Field + if(target instanceof AdditionalLocalVariable) { + target = (ReferenceableElement) target.eContainer(); + } + if(target instanceof AdditionalField) { + target = (ReferenceableElement) target.eContainer(); + } + if (target instanceof TypedElement) { + TypeReference typeRef = ((TypedElement) target).getTypeReference(); + if (typeRef != null) { + type = typeRef.getBoundTarget(this); + } + } + else if (target instanceof Type /*e.g. Annotation*/ ) { + return (Type) target; + } + else if(target instanceof EnumConstant) { + type = (Enumeration)target.eContainer(); + } + } + //Strings may also appear as reference + else if (this instanceof StringReference) { + return getStringClass(); + } + else if (this instanceof NestedExpression) { + type = ((NestedExpression) this).getExpression().getType(); + } + else if (this instanceof PrimitiveTypeReference) { + type = ((PrimitiveTypeReference)this).getPrimitiveType(); + } + else { + assert(false); + } + return type; + } + +} diff --git a/Core/org.emftext.language.java/metamodel/java/types/PrimitiveType.ejava b/Core/org.emftext.language.java/metamodel/java/types/PrimitiveType.ejava index 4669def4..8f590dc5 100644 --- a/Core/org.emftext.language.java/metamodel/java/types/PrimitiveType.ejava +++ b/Core/org.emftext.language.java/metamodel/java/types/PrimitiveType.ejava @@ -1,55 +1,55 @@ -epackage java.types; - -import org.eclipse.emf.common.util.EList; - -import java.classifiers.Class; -import java.commons.Commentable; -import java.members.Member; - -eclass PrimitiveType { - - /** - * @param context to check protected visibility - * @return all members (including super type members) - */ - getAllMembers() { - Class javaClass = wrapPrimitiveType(); - return javaClass.getAllMembers(context); - } - - /** - * @return primitive type as a class representation - */ - wrapPrimitiveType() { - Class javaClass = null; - - if (this instanceof Boolean) { - javaClass = getLibClass("Boolean"); - } - if (this instanceof Byte) { - javaClass = getLibClass("Byte"); - } - if (this instanceof Char) { - javaClass = getLibClass("Character"); - } - if (this instanceof Double) { - javaClass = getLibClass("Double"); - } - if (this instanceof Float) { - javaClass = getLibClass("Float"); - } - if (this instanceof Int) { - javaClass = getLibClass("Integer"); - } - if (this instanceof Long) { - javaClass = getLibClass("Long"); - } - if (this instanceof Short) { - javaClass = getLibClass("Short"); - } - if (this instanceof Void) { - javaClass = getLibClass("Void"); - } - return javaClass; - } -} +epackage java.types; + +import org.eclipse.emf.common.util.EList; + +import java.classifiers.Class; +import java.commons.Commentable; +import java.members.Member; + +eclass PrimitiveType { + + /** + * @param context to check protected visibility + * @return all members (including super type members) + */ + getAllMembers() { + Class javaClass = wrapPrimitiveType(); + return javaClass.getAllMembers(context); + } + + /** + * @return primitive type as a class representation + */ + wrapPrimitiveType() { + Class javaClass = null; + + if (this instanceof Boolean) { + javaClass = getLibClass("Boolean"); + } + if (this instanceof Byte) { + javaClass = getLibClass("Byte"); + } + if (this instanceof Char) { + javaClass = getLibClass("Character"); + } + if (this instanceof Double) { + javaClass = getLibClass("Double"); + } + if (this instanceof Float) { + javaClass = getLibClass("Float"); + } + if (this instanceof Int) { + javaClass = getLibClass("Integer"); + } + if (this instanceof Long) { + javaClass = getLibClass("Long"); + } + if (this instanceof Short) { + javaClass = getLibClass("Short"); + } + if (this instanceof Void) { + javaClass = getLibClass("Void"); + } + return javaClass; + } +} diff --git a/Core/org.emftext.language.java/metamodel/java/types/Type.ejava b/Core/org.emftext.language.java/metamodel/java/types/Type.ejava index 5cd80819..837b86fc 100644 --- a/Core/org.emftext.language.java/metamodel/java/types/Type.ejava +++ b/Core/org.emftext.language.java/metamodel/java/types/Type.ejava @@ -1,299 +1,299 @@ -epackage java.types; - -import org.emftext.language.java.util.UniqueEList; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.util.EcoreUtil; -import org.eclipse.emf.ecore.EObject; -import org.emftext.language.java.util.TemporalCompositeClassifier; - -import java.arrays.ArrayTypeable; -import java.classifiers.Annotation; -import java.classifiers.AnonymousClass; -import java.classifiers.Class; -import java.classifiers.Classifier; -import java.classifiers.ConcreteClassifier; -import java.classifiers.Interface; -import java.generics.TypeParameter; -import java.parameters.VariableLengthParameter; - -eclass Type { - - /** - * @param arrayDimension - * @param otherType - * @param otherArrayDimension - * @return if both type are equal - */ - equalsType() { - Type lOtherType = otherType; - Type _this = this; - //comparison for type parameters - if (_this instanceof TypeParameter) { - TypeParameter typeParameter = (TypeParameter) _this; - for (TypeReference referencedType : typeParameter.getExtendTypes()) { - if (referencedType.getTarget() != null && !referencedType.getTarget().eIsProxy() && referencedType.getTarget().equalsType(arrayDimension, lOtherType, otherArrayDimension)) { - return true; - } - } - if (typeParameter.getExtendTypes().isEmpty()) { - if (getObjectClass().equalsType(arrayDimension, lOtherType, otherArrayDimension)) { - return true; - } - } - } - if (lOtherType instanceof TypeParameter) { - TypeParameter typeParameter = (TypeParameter) lOtherType; - for (TypeReference referencedType : typeParameter.getExtendTypes()) { - if (referencedType.getTarget() != null && !referencedType.getTarget().eIsProxy() && equalsType(arrayDimension, referencedType.getTarget(), otherArrayDimension)) { - return true; - } - } - if (typeParameter.getExtendTypes().isEmpty()) { - if (equalsType(arrayDimension, getObjectClass(), otherArrayDimension)) { - return true; - } - } - } - - //do comparison on the classifier level - if (_this instanceof PrimitiveType) { - _this = ((PrimitiveType)_this).wrapPrimitiveType(); - } - if (lOtherType instanceof PrimitiveType) { - lOtherType = ((PrimitiveType) lOtherType).wrapPrimitiveType(); - } - - if (arrayDimension == otherArrayDimension && - lOtherType instanceof Classifier && _this instanceof Classifier && - (lOtherType.equals(_this))) { - return true; - } - - return false; - } - - /** - * @param arrayDimension - * @param otherType - * @param otherArrayType - * @return if the other type is equal to me or a super type of me - */ - isSuperType() { - Type lOtherType = otherType; - - if(lOtherType == null) { - return false; - } - - Type _this = this; - - if (_this instanceof TemporalCompositeClassifier || lOtherType instanceof TemporalCompositeClassifier) { - EList _thisTypeList = new UniqueEList(); - EList otherTypeList = new UniqueEList(); - if (_this instanceof TemporalCompositeClassifier) { - for(EObject aType : ((TemporalCompositeClassifier)_this).getSuperTypes()) { - _thisTypeList.add((Type)aType); - } - } - else { - _thisTypeList.add(_this); - } - if (lOtherType instanceof TemporalCompositeClassifier) { - for(EObject aType : ((TemporalCompositeClassifier)lOtherType).getSuperTypes()) { - otherTypeList.add((Type)aType); - } - } - else { - otherTypeList.add(_this); - } - - - for(Type one_thisType : _thisTypeList) { - for(Type oneOtherType : otherTypeList) { - boolean result = one_thisType.isSuperType(arrayDimension, oneOtherType, otherArrayType); - if (result) { - return true; - } - } - } - return false; - } - - //if I am a void, I am of every type - if (_this.equals(getLibClass("Void"))) { - return true; - } - - //if the other is Object I am a subtype in any case (also array dimensions do not matter) - if (lOtherType.equals(getObjectClass())) { - return true; - } - - //String, primitives, and arrays are serializable - ConcreteClassifier serializableClass = (ConcreteClassifier) EcoreUtil.resolve( - getConcreteClassifierProxy("java.io.Serializable"), _this); - if (lOtherType.equals(serializableClass)) { - if (_this.equals(serializableClass)) { - return true; - } - else if (_this.equals(getStringClass())) { - return true; - } - else if (_this instanceof PrimitiveType) { - return true; - } - else if (arrayDimension > 0) { - //all arrays are serializable - return true; - } - } - - //if one of us is a parameter to the best of my knowledge, we might match - if (_this instanceof TypeParameter) { - return true; - } - if (lOtherType instanceof TypeParameter) { - return true; - } - - //if array dimensions do not match, I am no subtype - boolean isTypeParameter = false; - if (otherArrayType instanceof TypedElement) { - Type type = ((TypedElement)otherArrayType).getTypeReference().getTarget(); - isTypeParameter = type instanceof TypeParameter; - } - boolean isVariableLengthParameter = otherArrayType instanceof VariableLengthParameter; - - long otherArrayDim = 0; - if(otherArrayType != null) { - otherArrayDim = otherArrayType.getArrayDimension(); - } - - if (isTypeParameter && isVariableLengthParameter) { - if(arrayDimension != otherArrayDim && - arrayDimension != otherArrayDim-1 && - arrayDimension < otherArrayDim) { - - return false; - } - } - else if (isTypeParameter) { - if(arrayDimension < otherArrayDim) { - return false; - } - } - else if (isVariableLengthParameter) { - if(arrayDimension != otherArrayDim && arrayDimension != otherArrayDim-1) { - return false; - } - } - else { - if(arrayDimension != otherArrayDim) { - return false; - } - } - - //annotations - if(_this instanceof Annotation && - (lOtherType.equals(getAnnotationInterface()) || - ((ConcreteClassifier)_this).getAllSuperClassifiers( - ).contains(getAnnotationInterface()))) { - return true; - } - - //do comparison on the classifier level - if (_this instanceof PrimitiveType) { - _this = ((PrimitiveType) _this).wrapPrimitiveType(); - } - if (lOtherType instanceof PrimitiveType) { - lOtherType = ((PrimitiveType) lOtherType).wrapPrimitiveType(); - } - - //compare in type hierarchy - if (lOtherType instanceof ConcreteClassifier && _this instanceof ConcreteClassifier && - (lOtherType.equals(_this) || - ((ConcreteClassifier)_this).getAllSuperClassifiers( - ).contains(lOtherType))) { - return true; - } - - if (lOtherType instanceof ConcreteClassifier && _this instanceof AnonymousClass && - ((AnonymousClass)_this).getAllSuperClassifiers( - ).contains(lOtherType)) { - - return true; - } - - //everything can be implicitly casted to CharSequence, so I match when the other type is a CharSequence - Interface charSequenceClass = getLibInterface("CharSequence"); - - if (lOtherType instanceof ConcreteClassifier) { - if(lOtherType.equals(charSequenceClass) || - ((ConcreteClassifier)lOtherType).getAllSuperClassifiers( - ).contains(charSequenceClass)) { - return true; - } - } - - //there are some specifics for primitive types not reflected in the type hierarchy - if (lOtherType instanceof Class) { - PrimitiveType primitiveType = ((Class) lOtherType).unWrapPrimitiveType(); - if(primitiveType == null) { - return false; - } - lOtherType = primitiveType; - } - - if (_this instanceof Class) { - PrimitiveType primitiveType = ((Class) _this).unWrapPrimitiveType(); - if(primitiveType == null) { - return false; - } - _this = primitiveType; - } - - if (_this instanceof Boolean) { - if (lOtherType instanceof Boolean) { - return true; - } - else { - return false; - } - } - if (_this instanceof Byte || - _this instanceof Int || - _this instanceof Short || - _this instanceof Long || - _this instanceof Char) { - if (lOtherType instanceof Byte || - lOtherType instanceof Int || - lOtherType instanceof Short || - lOtherType instanceof Long || - lOtherType instanceof Char || - lOtherType instanceof Float || - lOtherType instanceof Double) { - return true; - } - else { - return false; - } - } - if (_this instanceof Float || - _this instanceof Double) { - if (lOtherType instanceof Float || - lOtherType instanceof Double) { - return true; - } - else { - return false; - } - } - - return false; - } - - getAllMembers() { - //method has to be specified in subclasses - throw new UnsupportedOperationException(); - } +epackage java.types; + +import org.emftext.language.java.util.UniqueEList; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.util.EcoreUtil; +import org.eclipse.emf.ecore.EObject; +import org.emftext.language.java.util.TemporalCompositeClassifier; + +import java.arrays.ArrayTypeable; +import java.classifiers.Annotation; +import java.classifiers.AnonymousClass; +import java.classifiers.Class; +import java.classifiers.Classifier; +import java.classifiers.ConcreteClassifier; +import java.classifiers.Interface; +import java.generics.TypeParameter; +import java.parameters.VariableLengthParameter; + +eclass Type { + + /** + * @param arrayDimension + * @param otherType + * @param otherArrayDimension + * @return if both type are equal + */ + equalsType() { + Type lOtherType = otherType; + Type _this = this; + //comparison for type parameters + if (_this instanceof TypeParameter) { + TypeParameter typeParameter = (TypeParameter) _this; + for (TypeReference referencedType : typeParameter.getExtendTypes()) { + if (referencedType.getTarget() != null && !referencedType.getTarget().eIsProxy() && referencedType.getTarget().equalsType(arrayDimension, lOtherType, otherArrayDimension)) { + return true; + } + } + if (typeParameter.getExtendTypes().isEmpty()) { + if (getObjectClass().equalsType(arrayDimension, lOtherType, otherArrayDimension)) { + return true; + } + } + } + if (lOtherType instanceof TypeParameter) { + TypeParameter typeParameter = (TypeParameter) lOtherType; + for (TypeReference referencedType : typeParameter.getExtendTypes()) { + if (referencedType.getTarget() != null && !referencedType.getTarget().eIsProxy() && equalsType(arrayDimension, referencedType.getTarget(), otherArrayDimension)) { + return true; + } + } + if (typeParameter.getExtendTypes().isEmpty()) { + if (equalsType(arrayDimension, getObjectClass(), otherArrayDimension)) { + return true; + } + } + } + + //do comparison on the classifier level + if (_this instanceof PrimitiveType) { + _this = ((PrimitiveType)_this).wrapPrimitiveType(); + } + if (lOtherType instanceof PrimitiveType) { + lOtherType = ((PrimitiveType) lOtherType).wrapPrimitiveType(); + } + + if (arrayDimension == otherArrayDimension && + lOtherType instanceof Classifier && _this instanceof Classifier && + (lOtherType.equals(_this))) { + return true; + } + + return false; + } + + /** + * @param arrayDimension + * @param otherType + * @param otherArrayType + * @return if the other type is equal to me or a super type of me + */ + isSuperType() { + Type lOtherType = otherType; + + if(lOtherType == null) { + return false; + } + + Type _this = this; + + if (_this instanceof TemporalCompositeClassifier || lOtherType instanceof TemporalCompositeClassifier) { + EList _thisTypeList = new UniqueEList(); + EList otherTypeList = new UniqueEList(); + if (_this instanceof TemporalCompositeClassifier) { + for(EObject aType : ((TemporalCompositeClassifier)_this).getSuperTypes()) { + _thisTypeList.add((Type)aType); + } + } + else { + _thisTypeList.add(_this); + } + if (lOtherType instanceof TemporalCompositeClassifier) { + for(EObject aType : ((TemporalCompositeClassifier)lOtherType).getSuperTypes()) { + otherTypeList.add((Type)aType); + } + } + else { + otherTypeList.add(_this); + } + + + for(Type one_thisType : _thisTypeList) { + for(Type oneOtherType : otherTypeList) { + boolean result = one_thisType.isSuperType(arrayDimension, oneOtherType, otherArrayType); + if (result) { + return true; + } + } + } + return false; + } + + //if I am a void, I am of every type + if (_this.equals(getLibClass("Void"))) { + return true; + } + + //if the other is Object I am a subtype in any case (also array dimensions do not matter) + if (lOtherType.equals(getObjectClass())) { + return true; + } + + //String, primitives, and arrays are serializable + ConcreteClassifier serializableClass = (ConcreteClassifier) EcoreUtil.resolve( + getConcreteClassifierProxy("java.io.Serializable"), _this); + if (lOtherType.equals(serializableClass)) { + if (_this.equals(serializableClass)) { + return true; + } + else if (_this.equals(getStringClass())) { + return true; + } + else if (_this instanceof PrimitiveType) { + return true; + } + else if (arrayDimension > 0) { + //all arrays are serializable + return true; + } + } + + //if one of us is a parameter to the best of my knowledge, we might match + if (_this instanceof TypeParameter) { + return true; + } + if (lOtherType instanceof TypeParameter) { + return true; + } + + //if array dimensions do not match, I am no subtype + boolean isTypeParameter = false; + if (otherArrayType instanceof TypedElement) { + Type type = ((TypedElement)otherArrayType).getTypeReference().getTarget(); + isTypeParameter = type instanceof TypeParameter; + } + boolean isVariableLengthParameter = otherArrayType instanceof VariableLengthParameter; + + long otherArrayDim = 0; + if(otherArrayType != null) { + otherArrayDim = otherArrayType.getArrayDimension(); + } + + if (isTypeParameter && isVariableLengthParameter) { + if(arrayDimension != otherArrayDim && + arrayDimension != otherArrayDim-1 && + arrayDimension < otherArrayDim) { + + return false; + } + } + else if (isTypeParameter) { + if(arrayDimension < otherArrayDim) { + return false; + } + } + else if (isVariableLengthParameter) { + if(arrayDimension != otherArrayDim && arrayDimension != otherArrayDim-1) { + return false; + } + } + else { + if(arrayDimension != otherArrayDim) { + return false; + } + } + + //annotations + if(_this instanceof Annotation && + (lOtherType.equals(getAnnotationInterface()) || + ((ConcreteClassifier)_this).getAllSuperClassifiers( + ).contains(getAnnotationInterface()))) { + return true; + } + + //do comparison on the classifier level + if (_this instanceof PrimitiveType) { + _this = ((PrimitiveType) _this).wrapPrimitiveType(); + } + if (lOtherType instanceof PrimitiveType) { + lOtherType = ((PrimitiveType) lOtherType).wrapPrimitiveType(); + } + + //compare in type hierarchy + if (lOtherType instanceof ConcreteClassifier && _this instanceof ConcreteClassifier && + (lOtherType.equals(_this) || + ((ConcreteClassifier)_this).getAllSuperClassifiers( + ).contains(lOtherType))) { + return true; + } + + if (lOtherType instanceof ConcreteClassifier && _this instanceof AnonymousClass && + ((AnonymousClass)_this).getAllSuperClassifiers( + ).contains(lOtherType)) { + + return true; + } + + //everything can be implicitly casted to CharSequence, so I match when the other type is a CharSequence + Interface charSequenceClass = getLibInterface("CharSequence"); + + if (lOtherType instanceof ConcreteClassifier) { + if(lOtherType.equals(charSequenceClass) || + ((ConcreteClassifier)lOtherType).getAllSuperClassifiers( + ).contains(charSequenceClass)) { + return true; + } + } + + //there are some specifics for primitive types not reflected in the type hierarchy + if (lOtherType instanceof Class) { + PrimitiveType primitiveType = ((Class) lOtherType).unWrapPrimitiveType(); + if(primitiveType == null) { + return false; + } + lOtherType = primitiveType; + } + + if (_this instanceof Class) { + PrimitiveType primitiveType = ((Class) _this).unWrapPrimitiveType(); + if(primitiveType == null) { + return false; + } + _this = primitiveType; + } + + if (_this instanceof Boolean) { + if (lOtherType instanceof Boolean) { + return true; + } + else { + return false; + } + } + if (_this instanceof Byte || + _this instanceof Int || + _this instanceof Short || + _this instanceof Long || + _this instanceof Char) { + if (lOtherType instanceof Byte || + lOtherType instanceof Int || + lOtherType instanceof Short || + lOtherType instanceof Long || + lOtherType instanceof Char || + lOtherType instanceof Float || + lOtherType instanceof Double) { + return true; + } + else { + return false; + } + } + if (_this instanceof Float || + _this instanceof Double) { + if (lOtherType instanceof Float || + lOtherType instanceof Double) { + return true; + } + else { + return false; + } + } + + return false; + } + + getAllMembers() { + //method has to be specified in subclasses + throw new UnsupportedOperationException(); + } } \ No newline at end of file diff --git a/Core/org.emftext.language.java/metamodel/java/types/TypeReference.ejava b/Core/org.emftext.language.java/metamodel/java/types/TypeReference.ejava index 79900eb3..d28d5060 100644 --- a/Core/org.emftext.language.java/metamodel/java/types/TypeReference.ejava +++ b/Core/org.emftext.language.java/metamodel/java/types/TypeReference.ejava @@ -1,126 +1,126 @@ -epackage java.types; - -import java.commons.Commentable; -import java.classifiers.ConcreteClassifier; -import java.classifiers.Interface; -import java.references.MethodCall; -import java.references.ElementReference; -import java.generics.TypeParameter; -import java.arrays.ArrayTypeable; -import java.references.ReferenceableElement; - -import org.emftext.language.java.util.UniqueEList; -import org.eclipse.emf.common.util.EList; - - -eclass TypeReference { - - /** - * Returns the type referenced by this TypeReference - * considering all concrete subclasses of TypeReference used - * by the Java metamodel. - * - * @return the type - */ - getTarget() { - return getBoundTarget(null); - } - - /** - * Sets the type targeted by this type reference - * - * @param type the type - */ - setTarget() { - if (type == null) { - return; - } - - if (type.eIsProxy()) { - return; - } - - if (this instanceof NamespaceClassifierReference) { - NamespaceClassifierReference nsClassifierReference = (NamespaceClassifierReference) this; - nsClassifierReference.getClassifierReferences().clear(); - nsClassifierReference.getNamespaces().clear(); - nsClassifierReference.getNamespaces().addAll(type.getContainingContainerName()); - ClassifierReference classifierRef = #ClassifierReference; - classifierRef.setTarget(type); - nsClassifierReference.getClassifierReferences().add(classifierRef); - } - } - - /** - * Returns the type referenced by this TypeReference - * considering all concrete subclasses of TypeReference used - * by the Java metamodel. If type parameters are bound in the given reference, - * the bound type will be returned instead of the parameter. - * - * @return the type - */ - getBoundTarget() { - Type type = null; - if (this instanceof ClassifierReference || - this instanceof NamespaceClassifierReference) { - ClassifierReference classifierRef = getPureClassifierReference(); - if (classifierRef != null) { - type = classifierRef.getTarget(); - } - - if (reference instanceof MethodCall) { - MethodCall potentialCloneCall = (MethodCall) reference; - //clone returns the type of the cloned in the case of arrays - ReferenceableElement potentialCloneCallTarget = potentialCloneCall.getTarget(); - if (potentialCloneCallTarget != null && - !potentialCloneCallTarget.eIsProxy() && - "clone".equals(potentialCloneCallTarget.getName())) { - if (potentialCloneCall.getPrevious() instanceof ElementReference) { - ElementReference prevRef = (ElementReference) potentialCloneCall.getPrevious(); - if (prevRef.getTarget() instanceof ArrayTypeable && - ((ArrayTypeable)prevRef.getTarget()).getArrayDimension() > 0) { - type = prevRef.getReferencedType(); - } - } - } - } - } - - else if(this instanceof PrimitiveType) { - return (PrimitiveType) this; - } - - //resolve parameter to real type - if (type instanceof TypeParameter) { - type = ((TypeParameter) type).getBoundType(this, reference); - } - - if (type != null && type.eIsProxy()) { - //this may happen, when e.g. a super type is resolved. It is ok. - return null; - } - - return type; - } - - /** - * Extracts the (possibly nested) classifier reference (if any) - * from this type references. - * - * @return - */ - getPureClassifierReference() { - ClassifierReference classifierReference = null; - if (this instanceof ClassifierReference) { - classifierReference = (ClassifierReference) this; - } - if (this instanceof NamespaceClassifierReference) { - NamespaceClassifierReference nsClassifierReference = (NamespaceClassifierReference) this; - if (!nsClassifierReference.getClassifierReferences().isEmpty()) { - int lastIndex = nsClassifierReference.getClassifierReferences().size() - 1; - classifierReference = nsClassifierReference.getClassifierReferences().get(lastIndex); - } - } - return classifierReference; - } -} +epackage java.types; + +import java.commons.Commentable; +import java.classifiers.ConcreteClassifier; +import java.classifiers.Interface; +import java.references.MethodCall; +import java.references.ElementReference; +import java.generics.TypeParameter; +import java.arrays.ArrayTypeable; +import java.references.ReferenceableElement; + +import org.emftext.language.java.util.UniqueEList; +import org.eclipse.emf.common.util.EList; + + +eclass TypeReference { + + /** + * Returns the type referenced by this TypeReference + * considering all concrete subclasses of TypeReference used + * by the Java metamodel. + * + * @return the type + */ + getTarget() { + return getBoundTarget(null); + } + + /** + * Sets the type targeted by this type reference + * + * @param type the type + */ + setTarget() { + if (type == null) { + return; + } + + if (type.eIsProxy()) { + return; + } + + if (this instanceof NamespaceClassifierReference) { + NamespaceClassifierReference nsClassifierReference = (NamespaceClassifierReference) this; + nsClassifierReference.getClassifierReferences().clear(); + nsClassifierReference.getNamespaces().clear(); + nsClassifierReference.getNamespaces().addAll(type.getContainingContainerName()); + ClassifierReference classifierRef = #ClassifierReference; + classifierRef.setTarget(type); + nsClassifierReference.getClassifierReferences().add(classifierRef); + } + } + + /** + * Returns the type referenced by this TypeReference + * considering all concrete subclasses of TypeReference used + * by the Java metamodel. If type parameters are bound in the given reference, + * the bound type will be returned instead of the parameter. + * + * @return the type + */ + getBoundTarget() { + Type type = null; + if (this instanceof ClassifierReference || + this instanceof NamespaceClassifierReference) { + ClassifierReference classifierRef = getPureClassifierReference(); + if (classifierRef != null) { + type = classifierRef.getTarget(); + } + + if (reference instanceof MethodCall) { + MethodCall potentialCloneCall = (MethodCall) reference; + //clone returns the type of the cloned in the case of arrays + ReferenceableElement potentialCloneCallTarget = potentialCloneCall.getTarget(); + if (potentialCloneCallTarget != null && + !potentialCloneCallTarget.eIsProxy() && + "clone".equals(potentialCloneCallTarget.getName())) { + if (potentialCloneCall.getPrevious() instanceof ElementReference) { + ElementReference prevRef = (ElementReference) potentialCloneCall.getPrevious(); + if (prevRef.getTarget() instanceof ArrayTypeable && + ((ArrayTypeable)prevRef.getTarget()).getArrayDimension() > 0) { + type = prevRef.getReferencedType(); + } + } + } + } + } + + else if(this instanceof PrimitiveType) { + return (PrimitiveType) this; + } + + //resolve parameter to real type + if (type instanceof TypeParameter) { + type = ((TypeParameter) type).getBoundType(this, reference); + } + + if (type != null && type.eIsProxy()) { + //this may happen, when e.g. a super type is resolved. It is ok. + return null; + } + + return type; + } + + /** + * Extracts the (possibly nested) classifier reference (if any) + * from this type references. + * + * @return + */ + getPureClassifierReference() { + ClassifierReference classifierReference = null; + if (this instanceof ClassifierReference) { + classifierReference = (ClassifierReference) this; + } + if (this instanceof NamespaceClassifierReference) { + NamespaceClassifierReference nsClassifierReference = (NamespaceClassifierReference) this; + if (!nsClassifierReference.getClassifierReferences().isEmpty()) { + int lastIndex = nsClassifierReference.getClassifierReferences().size() - 1; + classifierReference = nsClassifierReference.getClassifierReferences().get(lastIndex); + } + } + return classifierReference; + } +} diff --git a/Core/org.emftext.language.java/metamodel/java/variables/AdditionalLocalVariable.ejava b/Core/org.emftext.language.java/metamodel/java/variables/AdditionalLocalVariable.ejava index 72a925c4..460e0b72 100644 --- a/Core/org.emftext.language.java/metamodel/java/variables/AdditionalLocalVariable.ejava +++ b/Core/org.emftext.language.java/metamodel/java/variables/AdditionalLocalVariable.ejava @@ -1,12 +1,12 @@ -epackage java.variables; - -import java.parameters.VariableLengthParameter; - -eclass AdditionalLocalVariable { - - getArrayDimension() { - long size = this.getArrayDimensionsBefore().size() + this.getArrayDimensionsAfter().size(); - return size; - } - +epackage java.variables; + +import java.parameters.VariableLengthParameter; + +eclass AdditionalLocalVariable { + + getArrayDimension() { + long size = this.getArrayDimensionsBefore().size() + this.getArrayDimensionsAfter().size(); + return size; + } + } \ No newline at end of file diff --git a/Core/org.emftext.language.java/metamodel/java/variables/Variable.ejava b/Core/org.emftext.language.java/metamodel/java/variables/Variable.ejava index 7eb465bc..3b4dba5f 100644 --- a/Core/org.emftext.language.java/metamodel/java/variables/Variable.ejava +++ b/Core/org.emftext.language.java/metamodel/java/variables/Variable.ejava @@ -1,60 +1,60 @@ -epackage java.variables; - -import java.parameters.VariableLengthParameter; -import java.statements.ExpressionStatement; -import java.references.IdentifierReference; -import java.references.MethodCall; -import java.references.ReferenceableElement; -import java.members.MemberContainer; -import java.members.Method; -import java.types.Type; - -eclass Variable { - - getArrayDimension() { - long size = this.getArrayDimensionsBefore().size() + this.getArrayDimensionsAfter().size(); - if (this instanceof VariableLengthParameter) { - size++; - } - return size; - } - - /** - * Creates a statement that calls the method with the given name on this - * variable. If the variable's type does not offer such a method, null is - * returned. - */ - createMethodCallStatement() { - - ExpressionStatement callStatement = #ExpressionStatement; - callStatement.setExpression(createMethodCall(methodName, arguments)); - return callStatement; - } - - /** - * Creates an expression that calls the method with the given name on this - * variable. If the variable's type does not offer such a method, null is - * returned. - */ - createMethodCall() { - - IdentifierReference thisRef = #IdentifierReference; - thisRef.setTarget(this); - MethodCall methodCall = #MethodCall; - Type thisType = getTypeReference().getTarget(); - if (thisType instanceof MemberContainer) { - MemberContainer castedType = (MemberContainer) thisType; - Method method = castedType.getContainedMethod(methodName); - if (method == null) { - return null; - } - methodCall.setTarget(method); - // add arguments - methodCall.getArguments().addAll(arguments); - thisRef.setNext(methodCall); - return thisRef; - } else { - return null; - } - } +epackage java.variables; + +import java.parameters.VariableLengthParameter; +import java.statements.ExpressionStatement; +import java.references.IdentifierReference; +import java.references.MethodCall; +import java.references.ReferenceableElement; +import java.members.MemberContainer; +import java.members.Method; +import java.types.Type; + +eclass Variable { + + getArrayDimension() { + long size = this.getArrayDimensionsBefore().size() + this.getArrayDimensionsAfter().size(); + if (this instanceof VariableLengthParameter) { + size++; + } + return size; + } + + /** + * Creates a statement that calls the method with the given name on this + * variable. If the variable's type does not offer such a method, null is + * returned. + */ + createMethodCallStatement() { + + ExpressionStatement callStatement = #ExpressionStatement; + callStatement.setExpression(createMethodCall(methodName, arguments)); + return callStatement; + } + + /** + * Creates an expression that calls the method with the given name on this + * variable. If the variable's type does not offer such a method, null is + * returned. + */ + createMethodCall() { + + IdentifierReference thisRef = #IdentifierReference; + thisRef.setTarget(this); + MethodCall methodCall = #MethodCall; + Type thisType = getTypeReference().getTarget(); + if (thisType instanceof MemberContainer) { + MemberContainer castedType = (MemberContainer) thisType; + Method method = castedType.getContainedMethod(methodName); + if (method == null) { + return null; + } + methodCall.setTarget(method); + // add arguments + methodCall.getArguments().addAll(arguments); + thisRef.setNext(methodCall); + return thisRef; + } else { + return null; + } + } } \ No newline at end of file diff --git a/Core/org.emftext.language.java/schema/java_classpath_initializer.exsd b/Core/org.emftext.language.java/schema/java_classpath_initializer.exsd index 2ad59bc7..cebd82bd 100644 --- a/Core/org.emftext.language.java/schema/java_classpath_initializer.exsd +++ b/Core/org.emftext.language.java/schema/java_classpath_initializer.exsd @@ -1,102 +1,102 @@ - - - - - - - - - [Enter description of this extension point.] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [Enter the first release in which this extension point appears.] - - - - - - - - - [Enter extension point usage example here.] - - - - - - - - - [Enter API information here.] - - - - - - - - - [Enter information about supplied implementation of this extension point.] - - - - - + + + + + + + + + [Enter description of this extension point.] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [Enter the first release in which this extension point appears.] + + + + + + + + + [Enter extension point usage example here.] + + + + + + + + + [Enter API information here.] + + + + + + + + + [Enter information about supplied implementation of this extension point.] + + + + + diff --git a/Core/org.emftext.language.java/src/org/emftext/language/java/JavaClasspath.java b/Core/org.emftext.language.java/src/org/emftext/language/java/JavaClasspath.java index aba4cd5b..06c94aad 100755 --- a/Core/org.emftext.language.java/src/org/emftext/language/java/JavaClasspath.java +++ b/Core/org.emftext.language.java/src/org/emftext/language/java/JavaClasspath.java @@ -2,12 +2,12 @@ * Copyright (c) 2006-2013 * Software Technology Group, Dresden University of Technology * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 - * + * * 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: * Software Technology Group - TU Dresden, Germany; * DevBoost GmbH - Berlin, Germany @@ -20,6 +20,7 @@ import java.net.URL; import java.util.Enumeration; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -58,31 +59,31 @@ * as EMF-models. */ public class JavaClasspath extends AdapterImpl { - + /** * Initializers can be registered to initialize each newly created classpath. - * An initializer may be used to connect JaMoPP with other Java tooling + * An initializer may be used to connect JaMoPP with other Java tooling * (e.g., the Eclipse JDT IDE) by reading the classpath from the other tool. *

          - * Initializers can be registered at the classpath via + * Initializers can be registered at the classpath via * {@link JavaClasspath#getInitializers()}. * Inside Eclipse, the extension point * org.emftext.language.java.java_classpath_initializer * may also be used for this. */ public static interface Initializer { - + /** * Initializes the classpath. It is called as soon as the - * first resource of the resource set with which the classpath + * first resource of the resource set with which the classpath * is associated accesses the classpath. - * + * * @param resource One resource of the associated resource set * that gives context for initializing the classpath - * (e.g., the URI of the resource can be analyzed). + * (e.g., the URI of the resource can be analyzed). */ void initialize(Resource resource); - + /** * @return Should be true, if the classpath depends on the resource that * is passed to the {@link Initializer#initialize(Resource)} method. @@ -92,20 +93,20 @@ public static interface Initializer { * used to override this. */ boolean requiresLocalClasspath(); - + /** - * @return false, if the standard lib is provided by the initializer itself + * @return false, if the standard lib is provided by the initializer itself * and should therefore not be registered based on the currently running JVM. - * If only one of the registered initializers returns false, + * If only one of the registered initializers returns false, * the JVM's standard lib is not registered. * The {@link JavaClasspath#OPTION_REGISTER_STD_LIB} option can still be * used to override this. */ boolean requiresStdLib(); } - + private static class InitializerExtensionPointReader { - + private static void read() { if (Platform.isRunning()) { IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry(); @@ -125,14 +126,14 @@ private static void read() { log.log(status); } } - } + } } } public static final String EP_JAVA_CLASSPATH_INITIALIZER = "org.emftext.language.java.java_classpath_initializer"; - + private static Set initializers = null; - + public static Set getInitializers() { if (initializers == null) { initializers = new LinkedHashSet(); @@ -140,7 +141,7 @@ public static Set getInitializers() { } return initializers; } - + private static void readInitializersExtensionPoint() { try { java.lang.Class.forName("org.eclipse.core.runtime.Platform"); @@ -150,7 +151,7 @@ private static void readInitializersExtensionPoint() { } InitializerExtensionPointReader.read(); } - + private static void initialize(Resource resource) { for (Initializer initializer : getInitializers()) { initializer.initialize(resource); @@ -165,16 +166,16 @@ private static void initialize(Resource resource) { * in the global URIConverter.URI_MAP. */ public static final String OPTION_USE_LOCAL_CLASSPATH = "OPTION_USE_LOCAL_CLASSPATH"; - + /** * If this option is set to true (default) in a resource set, the Java standard library * (i.e., rt.jar or classes.jar) is registered automatically based on * System.getProperty("sun.boot.class.path"). */ public static final String OPTION_REGISTER_STD_LIB = "OPTION_REGISTER_STD_LIB"; - + /** - * If this option is set to true in a resource set, all names in a Java resource will + * If this option is set to true in a resource set, all names in a Java resource will * be printed as full-qualified names when the resource is saved. If this option is * used, imports do not need to be updated when Java resources are modified. * This option is set to false by default. @@ -213,11 +214,11 @@ public static JavaClasspath get(Resource resource) { } else { JavaClasspath myClasspath = get(resource.getResourceSet()); if (!myClasspath.initialized) { - //set to true before calling initializers, + //set to true before calling initializers, //since the initializers most likely call this //method again to obtain the classpath. myClasspath.initialized = true; - initialize(resource); + initialize(resource); } return myClasspath; } @@ -240,7 +241,7 @@ public static JavaClasspath get(ResourceSet resourceSet) { Object registerStdLibOption = resourceSet.getLoadOptions().get(OPTION_REGISTER_STD_LIB); if (localClasspathOption == null) { localClasspathOption = Boolean.valueOf(useLocalClasspathDefault()); - } + } if (registerStdLibOption == null) { registerStdLibOption = Boolean.valueOf(registerStdLibDefault()); } @@ -261,13 +262,13 @@ public static JavaClasspath get(ResourceSet resourceSet) { } javaClasspath.uriConverter = newURIConverter; } - + return javaClasspath; } } JavaClasspath myClasspath = new JavaClasspath( - resourceSet.getURIConverter()); - + resourceSet.getURIConverter()); + resourceSet.eAdapters().add(myClasspath); if (Boolean.TRUE.equals(registerStdLibOption)) { @@ -279,7 +280,7 @@ public static JavaClasspath get(ResourceSet resourceSet) { return get(); } - + public static void reset() { globalClasspath = null; } @@ -292,7 +293,7 @@ protected static boolean useLocalClasspathDefault() { } return useLocalClasspathDefault; } - + protected static boolean registerStdLibDefault() { boolean registerStdLibDefault = true; for (Initializer initializer : getInitializers()) { @@ -301,7 +302,7 @@ protected static boolean registerStdLibDefault() { } return registerStdLibDefault; } - + protected Map> packageClassifierMap = new HashMap>(); @@ -398,26 +399,26 @@ public void registerClassifierJar(URI jarURI, String prefix) { while (entries.hasMoreElements()) { ZipEntry entry = entries.nextElement(); - if (entry.getName().endsWith(JavaUniquePathConstructor.JAVA_CLASS_FILE_EXTENSION) + if (entry.getName().endsWith(JavaUniquePathConstructor.JAVA_CLASS_FILE_EXTENSION) && entry.getName().startsWith(prefix)) { String fullName = entry.getName(); String uri = "archive:" + jarURI.toString() + "!/" + fullName; fullName = fullName.substring(prefix.length()); - fullName = fullName.replaceAll("/", "."); + fullName = fullName.replaceAll("/", JavaUniquePathConstructor.PACKAGE_SEPARATOR); String packageName = ""; String className = ""; - int idx = fullName.lastIndexOf("."); - idx = fullName.substring(0, idx).lastIndexOf("."); + int idx = fullName.lastIndexOf(JavaUniquePathConstructor.PACKAGE_SEPARATOR); + idx = fullName.substring(0, idx).lastIndexOf(JavaUniquePathConstructor.PACKAGE_SEPARATOR); if (idx >= 0) { packageName = fullName.substring(0, idx); - className = fullName.substring(idx + 1, fullName.lastIndexOf(".")); + className = fullName.substring(idx + 1, fullName.lastIndexOf(JavaUniquePathConstructor.PACKAGE_SEPARATOR)); } else { - className = fullName.substring(0, fullName.lastIndexOf(".")); + className = fullName.substring(0, fullName.lastIndexOf(JavaUniquePathConstructor.PACKAGE_SEPARATOR)); } registerClassifier(packageName, className, URI.createURI(uri)); } @@ -430,15 +431,15 @@ public void registerSourceOrClassFileFolder(URI folderURI) { } File sourceFolder = new File(folderURI.toFileString()); if (sourceFolder.exists()) { - internalRegisterSourceOrClassFileFolder(sourceFolder, ""); + internalRegisterSourceOrClassFileFolder(sourceFolder, ""); } } - + private void internalRegisterSourceOrClassFileFolder(File folder, String packageName) { for (File child : folder.listFiles()) { if (!child.getName().startsWith(".")) { //no hidden files if (child.isDirectory()) { - internalRegisterSourceOrClassFileFolder(child, + internalRegisterSourceOrClassFileFolder(child, packageName + child.getName() + JavaUniquePathConstructor.PACKAGE_SEPARATOR); } else { if (child.getName().endsWith(JavaUniquePathConstructor.JAVA_FILE_EXTENSION) @@ -479,8 +480,8 @@ public void registerClassifier(String packageName, String classifierName, URI ur if (classifierName == null || uri == null) { return; } - if (!packageName.endsWith(".") && !packageName.endsWith("$")) { - packageName = packageName + "."; + if (!packageName.endsWith(JavaUniquePathConstructor.PACKAGE_SEPARATOR) && !packageName.endsWith(JavaUniquePathConstructor.CLASSIFIER_SEPARATOR)) { + packageName = packageName + JavaUniquePathConstructor.PACKAGE_SEPARATOR; } String innerName = classifierName; @@ -492,7 +493,7 @@ public void registerClassifier(String packageName, String classifierName, URI ur //the classifier name contains a "$" innerName = classifierName.substring(idx + 1); outerName = classifierName.substring(0, idx + 1); - if (".".equals(packageName)) { + if (JavaUniquePathConstructor.PACKAGE_SEPARATOR.equals(packageName)) { qualifiedName = outerName; } else { @@ -504,7 +505,7 @@ public void registerClassifier(String packageName, String classifierName, URI ur registerPackage(qualifiedName, innerName); String fullName = null; - if (".".equals(packageName)) { + if (JavaUniquePathConstructor.PACKAGE_SEPARATOR.equals(packageName)) { fullName = classifierName; } else { @@ -523,18 +524,18 @@ public void registerClassifier(String packageName, String classifierName, URI ur getURIMap().put(logicalUri, uri); String outerPackage = qualifiedName; - while(outerPackage.endsWith("$")) { + while(outerPackage.endsWith(JavaUniquePathConstructor.CLASSIFIER_SEPARATOR)) { //make sure outer classes are registered; //This is required when class names contain $ symbols outerPackage = outerPackage.substring(0, outerPackage.length() - 1); - idx = outerPackage.lastIndexOf("$"); + idx = outerPackage.lastIndexOf(JavaUniquePathConstructor.CLASSIFIER_SEPARATOR); if (idx == -1) { - idx = outerPackage.lastIndexOf("."); + idx = outerPackage.lastIndexOf(JavaUniquePathConstructor.PACKAGE_SEPARATOR); } String outerClassifier = outerPackage.substring(idx + 1); outerPackage = outerPackage.substring(0, idx + 1); if ("".equals(outerPackage)) { - outerPackage = "."; + outerPackage = JavaUniquePathConstructor.PACKAGE_SEPARATOR; } registerPackage(outerPackage, outerClassifier); @@ -564,8 +565,8 @@ public void unRegisterClassifier(String packageName, String classifierName) { return; } - if (!packageName.endsWith(".")) { - packageName = packageName + "."; + if (!packageName.endsWith(JavaUniquePathConstructor.PACKAGE_SEPARATOR)) { + packageName = packageName + JavaUniquePathConstructor.PACKAGE_SEPARATOR; } String innerName = classifierName; @@ -576,7 +577,7 @@ public void unRegisterClassifier(String packageName, String classifierName) { if (idx >= 0) { innerName = classifierName.substring(idx + 1); outerName = classifierName.substring(0, idx + 1); - if (".".equals(packageName)) { + if (JavaUniquePathConstructor.PACKAGE_SEPARATOR.equals(packageName)) { qualifiedName = outerName; } else { @@ -588,7 +589,7 @@ public void unRegisterClassifier(String packageName, String classifierName) { unRegisterPackage(qualifiedName, innerName); String fullName = null; - if (".".equals(packageName)) { + if (JavaUniquePathConstructor.PACKAGE_SEPARATOR.equals(packageName)) { fullName = classifierName; } else { @@ -632,13 +633,18 @@ public Map> getPackageClassifierMap() { * @return proxy element */ public EObject getClassifier(String fullQualifiedName) { - InternalEObject classifierProxy = (InternalEObject) ClassifiersFactory.eINSTANCE.createClass(); - URI proxyURI = JavaUniquePathConstructor.getClassifierURI(fullQualifiedName); - classifierProxy.eSetProxyURI(proxyURI); - //set also the name to reason about it without resolving the proxy - ((Class)classifierProxy).setName(JavaUniquePathConstructor.getSimpleClassName(fullQualifiedName)); - return classifierProxy; + if(!classifierCache.containsKey(fullQualifiedName)) { + InternalEObject classifierProxy = (InternalEObject) ClassifiersFactory.eINSTANCE.createClass(); + URI proxyURI = JavaUniquePathConstructor.getClassifierURI(fullQualifiedName); + classifierProxy.eSetProxyURI(proxyURI); + //set also the name to reason about it without resolving the proxy + ((Class)classifierProxy).setName(JavaUniquePathConstructor.getSimpleClassName(fullQualifiedName)); + classifierCache.put(fullQualifiedName, classifierProxy); + } + + return classifierCache.get(fullQualifiedName); } + private LinkedHashMap classifierCache = new LinkedHashMap(); /** * Constructs a list of proxies that point at all classifiers @@ -651,7 +657,7 @@ public EObject getClassifier(String fullQualifiedName) { * @return list of proxies */ public EList getClassifiers(String packageName, String classifierQuery) { - int idx = classifierQuery.lastIndexOf("$"); + int idx = classifierQuery.lastIndexOf(JavaUniquePathConstructor.CLASSIFIER_SEPARATOR); if (idx >= 0) { packageName = packageName + classifierQuery.substring(0, idx + 1); classifierQuery = classifierQuery.substring(idx + 1); @@ -663,13 +669,13 @@ public EList getClassifiers(String packageName, String classifierQuery) } EList resultList = new UniqueEList(); - + synchronized (this) { for (String classifierName : getPackageContents(packageName)) { if (classifierQuery.equals("*") || classifierQuery.equals(classifierName)) { InternalEObject classifierProxy = (InternalEObject) ClassifiersFactory.eINSTANCE.createClass(); String fullQualifiedName = null; - if ("".equals(packageName) || ".".equals(packageName)) { + if ("".equals(packageName) || JavaUniquePathConstructor.PACKAGE_SEPARATOR.equals(packageName)) { fullQualifiedName = classifierName; } else { diff --git a/Core/org.emftext.language.java/src/org/emftext/language/java/JavaUniquePathConstructor.java b/Core/org.emftext.language.java/src/org/emftext/language/java/JavaUniquePathConstructor.java index 4610e3f1..6b3d3879 100755 --- a/Core/org.emftext.language.java/src/org/emftext/language/java/JavaUniquePathConstructor.java +++ b/Core/org.emftext.language.java/src/org/emftext/language/java/JavaUniquePathConstructor.java @@ -2,12 +2,12 @@ * Copyright (c) 2006-2012 * Software Technology Group, Dresden University of Technology * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 - * + * * 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: * Software Technology Group - TU Dresden, Germany; * DevBoost GmbH - Berlin, Germany @@ -17,7 +17,6 @@ import java.util.regex.Pattern; -import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; import org.emftext.language.java.commons.NamespaceAwareElement; @@ -73,11 +72,18 @@ public class JavaUniquePathConstructor { * Java's class file extension (.class). */ public static final String JAVA_CLASS_FILE_EXTENSION = ".class"; - + + /** + * Pattern to split for "\\.".
          + * We cache this regular expression because it is used very frequently. + */ + public static final Pattern PACKAGE_SEPARATOR_REGEX_PATTERN = Pattern.compile("\\" + PACKAGE_SEPARATOR); + /** + * Pattern to split for "\\$".
          * We cache this regular expression because it is used very frequently. */ - private static final Pattern CLASSIFIER_SEPARATOR_REGEX_PATTERN = Pattern.compile("\\" + CLASSIFIER_SEPARATOR); + public static final Pattern CLASSIFIER_SEPARATOR_REGEX_PATTERN = Pattern.compile("\\" + CLASSIFIER_SEPARATOR); /** * Constructs an URI from a fully qualified classifier name @@ -160,25 +166,13 @@ public static String getSimpleClassName(String fullQualifiedName) { * @return */ public static String packageName(NamespaceAwareElement nsaElement) { - EList packageNameSegements = nsaElement.getNamespaces(); - String packageName = packageName(packageNameSegements); - - if (packageName == null) { - packageName = ""; - } - return packageName; - } - - private static String packageName(EList packageNameSegements) { - String packageName = null; - for(String packageNamePart : packageNameSegements) { - if (packageName == null) { - packageName = packageNamePart; - } - else { - packageName = packageName + PACKAGE_SEPARATOR + packageNamePart; - } - } - return packageName; + StringBuilder nameBuilder = new StringBuilder(); + for(String packageNamePart : nsaElement.getNamespaces()) { + if (nameBuilder.length() > 0) { + nameBuilder.append(PACKAGE_SEPARATOR); + } + nameBuilder.append(packageNamePart); + } + return nameBuilder.toString(); } } diff --git a/Core/org.emftext.language.java/templates/model/Class/basicSetGenFeature.TODO.override.javajetinc b/Core/org.emftext.language.java/templates/model/Class/basicSetGenFeature.TODO.override.javajetinc index 07693cd0..8ec34285 100644 --- a/Core/org.emftext.language.java/templates/model/Class/basicSetGenFeature.TODO.override.javajetinc +++ b/Core/org.emftext.language.java/templates/model/Class/basicSetGenFeature.TODO.override.javajetinc @@ -1,2 +1,2 @@ -<%@ include file="setGenFeature.TODO.override.javajetinc" fail="alternative" %> +<%@ include file="setGenFeature.TODO.override.javajetinc" fail="alternative" %> return msgs; \ No newline at end of file diff --git a/Core/org.emftext.language.java/templates/model/Class/getGenFeature.TODO.override.javajetinc b/Core/org.emftext.language.java/templates/model/Class/getGenFeature.TODO.override.javajetinc index b122707a..754ece2d 100644 --- a/Core/org.emftext.language.java/templates/model/Class/getGenFeature.TODO.override.javajetinc +++ b/Core/org.emftext.language.java/templates/model/Class/getGenFeature.TODO.override.javajetinc @@ -1,104 +1,104 @@ -<% -org.eclipse.emf.ecore.EStructuralFeature eFeature = genFeature.getEcoreFeature(); -org.eclipse.emf.ecore.EAnnotation genModelAnnotation = eFeature.getEAnnotation("http://www.eclipse.org/emf/2002/GenModel"); -String featureName = null; -String featureAccessor = null; -org.eclipse.emf.codegen.ecore.genmodel.GenClass boxClass = null; -String boxAccessor = null; - -if (genModelAnnotation != null) { - featureName = (String)genModelAnnotation.getDetails().get("derivedFromExtensibleFeature"); - org.eclipse.emf.codegen.ecore.genmodel.GenFeature extensibleFeature = null; - for(org.eclipse.emf.codegen.ecore.genmodel.GenFeature cand : genFeature.getGenClass().getGenFeatures()) { - if (cand.getName().equals(featureName)) { - extensibleFeature = cand; - featureAccessor = cand.getGetAccessor(); - } - } - if (eFeature.getEType() instanceof org.eclipse.emf.ecore.EDataType) { - String boxClassName = genFeature.getGenClass().getName() + genFeature.getName().substring(0,1).toUpperCase() + genFeature.getName().substring(1); - for(org.eclipse.emf.codegen.ecore.genmodel.GenPackage pcand : genFeature.getGenClass().getGenPackage().getSubGenPackages()) { - if (pcand.getEcorePackage().getName().equals("ptypes")) { - for(org.eclipse.emf.codegen.ecore.genmodel.GenClass ccand : pcand.getGenClasses()) { - if (ccand.getName().equals(boxClassName)) { - boxClass = ccand; - } - } - } - } - boxAccessor = featureAccessor; - if (genFeature.isBooleanType()) { - featureAccessor = "isValue"; - } - else { - featureAccessor = "getValue"; - } - } - else { - String boxClassName = genFeature.getGenClass().getName() + genFeature.getName().substring(0,1).toUpperCase() + genFeature.getName().substring(1); - for(org.eclipse.emf.codegen.ecore.genmodel.GenPackage pcand : genFeature.getGenClass().getGenPackage().getSubGenPackages()) { - if (pcand.getEcorePackage().getName().equals("rtypes")) { - for(org.eclipse.emf.codegen.ecore.genmodel.GenClass ccand : pcand.getGenClasses()) { - if (ccand.getName().equals(boxClassName)) { - boxClass = ccand; - } - } - } - } - if (boxClass != null) { - boxAccessor = featureAccessor; - featureAccessor = "getValue"; - } - } -} -%> -<% if (featureAccessor == null) { %> - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); -<% } else if (boxAccessor != null && boxClass != null) { %> - <% if (eFeature.isMany()) { %> - EList list = <%=boxAccessor%>(); - <%=genFeature.getType(null)%> result = new org.eclipse.emf.common.util.BasicEList<<%=genFeature.getTypeGenClassifier().getRawInstanceClassName()%>>(); - for(Object value : list) { - if (!(value instanceof <%=boxClass.getQualifiedInterfaceName()%> )) { - return org.eclipse.emf.common.util.ECollections.emptyEList(); - } - else { - result.add(((<%=boxClass.getQualifiedInterfaceName()%>)value).<%=featureAccessor%>()); - } - } - //TODO make result an (un)wrapping list - return result; - <% } else { %> - Object value = <%=boxAccessor%>(); - if (value instanceof <%=boxClass.getQualifiedInterfaceName()%>) { - return ((<%=boxClass.getQualifiedClassName()%>) value).<%=featureAccessor%>(); - } - <% if (genFeature.isBooleanType()) { %> - return false; - <% } else if ("char".equals(genFeature.getType(null))) { %> - return ' '; - <% } else if (genFeature.isPrimitiveType()) { %> - return -1; - <% } else { %> - return null; - <% } %> - <% } %> -<% } else { %> - <% if (eFeature.isMany()) { %> - EList list = <%=featureAccessor%>(); - for(Object value : list) { - if (!(value instanceof <%=genFeature.getTypeGenClass().getQualifiedInterfaceName()%>)) { - return org.eclipse.emf.common.util.ECollections.emptyEList(); - } - } - return (<%=genFeature.getType(null)%>) list; - <% } else { %> - Object value = <%=featureAccessor%>(); - if (value instanceof <%=genFeature.getTypeGenClass().getQualifiedInterfaceName()%>) { - return (<%=genFeature.getTypeGenClass().getQualifiedInterfaceName()%>) value; - } - return null; - <% } %> +<% +org.eclipse.emf.ecore.EStructuralFeature eFeature = genFeature.getEcoreFeature(); +org.eclipse.emf.ecore.EAnnotation genModelAnnotation = eFeature.getEAnnotation("http://www.eclipse.org/emf/2002/GenModel"); +String featureName = null; +String featureAccessor = null; +org.eclipse.emf.codegen.ecore.genmodel.GenClass boxClass = null; +String boxAccessor = null; + +if (genModelAnnotation != null) { + featureName = (String)genModelAnnotation.getDetails().get("derivedFromExtensibleFeature"); + org.eclipse.emf.codegen.ecore.genmodel.GenFeature extensibleFeature = null; + for(org.eclipse.emf.codegen.ecore.genmodel.GenFeature cand : genFeature.getGenClass().getGenFeatures()) { + if (cand.getName().equals(featureName)) { + extensibleFeature = cand; + featureAccessor = cand.getGetAccessor(); + } + } + if (eFeature.getEType() instanceof org.eclipse.emf.ecore.EDataType) { + String boxClassName = genFeature.getGenClass().getName() + genFeature.getName().substring(0,1).toUpperCase() + genFeature.getName().substring(1); + for(org.eclipse.emf.codegen.ecore.genmodel.GenPackage pcand : genFeature.getGenClass().getGenPackage().getSubGenPackages()) { + if (pcand.getEcorePackage().getName().equals("ptypes")) { + for(org.eclipse.emf.codegen.ecore.genmodel.GenClass ccand : pcand.getGenClasses()) { + if (ccand.getName().equals(boxClassName)) { + boxClass = ccand; + } + } + } + } + boxAccessor = featureAccessor; + if (genFeature.isBooleanType()) { + featureAccessor = "isValue"; + } + else { + featureAccessor = "getValue"; + } + } + else { + String boxClassName = genFeature.getGenClass().getName() + genFeature.getName().substring(0,1).toUpperCase() + genFeature.getName().substring(1); + for(org.eclipse.emf.codegen.ecore.genmodel.GenPackage pcand : genFeature.getGenClass().getGenPackage().getSubGenPackages()) { + if (pcand.getEcorePackage().getName().equals("rtypes")) { + for(org.eclipse.emf.codegen.ecore.genmodel.GenClass ccand : pcand.getGenClasses()) { + if (ccand.getName().equals(boxClassName)) { + boxClass = ccand; + } + } + } + } + if (boxClass != null) { + boxAccessor = featureAccessor; + featureAccessor = "getValue"; + } + } +} +%> +<% if (featureAccessor == null) { %> + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); +<% } else if (boxAccessor != null && boxClass != null) { %> + <% if (eFeature.isMany()) { %> + EList list = <%=boxAccessor%>(); + <%=genFeature.getType(null)%> result = new org.eclipse.emf.common.util.BasicEList<<%=genFeature.getTypeGenClassifier().getRawInstanceClassName()%>>(); + for(Object value : list) { + if (!(value instanceof <%=boxClass.getQualifiedInterfaceName()%> )) { + return org.eclipse.emf.common.util.ECollections.emptyEList(); + } + else { + result.add(((<%=boxClass.getQualifiedInterfaceName()%>)value).<%=featureAccessor%>()); + } + } + //TODO make result an (un)wrapping list + return result; + <% } else { %> + Object value = <%=boxAccessor%>(); + if (value instanceof <%=boxClass.getQualifiedInterfaceName()%>) { + return ((<%=boxClass.getQualifiedClassName()%>) value).<%=featureAccessor%>(); + } + <% if (genFeature.isBooleanType()) { %> + return false; + <% } else if ("char".equals(genFeature.getType(null))) { %> + return ' '; + <% } else if (genFeature.isPrimitiveType()) { %> + return -1; + <% } else { %> + return null; + <% } %> + <% } %> +<% } else { %> + <% if (eFeature.isMany()) { %> + EList list = <%=featureAccessor%>(); + for(Object value : list) { + if (!(value instanceof <%=genFeature.getTypeGenClass().getQualifiedInterfaceName()%>)) { + return org.eclipse.emf.common.util.ECollections.emptyEList(); + } + } + return (<%=genFeature.getType(null)%>) list; + <% } else { %> + Object value = <%=featureAccessor%>(); + if (value instanceof <%=genFeature.getTypeGenClass().getQualifiedInterfaceName()%>) { + return (<%=genFeature.getTypeGenClass().getQualifiedInterfaceName()%>) value; + } + return null; + <% } %> <% } %> \ No newline at end of file diff --git a/Core/org.emftext.language.java/templates/model/Class/setGenFeature.TODO.override.javajetinc b/Core/org.emftext.language.java/templates/model/Class/setGenFeature.TODO.override.javajetinc index c58dd3ac..2556406b 100644 --- a/Core/org.emftext.language.java/templates/model/Class/setGenFeature.TODO.override.javajetinc +++ b/Core/org.emftext.language.java/templates/model/Class/setGenFeature.TODO.override.javajetinc @@ -1,70 +1,70 @@ -<% -org.eclipse.emf.ecore.EStructuralFeature eFeature = genFeature.getEcoreFeature(); -org.eclipse.emf.ecore.EAnnotation genModelAnnotation = eFeature.getEAnnotation("http://www.eclipse.org/emf/2002/GenModel"); -String featureName = null; -String featureAccessor = null; -String featureSetter = null; -org.eclipse.emf.codegen.ecore.genmodel.GenClass boxClass = null; -String boxAccessor = null; -String boxSetter = null; - -if (genModelAnnotation != null) { - featureName = (String)genModelAnnotation.getDetails().get("derivedFromExtensibleFeature"); - org.eclipse.emf.codegen.ecore.genmodel.GenFeature extensibleFeature = null; - for(org.eclipse.emf.codegen.ecore.genmodel.GenFeature cand : genFeature.getGenClass().getGenFeatures()) { - if (cand.getName().equals(featureName)) { - extensibleFeature = cand; - featureAccessor = cand.getGetAccessor(); - featureSetter = "set" + cand.getAccessorName(); - } - } - if (eFeature.getEType() instanceof org.eclipse.emf.ecore.EDataType) { - String boxClassName = genFeature.getGenClass().getName() + genFeature.getName().substring(0,1).toUpperCase() + genFeature.getName().substring(1); - for(org.eclipse.emf.codegen.ecore.genmodel.GenPackage pcand : genFeature.getGenClass().getGenPackage().getSubGenPackages()) { - if (pcand.getEcorePackage().getName().equals("ptypes")) { - for(org.eclipse.emf.codegen.ecore.genmodel.GenClass ccand : pcand.getGenClasses()) { - if (ccand.getName().equals(boxClassName)) { - boxClass = ccand; - } - } - } - } - boxAccessor = featureAccessor; - boxSetter = featureSetter; - featureSetter = "setValue"; - } - else { - String boxClassName = genFeature.getGenClass().getName() + genFeature.getName().substring(0,1).toUpperCase() + genFeature.getName().substring(1); - for(org.eclipse.emf.codegen.ecore.genmodel.GenPackage pcand : genFeature.getGenClass().getGenPackage().getSubGenPackages()) { - if (pcand.getEcorePackage().getName().equals("rtypes")) { - for(org.eclipse.emf.codegen.ecore.genmodel.GenClass ccand : pcand.getGenClasses()) { - if (ccand.getName().equals(boxClassName)) { - boxClass = ccand; - } - } - } - } - if (boxClass != null) { - boxAccessor = featureAccessor; - boxSetter = featureSetter; - featureSetter = "setValue"; - } - } -} -%> -<% if (featureAccessor == null) { %> - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); -<% } else if (boxAccessor != null && boxClass != null) { %> - Object value = <%=boxAccessor%>(); - if (value == null) { - value = <%=boxClass.getGenPackage().getQualifiedFactoryInterfaceName()%>.eINSTANCE.create<%=boxClass.getName()%>(); - <%=boxSetter%>((<%=boxClass.getQualifiedInterfaceName()%>)value); - } - if (value instanceof <%=boxClass.getQualifiedInterfaceName()%>) { - ((<%=boxClass.getQualifiedInterfaceName()%>)value).<%=featureSetter%>(new<%=genFeature.getCapName()%>); - } -<% } else { %> - <%=featureSetter%>((<%=genFeature.getTypeGenClass().getQualifiedInterfaceName()%>) new<%=genFeature.getCapName()%>); -<% } %> +<% +org.eclipse.emf.ecore.EStructuralFeature eFeature = genFeature.getEcoreFeature(); +org.eclipse.emf.ecore.EAnnotation genModelAnnotation = eFeature.getEAnnotation("http://www.eclipse.org/emf/2002/GenModel"); +String featureName = null; +String featureAccessor = null; +String featureSetter = null; +org.eclipse.emf.codegen.ecore.genmodel.GenClass boxClass = null; +String boxAccessor = null; +String boxSetter = null; + +if (genModelAnnotation != null) { + featureName = (String)genModelAnnotation.getDetails().get("derivedFromExtensibleFeature"); + org.eclipse.emf.codegen.ecore.genmodel.GenFeature extensibleFeature = null; + for(org.eclipse.emf.codegen.ecore.genmodel.GenFeature cand : genFeature.getGenClass().getGenFeatures()) { + if (cand.getName().equals(featureName)) { + extensibleFeature = cand; + featureAccessor = cand.getGetAccessor(); + featureSetter = "set" + cand.getAccessorName(); + } + } + if (eFeature.getEType() instanceof org.eclipse.emf.ecore.EDataType) { + String boxClassName = genFeature.getGenClass().getName() + genFeature.getName().substring(0,1).toUpperCase() + genFeature.getName().substring(1); + for(org.eclipse.emf.codegen.ecore.genmodel.GenPackage pcand : genFeature.getGenClass().getGenPackage().getSubGenPackages()) { + if (pcand.getEcorePackage().getName().equals("ptypes")) { + for(org.eclipse.emf.codegen.ecore.genmodel.GenClass ccand : pcand.getGenClasses()) { + if (ccand.getName().equals(boxClassName)) { + boxClass = ccand; + } + } + } + } + boxAccessor = featureAccessor; + boxSetter = featureSetter; + featureSetter = "setValue"; + } + else { + String boxClassName = genFeature.getGenClass().getName() + genFeature.getName().substring(0,1).toUpperCase() + genFeature.getName().substring(1); + for(org.eclipse.emf.codegen.ecore.genmodel.GenPackage pcand : genFeature.getGenClass().getGenPackage().getSubGenPackages()) { + if (pcand.getEcorePackage().getName().equals("rtypes")) { + for(org.eclipse.emf.codegen.ecore.genmodel.GenClass ccand : pcand.getGenClasses()) { + if (ccand.getName().equals(boxClassName)) { + boxClass = ccand; + } + } + } + } + if (boxClass != null) { + boxAccessor = featureAccessor; + boxSetter = featureSetter; + featureSetter = "setValue"; + } + } +} +%> +<% if (featureAccessor == null) { %> + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); +<% } else if (boxAccessor != null && boxClass != null) { %> + Object value = <%=boxAccessor%>(); + if (value == null) { + value = <%=boxClass.getGenPackage().getQualifiedFactoryInterfaceName()%>.eINSTANCE.create<%=boxClass.getName()%>(); + <%=boxSetter%>((<%=boxClass.getQualifiedInterfaceName()%>)value); + } + if (value instanceof <%=boxClass.getQualifiedInterfaceName()%>) { + ((<%=boxClass.getQualifiedInterfaceName()%>)value).<%=featureSetter%>(new<%=genFeature.getCapName()%>); + } +<% } else { %> + <%=featureSetter%>((<%=genFeature.getTypeGenClass().getQualifiedInterfaceName()%>) new<%=genFeature.getCapName()%>); +<% } %> diff --git a/Deploy/org.jamopp.deploy/.project b/Deploy/org.jamopp.deploy/.project index 955eb2d6..bc98be8f 100644 --- a/Deploy/org.jamopp.deploy/.project +++ b/Deploy/org.jamopp.deploy/.project @@ -1,11 +1,11 @@ - - - org.jamopp.deploy - - - - - - - - + + + org.jamopp.deploy + + + + + + + + diff --git a/Deploy/org.jamopp.deploy/associateSites.xml b/Deploy/org.jamopp.deploy/associateSites.xml index bbad373c..b0b7e5a0 100644 --- a/Deploy/org.jamopp.deploy/associateSites.xml +++ b/Deploy/org.jamopp.deploy/associateSites.xml @@ -1,11 +1,11 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/Deploy/org.jamopp.deploy/site.xml b/Deploy/org.jamopp.deploy/site.xml index 07b8317c..80ccb107 100755 --- a/Deploy/org.jamopp.deploy/site.xml +++ b/Deploy/org.jamopp.deploy/site.xml @@ -1,21 +1,21 @@ - - - - Update site for JaMoPP (Java Model Parser and Printer) - - - - - - - - - - - - - - - JaMoPP: Java Model Parser and Printer (EMFText-based Java support for EMF modelling tools). - - + + + + Update site for JaMoPP (Java Model Parser and Printer) + + + + + + + + + + + + + + + JaMoPP: Java Model Parser and Printer (EMFText-based Java support for EMF modelling tools). + + diff --git a/Doc/org.emftext.language.java.doc/.texlipse b/Doc/org.emftext.language.java.doc/.texlipse index 4f3d3c65..f0e781ab 100644 --- a/Doc/org.emftext.language.java.doc/.texlipse +++ b/Doc/org.emftext.language.java.doc/.texlipse @@ -1,13 +1,13 @@ -#TeXlipse project settings -#Mon Mar 01 16:03:36 CET 2010 -builderNum=2 -outputDir=pdf/ -makeIndSty= -bibrefDir= -outputFormat=pdf -tempDir=temp -mainTexFile=EMFTextGuide.tex -outputFile=EMFTextGuide.pdf -langSpell= -markDer=false -srcDir=latex/ +#TeXlipse project settings +#Mon Mar 01 16:03:36 CET 2010 +builderNum=2 +outputDir=pdf/ +makeIndSty= +bibrefDir= +outputFormat=pdf +tempDir=temp +mainTexFile=EMFTextGuide.tex +outputFile=EMFTextGuide.pdf +langSpell= +markDer=false +srcDir=latex/ diff --git a/Doc/org.emftext.language.java.doc/build.properties b/Doc/org.emftext.language.java.doc/build.properties index 54bdd5f5..f122c21a 100755 --- a/Doc/org.emftext.language.java.doc/build.properties +++ b/Doc/org.emftext.language.java.doc/build.properties @@ -1,6 +1,6 @@ -source.. = src/ -output.. = bin/ -bin.includes = plugin.xml,\ - META-INF/,\ - *.xml,\ - . +source.. = src/ +output.. = bin/ +bin.includes = plugin.xml,\ + META-INF/,\ + *.xml,\ + . diff --git a/Doc/org.emftext.language.java.doc/plugin.xml b/Doc/org.emftext.language.java.doc/plugin.xml index 640bec3d..fb18db37 100755 --- a/Doc/org.emftext.language.java.doc/plugin.xml +++ b/Doc/org.emftext.language.java.doc/plugin.xml @@ -1,8 +1,8 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/Doc/org.emftext.language.java.doc/toc.xml b/Doc/org.emftext.language.java.doc/toc.xml index fe325aa9..0f3ddfb4 100755 --- a/Doc/org.emftext.language.java.doc/toc.xml +++ b/Doc/org.emftext.language.java.doc/toc.xml @@ -1,8 +1,8 @@ - - - - - - - - + + + + + + + + diff --git a/Eclipse-Integration/org.emftext.language.java.edit/.classpath b/Eclipse-Integration/org.emftext.language.java.edit/.classpath index e4dad7e7..36157842 100644 --- a/Eclipse-Integration/org.emftext.language.java.edit/.classpath +++ b/Eclipse-Integration/org.emftext.language.java.edit/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/Eclipse-Integration/org.emftext.language.java.edit/plugin.properties b/Eclipse-Integration/org.emftext.language.java.edit/plugin.properties index f8438a47..b738bbc3 100644 --- a/Eclipse-Integration/org.emftext.language.java.edit/plugin.properties +++ b/Eclipse-Integration/org.emftext.language.java.edit/plugin.properties @@ -1,391 +1,391 @@ -# Copyright (c) 2006-2011 -# Software Technology Group, Dresden University of Technology -# -# 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: -# Software Technology Group - TU Dresden, Germany -# - initial API and implementation -# - -pluginName = Java Edit Support -providerName = www.example.org - -_UI_CreateChild_text = {0} -_UI_CreateChild_text2 = {1} {0} -_UI_CreateChild_text3 = {1} -_UI_CreateChild_tooltip = Create New {0} Under {1} Feature -_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}. -_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent. - -_UI_PropertyDescriptor_description = The {0} of the {1} - -_UI_Annotable_type = Annotable -_UI_AnnotationInstance_type = Annotation Instance -_UI_AnnotationParameter_type = Annotation Parameter -_UI_SingleAnnotationParameter_type = Single Annotation Parameter -_UI_AnnotationParameterList_type = Annotation Parameter List -_UI_AnnotationAttributeSetting_type = Annotation Attribute Setting -_UI_AnnotationValue_type = Annotation Value -_UI_AnnotationAttribute_type = Annotation Attribute -_UI_ArrayTypeable_type = Array Typeable -_UI_ArrayDimension_type = Array Dimension -_UI_ArrayInitializer_type = Array Initializer -_UI_ArrayInitializationValue_type = Array Initialization Value -_UI_ArrayInstantiation_type = Array Instantiation -_UI_ArrayInstantiationBySize_type = Array Instantiation By Size -_UI_ArrayInstantiationByValues_type = Array Instantiation By Values -_UI_ArrayInstantiationByValuesUntyped_type = Array Instantiation By Values Untyped -_UI_ArrayInstantiationByValuesTyped_type = Array Instantiation By Values Typed -_UI_ArraySelector_type = Array Selector -_UI_Classifier_type = Classifier -_UI_ConcreteClassifier_type = Concrete Classifier -_UI_Implementor_type = Implementor -_UI_Class_type = Class -_UI_Interface_type = Interface -_UI_Enumeration_type = Enumeration -_UI_Annotation_type = Annotation -_UI_AnonymousClass_type = Anonymous Class -_UI_Commentable_type = Commentable -_UI_NamedElement_type = Named Element -_UI_NamespaceAwareElement_type = Namespace Aware Element -_UI_JavaRoot_type = Java Root -_UI_CompilationUnit_type = Compilation Unit -_UI_Package_type = Package -_UI_EmptyModel_type = Empty Model -_UI_ExpressionList_type = Expression List -_UI_Expression_type = Expression -_UI_AssignmentExpression_type = Assignment Expression -_UI_AssignmentExpressionChild_type = Assignment Expression Child -_UI_ConditionalExpression_type = Conditional Expression -_UI_ConditionalExpressionChild_type = Conditional Expression Child -_UI_ConditionalOrExpression_type = Conditional Or Expression -_UI_ConditionalOrExpressionChild_type = Conditional Or Expression Child -_UI_ConditionalAndExpression_type = Conditional And Expression -_UI_ConditionalAndExpressionChild_type = Conditional And Expression Child -_UI_InclusiveOrExpression_type = Inclusive Or Expression -_UI_InclusiveOrExpressionChild_type = Inclusive Or Expression Child -_UI_ExclusiveOrExpression_type = Exclusive Or Expression -_UI_ExclusiveOrExpressionChild_type = Exclusive Or Expression Child -_UI_AndExpression_type = And Expression -_UI_AndExpressionChild_type = And Expression Child -_UI_EqualityExpression_type = Equality Expression -_UI_EqualityExpressionChild_type = Equality Expression Child -_UI_InstanceOfExpression_type = Instance Of Expression -_UI_InstanceOfExpressionChild_type = Instance Of Expression Child -_UI_RelationExpression_type = Relation Expression -_UI_RelationExpressionChild_type = Relation Expression Child -_UI_ShiftExpression_type = Shift Expression -_UI_ShiftExpressionChild_type = Shift Expression Child -_UI_AdditiveExpression_type = Additive Expression -_UI_AdditiveExpressionChild_type = Additive Expression Child -_UI_MultiplicativeExpression_type = Multiplicative Expression -_UI_MultiplicativeExpressionChild_type = Multiplicative Expression Child -_UI_UnaryExpression_type = Unary Expression -_UI_UnaryExpressionChild_type = Unary Expression Child -_UI_UnaryModificationExpression_type = Unary Modification Expression -_UI_PrefixUnaryModificationExpression_type = Prefix Unary Modification Expression -_UI_SuffixUnaryModificationExpression_type = Suffix Unary Modification Expression -_UI_UnaryModificationExpressionChild_type = Unary Modification Expression Child -_UI_CastExpression_type = Cast Expression -_UI_PrimaryExpression_type = Primary Expression -_UI_NestedExpression_type = Nested Expression -_UI_TypeArgument_type = Type Argument -_UI_TypeArgumentable_type = Type Argumentable -_UI_CallTypeArgumentable_type = Call Type Argumentable -_UI_TypeParametrizable_type = Type Parametrizable -_UI_ExtendsTypeArgument_type = Extends Type Argument -_UI_QualifiedTypeArgument_type = Qualified Type Argument -_UI_SuperTypeArgument_type = Super Type Argument -_UI_TypeParameter_type = Type Parameter -_UI_UnknownTypeArgument_type = Unknown Type Argument -_UI_Import_type = Import -_UI_ImportingElement_type = Importing Element -_UI_StaticImport_type = Static Import -_UI_ClassifierImport_type = Classifier Import -_UI_PackageImport_type = Package Import -_UI_StaticClassifierImport_type = Static Classifier Import -_UI_StaticMemberImport_type = Static Member Import -_UI_Initializable_type = Initializable -_UI_Instantiation_type = Instantiation -_UI_NewConstructorCall_type = New Constructor Call -_UI_ExplicitConstructorCall_type = Explicit Constructor Call -_UI_Literal_type = Literal -_UI_Self_type = Self -_UI_BooleanLiteral_type = Boolean Literal -_UI_CharacterLiteral_type = Character Literal -_UI_FloatLiteral_type = Float Literal -_UI_DecimalFloatLiteral_type = Decimal Float Literal -_UI_HexFloatLiteral_type = Hex Float Literal -_UI_DoubleLiteral_type = Double Literal -_UI_DecimalDoubleLiteral_type = Decimal Double Literal -_UI_HexDoubleLiteral_type = Hex Double Literal -_UI_IntegerLiteral_type = Integer Literal -_UI_DecimalIntegerLiteral_type = Decimal Integer Literal -_UI_HexIntegerLiteral_type = Hex Integer Literal -_UI_OctalIntegerLiteral_type = Octal Integer Literal -_UI_LongLiteral_type = Long Literal -_UI_DecimalLongLiteral_type = Decimal Long Literal -_UI_HexLongLiteral_type = Hex Long Literal -_UI_OctalLongLiteral_type = Octal Long Literal -_UI_NullLiteral_type = Null Literal -_UI_Super_type = Super -_UI_This_type = This -_UI_ExceptionThrower_type = Exception Thrower -_UI_Member_type = Member -_UI_MemberContainer_type = Member Container -_UI_AdditionalField_type = Additional Field -_UI_Constructor_type = Constructor -_UI_EmptyMember_type = Empty Member -_UI_Field_type = Field -_UI_Method_type = Method -_UI_InterfaceMethod_type = Interface Method -_UI_ClassMethod_type = Class Method -_UI_EnumConstant_type = Enum Constant -_UI_Modifier_type = Modifier -_UI_AnnotationInstanceOrModifier_type = Annotation Instance Or Modifier -_UI_AnnotableAndModifiable_type = Annotable And Modifiable -_UI_Modifiable_type = Modifiable -_UI_Abstract_type = Abstract -_UI_Final_type = Final -_UI_Native_type = Native -_UI_Protected_type = Protected -_UI_Public_type = Public -_UI_Private_type = Private -_UI_Static_type = Static -_UI_Strictfp_type = Strictfp -_UI_Synchronized_type = Synchronized -_UI_Transient_type = Transient -_UI_Volatile_type = Volatile -_UI_Operator_type = Operator -_UI_AdditiveOperator_type = Additive Operator -_UI_AssignmentOperator_type = Assignment Operator -_UI_EqualityOperator_type = Equality Operator -_UI_MultiplicativeOperator_type = Multiplicative Operator -_UI_RelationOperator_type = Relation Operator -_UI_ShiftOperator_type = Shift Operator -_UI_UnaryOperator_type = Unary Operator -_UI_UnaryModificationOperator_type = Unary Modification Operator -_UI_Assignment_type = Assignment -_UI_AssignmentAnd_type = Assignment And -_UI_AssignmentDivision_type = Assignment Division -_UI_AssignmentExclusiveOr_type = Assignment Exclusive Or -_UI_AssignmentMinus_type = Assignment Minus -_UI_AssignmentModulo_type = Assignment Modulo -_UI_AssignmentMultiplication_type = Assignment Multiplication -_UI_AssignmentLeftShift_type = Assignment Left Shift -_UI_AssignmentOr_type = Assignment Or -_UI_AssignmentPlus_type = Assignment Plus -_UI_AssignmentRightShift_type = Assignment Right Shift -_UI_AssignmentUnsignedRightShift_type = Assignment Unsigned Right Shift -_UI_Equal_type = Equal -_UI_NotEqual_type = Not Equal -_UI_GreaterThan_type = Greater Than -_UI_GreaterThanOrEqual_type = Greater Than Or Equal -_UI_LessThan_type = Less Than -_UI_LessThanOrEqual_type = Less Than Or Equal -_UI_Addition_type = Addition -_UI_Subtraction_type = Subtraction -_UI_Division_type = Division -_UI_Multiplication_type = Multiplication -_UI_Remainder_type = Remainder -_UI_Complement_type = Complement -_UI_MinusMinus_type = Minus Minus -_UI_Negate_type = Negate -_UI_PlusPlus_type = Plus Plus -_UI_LeftShift_type = Left Shift -_UI_RightShift_type = Right Shift -_UI_UnsignedRightShift_type = Unsigned Right Shift -_UI_Parameter_type = Parameter -_UI_Parametrizable_type = Parametrizable -_UI_OrdinaryParameter_type = Ordinary Parameter -_UI_VariableLengthParameter_type = Variable Length Parameter -_UI_Reference_type = Reference -_UI_Argumentable_type = Argumentable -_UI_ReferenceableElement_type = Referenceable Element -_UI_ElementReference_type = Element Reference -_UI_IdentifierReference_type = Identifier Reference -_UI_MethodCall_type = Method Call -_UI_ReflectiveClassReference_type = Reflective Class Reference -_UI_PrimitiveTypeReference_type = Primitive Type Reference -_UI_StringReference_type = String Reference -_UI_SelfReference_type = Self Reference -_UI_StatementContainer_type = Statement Container -_UI_StatementListContainer_type = Statement List Container -_UI_Conditional_type = Conditional -_UI_ForLoopInitializer_type = For Loop Initializer -_UI_Statement_type = Statement -_UI_SwitchCase_type = Switch Case -_UI_Assert_type = Assert -_UI_Break_type = Break -_UI_Block_type = Block -_UI_CatchBlock_type = Catch Block -_UI_Condition_type = Condition -_UI_Continue_type = Continue -_UI_DefaultSwitchCase_type = Default Switch Case -_UI_DoWhileLoop_type = Do While Loop -_UI_EmptyStatement_type = Empty Statement -_UI_ExpressionStatement_type = Expression Statement -_UI_ForLoop_type = For Loop -_UI_ForEachLoop_type = For Each Loop -_UI_Jump_type = Jump -_UI_JumpLabel_type = Jump Label -_UI_LocalVariableStatement_type = Local Variable Statement -_UI_NormalSwitchCase_type = Normal Switch Case -_UI_Return_type = Return -_UI_Switch_type = Switch -_UI_SynchronizedBlock_type = Synchronized Block -_UI_Throw_type = Throw -_UI_TryBlock_type = Try Block -_UI_WhileLoop_type = While Loop -_UI_Type_type = Type -_UI_TypedElement_type = Typed Element -_UI_TypeReference_type = Type Reference -_UI_ClassifierReference_type = Classifier Reference -_UI_NamespaceClassifierReference_type = Namespace Classifier Reference -_UI_PrimitiveType_type = Primitive Type -_UI_Boolean_type = Boolean -_UI_Byte_type = Byte -_UI_Char_type = Char -_UI_Double_type = Double -_UI_Float_type = Float -_UI_Int_type = Int -_UI_Long_type = Long -_UI_Short_type = Short -_UI_Void_type = Void -_UI_Variable_type = Variable -_UI_LocalVariable_type = Local Variable -_UI_AdditionalLocalVariable_type = Additional Local Variable -_UI_Unknown_type = Object - -_UI_Unknown_datatype= Value - -_UI_Annotable_annotations_feature = Annotations -_UI_AnnotationInstance_annotation_feature = Annotation -_UI_AnnotationInstance_parameter_feature = Parameter -_UI_SingleAnnotationParameter_value_feature = Value -_UI_AnnotationParameterList_settings_feature = Settings -_UI_AnnotationAttributeSetting_attribute_feature = Attribute -_UI_AnnotationAttributeSetting_value_feature = Value -_UI_AnnotationAttribute_defaultValue_feature = Default Value -_UI_ArrayTypeable_arrayDimensionsBefore_feature = Array Dimensions Before -_UI_ArrayTypeable_arrayDimensionsAfter_feature = Array Dimensions After -_UI_ArrayInitializer_initialValues_feature = Initial Values -_UI_ArrayInstantiationBySize_sizes_feature = Sizes -_UI_ArrayInstantiationByValues_arrayInitializer_feature = Array Initializer -_UI_ArraySelector_position_feature = Position -_UI_ConcreteClassifier_fullName_feature = Full Name -_UI_Implementor_implements_feature = Implements -_UI_Class_extends_feature = Extends -_UI_Class_defaultExtends_feature = Default Extends -_UI_Interface_extends_feature = Extends -_UI_Interface_defaultExtends_feature = Default Extends -_UI_Enumeration_constants_feature = Constants -_UI_Commentable_comments_feature = Comments -_UI_NamedElement_name_feature = Name -_UI_NamespaceAwareElement_namespaces_feature = Namespaces -_UI_CompilationUnit_classifiers_feature = Classifiers -_UI_Package_compilationUnits_feature = Compilation Units -_UI_Package_subpackages_feature = Subpackages -_UI_ExpressionList_expressions_feature = Expressions -_UI_AssignmentExpression_child_feature = Child -_UI_AssignmentExpression_assignmentOperator_feature = Assignment Operator -_UI_AssignmentExpression_value_feature = Value -_UI_ConditionalExpression_child_feature = Child -_UI_ConditionalExpression_expressionIf_feature = Expression If -_UI_ConditionalExpression_expressionElse_feature = Expression Else -_UI_ConditionalOrExpression_children_feature = Children -_UI_ConditionalAndExpression_children_feature = Children -_UI_InclusiveOrExpression_children_feature = Children -_UI_ExclusiveOrExpression_children_feature = Children -_UI_AndExpression_children_feature = Children -_UI_EqualityExpression_equalityOperators_feature = Equality Operators -_UI_EqualityExpression_children_feature = Children -_UI_InstanceOfExpression_child_feature = Child -_UI_RelationExpression_children_feature = Children -_UI_RelationExpression_relationOperators_feature = Relation Operators -_UI_ShiftExpression_children_feature = Children -_UI_ShiftExpression_shiftOperators_feature = Shift Operators -_UI_AdditiveExpression_children_feature = Children -_UI_AdditiveExpression_additiveOperators_feature = Additive Operators -_UI_MultiplicativeExpression_children_feature = Children -_UI_MultiplicativeExpression_multiplicativeOperators_feature = Multiplicative Operators -_UI_UnaryExpression_operators_feature = Operators -_UI_UnaryExpression_child_feature = Child -_UI_UnaryModificationExpression_child_feature = Child -_UI_UnaryModificationExpression_operator_feature = Operator -_UI_CastExpression_child_feature = Child -_UI_NestedExpression_expression_feature = Expression -_UI_TypeArgumentable_typeArguments_feature = Type Arguments -_UI_CallTypeArgumentable_callTypeArguments_feature = Call Type Arguments -_UI_TypeParametrizable_typeParameters_feature = Type Parameters -_UI_ExtendsTypeArgument_extendTypes_feature = Extend Types -_UI_SuperTypeArgument_superType_feature = Super Type -_UI_TypeParameter_extendTypes_feature = Extend Types -_UI_ImportingElement_imports_feature = Imports -_UI_StaticImport_static_feature = Static -_UI_ClassifierImport_classifier_feature = Classifier -_UI_StaticMemberImport_staticMembers_feature = Static Members -_UI_Initializable_initialValue_feature = Initial Value -_UI_NewConstructorCall_anonymousClass_feature = Anonymous Class -_UI_ExplicitConstructorCall_callTarget_feature = Call Target -_UI_BooleanLiteral_value_feature = Value -_UI_CharacterLiteral_value_feature = Value -_UI_DecimalFloatLiteral_decimalValue_feature = Decimal Value -_UI_HexFloatLiteral_hexValue_feature = Hex Value -_UI_DecimalDoubleLiteral_decimalValue_feature = Decimal Value -_UI_HexDoubleLiteral_hexValue_feature = Hex Value -_UI_DecimalIntegerLiteral_decimalValue_feature = Decimal Value -_UI_HexIntegerLiteral_hexValue_feature = Hex Value -_UI_OctalIntegerLiteral_octalValue_feature = Octal Value -_UI_DecimalLongLiteral_decimalValue_feature = Decimal Value -_UI_HexLongLiteral_hexValue_feature = Hex Value -_UI_OctalLongLiteral_octalValue_feature = Octal Value -_UI_ExceptionThrower_exceptions_feature = Exceptions -_UI_MemberContainer_members_feature = Members -_UI_MemberContainer_defaultMembers_feature = Default Members -_UI_Field_additionalFields_feature = Additional Fields -_UI_EnumConstant_anonymousClass_feature = Anonymous Class -_UI_AnnotableAndModifiable_annotationsAndModifiers_feature = Annotations And Modifiers -_UI_Modifiable_modifiers_feature = Modifiers -_UI_Parametrizable_parameters_feature = Parameters -_UI_Reference_next_feature = Next -_UI_Reference_arraySelectors_feature = Array Selectors -_UI_Argumentable_arguments_feature = Arguments -_UI_ElementReference_target_feature = Target -_UI_PrimitiveTypeReference_primitiveType_feature = Primitive Type -_UI_StringReference_value_feature = Value -_UI_SelfReference_self_feature = Self -_UI_StatementContainer_statement_feature = Statement -_UI_StatementListContainer_statements_feature = Statements -_UI_Conditional_condition_feature = Condition -_UI_Assert_errorMessage_feature = Error Message -_UI_CatchBlock_parameter_feature = Parameter -_UI_Condition_elseStatement_feature = Else Statement -_UI_ExpressionStatement_expression_feature = Expression -_UI_ForLoop_init_feature = Init -_UI_ForLoop_updates_feature = Updates -_UI_ForEachLoop_next_feature = Next -_UI_ForEachLoop_collection_feature = Collection -_UI_Jump_target_feature = Target -_UI_LocalVariableStatement_variable_feature = Variable -_UI_Return_returnValue_feature = Return Value -_UI_Switch_cases_feature = Cases -_UI_Switch_variable_feature = Variable -_UI_SynchronizedBlock_lockProvider_feature = Lock Provider -_UI_Throw_throwable_feature = Throwable -_UI_TryBlock_catcheBlocks_feature = Catche Blocks -_UI_TryBlock_finallyBlock_feature = Finally Block -_UI_WhileLoop_condition_feature = Condition -_UI_TypedElement_typeReference_feature = Type Reference -_UI_ClassifierReference_target_feature = Target -_UI_NamespaceClassifierReference_classifierReferences_feature = Classifier References -_UI_LocalVariable_additionalLocalVariables_feature = Additional Local Variables -_UI_Unknown_feature = Unspecified - -_UI_PackageReference_type = Package Reference -_UI_PackageReference_subpackages_feature = Subpackages -_UI_Commentable_layoutInformations_feature = Layout Informations +# Copyright (c) 2006-2011 +# Software Technology Group, Dresden University of Technology +# +# 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: +# Software Technology Group - TU Dresden, Germany +# - initial API and implementation +# + +pluginName = Java Edit Support +providerName = www.example.org + +_UI_CreateChild_text = {0} +_UI_CreateChild_text2 = {1} {0} +_UI_CreateChild_text3 = {1} +_UI_CreateChild_tooltip = Create New {0} Under {1} Feature +_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}. +_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent. + +_UI_PropertyDescriptor_description = The {0} of the {1} + +_UI_Annotable_type = Annotable +_UI_AnnotationInstance_type = Annotation Instance +_UI_AnnotationParameter_type = Annotation Parameter +_UI_SingleAnnotationParameter_type = Single Annotation Parameter +_UI_AnnotationParameterList_type = Annotation Parameter List +_UI_AnnotationAttributeSetting_type = Annotation Attribute Setting +_UI_AnnotationValue_type = Annotation Value +_UI_AnnotationAttribute_type = Annotation Attribute +_UI_ArrayTypeable_type = Array Typeable +_UI_ArrayDimension_type = Array Dimension +_UI_ArrayInitializer_type = Array Initializer +_UI_ArrayInitializationValue_type = Array Initialization Value +_UI_ArrayInstantiation_type = Array Instantiation +_UI_ArrayInstantiationBySize_type = Array Instantiation By Size +_UI_ArrayInstantiationByValues_type = Array Instantiation By Values +_UI_ArrayInstantiationByValuesUntyped_type = Array Instantiation By Values Untyped +_UI_ArrayInstantiationByValuesTyped_type = Array Instantiation By Values Typed +_UI_ArraySelector_type = Array Selector +_UI_Classifier_type = Classifier +_UI_ConcreteClassifier_type = Concrete Classifier +_UI_Implementor_type = Implementor +_UI_Class_type = Class +_UI_Interface_type = Interface +_UI_Enumeration_type = Enumeration +_UI_Annotation_type = Annotation +_UI_AnonymousClass_type = Anonymous Class +_UI_Commentable_type = Commentable +_UI_NamedElement_type = Named Element +_UI_NamespaceAwareElement_type = Namespace Aware Element +_UI_JavaRoot_type = Java Root +_UI_CompilationUnit_type = Compilation Unit +_UI_Package_type = Package +_UI_EmptyModel_type = Empty Model +_UI_ExpressionList_type = Expression List +_UI_Expression_type = Expression +_UI_AssignmentExpression_type = Assignment Expression +_UI_AssignmentExpressionChild_type = Assignment Expression Child +_UI_ConditionalExpression_type = Conditional Expression +_UI_ConditionalExpressionChild_type = Conditional Expression Child +_UI_ConditionalOrExpression_type = Conditional Or Expression +_UI_ConditionalOrExpressionChild_type = Conditional Or Expression Child +_UI_ConditionalAndExpression_type = Conditional And Expression +_UI_ConditionalAndExpressionChild_type = Conditional And Expression Child +_UI_InclusiveOrExpression_type = Inclusive Or Expression +_UI_InclusiveOrExpressionChild_type = Inclusive Or Expression Child +_UI_ExclusiveOrExpression_type = Exclusive Or Expression +_UI_ExclusiveOrExpressionChild_type = Exclusive Or Expression Child +_UI_AndExpression_type = And Expression +_UI_AndExpressionChild_type = And Expression Child +_UI_EqualityExpression_type = Equality Expression +_UI_EqualityExpressionChild_type = Equality Expression Child +_UI_InstanceOfExpression_type = Instance Of Expression +_UI_InstanceOfExpressionChild_type = Instance Of Expression Child +_UI_RelationExpression_type = Relation Expression +_UI_RelationExpressionChild_type = Relation Expression Child +_UI_ShiftExpression_type = Shift Expression +_UI_ShiftExpressionChild_type = Shift Expression Child +_UI_AdditiveExpression_type = Additive Expression +_UI_AdditiveExpressionChild_type = Additive Expression Child +_UI_MultiplicativeExpression_type = Multiplicative Expression +_UI_MultiplicativeExpressionChild_type = Multiplicative Expression Child +_UI_UnaryExpression_type = Unary Expression +_UI_UnaryExpressionChild_type = Unary Expression Child +_UI_UnaryModificationExpression_type = Unary Modification Expression +_UI_PrefixUnaryModificationExpression_type = Prefix Unary Modification Expression +_UI_SuffixUnaryModificationExpression_type = Suffix Unary Modification Expression +_UI_UnaryModificationExpressionChild_type = Unary Modification Expression Child +_UI_CastExpression_type = Cast Expression +_UI_PrimaryExpression_type = Primary Expression +_UI_NestedExpression_type = Nested Expression +_UI_TypeArgument_type = Type Argument +_UI_TypeArgumentable_type = Type Argumentable +_UI_CallTypeArgumentable_type = Call Type Argumentable +_UI_TypeParametrizable_type = Type Parametrizable +_UI_ExtendsTypeArgument_type = Extends Type Argument +_UI_QualifiedTypeArgument_type = Qualified Type Argument +_UI_SuperTypeArgument_type = Super Type Argument +_UI_TypeParameter_type = Type Parameter +_UI_UnknownTypeArgument_type = Unknown Type Argument +_UI_Import_type = Import +_UI_ImportingElement_type = Importing Element +_UI_StaticImport_type = Static Import +_UI_ClassifierImport_type = Classifier Import +_UI_PackageImport_type = Package Import +_UI_StaticClassifierImport_type = Static Classifier Import +_UI_StaticMemberImport_type = Static Member Import +_UI_Initializable_type = Initializable +_UI_Instantiation_type = Instantiation +_UI_NewConstructorCall_type = New Constructor Call +_UI_ExplicitConstructorCall_type = Explicit Constructor Call +_UI_Literal_type = Literal +_UI_Self_type = Self +_UI_BooleanLiteral_type = Boolean Literal +_UI_CharacterLiteral_type = Character Literal +_UI_FloatLiteral_type = Float Literal +_UI_DecimalFloatLiteral_type = Decimal Float Literal +_UI_HexFloatLiteral_type = Hex Float Literal +_UI_DoubleLiteral_type = Double Literal +_UI_DecimalDoubleLiteral_type = Decimal Double Literal +_UI_HexDoubleLiteral_type = Hex Double Literal +_UI_IntegerLiteral_type = Integer Literal +_UI_DecimalIntegerLiteral_type = Decimal Integer Literal +_UI_HexIntegerLiteral_type = Hex Integer Literal +_UI_OctalIntegerLiteral_type = Octal Integer Literal +_UI_LongLiteral_type = Long Literal +_UI_DecimalLongLiteral_type = Decimal Long Literal +_UI_HexLongLiteral_type = Hex Long Literal +_UI_OctalLongLiteral_type = Octal Long Literal +_UI_NullLiteral_type = Null Literal +_UI_Super_type = Super +_UI_This_type = This +_UI_ExceptionThrower_type = Exception Thrower +_UI_Member_type = Member +_UI_MemberContainer_type = Member Container +_UI_AdditionalField_type = Additional Field +_UI_Constructor_type = Constructor +_UI_EmptyMember_type = Empty Member +_UI_Field_type = Field +_UI_Method_type = Method +_UI_InterfaceMethod_type = Interface Method +_UI_ClassMethod_type = Class Method +_UI_EnumConstant_type = Enum Constant +_UI_Modifier_type = Modifier +_UI_AnnotationInstanceOrModifier_type = Annotation Instance Or Modifier +_UI_AnnotableAndModifiable_type = Annotable And Modifiable +_UI_Modifiable_type = Modifiable +_UI_Abstract_type = Abstract +_UI_Final_type = Final +_UI_Native_type = Native +_UI_Protected_type = Protected +_UI_Public_type = Public +_UI_Private_type = Private +_UI_Static_type = Static +_UI_Strictfp_type = Strictfp +_UI_Synchronized_type = Synchronized +_UI_Transient_type = Transient +_UI_Volatile_type = Volatile +_UI_Operator_type = Operator +_UI_AdditiveOperator_type = Additive Operator +_UI_AssignmentOperator_type = Assignment Operator +_UI_EqualityOperator_type = Equality Operator +_UI_MultiplicativeOperator_type = Multiplicative Operator +_UI_RelationOperator_type = Relation Operator +_UI_ShiftOperator_type = Shift Operator +_UI_UnaryOperator_type = Unary Operator +_UI_UnaryModificationOperator_type = Unary Modification Operator +_UI_Assignment_type = Assignment +_UI_AssignmentAnd_type = Assignment And +_UI_AssignmentDivision_type = Assignment Division +_UI_AssignmentExclusiveOr_type = Assignment Exclusive Or +_UI_AssignmentMinus_type = Assignment Minus +_UI_AssignmentModulo_type = Assignment Modulo +_UI_AssignmentMultiplication_type = Assignment Multiplication +_UI_AssignmentLeftShift_type = Assignment Left Shift +_UI_AssignmentOr_type = Assignment Or +_UI_AssignmentPlus_type = Assignment Plus +_UI_AssignmentRightShift_type = Assignment Right Shift +_UI_AssignmentUnsignedRightShift_type = Assignment Unsigned Right Shift +_UI_Equal_type = Equal +_UI_NotEqual_type = Not Equal +_UI_GreaterThan_type = Greater Than +_UI_GreaterThanOrEqual_type = Greater Than Or Equal +_UI_LessThan_type = Less Than +_UI_LessThanOrEqual_type = Less Than Or Equal +_UI_Addition_type = Addition +_UI_Subtraction_type = Subtraction +_UI_Division_type = Division +_UI_Multiplication_type = Multiplication +_UI_Remainder_type = Remainder +_UI_Complement_type = Complement +_UI_MinusMinus_type = Minus Minus +_UI_Negate_type = Negate +_UI_PlusPlus_type = Plus Plus +_UI_LeftShift_type = Left Shift +_UI_RightShift_type = Right Shift +_UI_UnsignedRightShift_type = Unsigned Right Shift +_UI_Parameter_type = Parameter +_UI_Parametrizable_type = Parametrizable +_UI_OrdinaryParameter_type = Ordinary Parameter +_UI_VariableLengthParameter_type = Variable Length Parameter +_UI_Reference_type = Reference +_UI_Argumentable_type = Argumentable +_UI_ReferenceableElement_type = Referenceable Element +_UI_ElementReference_type = Element Reference +_UI_IdentifierReference_type = Identifier Reference +_UI_MethodCall_type = Method Call +_UI_ReflectiveClassReference_type = Reflective Class Reference +_UI_PrimitiveTypeReference_type = Primitive Type Reference +_UI_StringReference_type = String Reference +_UI_SelfReference_type = Self Reference +_UI_StatementContainer_type = Statement Container +_UI_StatementListContainer_type = Statement List Container +_UI_Conditional_type = Conditional +_UI_ForLoopInitializer_type = For Loop Initializer +_UI_Statement_type = Statement +_UI_SwitchCase_type = Switch Case +_UI_Assert_type = Assert +_UI_Break_type = Break +_UI_Block_type = Block +_UI_CatchBlock_type = Catch Block +_UI_Condition_type = Condition +_UI_Continue_type = Continue +_UI_DefaultSwitchCase_type = Default Switch Case +_UI_DoWhileLoop_type = Do While Loop +_UI_EmptyStatement_type = Empty Statement +_UI_ExpressionStatement_type = Expression Statement +_UI_ForLoop_type = For Loop +_UI_ForEachLoop_type = For Each Loop +_UI_Jump_type = Jump +_UI_JumpLabel_type = Jump Label +_UI_LocalVariableStatement_type = Local Variable Statement +_UI_NormalSwitchCase_type = Normal Switch Case +_UI_Return_type = Return +_UI_Switch_type = Switch +_UI_SynchronizedBlock_type = Synchronized Block +_UI_Throw_type = Throw +_UI_TryBlock_type = Try Block +_UI_WhileLoop_type = While Loop +_UI_Type_type = Type +_UI_TypedElement_type = Typed Element +_UI_TypeReference_type = Type Reference +_UI_ClassifierReference_type = Classifier Reference +_UI_NamespaceClassifierReference_type = Namespace Classifier Reference +_UI_PrimitiveType_type = Primitive Type +_UI_Boolean_type = Boolean +_UI_Byte_type = Byte +_UI_Char_type = Char +_UI_Double_type = Double +_UI_Float_type = Float +_UI_Int_type = Int +_UI_Long_type = Long +_UI_Short_type = Short +_UI_Void_type = Void +_UI_Variable_type = Variable +_UI_LocalVariable_type = Local Variable +_UI_AdditionalLocalVariable_type = Additional Local Variable +_UI_Unknown_type = Object + +_UI_Unknown_datatype= Value + +_UI_Annotable_annotations_feature = Annotations +_UI_AnnotationInstance_annotation_feature = Annotation +_UI_AnnotationInstance_parameter_feature = Parameter +_UI_SingleAnnotationParameter_value_feature = Value +_UI_AnnotationParameterList_settings_feature = Settings +_UI_AnnotationAttributeSetting_attribute_feature = Attribute +_UI_AnnotationAttributeSetting_value_feature = Value +_UI_AnnotationAttribute_defaultValue_feature = Default Value +_UI_ArrayTypeable_arrayDimensionsBefore_feature = Array Dimensions Before +_UI_ArrayTypeable_arrayDimensionsAfter_feature = Array Dimensions After +_UI_ArrayInitializer_initialValues_feature = Initial Values +_UI_ArrayInstantiationBySize_sizes_feature = Sizes +_UI_ArrayInstantiationByValues_arrayInitializer_feature = Array Initializer +_UI_ArraySelector_position_feature = Position +_UI_ConcreteClassifier_fullName_feature = Full Name +_UI_Implementor_implements_feature = Implements +_UI_Class_extends_feature = Extends +_UI_Class_defaultExtends_feature = Default Extends +_UI_Interface_extends_feature = Extends +_UI_Interface_defaultExtends_feature = Default Extends +_UI_Enumeration_constants_feature = Constants +_UI_Commentable_comments_feature = Comments +_UI_NamedElement_name_feature = Name +_UI_NamespaceAwareElement_namespaces_feature = Namespaces +_UI_CompilationUnit_classifiers_feature = Classifiers +_UI_Package_compilationUnits_feature = Compilation Units +_UI_Package_subpackages_feature = Subpackages +_UI_ExpressionList_expressions_feature = Expressions +_UI_AssignmentExpression_child_feature = Child +_UI_AssignmentExpression_assignmentOperator_feature = Assignment Operator +_UI_AssignmentExpression_value_feature = Value +_UI_ConditionalExpression_child_feature = Child +_UI_ConditionalExpression_expressionIf_feature = Expression If +_UI_ConditionalExpression_expressionElse_feature = Expression Else +_UI_ConditionalOrExpression_children_feature = Children +_UI_ConditionalAndExpression_children_feature = Children +_UI_InclusiveOrExpression_children_feature = Children +_UI_ExclusiveOrExpression_children_feature = Children +_UI_AndExpression_children_feature = Children +_UI_EqualityExpression_equalityOperators_feature = Equality Operators +_UI_EqualityExpression_children_feature = Children +_UI_InstanceOfExpression_child_feature = Child +_UI_RelationExpression_children_feature = Children +_UI_RelationExpression_relationOperators_feature = Relation Operators +_UI_ShiftExpression_children_feature = Children +_UI_ShiftExpression_shiftOperators_feature = Shift Operators +_UI_AdditiveExpression_children_feature = Children +_UI_AdditiveExpression_additiveOperators_feature = Additive Operators +_UI_MultiplicativeExpression_children_feature = Children +_UI_MultiplicativeExpression_multiplicativeOperators_feature = Multiplicative Operators +_UI_UnaryExpression_operators_feature = Operators +_UI_UnaryExpression_child_feature = Child +_UI_UnaryModificationExpression_child_feature = Child +_UI_UnaryModificationExpression_operator_feature = Operator +_UI_CastExpression_child_feature = Child +_UI_NestedExpression_expression_feature = Expression +_UI_TypeArgumentable_typeArguments_feature = Type Arguments +_UI_CallTypeArgumentable_callTypeArguments_feature = Call Type Arguments +_UI_TypeParametrizable_typeParameters_feature = Type Parameters +_UI_ExtendsTypeArgument_extendTypes_feature = Extend Types +_UI_SuperTypeArgument_superType_feature = Super Type +_UI_TypeParameter_extendTypes_feature = Extend Types +_UI_ImportingElement_imports_feature = Imports +_UI_StaticImport_static_feature = Static +_UI_ClassifierImport_classifier_feature = Classifier +_UI_StaticMemberImport_staticMembers_feature = Static Members +_UI_Initializable_initialValue_feature = Initial Value +_UI_NewConstructorCall_anonymousClass_feature = Anonymous Class +_UI_ExplicitConstructorCall_callTarget_feature = Call Target +_UI_BooleanLiteral_value_feature = Value +_UI_CharacterLiteral_value_feature = Value +_UI_DecimalFloatLiteral_decimalValue_feature = Decimal Value +_UI_HexFloatLiteral_hexValue_feature = Hex Value +_UI_DecimalDoubleLiteral_decimalValue_feature = Decimal Value +_UI_HexDoubleLiteral_hexValue_feature = Hex Value +_UI_DecimalIntegerLiteral_decimalValue_feature = Decimal Value +_UI_HexIntegerLiteral_hexValue_feature = Hex Value +_UI_OctalIntegerLiteral_octalValue_feature = Octal Value +_UI_DecimalLongLiteral_decimalValue_feature = Decimal Value +_UI_HexLongLiteral_hexValue_feature = Hex Value +_UI_OctalLongLiteral_octalValue_feature = Octal Value +_UI_ExceptionThrower_exceptions_feature = Exceptions +_UI_MemberContainer_members_feature = Members +_UI_MemberContainer_defaultMembers_feature = Default Members +_UI_Field_additionalFields_feature = Additional Fields +_UI_EnumConstant_anonymousClass_feature = Anonymous Class +_UI_AnnotableAndModifiable_annotationsAndModifiers_feature = Annotations And Modifiers +_UI_Modifiable_modifiers_feature = Modifiers +_UI_Parametrizable_parameters_feature = Parameters +_UI_Reference_next_feature = Next +_UI_Reference_arraySelectors_feature = Array Selectors +_UI_Argumentable_arguments_feature = Arguments +_UI_ElementReference_target_feature = Target +_UI_PrimitiveTypeReference_primitiveType_feature = Primitive Type +_UI_StringReference_value_feature = Value +_UI_SelfReference_self_feature = Self +_UI_StatementContainer_statement_feature = Statement +_UI_StatementListContainer_statements_feature = Statements +_UI_Conditional_condition_feature = Condition +_UI_Assert_errorMessage_feature = Error Message +_UI_CatchBlock_parameter_feature = Parameter +_UI_Condition_elseStatement_feature = Else Statement +_UI_ExpressionStatement_expression_feature = Expression +_UI_ForLoop_init_feature = Init +_UI_ForLoop_updates_feature = Updates +_UI_ForEachLoop_next_feature = Next +_UI_ForEachLoop_collection_feature = Collection +_UI_Jump_target_feature = Target +_UI_LocalVariableStatement_variable_feature = Variable +_UI_Return_returnValue_feature = Return Value +_UI_Switch_cases_feature = Cases +_UI_Switch_variable_feature = Variable +_UI_SynchronizedBlock_lockProvider_feature = Lock Provider +_UI_Throw_throwable_feature = Throwable +_UI_TryBlock_catcheBlocks_feature = Catche Blocks +_UI_TryBlock_finallyBlock_feature = Finally Block +_UI_WhileLoop_condition_feature = Condition +_UI_TypedElement_typeReference_feature = Type Reference +_UI_ClassifierReference_target_feature = Target +_UI_NamespaceClassifierReference_classifierReferences_feature = Classifier References +_UI_LocalVariable_additionalLocalVariables_feature = Additional Local Variables +_UI_Unknown_feature = Unspecified + +_UI_PackageReference_type = Package Reference +_UI_PackageReference_subpackages_feature = Subpackages +_UI_Commentable_layoutInformations_feature = Layout Informations diff --git a/Eclipse-Integration/org.emftext.language.java.resource.java.ui/.classpath b/Eclipse-Integration/org.emftext.language.java.resource.java.ui/.classpath index 5d0495ec..75b51641 100644 --- a/Eclipse-Integration/org.emftext.language.java.resource.java.ui/.classpath +++ b/Eclipse-Integration/org.emftext.language.java.resource.java.ui/.classpath @@ -1,8 +1,8 @@ - - - - - - - - + + + + + + + + diff --git a/Eclipse-Integration/org.emftext.language.java.resource.java.ui/.project b/Eclipse-Integration/org.emftext.language.java.resource.java.ui/.project index 62afcfca..0662ee89 100644 --- a/Eclipse-Integration/org.emftext.language.java.resource.java.ui/.project +++ b/Eclipse-Integration/org.emftext.language.java.resource.java.ui/.project @@ -1,28 +1,28 @@ - - - org.emftext.language.java.resource.java.ui - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.pde.PluginNature - - + + + org.emftext.language.java.resource.java.ui + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + diff --git a/Eclipse-Integration/org.emftext.language.java.resource.java.ui/META-INF/MANIFEST.MF b/Eclipse-Integration/org.emftext.language.java.resource.java.ui/META-INF/MANIFEST.MF index e7b0e964..939e659b 100644 --- a/Eclipse-Integration/org.emftext.language.java.resource.java.ui/META-INF/MANIFEST.MF +++ b/Eclipse-Integration/org.emftext.language.java.resource.java.ui/META-INF/MANIFEST.MF @@ -1,29 +1,29 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: EMFText UI Plugin: java -Bundle-SymbolicName: org.emftext.language.java.resource.java.ui;singleton:=true -Bundle-Version: 1.0.0 -Bundle-Vendor: Software Technology Group - TU Dresden Germany -Require-Bundle: org.eclipse.core.runtime, - org.eclipse.core.resources, - org.emftext.access;resolution:=optional, - org.eclipse.emf, - org.eclipse.emf.codegen.ecore, - org.eclipse.emf.ecore, - org.eclipse.emf.ecore.edit, - org.eclipse.emf.edit.ui, - org.eclipse.jface, - org.eclipse.jface.text, - org.eclipse.ui, - org.eclipse.ui.editors, - org.eclipse.ui.ide, - org.eclipse.ui.views, - org.emftext.language.java.resource.java, - org.emftext.commons.antlr3_4_0, - org.emftext.language.java, - org.emftext.commons.layout -Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.6 -Export-Package: org.emftext.language.java.resource.java.ui -Bundle-Activator: org.emftext.language.java.resource.java.ui.JavaUIPlugin -Import-Package: org.eclipse.ui.texteditor.spelling +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: EMFText UI Plugin: java +Bundle-SymbolicName: org.emftext.language.java.resource.java.ui;singleton:=true +Bundle-Version: 1.0.0 +Bundle-Vendor: Software Technology Group - TU Dresden Germany +Require-Bundle: org.eclipse.core.runtime, + org.eclipse.core.resources, + org.emftext.access;resolution:=optional, + org.eclipse.emf, + org.eclipse.emf.codegen.ecore, + org.eclipse.emf.ecore, + org.eclipse.emf.ecore.edit, + org.eclipse.emf.edit.ui, + org.eclipse.jface, + org.eclipse.jface.text, + org.eclipse.ui, + org.eclipse.ui.editors, + org.eclipse.ui.ide, + org.eclipse.ui.views, + org.emftext.language.java.resource.java, + org.emftext.commons.antlr3_4_0, + org.emftext.language.java, + org.emftext.commons.layout +Bundle-ActivationPolicy: lazy +Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Export-Package: org.emftext.language.java.resource.java.ui +Bundle-Activator: org.emftext.language.java.resource.java.ui.JavaUIPlugin +Import-Package: org.eclipse.ui.texteditor.spelling diff --git a/Eclipse-Integration/org.emftext.language.java.resource.java.ui/build.properties b/Eclipse-Integration/org.emftext.language.java.resource.java.ui/build.properties index f9f5bfba..bb65513a 100644 --- a/Eclipse-Integration/org.emftext.language.java.resource.java.ui/build.properties +++ b/Eclipse-Integration/org.emftext.language.java.resource.java.ui/build.properties @@ -1,7 +1,7 @@ -bin.includes = META-INF/,\ -.,\ -icons/,\ -css/,\ -newProject.zip,\ -plugin.xml -source.. = src/,src-gen/ +bin.includes = META-INF/,\ +.,\ +icons/,\ +css/,\ +newProject.zip,\ +plugin.xml +source.. = src/,src-gen/ diff --git a/Eclipse-Integration/org.emftext.language.java.resource.java.ui/plugin.xml b/Eclipse-Integration/org.emftext.language.java.resource.java.ui/plugin.xml index 48b9dbf7..0fe70b8d 100644 --- a/Eclipse-Integration/org.emftext.language.java.resource.java.ui/plugin.xml +++ b/Eclipse-Integration/org.emftext.language.java.resource.java.ui/plugin.xml @@ -1,97 +1,97 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Eclipse-Integration/org.emftext.language.java.resource.jdt/.classpath b/Eclipse-Integration/org.emftext.language.java.resource.jdt/.classpath index ad32c83a..8a8f1668 100644 --- a/Eclipse-Integration/org.emftext.language.java.resource.jdt/.classpath +++ b/Eclipse-Integration/org.emftext.language.java.resource.jdt/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/Eclipse-Integration/org.emftext.language.java.resource.jdt/.project b/Eclipse-Integration/org.emftext.language.java.resource.jdt/.project index b6ad95e5..62793470 100644 --- a/Eclipse-Integration/org.emftext.language.java.resource.jdt/.project +++ b/Eclipse-Integration/org.emftext.language.java.resource.jdt/.project @@ -1,28 +1,28 @@ - - - org.emftext.language.java.resource.jdt - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - + + + org.emftext.language.java.resource.jdt + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/Eclipse-Integration/org.emftext.language.java.resource.jdt/META-INF/MANIFEST.MF b/Eclipse-Integration/org.emftext.language.java.resource.jdt/META-INF/MANIFEST.MF index 12b40012..e0748235 100644 --- a/Eclipse-Integration/org.emftext.language.java.resource.jdt/META-INF/MANIFEST.MF +++ b/Eclipse-Integration/org.emftext.language.java.resource.jdt/META-INF/MANIFEST.MF @@ -1,13 +1,13 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Jdt -Bundle-SymbolicName: org.emftext.language.java.resource.jdt;singleton:=true -Bundle-Version: 1.0.0.qualifier -Bundle-RequiredExecutionEnvironment: JavaSE-1.6 -Require-Bundle: org.eclipse.core.runtime, - org.eclipse.core.resources, - org.emftext.language.java, - org.eclipse.jdt.core, - org.emftext.commons.jdt -Export-Package: org.emftext.language.java.resource.jdt -Bundle-ActivationPolicy: lazy +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Jdt +Bundle-SymbolicName: org.emftext.language.java.resource.jdt;singleton:=true +Bundle-Version: 1.0.0.qualifier +Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Require-Bundle: org.eclipse.core.runtime, + org.eclipse.core.resources, + org.emftext.language.java, + org.eclipse.jdt.core, + org.emftext.commons.jdt +Export-Package: org.emftext.language.java.resource.jdt +Bundle-ActivationPolicy: lazy diff --git a/Eclipse-Integration/org.emftext.language.java.resource.jdt/build.properties b/Eclipse-Integration/org.emftext.language.java.resource.jdt/build.properties index e9863e28..6f20375d 100644 --- a/Eclipse-Integration/org.emftext.language.java.resource.jdt/build.properties +++ b/Eclipse-Integration/org.emftext.language.java.resource.jdt/build.properties @@ -1,5 +1,5 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - .,\ - plugin.xml +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + plugin.xml diff --git a/Eclipse-Integration/org.emftext.language.java.resource.jdt/plugin.xml b/Eclipse-Integration/org.emftext.language.java.resource.jdt/plugin.xml index 2557f058..9f741b5f 100644 --- a/Eclipse-Integration/org.emftext.language.java.resource.jdt/plugin.xml +++ b/Eclipse-Integration/org.emftext.language.java.resource.jdt/plugin.xml @@ -1,11 +1,11 @@ - - - - - - - - - + + + + + + + + + diff --git a/Examples/org.emftext.language.java.examples/.classpath b/Examples/org.emftext.language.java.examples/.classpath index fb501163..d171cd4c 100644 --- a/Examples/org.emftext.language.java.examples/.classpath +++ b/Examples/org.emftext.language.java.examples/.classpath @@ -1,6 +1,6 @@ - - - - - - + + + + + + diff --git a/Examples/org.emftext.language.java.examples/.gitignore b/Examples/org.emftext.language.java.examples/.gitignore index c7ae54b9..810889dc 100644 --- a/Examples/org.emftext.language.java.examples/.gitignore +++ b/Examples/org.emftext.language.java.examples/.gitignore @@ -1,2 +1,2 @@ -*.asm +*.asm src-gen.java \ No newline at end of file diff --git a/Examples/org.emftext.language.java.examples/.project b/Examples/org.emftext.language.java.examples/.project index a0a65b7f..eb90d1e9 100644 --- a/Examples/org.emftext.language.java.examples/.project +++ b/Examples/org.emftext.language.java.examples/.project @@ -1,47 +1,47 @@ - - - org.emftext.language.java.examples - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.reuseware.coconut.ui.eclipse.fragmentStoreBuilder - - - - - org.emftext.language.java.resource.java.builder - - - - - org.eclipse.m2m.atl.adt.builder.atlBuilder - - - - - org.emftext.language.java.javabehavior4uml.resource.javabehavior.builder - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.m2m.atl.adt.builder.atlNature - org.eclipse.jdt.core.javanature - org.reuseware.coconut.ui.eclipse.reusewareNature - org.emftext.language.java.resource.java.nature - org.emftext.language.java.javabehavior4uml.resource.javabehavior.nature - - + + + org.emftext.language.java.examples + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.reuseware.coconut.ui.eclipse.fragmentStoreBuilder + + + + + org.emftext.language.java.resource.java.builder + + + + + org.eclipse.m2m.atl.adt.builder.atlBuilder + + + + + org.emftext.language.java.javabehavior4uml.resource.javabehavior.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2m.atl.adt.builder.atlNature + org.eclipse.jdt.core.javanature + org.reuseware.coconut.ui.eclipse.reusewareNature + org.emftext.language.java.resource.java.nature + org.emftext.language.java.javabehavior4uml.resource.javabehavior.nature + + diff --git a/Examples/org.emftext.language.java.examples/.settings/org.eclipse.core.resources.prefs b/Examples/org.emftext.language.java.examples/.settings/org.eclipse.core.resources.prefs index b29d57b7..e35fb8e5 100644 --- a/Examples/org.emftext.language.java.examples/.settings/org.eclipse.core.resources.prefs +++ b/Examples/org.emftext.language.java.examples/.settings/org.eclipse.core.resources.prefs @@ -1,5 +1,5 @@ -#Thu Jan 15 14:02:33 CET 2009 -eclipse.preferences.version=1 -encoding//lib/java/lang/package-info.java_diagram=UTF-8 -encoding//src-fragments/contact_management.fc=UTF-8 -encoding//src-fragments/contact_management.fcdi=UTF-8 +#Thu Jan 15 14:02:33 CET 2009 +eclipse.preferences.version=1 +encoding//lib/java/lang/package-info.java_diagram=UTF-8 +encoding//src-fragments/contact_management.fc=UTF-8 +encoding//src-fragments/contact_management.fcdi=UTF-8 diff --git a/Examples/org.emftext.language.java.examples/models/ClassDiagram.uml b/Examples/org.emftext.language.java.examples/models/ClassDiagram.uml index 11e660e2..50faa9f0 100644 --- a/Examples/org.emftext.language.java.examples/models/ClassDiagram.uml +++ b/Examples/org.emftext.language.java.examples/models/ClassDiagram.uml @@ -1,86 +1,86 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/org.emftext.language.java.examples/models/ClassDiagram.uml.Person.print.javabehavior b/Examples/org.emftext.language.java.examples/models/ClassDiagram.uml.Person.print.javabehavior index 6950e7cf..570d4acc 100644 --- a/Examples/org.emftext.language.java.examples/models/ClassDiagram.uml.Person.print.javabehavior +++ b/Examples/org.emftext.language.java.examples/models/ClassDiagram.uml.Person.print.javabehavior @@ -1,8 +1,8 @@ -import de.tudresden.contact_management.*; - -public void print () { - Person p = this; - String fullName = p.forename + " " + p.surname; - String msg = "My name is " + fullName + "."; - System.out.println(msg); +import de.tudresden.contact_management.*; + +public void print () { + Person p = this; + String fullName = p.forename + " " + p.surname; + String msg = "My name is " + fullName + "."; + System.out.println(msg); } \ No newline at end of file diff --git a/Examples/org.emftext.language.java.examples/models/ClassDiagram.umldi b/Examples/org.emftext.language.java.examples/models/ClassDiagram.umldi index 35ef9f22..6ad6eb62 100644 --- a/Examples/org.emftext.language.java.examples/models/ClassDiagram.umldi +++ b/Examples/org.emftext.language.java.examples/models/ClassDiagram.umldi @@ -1,266 +1,266 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [-84, -37, 175, -36] - [-176, -37, 83, -36] - - - - - - - - - - - - [-81, 35, 178, 36] - [-176, 35, 83, 36] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [-84, -37, 175, -36] + [-176, -37, 83, -36] + + + + + + + + + + + + [-81, 35, 178, 36] + [-176, 35, 83, 36] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/org.emftext.language.java.examples/src-fragments-gen/de/tudresden/contact_management/ContactList.reusejava b/Examples/org.emftext.language.java.examples/src-fragments-gen/de/tudresden/contact_management/ContactList.reusejava index 8ecf9775..a251ed78 100644 --- a/Examples/org.emftext.language.java.examples/src-fragments-gen/de/tudresden/contact_management/ContactList.reusejava +++ b/Examples/org.emftext.language.java.examples/src-fragments-gen/de/tudresden/contact_management/ContactList.reusejava @@ -1,23 +1,23 @@ -/******************************************************************************* - * Copyright (c) 2006-2011 - * Software Technology Group, Dresden University of Technology - * - * 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: - * Software Technology Group - TU Dresden, Germany - * - initial API and implementation - ******************************************************************************/ -package de.tudresden.contact_management ; - -class ContactList { - protected java.util.LinkedList groups; - - public void synchroniseContacts () { - <>; - } -} - +/******************************************************************************* + * Copyright (c) 2006-2011 + * Software Technology Group, Dresden University of Technology + * + * 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: + * Software Technology Group - TU Dresden, Germany + * - initial API and implementation + ******************************************************************************/ +package de.tudresden.contact_management ; + +class ContactList { + protected java.util.LinkedList groups; + + public void synchroniseContacts () { + <>; + } +} + diff --git a/Examples/org.emftext.language.java.examples/src-fragments/contact_management.fc b/Examples/org.emftext.language.java.examples/src-fragments/contact_management.fc index c9f32c7c..4b999fbd 100644 --- a/Examples/org.emftext.language.java.examples/src-fragments/contact_management.fc +++ b/Examples/org.emftext.language.java.examples/src-fragments/contact_management.fc @@ -1,12 +1,12 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/Examples/org.emftext.language.java.examples/src-fragments/contact_management.fcdi b/Examples/org.emftext.language.java.examples/src-fragments/contact_management.fcdi index 0d958ac9..2fb1ea88 100644 --- a/Examples/org.emftext.language.java.examples/src-fragments/contact_management.fcdi +++ b/Examples/org.emftext.language.java.examples/src-fragments/contact_management.fcdi @@ -1,40 +1,40 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/org.emftext.language.java.examples/src-fragments/de/tudresden/fragments/PrintAttribute.reusejava b/Examples/org.emftext.language.java.examples/src-fragments/de/tudresden/fragments/PrintAttribute.reusejava index 55dbc88d..c97ef945 100644 --- a/Examples/org.emftext.language.java.examples/src-fragments/de/tudresden/fragments/PrintAttribute.reusejava +++ b/Examples/org.emftext.language.java.examples/src-fragments/de/tudresden/fragments/PrintAttribute.reusejava @@ -1,23 +1,23 @@ -/******************************************************************************* - * Copyright (c) 2006-2011 - * Software Technology Group, Dresden University of Technology - * - * 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: - * Software Technology Group - TU Dresden, Germany - * - initial API and implementation - ******************************************************************************/ -package de.tudresden.fragments; - -class statementDFragments { - - <>; - - >> printStatment : System.out.println(attributeToPrintSlot); - - +/******************************************************************************* + * Copyright (c) 2006-2011 + * Software Technology Group, Dresden University of Technology + * + * 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: + * Software Technology Group - TU Dresden, Germany + * - initial API and implementation + ******************************************************************************/ +package de.tudresden.fragments; + +class statementDFragments { + + <>; + + >> printStatment : System.out.println(attributeToPrintSlot); + + } \ No newline at end of file diff --git a/Examples/org.emftext.language.java.examples/src-fragments/de/tudresden/fragments/SynchroniseContacts.reusejava b/Examples/org.emftext.language.java.examples/src-fragments/de/tudresden/fragments/SynchroniseContacts.reusejava index 88cd25ab..15193e79 100644 --- a/Examples/org.emftext.language.java.examples/src-fragments/de/tudresden/fragments/SynchroniseContacts.reusejava +++ b/Examples/org.emftext.language.java.examples/src-fragments/de/tudresden/fragments/SynchroniseContacts.reusejava @@ -1,5 +1,5 @@ -statements SynchroniseContacts { - contact_management. - ContactService. - mergeWithExternalContacts(); +statements SynchroniseContacts { + contact_management. + ContactService. + mergeWithExternalContacts(); } \ No newline at end of file diff --git a/Examples/org.emftext.language.java.examples/uml2java/build.xml b/Examples/org.emftext.language.java.examples/uml2java/build.xml index 2169a891..fb2ac1e1 100644 --- a/Examples/org.emftext.language.java.examples/uml2java/build.xml +++ b/Examples/org.emftext.language.java.examples/uml2java/build.xml @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Examples/org.emftext.language.java.examples/uml2java/uml2java.atl b/Examples/org.emftext.language.java.examples/uml2java/uml2java.atl index e07aeb6d..45865880 100755 --- a/Examples/org.emftext.language.java.examples/uml2java/uml2java.atl +++ b/Examples/org.emftext.language.java.examples/uml2java/uml2java.atl @@ -1,99 +1,99 @@ ---@atlcompiler atl2006 -module uml2java; -create OUT : java from IN : uml; - -helper context uml!Element def: correctType(outerType : Boolean) : java!Classifier = - if (self.type = OclUndefined) then OclUndefined else - if (self.upper <> 1 and outerType) then java!Commentable.allInstances()->first().getConcreteClassifier('java.util.List') else - if (self.type.name = 'String') then java!Commentable.allInstances()->first().getStringClass() else - self.type - endif endif endif; - -rule Class { - from umlClass : uml!Class - to javaClass : java!Class ( - name <- umlClass.name, - members <- umlClass.ownedAttribute - ->union(umlClass.ownedOperation) - ->union( - umlClass.package.packagedElement - ->select(e | e.oclIsTypeOf(uml!Association)) - ->select(e | e.memberEnd->select(end | end.type = umlClass)->size() > 0) - ->collect(e | e.memberEnd)->flatten()->select(end | end.type <> umlClass) - ), - "extends" <- if umlClass.generalization->size() > 0 then typeRef - else OclUndefined endif - ), - cu : java!CompilationUnit ( - namespaces <- umlClass.package.name.split('\\.'), - classifiers <- Sequence{javaClass} - ), - typeRef : java!ClassifierReference ( - target <- if umlClass.generalization->size() > 0 - then umlClass.generalization->at(1).general - else OclUndefined - endif - ) -} - -rule Property { - from umlProperty : uml!Property - to javaField : java!Field ( - name <- umlProperty.name, - annotationsAndModifiers <- protected, - typeReference <- if umlProperty.type = OclUndefined then - voidType - else - typeRef1 - endif - ), - protected : java!Protected( - ), - voidType : java!Void ( - ), - typeRef1 : java!ClassifierReference ( - target <- umlProperty.correctType(true), - typeArguments <- if (umlProperty.upper = 1) then - Sequence{} - else - Sequence{typeArgument} - endif - ), - typeArgument : java!QualifiedTypeArgument( - typeReference <- typeRef2 - ), - typeRef2 : java!ClassifierReference ( - target <- umlProperty.correctType(false) - ) -} - -rule Operation { - from umlOperation : uml!Operation - to javaMethod : java!ClassMethod ( - name <- umlOperation.name, - typeReference <- if umlOperation.type = OclUndefined then - voidType - else - typeRef - endif, - statements <- body, - annotationsAndModifiers <- Sequence{public} --TODO inspect visibility defined in UML - ), - --return type - typeRef : java!ClassifierReference ( - target <- umlOperation.correctType(true) - ), - voidType : java!Void ( - ), - -- empty body with slot - body : java!Block ( - -- statements <- Sequence{slot} - --), - --slot : java!StatementSlot ( - -- pointName <- umlOperation.name, - -- portName <- umlOperation.class.package.name - ), - public : java!Public ( - ) - +--@atlcompiler atl2006 +module uml2java; +create OUT : java from IN : uml; + +helper context uml!Element def: correctType(outerType : Boolean) : java!Classifier = + if (self.type = OclUndefined) then OclUndefined else + if (self.upper <> 1 and outerType) then java!Commentable.allInstances()->first().getConcreteClassifier('java.util.List') else + if (self.type.name = 'String') then java!Commentable.allInstances()->first().getStringClass() else + self.type + endif endif endif; + +rule Class { + from umlClass : uml!Class + to javaClass : java!Class ( + name <- umlClass.name, + members <- umlClass.ownedAttribute + ->union(umlClass.ownedOperation) + ->union( + umlClass.package.packagedElement + ->select(e | e.oclIsTypeOf(uml!Association)) + ->select(e | e.memberEnd->select(end | end.type = umlClass)->size() > 0) + ->collect(e | e.memberEnd)->flatten()->select(end | end.type <> umlClass) + ), + "extends" <- if umlClass.generalization->size() > 0 then typeRef + else OclUndefined endif + ), + cu : java!CompilationUnit ( + namespaces <- umlClass.package.name.split('\\.'), + classifiers <- Sequence{javaClass} + ), + typeRef : java!ClassifierReference ( + target <- if umlClass.generalization->size() > 0 + then umlClass.generalization->at(1).general + else OclUndefined + endif + ) +} + +rule Property { + from umlProperty : uml!Property + to javaField : java!Field ( + name <- umlProperty.name, + annotationsAndModifiers <- protected, + typeReference <- if umlProperty.type = OclUndefined then + voidType + else + typeRef1 + endif + ), + protected : java!Protected( + ), + voidType : java!Void ( + ), + typeRef1 : java!ClassifierReference ( + target <- umlProperty.correctType(true), + typeArguments <- if (umlProperty.upper = 1) then + Sequence{} + else + Sequence{typeArgument} + endif + ), + typeArgument : java!QualifiedTypeArgument( + typeReference <- typeRef2 + ), + typeRef2 : java!ClassifierReference ( + target <- umlProperty.correctType(false) + ) +} + +rule Operation { + from umlOperation : uml!Operation + to javaMethod : java!ClassMethod ( + name <- umlOperation.name, + typeReference <- if umlOperation.type = OclUndefined then + voidType + else + typeRef + endif, + statements <- body, + annotationsAndModifiers <- Sequence{public} --TODO inspect visibility defined in UML + ), + --return type + typeRef : java!ClassifierReference ( + target <- umlOperation.correctType(true) + ), + voidType : java!Void ( + ), + -- empty body with slot + body : java!Block ( + -- statements <- Sequence{slot} + --), + --slot : java!StatementSlot ( + -- pointName <- umlOperation.name, + -- portName <- umlOperation.class.package.name + ), + public : java!Public ( + ) + } \ No newline at end of file diff --git a/Examples/org.emftext.language.java.examples/uml2java/uml2java.launch b/Examples/org.emftext.language.java.examples/uml2java/uml2java.launch index fafe14d9..c7672979 100644 --- a/Examples/org.emftext.language.java.examples/uml2java/uml2java.launch +++ b/Examples/org.emftext.language.java.examples/uml2java/uml2java.launch @@ -1,57 +1,57 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Features/org.jamopp.features/.project b/Features/org.jamopp.features/.project index c07833b7..f494f671 100644 --- a/Features/org.jamopp.features/.project +++ b/Features/org.jamopp.features/.project @@ -1,11 +1,11 @@ - - - org.jamopp.features - - - - - - - - + + + org.jamopp.features + + + + + + + + diff --git a/Features/org.jamopp.features/features/org.emftext.language.java.ui/feature.xml b/Features/org.jamopp.features/features/org.emftext.language.java.ui/feature.xml index dfb18651..db33d1a2 100644 --- a/Features/org.jamopp.features/features/org.emftext.language.java.ui/feature.xml +++ b/Features/org.jamopp.features/features/org.emftext.language.java.ui/feature.xml @@ -1,28 +1,28 @@ - - - - JaMoPP: Java Model Editor (EMFText-based Java support for EMF modelling tools). - - Copyright (c) 2006-2013 Software Technology Group, Dresden University of Technology, Germany; DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026. - - Eclipse Public License v1.0 - -Copyright (c) 2006-2013 -Software Technology Group, Dresden University of Technology -DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026. - -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: - Software Technology Group - TU Dresden, Germany; - DevBoost GmbH - Berlin, Germany - - initial API and implementation - - - - - - - - + + + + JaMoPP: Java Model Editor (EMFText-based Java support for EMF modelling tools). + + Copyright (c) 2006-2013 Software Technology Group, Dresden University of Technology, Germany; DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026. + + Eclipse Public License v1.0 + +Copyright (c) 2006-2013 +Software Technology Group, Dresden University of Technology +DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026. + +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: + Software Technology Group - TU Dresden, Germany; + DevBoost GmbH - Berlin, Germany + - initial API and implementation + + + + + + + + \ No newline at end of file diff --git a/Tests/org.emftext.language.java.test/.classpath b/Tests/org.emftext.language.java.test/.classpath index a84c7f84..a95437ac 100644 --- a/Tests/org.emftext.language.java.test/.classpath +++ b/Tests/org.emftext.language.java.test/.classpath @@ -1,8 +1,8 @@ - - - - - - - - + + + + + + + + diff --git a/Tests/org.emftext.language.java.test/.gitignore b/Tests/org.emftext.language.java.test/.gitignore index 1f57b975..6b4ca610 100644 --- a/Tests/org.emftext.language.java.test/.gitignore +++ b/Tests/org.emftext.language.java.test/.gitignore @@ -1 +1 @@ -/output +/output diff --git a/Tests/org.emftext.language.java.test/.settings/org.eclipse.core.resources.prefs b/Tests/org.emftext.language.java.test/.settings/org.eclipse.core.resources.prefs index e7e45139..400cc405 100644 --- a/Tests/org.emftext.language.java.test/.settings/org.eclipse.core.resources.prefs +++ b/Tests/org.emftext.language.java.test/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,3 @@ -#Wed Mar 07 15:52:17 CET 2012 -eclipse.preferences.version=1 -encoding/=UTF-8 +#Wed Mar 07 15:52:17 CET 2012 +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/Utils/org.emftext.language.java.jamoppc/.classpath b/Utils/org.emftext.language.java.jamoppc/.classpath index 033dece1..21bd0c73 100644 --- a/Utils/org.emftext.language.java.jamoppc/.classpath +++ b/Utils/org.emftext.language.java.jamoppc/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/Utils/org.emftext.language.java.jamoppc/.project b/Utils/org.emftext.language.java.jamoppc/.project index 5f191bc3..3f73a9db 100644 --- a/Utils/org.emftext.language.java.jamoppc/.project +++ b/Utils/org.emftext.language.java.jamoppc/.project @@ -1,17 +1,17 @@ - - - org.emftext.language.java.jamoppc - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - + + + org.emftext.language.java.jamoppc + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Utils/org.emftext.language.java.jamoppc/build.xml b/Utils/org.emftext.language.java.jamoppc/build.xml index fd553fb4..2adc31f5 100644 --- a/Utils/org.emftext.language.java.jamoppc/build.xml +++ b/Utils/org.emftext.language.java.jamoppc/build.xml @@ -1,36 +1,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +