[jboss-svn-commits] JBL Code SVN: r25418 - in labs/jbossrules/trunk: drools-api/src/main/java/org/drools/builder/conf and 19 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Feb 24 22:47:08 EST 2009


Author: tirelli
Date: 2009-02-24 22:47:07 -0500 (Tue, 24 Feb 2009)
New Revision: 25418

Added:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/MultiValueKnowledgeBuilderOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/SingleValueKnowledgeBuilderOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/AlphaThresholdOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/CompositeKeyDepthOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/ConsequenceExceptionHandlerOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/MultiValueKnowledgeBaseOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/SingleValueKnowledgeBaseOption.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_EntryPointReference.drl
Modified:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBaseConfiguration.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/AccumulateFunctionOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/DefaultDialectOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/DumpDirOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/EvaluatorOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/KnowledgeBuilderOptionsConfiguration.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/ProcessStringEscapesOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/AssertBehaviorOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/IndexLeftBetaMemoryOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/IndexRightBetaMemoryOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/KnowledgeBaseOptionsConfiguration.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/LogicalOverrideOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/MaintainTMSOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/RemoveIdentitiesOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/SequentialAgendaOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/SequentialOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/ShareAlphaNodesOption.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/ShareBetaNodesOption.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapLexer.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapParser.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapWalker.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaLexer.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaParser.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/conf/KnowledgeBaseConfigurationTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessForEachTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCompilationUnit.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
Log:
Adding more type safe options. Adding support for entry/exit point reference in consequences. Setting MVEL for strong typing. Fixing agenda firingLimit+agendaFilter behaviour.

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBaseConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBaseConfiguration.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBaseConfiguration.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -28,18 +28,18 @@
  * <p>
  * The following properties are supported:
  * <ul>
- * X<li>drools.maintainTms = &lt;true|false&gt;</li>
- * X<li>drools.assertBehaviour = &lt;identity|equality&gt;</li>
- * X<li>drools.logicalOverride = &lt;discard|preserve&gt;</li>
- * X<li>drools.sequential = &lt;true|false&gt;</li>
- * X<li>drools.sequential.agenda = &lt;sequential|dynamic&gt;</li>
- * X<li>drools.removeIdentities = &lt;true|false&gt;</li>
- * X<li>drools.shareAlphaNodes  = &lt;true|false&gt;</li>
- * X<li>drools.shareBetaNodes = &lt;true|false&gt;</li>
+ * <li>drools.maintainTms = &lt;true|false&gt;</li>
+ * <li>drools.assertBehaviour = &lt;identity|equality&gt;</li>
+ * <li>drools.logicalOverride = &lt;discard|preserve&gt;</li>
+ * <li>drools.sequential = &lt;true|false&gt;</li>
+ * <li>drools.sequential.agenda = &lt;sequential|dynamic&gt;</li>
+ * <li>drools.removeIdentities = &lt;true|false&gt;</li>
+ * <li>drools.shareAlphaNodes  = &lt;true|false&gt;</li>
+ * <li>drools.shareBetaNodes = &lt;true|false&gt;</li>
  * <li>drools.alphaNodeHashingThreshold = &lt;1...n&gt;</li>
  * <li>drools.compositeKeyDepth  = &lt;1..3&gt;</li>
- * X<li>drools.indexLeftBetaMemory = &lt;true/false&gt;</li>
- * X<li>drools.indexRightBetaMemory = &lt;true/false&gt;</li>
+ * <li>drools.indexLeftBetaMemory = &lt;true/false&gt;</li>
+ * <li>drools.indexRightBetaMemory = &lt;true/false&gt;</li>
  * <li>drools.consequenceExceptionHandler = &lt;qualified class name&gt;</li>
  * </ul>
  * </p>

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/AccumulateFunctionOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/AccumulateFunctionOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/AccumulateFunctionOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -23,7 +23,7 @@
  * 
  * @author etirelli
  */
-public class AccumulateFunctionOption implements KnowledgeBuilderOption {
+public class AccumulateFunctionOption implements MultiValueKnowledgeBuilderOption {
 
     private static final long serialVersionUID = -8461267995706982981L;
 
@@ -52,13 +52,13 @@
     }
     
     /**
-     * This is a factory method for this DefaultDialect configuration.
+     * This is a factory method for this AccumulateFunction configuration.
      * The factory method is a best practice for the case where the 
      * actual object construction is changed in the future.
      * 
-     * @param name the name of the dialect to be configured as default
+     * @param name the name of the function to be configured
      * 
-     * @return the actual type safe default dialect configuration.
+     * @return the actual type safe accumulate function configuration.
      */
     public static AccumulateFunctionOption get( final String name, final AccumulateFunction function ) {
         return new AccumulateFunctionOption( name, function );
@@ -72,7 +72,7 @@
     }
     
     /**
-     * Returns the name of the dialect configured as default
+     * Returns the name of the function configured
      * 
      * @return
      */

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/DefaultDialectOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/DefaultDialectOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/DefaultDialectOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -22,7 +22,7 @@
  * 
  * @author etirelli
  */
-public class DefaultDialectOption implements KnowledgeBuilderOption {
+public class DefaultDialectOption implements SingleValueKnowledgeBuilderOption {
 
     private static final long serialVersionUID = -8461267995706982981L;
 

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/DumpDirOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/DumpDirOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/DumpDirOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -25,7 +25,7 @@
  * 
  * @author etirelli
  */
-public class DumpDirOption implements KnowledgeBuilderOption {
+public class DumpDirOption implements SingleValueKnowledgeBuilderOption {
 
     private static final long serialVersionUID = -8461267995706982981L;
 

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/EvaluatorOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/EvaluatorOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/EvaluatorOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -26,7 +26,7 @@
  * 
  * @author etirelli
  */
-public class EvaluatorOption implements KnowledgeBuilderOption {
+public class EvaluatorOption implements MultiValueKnowledgeBuilderOption {
 
     private static final long serialVersionUID = -8461267995706982981L;
 

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/KnowledgeBuilderOptionsConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/KnowledgeBuilderOptionsConfiguration.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/KnowledgeBuilderOptionsConfiguration.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -40,7 +40,7 @@
      * @return the Option value for the given option. Returns null if option is 
      *         not configured.
      */
-    public <T extends KnowledgeBuilderOption> T getOption( Class<T> option );
+    public <T extends SingleValueKnowledgeBuilderOption> T getOption( Class<T> option );
     
     
     /**
@@ -54,7 +54,7 @@
      * @return the Option value for the given option + key. Returns null if option is 
      *         not configured.
      */
-    public <T extends KnowledgeBuilderOption> T getOption( Class<T> option, String key );
+    public <T extends MultiValueKnowledgeBuilderOption> T getOption( Class<T> option, String key );
     
 
 }

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/MultiValueKnowledgeBuilderOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/MultiValueKnowledgeBuilderOption.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/MultiValueKnowledgeBuilderOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.drools.builder.conf;
+
+
+/**
+ * A markup interface for MultiValueKnowledgeBuilderConfiguration options
+ * 
+ * @author etirelli
+ */
+public interface MultiValueKnowledgeBuilderOption
+    extends
+    KnowledgeBuilderOption {
+
+}


Property changes on: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/MultiValueKnowledgeBuilderOption.java
___________________________________________________________________
Name: svn:executable
   + *

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/ProcessStringEscapesOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/ProcessStringEscapesOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/ProcessStringEscapesOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -37,7 +37,7 @@
  * 
  * @author etirelli
  */
-public enum ProcessStringEscapesOption implements KnowledgeBuilderOption {
+public enum ProcessStringEscapesOption implements SingleValueKnowledgeBuilderOption {
     
     YES(true),
     NO(false);

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/SingleValueKnowledgeBuilderOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/SingleValueKnowledgeBuilderOption.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/SingleValueKnowledgeBuilderOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.drools.builder.conf;
+
+
+/**
+ * A markup interface for SingleValueKnowledgeBuilderConfiguration options
+ * 
+ * @author etirelli
+ */
+public interface SingleValueKnowledgeBuilderOption
+    extends
+    KnowledgeBuilderOption {
+
+}


Property changes on: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/conf/SingleValueKnowledgeBuilderOption.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/AlphaThresholdOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/AlphaThresholdOption.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/AlphaThresholdOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.drools.conf;
+
+
+/**
+ * A class for the alpha node hashing threshold configuration.
+ * 
+ * @author etirelli
+ */
+public class AlphaThresholdOption implements SingleValueKnowledgeBaseOption {
+
+    private static final long serialVersionUID = -8461267995706982981L;
+
+    /**
+     * The property name for the default DIALECT
+     */
+    public static final String PROPERTY_NAME = "drools.alphaNodeHashingThreshold";
+    
+    /**
+     * alpha threshold
+     */
+    private final int threshold;
+    
+    /**
+     * Private constructor to enforce the use of the factory method
+     * @param threshold
+     */
+    private AlphaThresholdOption( int threshold ) {
+        this.threshold = threshold;
+    }
+    
+    /**
+     * This is a factory method for this Alpha Threshold configuration.
+     * The factory method is a best practice for the case where the 
+     * actual object construction is changed in the future.
+     * 
+     * @param threshold the threshold value for the alpha hashing option
+     * 
+     * @return the actual type safe alpha threshold configuration.
+     */
+    public static AlphaThresholdOption get( int threshold ) {
+        return new AlphaThresholdOption( threshold );
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public String getPropertyName() {
+        return PROPERTY_NAME;
+    }
+    
+    /**
+     * Returns the threshold value for alpha hashing
+     * 
+     * @return
+     */
+    public int getThreshold() {
+        return threshold;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + threshold;
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if ( this == obj ) return true;
+        if ( obj == null ) return false;
+        if ( getClass() != obj.getClass() ) return false;
+        AlphaThresholdOption other = (AlphaThresholdOption) obj;
+        if ( threshold != other.threshold ) return false;
+        return true;
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/AlphaThresholdOption.java
___________________________________________________________________
Name: svn:executable
   + *

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/AssertBehaviorOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/AssertBehaviorOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/AssertBehaviorOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -26,7 +26,7 @@
  * 
  * @author etirelli
  */
-public enum AssertBehaviorOption implements KnowledgeBaseOption {
+public enum AssertBehaviorOption implements SingleValueKnowledgeBaseOption {
     
     IDENTITY,
     EQUALITY;

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/CompositeKeyDepthOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/CompositeKeyDepthOption.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/CompositeKeyDepthOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.drools.conf;
+
+
+/**
+ * A class for the composite key depth configuration.
+ * 
+ * @author etirelli
+ */
+public class CompositeKeyDepthOption implements SingleValueKnowledgeBaseOption {
+
+    private static final long serialVersionUID = -8461267995706982981L;
+
+    /**
+     * The property name for the default DIALECT
+     */
+    public static final String PROPERTY_NAME = "drools.compositeKeyDepth";
+    
+    /**
+     * dialect name
+     */
+    private final int depth;
+    
+    /**
+     * Private constructor to enforce the use of the factory method
+     * @param depth
+     */
+    private CompositeKeyDepthOption( int depth ) {
+        this.depth = depth;
+    }
+    
+    /**
+     * This is a factory method for this CompositeKeyDepth configuration.
+     * The factory method is a best practice for the case where the 
+     * actual object construction is changed in the future.
+     * 
+     * @param depth the composite key depth value
+     * 
+     * @return the actual type safe CompositeKeyDepth configuration.
+     */
+    public static CompositeKeyDepthOption get( int depth ) {
+        return new CompositeKeyDepthOption( depth );
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public String getPropertyName() {
+        return PROPERTY_NAME;
+    }
+    
+    /**
+     * Returns the depth value for composite key indexing
+     * 
+     * @return
+     */
+    public int getDepth() {
+        return depth;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + depth;
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if ( this == obj ) return true;
+        if ( obj == null ) return false;
+        if ( getClass() != obj.getClass() ) return false;
+        CompositeKeyDepthOption other = (CompositeKeyDepthOption) obj;
+        if ( depth != other.depth ) return false;
+        return true;
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/CompositeKeyDepthOption.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/ConsequenceExceptionHandlerOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/ConsequenceExceptionHandlerOption.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/ConsequenceExceptionHandlerOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.drools.conf;
+
+import org.drools.runtime.rule.ConsequenceExceptionHandler;
+
+/**
+ * A class for the consequence exception handler configuration configuration.
+ * 
+ * @author etirelli
+ */
+public class ConsequenceExceptionHandlerOption implements SingleValueKnowledgeBaseOption {
+
+    private static final long serialVersionUID = -8461267995706982981L;
+
+    /**
+     * The property name for consequence exception handler configuration
+     */
+    public static final String PROPERTY_NAME = "drools.consequenceExceptionHandler";
+    
+    /**
+     * the consequence exception handler class instance
+     */
+    private final Class<? extends ConsequenceExceptionHandler> handler;
+    
+    /**
+     * Private constructor to enforce the use of the factory method
+     */
+    private ConsequenceExceptionHandlerOption( final Class<? extends ConsequenceExceptionHandler> handler ) {
+        this.handler = handler;
+    }
+    
+    /**
+     * This is a factory method for this ConsequenceExceptionHandler configuration.
+     * The factory method is a best practice for the case where the 
+     * actual object construction is changed in the future.
+     *
+     * @param handler the actual consequence exception handler class to be used 
+     * 
+     * @return the actual type safe consequence exception handler configuration.
+     */
+    public static ConsequenceExceptionHandlerOption get( final Class<? extends ConsequenceExceptionHandler> handler ) {
+        return new ConsequenceExceptionHandlerOption( handler );
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public String getPropertyName() {
+        return PROPERTY_NAME;
+    }
+    
+    /**
+     * Returns the consequence exception handler instance
+     * @return
+     */
+    public Class<? extends ConsequenceExceptionHandler> getHandler() {
+        return handler;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((handler == null) ? 0 : handler.getClass().getName().hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if ( this == obj ) return true;
+        if ( obj == null ) return false;
+        if ( getClass() != obj.getClass() ) return false;
+        ConsequenceExceptionHandlerOption other = (ConsequenceExceptionHandlerOption) obj;
+        if ( handler == null ) {
+            if ( other.handler != null ) return false;
+        } else if( other.handler == null ) {
+            return false;
+        } else if ( !handler.getClass().getName().equals( other.handler.getClass().getName() ) ) return false;
+        return true;
+    }
+
+    
+}


Property changes on: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/ConsequenceExceptionHandlerOption.java
___________________________________________________________________
Name: svn:executable
   + *

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/IndexLeftBetaMemoryOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/IndexLeftBetaMemoryOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/IndexLeftBetaMemoryOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -26,7 +26,7 @@
  * 
  * @author etirelli
  */
-public enum IndexLeftBetaMemoryOption implements KnowledgeBaseOption {
+public enum IndexLeftBetaMemoryOption implements SingleValueKnowledgeBaseOption {
     
     YES(true),
     NO(false);

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/IndexRightBetaMemoryOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/IndexRightBetaMemoryOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/IndexRightBetaMemoryOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -26,7 +26,7 @@
  * 
  * @author etirelli
  */
-public enum IndexRightBetaMemoryOption implements KnowledgeBaseOption {
+public enum IndexRightBetaMemoryOption implements SingleValueKnowledgeBaseOption {
     
     YES(true),
     NO(false);

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/KnowledgeBaseOptionsConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/KnowledgeBaseOptionsConfiguration.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/KnowledgeBaseOptionsConfiguration.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -40,7 +40,7 @@
      * @return the Option value for the given option. Returns null if option is 
      *         not configured.
      */
-    public <T extends KnowledgeBaseOption> T getOption( Class<T> option );
+    public <T extends SingleValueKnowledgeBaseOption> T getOption( Class<T> option );
     
     
     /**
@@ -54,7 +54,7 @@
      * @return the Option value for the given option + key. Returns null if option is 
      *         not configured.
      */
-    public <T extends KnowledgeBaseOption> T getOption( Class<T> option, String key );
+    public <T extends MultiValueKnowledgeBaseOption> T getOption( Class<T> option, String key );
     
 
 }

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/LogicalOverrideOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/LogicalOverrideOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/LogicalOverrideOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -26,7 +26,7 @@
  * 
  * @author etirelli
  */
-public enum LogicalOverrideOption implements KnowledgeBaseOption {
+public enum LogicalOverrideOption implements SingleValueKnowledgeBaseOption {
     
     DISCARD,
     PRESERVE;

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/MaintainTMSOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/MaintainTMSOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/MaintainTMSOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -26,7 +26,7 @@
  * 
  * @author etirelli
  */
-public enum MaintainTMSOption implements KnowledgeBaseOption {
+public enum MaintainTMSOption implements SingleValueKnowledgeBaseOption {
     
     YES(true),
     NO(false);

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/MultiValueKnowledgeBaseOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/MultiValueKnowledgeBaseOption.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/MultiValueKnowledgeBaseOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.drools.conf;
+
+
+/**
+ * A markup interface for MultiValueKnowledgeBaseConfiguration options
+ * 
+ * @author etirelli
+ */
+public interface MultiValueKnowledgeBaseOption
+    extends
+    KnowledgeBaseOption {
+
+}


Property changes on: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/MultiValueKnowledgeBaseOption.java
___________________________________________________________________
Name: svn:executable
   + *

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/RemoveIdentitiesOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/RemoveIdentitiesOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/RemoveIdentitiesOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -26,7 +26,7 @@
  * 
  * @author etirelli
  */
-public enum RemoveIdentitiesOption implements KnowledgeBaseOption {
+public enum RemoveIdentitiesOption implements SingleValueKnowledgeBaseOption {
     
     YES(true),
     NO(false);

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/SequentialAgendaOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/SequentialAgendaOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/SequentialAgendaOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -26,7 +26,7 @@
  * 
  * @author etirelli
  */
-public enum SequentialAgendaOption implements KnowledgeBaseOption {
+public enum SequentialAgendaOption implements SingleValueKnowledgeBaseOption {
     
     SEQUENTIAL,
     DYNAMIC;

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/SequentialOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/SequentialOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/SequentialOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -26,7 +26,7 @@
  * 
  * @author etirelli
  */
-public enum SequentialOption implements KnowledgeBaseOption {
+public enum SequentialOption implements SingleValueKnowledgeBaseOption {
     
     YES(true),
     NO(false);

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/ShareAlphaNodesOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/ShareAlphaNodesOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/ShareAlphaNodesOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -26,7 +26,7 @@
  * 
  * @author etirelli
  */
-public enum ShareAlphaNodesOption implements KnowledgeBaseOption {
+public enum ShareAlphaNodesOption implements SingleValueKnowledgeBaseOption {
     
     YES(true),
     NO(false);

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/ShareBetaNodesOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/ShareBetaNodesOption.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/ShareBetaNodesOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -26,7 +26,7 @@
  * 
  * @author etirelli
  */
-public enum ShareBetaNodesOption implements KnowledgeBaseOption {
+public enum ShareBetaNodesOption implements SingleValueKnowledgeBaseOption {
     
     YES(true),
     NO(false);

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/SingleValueKnowledgeBaseOption.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/SingleValueKnowledgeBaseOption.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/SingleValueKnowledgeBaseOption.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.drools.conf;
+
+
+/**
+ * A markup interface for KnowledgeBaseConfiguration options
+ * 
+ * @author etirelli
+ */
+public interface SingleValueKnowledgeBaseOption
+    extends
+    KnowledgeBaseOption {
+
+}


Property changes on: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/conf/SingleValueKnowledgeBaseOption.java
___________________________________________________________________
Name: svn:executable
   + *

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -34,7 +34,9 @@
 import org.drools.builder.conf.DumpDirOption;
 import org.drools.builder.conf.EvaluatorOption;
 import org.drools.builder.conf.KnowledgeBuilderOption;
+import org.drools.builder.conf.MultiValueKnowledgeBuilderOption;
 import org.drools.builder.conf.ProcessStringEscapesOption;
+import org.drools.builder.conf.SingleValueKnowledgeBuilderOption;
 import org.drools.process.builder.ProcessNodeBuilder;
 import org.drools.process.builder.ProcessNodeBuilderRegistry;
 import org.drools.rule.Package;
@@ -610,7 +612,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public <T extends KnowledgeBuilderOption> T getOption(Class<T> option) {
+    public <T extends SingleValueKnowledgeBuilderOption> T getOption(Class<T> option) {
         if ( DefaultDialectOption.class.equals( option ) ) {
             return (T) this.defaultDialect;
         } else if ( DumpDirOption.class.equals( option ) ) {
@@ -622,7 +624,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public <T extends KnowledgeBuilderOption> T getOption(Class<T> option,
+    public <T extends MultiValueKnowledgeBuilderOption> T getOption(Class<T> option,
                                           String key) {
         if ( AccumulateFunctionOption.class.equals( option ) ) {
             return (T) AccumulateFunctionOption.get( key,

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -1,4 +1,4 @@
-// $ANTLR 3.1.1 src/main/resources/org/drools/lang/DRL.g 2009-02-21 09:28:26
+// $ANTLR 3.1.1 src/main/resources/org/drools/lang/DRL.g 2009-02-23 13:33:44
 
 	package org.drools.lang;
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -1,4 +1,4 @@
-// $ANTLR 3.1.1 src/main/resources/org/drools/lang/DRL.g 2009-02-21 09:28:25
+// $ANTLR 3.1.1 src/main/resources/org/drools/lang/DRL.g 2009-02-23 13:33:42
 
 	package org.drools.lang;
 	

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -1,4 +1,4 @@
-// $ANTLR 3.1.1 src/main/resources/org/drools/lang/DescrBuilderTree.g 2009-02-21 09:28:26
+// $ANTLR 3.1.1 src/main/resources/org/drools/lang/DescrBuilderTree.g 2009-02-23 13:33:44
 
 	package org.drools.lang;
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapLexer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapLexer.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapLexer.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -1,4 +1,4 @@
-// $ANTLR 3.1.1 src/main/resources/org/drools/lang/dsl/DSLMap.g 2009-02-21 09:28:30
+// $ANTLR 3.1.1 src/main/resources/org/drools/lang/dsl/DSLMap.g 2009-02-23 13:33:47
 
 	package org.drools.lang.dsl;
 	import java.util.List;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapParser.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapParser.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapParser.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -1,4 +1,4 @@
-// $ANTLR 3.1.1 src/main/resources/org/drools/lang/dsl/DSLMap.g 2009-02-21 09:28:29
+// $ANTLR 3.1.1 src/main/resources/org/drools/lang/dsl/DSLMap.g 2009-02-23 13:33:47
 
 	package org.drools.lang.dsl;
 	import java.util.List;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapWalker.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapWalker.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DSLMapWalker.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -1,4 +1,4 @@
-// $ANTLR 3.1.1 src/main/resources/org/drools/lang/dsl/DSLMapWalker.g 2009-02-21 09:28:30
+// $ANTLR 3.1.1 src/main/resources/org/drools/lang/dsl/DSLMapWalker.g 2009-02-23 13:33:47
 
 	package org.drools.lang.dsl;
 	

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaLexer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaLexer.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaLexer.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -1,4 +1,4 @@
-// $ANTLR 3.1.1 src/main/resources/org/drools/semantics/java/parser/Java.g 2009-02-21 09:28:32
+// $ANTLR 3.1.1 src/main/resources/org/drools/semantics/java/parser/Java.g 2009-02-23 13:33:50
 
 	package org.drools.rule.builder.dialect.java.parser;
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaParser.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaParser.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaParser.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -1,4 +1,4 @@
-// $ANTLR 3.1.1 src/main/resources/org/drools/semantics/java/parser/Java.g 2009-02-21 09:28:31
+// $ANTLR 3.1.1 src/main/resources/org/drools/semantics/java/parser/Java.g 2009-02-23 13:33:49
 
 	package org.drools.rule.builder.dialect.java.parser;
 	import java.util.Iterator;
@@ -214,7 +214,7 @@
         }
         public JavaParser(TokenStream input, RecognizerSharedState state) {
             super(input, state);
-            this.state.ruleMemo = new HashMap[410+1];
+            this.state.ruleMemo = new HashMap[412+1];
              
              
         }
@@ -5823,13 +5823,13 @@
 
 
     // $ANTLR start "statement"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:663:1: 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 )? ';' | modifyStatement | exitPointsStatement | ';' | statementExpression ';' | Identifier ':' statement );
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:663:1: 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 )? ';' | modifyStatement | ';' | statementExpression ';' | Identifier ':' statement );
     public final void statement() throws RecognitionException {
         int statement_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 83) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:664:2: ( 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 )? ';' | modifyStatement | exitPointsStatement | ';' | statementExpression ';' | Identifier ':' statement )
-            int alt113=18;
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:664:2: ( 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 )? ';' | modifyStatement | ';' | statementExpression ';' | Identifier ':' statement )
+            int alt113=17;
             alt113 = dfa113.predict(input);
             switch (alt113) {
                 case 1 :
@@ -5898,7 +5898,7 @@
                     int LA108_0 = input.LA(1);
 
                     if ( (LA108_0==76) ) {
-                        int LA108_1 = input.LA(2);
+                        int LA108_2 = input.LA(2);
 
                         if ( (synpred150_Java()) ) {
                             alt108=1;
@@ -6215,41 +6215,30 @@
                     }
                     break;
                 case 15 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:683:7: exitPointsStatement
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:683:7: ';'
                     {
-                    pushFollow(FOLLOW_exitPointsStatement_in_statement2633);
-                    exitPointsStatement();
+                    match(input,25,FOLLOW_25_in_statement2633); if (state.failed) return ;
 
-                    state._fsp--;
-                    if (state.failed) return ;
-
                     }
                     break;
                 case 16 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:684:7: ';'
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:684:7: statementExpression ';'
                     {
-                    match(input,25,FOLLOW_25_in_statement2641); if (state.failed) return ;
-
-                    }
-                    break;
-                case 17 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:685:7: statementExpression ';'
-                    {
-                    pushFollow(FOLLOW_statementExpression_in_statement2649);
+                    pushFollow(FOLLOW_statementExpression_in_statement2641);
                     statementExpression();
 
                     state._fsp--;
                     if (state.failed) return ;
-                    match(input,25,FOLLOW_25_in_statement2651); if (state.failed) return ;
+                    match(input,25,FOLLOW_25_in_statement2643); if (state.failed) return ;
 
                     }
                     break;
-                case 18 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:686:7: Identifier ':' statement
+                case 17 :
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:685:7: Identifier ':' statement
                     {
-                    match(input,Identifier,FOLLOW_Identifier_in_statement2659); if (state.failed) return ;
-                    match(input,74,FOLLOW_74_in_statement2661); if (state.failed) return ;
-                    pushFollow(FOLLOW_statement_in_statement2663);
+                    match(input,Identifier,FOLLOW_Identifier_in_statement2651); if (state.failed) return ;
+                    match(input,74,FOLLOW_74_in_statement2653); if (state.failed) return ;
+                    pushFollow(FOLLOW_statement_in_statement2655);
                     statement();
 
                     state._fsp--;
@@ -6273,7 +6262,7 @@
 
 
     // $ANTLR start "modifyStatement"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:689:1: modifyStatement : s= 'modify' parExpression '{' (e= expression ( ',' e= expression )* )? c= '}' ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:688:1: modifyStatement : s= 'modify' parExpression '{' (e= expression ( ',' e= expression )* )? c= '}' ;
     public final void modifyStatement() throws RecognitionException {
         int modifyStatement_StartIndex = input.index();
         Token s=null;
@@ -6288,11 +6277,11 @@
         	
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 84) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:693:2: (s= 'modify' parExpression '{' (e= expression ( ',' e= expression )* )? c= '}' )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:693:4: s= 'modify' parExpression '{' (e= expression ( ',' e= expression )* )? c= '}'
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:692:2: (s= 'modify' parExpression '{' (e= expression ( ',' e= expression )* )? c= '}' )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:692:4: s= 'modify' parExpression '{' (e= expression ( ',' e= expression )* )? c= '}'
             {
-            s=(Token)match(input,87,FOLLOW_87_in_modifyStatement2683); if (state.failed) return ;
-            pushFollow(FOLLOW_parExpression_in_modifyStatement2685);
+            s=(Token)match(input,87,FOLLOW_87_in_modifyStatement2675); if (state.failed) return ;
+            pushFollow(FOLLOW_parExpression_in_modifyStatement2677);
             parExpression3=parExpression();
 
             state._fsp--;
@@ -6305,15 +6294,15 @@
               	    
               	
             }
-            match(input,37,FOLLOW_37_in_modifyStatement2692); if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:700:6: (e= expression ( ',' e= expression )* )?
+            match(input,37,FOLLOW_37_in_modifyStatement2684); if (state.failed) return ;
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:699:6: (e= expression ( ',' e= expression )* )?
             int alt115=2;
             alt115 = dfa115.predict(input);
             switch (alt115) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:700:8: e= expression ( ',' e= expression )*
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:699:8: e= expression ( ',' e= expression )*
                     {
-                    pushFollow(FOLLOW_expression_in_modifyStatement2700);
+                    pushFollow(FOLLOW_expression_in_modifyStatement2692);
                     e=expression();
 
                     state._fsp--;
@@ -6321,7 +6310,7 @@
                     if ( state.backtracking==0 ) {
                        d.getExpressions().add( (e!=null?input.toString(e.start,e.stop):null) ); 
                     }
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:701:9: ( ',' e= expression )*
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:700:9: ( ',' e= expression )*
                     loop114:
                     do {
                         int alt114=2;
@@ -6334,10 +6323,10 @@
 
                         switch (alt114) {
                     	case 1 :
-                    	    // src/main/resources/org/drools/semantics/java/parser/Java.g:701:10: ',' e= expression
+                    	    // src/main/resources/org/drools/semantics/java/parser/Java.g:700:10: ',' e= expression
                     	    {
-                    	    match(input,34,FOLLOW_34_in_modifyStatement2713); if (state.failed) return ;
-                    	    pushFollow(FOLLOW_expression_in_modifyStatement2717);
+                    	    match(input,34,FOLLOW_34_in_modifyStatement2705); if (state.failed) return ;
+                    	    pushFollow(FOLLOW_expression_in_modifyStatement2709);
                     	    e=expression();
 
                     	    state._fsp--;
@@ -6360,7 +6349,7 @@
 
             }
 
-            c=(Token)match(input,38,FOLLOW_38_in_modifyStatement2736); if (state.failed) return ;
+            c=(Token)match(input,38,FOLLOW_38_in_modifyStatement2728); if (state.failed) return ;
             if ( state.backtracking==0 ) {
 
                           d.setEnd( ((CommonToken)c).getStopIndex() ); 
@@ -6382,10 +6371,10 @@
     // $ANTLR end "modifyStatement"
 
 
-    // $ANTLR start "exitPointsStatement"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:709:1: exitPointsStatement : (s= 'exitPoints' '[' id= StringLiteral c= ']' | s= 'entryPoints' '[' id= StringLiteral c= ']' ) ;
-    public final void exitPointsStatement() throws RecognitionException {
-        int exitPointsStatement_StartIndex = input.index();
+    // $ANTLR start "epStatement"
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:708:1: epStatement : (s= 'exitPoints' '[' id= StringLiteral c= ']' | s= 'entryPoints' '[' id= StringLiteral c= ']' ) ;
+    public final void epStatement() throws RecognitionException {
+        int epStatement_StartIndex = input.index();
         Token s=null;
         Token id=null;
         Token c=null;
@@ -6395,10 +6384,10 @@
         	
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 85) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:713:9: ( (s= 'exitPoints' '[' id= StringLiteral c= ']' | s= 'entryPoints' '[' id= StringLiteral c= ']' ) )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:714:9: (s= 'exitPoints' '[' id= StringLiteral c= ']' | s= 'entryPoints' '[' id= StringLiteral c= ']' )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:712:9: ( (s= 'exitPoints' '[' id= StringLiteral c= ']' | s= 'entryPoints' '[' id= StringLiteral c= ']' ) )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:713:9: (s= 'exitPoints' '[' id= StringLiteral c= ']' | s= 'entryPoints' '[' id= StringLiteral c= ']' )
             {
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:714:9: (s= 'exitPoints' '[' id= StringLiteral c= ']' | s= 'entryPoints' '[' id= StringLiteral c= ']' )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:713:9: (s= 'exitPoints' '[' id= StringLiteral c= ']' | s= 'entryPoints' '[' id= StringLiteral c= ']' )
             int alt116=2;
             int LA116_0 = input.LA(1);
 
@@ -6417,12 +6406,12 @@
             }
             switch (alt116) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:714:11: s= 'exitPoints' '[' id= StringLiteral c= ']'
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:713:11: s= 'exitPoints' '[' id= StringLiteral c= ']'
                     {
-                    s=(Token)match(input,88,FOLLOW_88_in_exitPointsStatement2786); if (state.failed) return ;
-                    match(input,41,FOLLOW_41_in_exitPointsStatement2788); if (state.failed) return ;
-                    id=(Token)match(input,StringLiteral,FOLLOW_StringLiteral_in_exitPointsStatement2792); if (state.failed) return ;
-                    c=(Token)match(input,42,FOLLOW_42_in_exitPointsStatement2796); if (state.failed) return ;
+                    s=(Token)match(input,88,FOLLOW_88_in_epStatement2778); if (state.failed) return ;
+                    match(input,41,FOLLOW_41_in_epStatement2780); if (state.failed) return ;
+                    id=(Token)match(input,StringLiteral,FOLLOW_StringLiteral_in_epStatement2784); if (state.failed) return ;
+                    c=(Token)match(input,42,FOLLOW_42_in_epStatement2788); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
 
                       	    d = new JavaInterfacePointsDescr( (id!=null?id.getText():null) );
@@ -6436,12 +6425,12 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:722:12: s= 'entryPoints' '[' id= StringLiteral c= ']'
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:721:12: s= 'entryPoints' '[' id= StringLiteral c= ']'
                     {
-                    s=(Token)match(input,89,FOLLOW_89_in_exitPointsStatement2822); if (state.failed) return ;
-                    match(input,41,FOLLOW_41_in_exitPointsStatement2824); if (state.failed) return ;
-                    id=(Token)match(input,StringLiteral,FOLLOW_StringLiteral_in_exitPointsStatement2828); if (state.failed) return ;
-                    c=(Token)match(input,42,FOLLOW_42_in_exitPointsStatement2832); if (state.failed) return ;
+                    s=(Token)match(input,89,FOLLOW_89_in_epStatement2814); if (state.failed) return ;
+                    match(input,41,FOLLOW_41_in_epStatement2816); if (state.failed) return ;
+                    id=(Token)match(input,StringLiteral,FOLLOW_StringLiteral_in_epStatement2820); if (state.failed) return ;
+                    c=(Token)match(input,42,FOLLOW_42_in_epStatement2824); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
 
                       	    d = new JavaInterfacePointsDescr( (id!=null?id.getText():null) );
@@ -6466,37 +6455,37 @@
             recover(input,re);
         }
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 85, exitPointsStatement_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 85, epStatement_StartIndex); }
         }
         return ;
     }
-    // $ANTLR end "exitPointsStatement"
+    // $ANTLR end "epStatement"
 
 
     // $ANTLR start "catches"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:733:1: catches : catchClause ( catchClause )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:732:1: catches : catchClause ( catchClause )* ;
     public final void catches() throws RecognitionException {
         int catches_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 86) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:734:2: ( catchClause ( catchClause )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:734:4: catchClause ( catchClause )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:733:2: ( catchClause ( catchClause )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:733:4: catchClause ( catchClause )*
             {
-            pushFollow(FOLLOW_catchClause_in_catches2873);
+            pushFollow(FOLLOW_catchClause_in_catches2866);
             catchClause();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:734:16: ( catchClause )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:733:16: ( catchClause )*
             loop117:
             do {
                 int alt117=2;
                 alt117 = dfa117.predict(input);
                 switch (alt117) {
             	case 1 :
-            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:734:17: catchClause
+            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:733:17: catchClause
             	    {
-            	    pushFollow(FOLLOW_catchClause_in_catches2876);
+            	    pushFollow(FOLLOW_catchClause_in_catches2869);
             	    catchClause();
 
             	    state._fsp--;
@@ -6527,23 +6516,23 @@
 
 
     // $ANTLR start "catchClause"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:737:1: catchClause : 'catch' '(' formalParameter ')' block ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:736:1: catchClause : 'catch' '(' formalParameter ')' block ;
     public final void catchClause() throws RecognitionException {
         int catchClause_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 87) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:738:2: ( 'catch' '(' formalParameter ')' block )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:738:4: 'catch' '(' formalParameter ')' block
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:737:2: ( 'catch' '(' formalParameter ')' block )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:737:4: 'catch' '(' formalParameter ')' block
             {
-            match(input,90,FOLLOW_90_in_catchClause2890); if (state.failed) return ;
-            match(input,65,FOLLOW_65_in_catchClause2892); if (state.failed) return ;
-            pushFollow(FOLLOW_formalParameter_in_catchClause2894);
+            match(input,90,FOLLOW_90_in_catchClause2883); if (state.failed) return ;
+            match(input,65,FOLLOW_65_in_catchClause2885); if (state.failed) return ;
+            pushFollow(FOLLOW_formalParameter_in_catchClause2887);
             formalParameter();
 
             state._fsp--;
             if (state.failed) return ;
-            match(input,66,FOLLOW_66_in_catchClause2896); if (state.failed) return ;
-            pushFollow(FOLLOW_block_in_catchClause2898);
+            match(input,66,FOLLOW_66_in_catchClause2889); if (state.failed) return ;
+            pushFollow(FOLLOW_block_in_catchClause2891);
             block();
 
             state._fsp--;
@@ -6565,15 +6554,15 @@
 
 
     // $ANTLR start "formalParameter"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:741:1: formalParameter : ( variableModifier )* type variableDeclaratorId ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:740:1: formalParameter : ( variableModifier )* type variableDeclaratorId ;
     public final void formalParameter() throws RecognitionException {
         int formalParameter_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 88) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:742:2: ( ( variableModifier )* type variableDeclaratorId )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:742:4: ( variableModifier )* type variableDeclaratorId
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:741:2: ( ( variableModifier )* type variableDeclaratorId )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:741:4: ( variableModifier )* type variableDeclaratorId
             {
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:742:4: ( variableModifier )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:741:4: ( variableModifier )*
             loop118:
             do {
                 int alt118=2;
@@ -6588,7 +6577,7 @@
             	case 1 :
             	    // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: variableModifier
             	    {
-            	    pushFollow(FOLLOW_variableModifier_in_formalParameter2909);
+            	    pushFollow(FOLLOW_variableModifier_in_formalParameter2902);
             	    variableModifier();
 
             	    state._fsp--;
@@ -6602,12 +6591,12 @@
                 }
             } while (true);
 
-            pushFollow(FOLLOW_type_in_formalParameter2912);
+            pushFollow(FOLLOW_type_in_formalParameter2905);
             type();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FOLLOW_variableDeclaratorId_in_formalParameter2914);
+            pushFollow(FOLLOW_variableDeclaratorId_in_formalParameter2907);
             variableDeclaratorId();
 
             state._fsp--;
@@ -6629,15 +6618,15 @@
 
 
     // $ANTLR start "switchBlockStatementGroups"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:745:1: switchBlockStatementGroups : ( switchBlockStatementGroup )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:744:1: switchBlockStatementGroups : ( switchBlockStatementGroup )* ;
     public final void switchBlockStatementGroups() throws RecognitionException {
         int switchBlockStatementGroups_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 89) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:746:2: ( ( switchBlockStatementGroup )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:746:4: ( switchBlockStatementGroup )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:745:2: ( ( switchBlockStatementGroup )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:745:4: ( switchBlockStatementGroup )*
             {
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:746:4: ( switchBlockStatementGroup )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:745:4: ( switchBlockStatementGroup )*
             loop119:
             do {
                 int alt119=2;
@@ -6650,9 +6639,9 @@
 
                 switch (alt119) {
             	case 1 :
-            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:746:5: switchBlockStatementGroup
+            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:745:5: switchBlockStatementGroup
             	    {
-            	    pushFollow(FOLLOW_switchBlockStatementGroup_in_switchBlockStatementGroups2928);
+            	    pushFollow(FOLLOW_switchBlockStatementGroup_in_switchBlockStatementGroups2921);
             	    switchBlockStatementGroup();
 
             	    state._fsp--;
@@ -6683,20 +6672,20 @@
 
 
     // $ANTLR start "switchBlockStatementGroup"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:749:1: switchBlockStatementGroup : switchLabel ( blockStatement )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:748:1: switchBlockStatementGroup : switchLabel ( blockStatement )* ;
     public final void switchBlockStatementGroup() throws RecognitionException {
         int switchBlockStatementGroup_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 90) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:750:2: ( switchLabel ( blockStatement )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:750:4: switchLabel ( blockStatement )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:749:2: ( switchLabel ( blockStatement )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:749:4: switchLabel ( blockStatement )*
             {
-            pushFollow(FOLLOW_switchLabel_in_switchBlockStatementGroup2942);
+            pushFollow(FOLLOW_switchLabel_in_switchBlockStatementGroup2935);
             switchLabel();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:750:16: ( blockStatement )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:749:16: ( blockStatement )*
             loop120:
             do {
                 int alt120=2;
@@ -6705,7 +6694,7 @@
             	case 1 :
             	    // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: blockStatement
             	    {
-            	    pushFollow(FOLLOW_blockStatement_in_switchBlockStatementGroup2944);
+            	    pushFollow(FOLLOW_blockStatement_in_switchBlockStatementGroup2937);
             	    blockStatement();
 
             	    state._fsp--;
@@ -6736,46 +6725,46 @@
 
 
     // $ANTLR start "switchLabel"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:753:1: switchLabel : ( 'case' constantExpression ':' | 'case' enumConstantName ':' | 'default' ':' );
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:752:1: switchLabel : ( 'case' constantExpression ':' | 'case' enumConstantName ':' | 'default' ':' );
     public final void switchLabel() throws RecognitionException {
         int switchLabel_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 91) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:754:2: ( 'case' constantExpression ':' | 'case' enumConstantName ':' | 'default' ':' )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:753:2: ( 'case' constantExpression ':' | 'case' enumConstantName ':' | 'default' ':' )
             int alt121=3;
             alt121 = dfa121.predict(input);
             switch (alt121) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:754:4: 'case' constantExpression ':'
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:753:4: 'case' constantExpression ':'
                     {
-                    match(input,91,FOLLOW_91_in_switchLabel2957); if (state.failed) return ;
-                    pushFollow(FOLLOW_constantExpression_in_switchLabel2959);
+                    match(input,91,FOLLOW_91_in_switchLabel2950); if (state.failed) return ;
+                    pushFollow(FOLLOW_constantExpression_in_switchLabel2952);
                     constantExpression();
 
                     state._fsp--;
                     if (state.failed) return ;
-                    match(input,74,FOLLOW_74_in_switchLabel2961); if (state.failed) return ;
+                    match(input,74,FOLLOW_74_in_switchLabel2954); if (state.failed) return ;
 
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:755:6: 'case' enumConstantName ':'
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:754:6: 'case' enumConstantName ':'
                     {
-                    match(input,91,FOLLOW_91_in_switchLabel2968); if (state.failed) return ;
-                    pushFollow(FOLLOW_enumConstantName_in_switchLabel2970);
+                    match(input,91,FOLLOW_91_in_switchLabel2961); if (state.failed) return ;
+                    pushFollow(FOLLOW_enumConstantName_in_switchLabel2963);
                     enumConstantName();
 
                     state._fsp--;
                     if (state.failed) return ;
-                    match(input,74,FOLLOW_74_in_switchLabel2972); if (state.failed) return ;
+                    match(input,74,FOLLOW_74_in_switchLabel2965); if (state.failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:756:6: 'default' ':'
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:755:6: 'default' ':'
                     {
-                    match(input,72,FOLLOW_72_in_switchLabel2979); if (state.failed) return ;
-                    match(input,74,FOLLOW_74_in_switchLabel2981); if (state.failed) return ;
+                    match(input,72,FOLLOW_72_in_switchLabel2972); if (state.failed) return ;
+                    match(input,74,FOLLOW_74_in_switchLabel2974); if (state.failed) return ;
 
                     }
                     break;
@@ -6795,15 +6784,15 @@
 
 
     // $ANTLR start "moreStatementExpressions"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:759:1: moreStatementExpressions : ( ',' statementExpression )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:758:1: moreStatementExpressions : ( ',' statementExpression )* ;
     public final void moreStatementExpressions() throws RecognitionException {
         int moreStatementExpressions_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 92) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:760:2: ( ( ',' statementExpression )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:760:4: ( ',' statementExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:759:2: ( ( ',' statementExpression )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:759:4: ( ',' statementExpression )*
             {
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:760:4: ( ',' statementExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:759:4: ( ',' statementExpression )*
             loop122:
             do {
                 int alt122=2;
@@ -6816,10 +6805,10 @@
 
                 switch (alt122) {
             	case 1 :
-            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:760:5: ',' statementExpression
+            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:759:5: ',' statementExpression
             	    {
-            	    match(input,34,FOLLOW_34_in_moreStatementExpressions2994); if (state.failed) return ;
-            	    pushFollow(FOLLOW_statementExpression_in_moreStatementExpressions2996);
+            	    match(input,34,FOLLOW_34_in_moreStatementExpressions2987); if (state.failed) return ;
+            	    pushFollow(FOLLOW_statementExpression_in_moreStatementExpressions2989);
             	    statementExpression();
 
             	    state._fsp--;
@@ -6850,19 +6839,19 @@
 
 
     // $ANTLR start "forControl"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:763:1: forControl options {k=3; } : ( forVarControl | ( forInit )? ';' ( expression )? ';' ( forUpdate )? );
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:762:1: forControl options {k=3; } : ( forVarControl | ( forInit )? ';' ( expression )? ';' ( forUpdate )? );
     public final void forControl() throws RecognitionException {
         int forControl_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 93) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:765:2: ( forVarControl | ( forInit )? ';' ( expression )? ';' ( forUpdate )? )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:764:2: ( forVarControl | ( forInit )? ';' ( expression )? ';' ( forUpdate )? )
             int alt126=2;
             alt126 = dfa126.predict(input);
             switch (alt126) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:765:4: forVarControl
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:764:4: forVarControl
                     {
-                    pushFollow(FOLLOW_forVarControl_in_forControl3017);
+                    pushFollow(FOLLOW_forVarControl_in_forControl3010);
                     forVarControl();
 
                     state._fsp--;
@@ -6871,16 +6860,16 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:766:4: ( forInit )? ';' ( expression )? ';' ( forUpdate )?
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:765:4: ( forInit )? ';' ( expression )? ';' ( forUpdate )?
                     {
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:766:4: ( forInit )?
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:765:4: ( forInit )?
                     int alt123=2;
                     alt123 = dfa123.predict(input);
                     switch (alt123) {
                         case 1 :
                             // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: forInit
                             {
-                            pushFollow(FOLLOW_forInit_in_forControl3022);
+                            pushFollow(FOLLOW_forInit_in_forControl3015);
                             forInit();
 
                             state._fsp--;
@@ -6891,15 +6880,15 @@
 
                     }
 
-                    match(input,25,FOLLOW_25_in_forControl3025); if (state.failed) return ;
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:766:17: ( expression )?
+                    match(input,25,FOLLOW_25_in_forControl3018); if (state.failed) return ;
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:765:17: ( expression )?
                     int alt124=2;
                     alt124 = dfa124.predict(input);
                     switch (alt124) {
                         case 1 :
                             // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: expression
                             {
-                            pushFollow(FOLLOW_expression_in_forControl3027);
+                            pushFollow(FOLLOW_expression_in_forControl3020);
                             expression();
 
                             state._fsp--;
@@ -6910,15 +6899,15 @@
 
                     }
 
-                    match(input,25,FOLLOW_25_in_forControl3030); if (state.failed) return ;
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:766:33: ( forUpdate )?
+                    match(input,25,FOLLOW_25_in_forControl3023); if (state.failed) return ;
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:765:33: ( forUpdate )?
                     int alt125=2;
                     alt125 = dfa125.predict(input);
                     switch (alt125) {
                         case 1 :
                             // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: forUpdate
                             {
-                            pushFollow(FOLLOW_forUpdate_in_forControl3032);
+                            pushFollow(FOLLOW_forUpdate_in_forControl3025);
                             forUpdate();
 
                             state._fsp--;
@@ -6948,7 +6937,7 @@
 
 
     // $ANTLR start "forInit"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:769:1: forInit : ( ( variableModifier )* type variableDeclarators | expressionList );
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:768:1: forInit : ( ( variableModifier )* type variableDeclarators | expressionList );
     public final void forInit() throws RecognitionException {
         int forInit_StartIndex = input.index();
 
@@ -6956,14 +6945,14 @@
                 
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 94) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:776:2: ( ( variableModifier )* type variableDeclarators | expressionList )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:775:2: ( ( variableModifier )* type variableDeclarators | expressionList )
             int alt128=2;
             alt128 = dfa128.predict(input);
             switch (alt128) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:776:4: ( variableModifier )* type variableDeclarators
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:775:4: ( variableModifier )* type variableDeclarators
                     {
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:776:4: ( variableModifier )*
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:775:4: ( variableModifier )*
                     loop127:
                     do {
                         int alt127=2;
@@ -6978,7 +6967,7 @@
                     	case 1 :
                     	    // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: variableModifier
                     	    {
-                    	    pushFollow(FOLLOW_variableModifier_in_forInit3070);
+                    	    pushFollow(FOLLOW_variableModifier_in_forInit3063);
                     	    variableModifier();
 
                     	    state._fsp--;
@@ -6992,12 +6981,12 @@
                         }
                     } while (true);
 
-                    pushFollow(FOLLOW_type_in_forInit3073);
+                    pushFollow(FOLLOW_type_in_forInit3066);
                     type();
 
                     state._fsp--;
                     if (state.failed) return ;
-                    pushFollow(FOLLOW_variableDeclarators_in_forInit3075);
+                    pushFollow(FOLLOW_variableDeclarators_in_forInit3068);
                     variableDeclarators();
 
                     state._fsp--;
@@ -7006,9 +6995,9 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:777:4: expressionList
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:776:4: expressionList
                     {
-                    pushFollow(FOLLOW_expressionList_in_forInit3080);
+                    pushFollow(FOLLOW_expressionList_in_forInit3073);
                     expressionList();
 
                     state._fsp--;
@@ -7037,15 +7026,15 @@
 
 
     // $ANTLR start "forVarControl"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:780:1: forVarControl : ( variableModifier )* type Identifier ':' expression ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:779:1: forVarControl : ( variableModifier )* type Identifier ':' expression ;
     public final void forVarControl() throws RecognitionException {
         int forVarControl_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 95) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:781:2: ( ( variableModifier )* type Identifier ':' expression )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:781:4: ( variableModifier )* type Identifier ':' expression
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:780:2: ( ( variableModifier )* type Identifier ':' expression )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:780:4: ( variableModifier )* type Identifier ':' expression
             {
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:781:4: ( variableModifier )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:780:4: ( variableModifier )*
             loop129:
             do {
                 int alt129=2;
@@ -7060,7 +7049,7 @@
             	case 1 :
             	    // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: variableModifier
             	    {
-            	    pushFollow(FOLLOW_variableModifier_in_forVarControl3092);
+            	    pushFollow(FOLLOW_variableModifier_in_forVarControl3085);
             	    variableModifier();
 
             	    state._fsp--;
@@ -7074,14 +7063,14 @@
                 }
             } while (true);
 
-            pushFollow(FOLLOW_type_in_forVarControl3095);
+            pushFollow(FOLLOW_type_in_forVarControl3088);
             type();
 
             state._fsp--;
             if (state.failed) return ;
-            match(input,Identifier,FOLLOW_Identifier_in_forVarControl3097); if (state.failed) return ;
-            match(input,74,FOLLOW_74_in_forVarControl3099); if (state.failed) return ;
-            pushFollow(FOLLOW_expression_in_forVarControl3101);
+            match(input,Identifier,FOLLOW_Identifier_in_forVarControl3090); if (state.failed) return ;
+            match(input,74,FOLLOW_74_in_forVarControl3092); if (state.failed) return ;
+            pushFollow(FOLLOW_expression_in_forVarControl3094);
             expression();
 
             state._fsp--;
@@ -7103,15 +7092,15 @@
 
 
     // $ANTLR start "forUpdate"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:784:1: forUpdate : expressionList ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:783:1: forUpdate : expressionList ;
     public final void forUpdate() throws RecognitionException {
         int forUpdate_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 96) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:785:2: ( expressionList )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:785:4: expressionList
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:784:2: ( expressionList )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:784:4: expressionList
             {
-            pushFollow(FOLLOW_expressionList_in_forUpdate3112);
+            pushFollow(FOLLOW_expressionList_in_forUpdate3105);
             expressionList();
 
             state._fsp--;
@@ -7135,23 +7124,23 @@
     };
 
     // $ANTLR start "parExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:790:1: parExpression : '(' expression ')' ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:789:1: parExpression : '(' expression ')' ;
     public final JavaParser.parExpression_return parExpression() throws RecognitionException {
         JavaParser.parExpression_return retval = new JavaParser.parExpression_return();
         retval.start = input.LT(1);
         int parExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 97) ) { return retval; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:791:2: ( '(' expression ')' )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:791:4: '(' expression ')'
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:790:2: ( '(' expression ')' )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:790:4: '(' expression ')'
             {
-            match(input,65,FOLLOW_65_in_parExpression3125); if (state.failed) return retval;
-            pushFollow(FOLLOW_expression_in_parExpression3127);
+            match(input,65,FOLLOW_65_in_parExpression3118); if (state.failed) return retval;
+            pushFollow(FOLLOW_expression_in_parExpression3120);
             expression();
 
             state._fsp--;
             if (state.failed) return retval;
-            match(input,66,FOLLOW_66_in_parExpression3129); if (state.failed) return retval;
+            match(input,66,FOLLOW_66_in_parExpression3122); if (state.failed) return retval;
 
             }
 
@@ -7171,20 +7160,20 @@
 
 
     // $ANTLR start "expressionList"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:794:1: expressionList : expression ( ',' expression )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:793:1: expressionList : expression ( ',' expression )* ;
     public final void expressionList() throws RecognitionException {
         int expressionList_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 98) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:795:5: ( expression ( ',' expression )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:795:9: expression ( ',' expression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:794:5: ( expression ( ',' expression )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:794:9: expression ( ',' expression )*
             {
-            pushFollow(FOLLOW_expression_in_expressionList3146);
+            pushFollow(FOLLOW_expression_in_expressionList3139);
             expression();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:795:20: ( ',' expression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:794:20: ( ',' expression )*
             loop130:
             do {
                 int alt130=2;
@@ -7197,10 +7186,10 @@
 
                 switch (alt130) {
             	case 1 :
-            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:795:21: ',' expression
+            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:794:21: ',' expression
             	    {
-            	    match(input,34,FOLLOW_34_in_expressionList3149); if (state.failed) return ;
-            	    pushFollow(FOLLOW_expression_in_expressionList3151);
+            	    match(input,34,FOLLOW_34_in_expressionList3142); if (state.failed) return ;
+            	    pushFollow(FOLLOW_expression_in_expressionList3144);
             	    expression();
 
             	    state._fsp--;
@@ -7231,15 +7220,15 @@
 
 
     // $ANTLR start "statementExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:798:1: statementExpression : expression ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:797:1: statementExpression : expression ;
     public final void statementExpression() throws RecognitionException {
         int statementExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 99) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:799:2: ( expression )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:799:4: expression
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:798:2: ( expression )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:798:4: expression
             {
-            pushFollow(FOLLOW_expression_in_statementExpression3167);
+            pushFollow(FOLLOW_expression_in_statementExpression3160);
             expression();
 
             state._fsp--;
@@ -7261,15 +7250,15 @@
 
 
     // $ANTLR start "constantExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:802:1: constantExpression : expression ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:801:1: constantExpression : expression ;
     public final void constantExpression() throws RecognitionException {
         int constantExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 100) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:803:2: ( expression )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:803:4: expression
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:802:2: ( expression )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:802:4: expression
             {
-            pushFollow(FOLLOW_expression_in_constantExpression3179);
+            pushFollow(FOLLOW_expression_in_constantExpression3172);
             expression();
 
             state._fsp--;
@@ -7293,34 +7282,34 @@
     };
 
     // $ANTLR start "expression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:806:1: expression : conditionalExpression ( assignmentOperator expression )? ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:805:1: expression : conditionalExpression ( assignmentOperator expression )? ;
     public final JavaParser.expression_return expression() throws RecognitionException {
         JavaParser.expression_return retval = new JavaParser.expression_return();
         retval.start = input.LT(1);
         int expression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 101) ) { return retval; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:807:2: ( conditionalExpression ( assignmentOperator expression )? )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:807:4: conditionalExpression ( assignmentOperator expression )?
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:806:2: ( conditionalExpression ( assignmentOperator expression )? )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:806:4: conditionalExpression ( assignmentOperator expression )?
             {
-            pushFollow(FOLLOW_conditionalExpression_in_expression3191);
+            pushFollow(FOLLOW_conditionalExpression_in_expression3184);
             conditionalExpression();
 
             state._fsp--;
             if (state.failed) return retval;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:807:26: ( assignmentOperator expression )?
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:806:26: ( assignmentOperator expression )?
             int alt131=2;
             alt131 = dfa131.predict(input);
             switch (alt131) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:807:27: assignmentOperator expression
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:806:27: assignmentOperator expression
                     {
-                    pushFollow(FOLLOW_assignmentOperator_in_expression3194);
+                    pushFollow(FOLLOW_assignmentOperator_in_expression3187);
                     assignmentOperator();
 
                     state._fsp--;
                     if (state.failed) return retval;
-                    pushFollow(FOLLOW_expression_in_expression3196);
+                    pushFollow(FOLLOW_expression_in_expression3189);
                     expression();
 
                     state._fsp--;
@@ -7350,103 +7339,103 @@
 
 
     // $ANTLR start "assignmentOperator"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:810:1: assignmentOperator : ( '=' | '+=' | '-=' | '*=' | '/=' | '&=' | '|=' | '^=' | '%=' | '<' '<' '=' | '>' '>' '=' | '>' '>' '>' '=' );
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:809:1: assignmentOperator : ( '=' | '+=' | '-=' | '*=' | '/=' | '&=' | '|=' | '^=' | '%=' | '<' '<' '=' | '>' '>' '=' | '>' '>' '>' '=' );
     public final void assignmentOperator() throws RecognitionException {
         int assignmentOperator_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 102) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:811:2: ( '=' | '+=' | '-=' | '*=' | '/=' | '&=' | '|=' | '^=' | '%=' | '<' '<' '=' | '>' '>' '=' | '>' '>' '>' '=' )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:810:2: ( '=' | '+=' | '-=' | '*=' | '/=' | '&=' | '|=' | '^=' | '%=' | '<' '<' '=' | '>' '>' '=' | '>' '>' '>' '=' )
             int alt132=12;
             alt132 = dfa132.predict(input);
             switch (alt132) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:811:4: '='
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:810:4: '='
                     {
-                    match(input,44,FOLLOW_44_in_assignmentOperator3210); if (state.failed) return ;
+                    match(input,44,FOLLOW_44_in_assignmentOperator3203); if (state.failed) return ;
 
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:812:9: '+='
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:811:9: '+='
                     {
-                    match(input,92,FOLLOW_92_in_assignmentOperator3220); if (state.failed) return ;
+                    match(input,92,FOLLOW_92_in_assignmentOperator3213); if (state.failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:813:9: '-='
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:812:9: '-='
                     {
-                    match(input,93,FOLLOW_93_in_assignmentOperator3230); if (state.failed) return ;
+                    match(input,93,FOLLOW_93_in_assignmentOperator3223); if (state.failed) return ;
 
                     }
                     break;
                 case 4 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:814:9: '*='
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:813:9: '*='
                     {
-                    match(input,94,FOLLOW_94_in_assignmentOperator3240); if (state.failed) return ;
+                    match(input,94,FOLLOW_94_in_assignmentOperator3233); if (state.failed) return ;
 
                     }
                     break;
                 case 5 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:815:9: '/='
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:814:9: '/='
                     {
-                    match(input,95,FOLLOW_95_in_assignmentOperator3250); if (state.failed) return ;
+                    match(input,95,FOLLOW_95_in_assignmentOperator3243); if (state.failed) return ;
 
                     }
                     break;
                 case 6 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:816:9: '&='
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:815:9: '&='
                     {
-                    match(input,96,FOLLOW_96_in_assignmentOperator3260); if (state.failed) return ;
+                    match(input,96,FOLLOW_96_in_assignmentOperator3253); if (state.failed) return ;
 
                     }
                     break;
                 case 7 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:817:9: '|='
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:816:9: '|='
                     {
-                    match(input,97,FOLLOW_97_in_assignmentOperator3270); if (state.failed) return ;
+                    match(input,97,FOLLOW_97_in_assignmentOperator3263); if (state.failed) return ;
 
                     }
                     break;
                 case 8 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:818:9: '^='
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:817:9: '^='
                     {
-                    match(input,98,FOLLOW_98_in_assignmentOperator3280); if (state.failed) return ;
+                    match(input,98,FOLLOW_98_in_assignmentOperator3273); if (state.failed) return ;
 
                     }
                     break;
                 case 9 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:819:9: '%='
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:818:9: '%='
                     {
-                    match(input,99,FOLLOW_99_in_assignmentOperator3290); if (state.failed) return ;
+                    match(input,99,FOLLOW_99_in_assignmentOperator3283); if (state.failed) return ;
 
                     }
                     break;
                 case 10 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:820:9: '<' '<' '='
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:819:9: '<' '<' '='
                     {
-                    match(input,33,FOLLOW_33_in_assignmentOperator3300); if (state.failed) return ;
-                    match(input,33,FOLLOW_33_in_assignmentOperator3302); if (state.failed) return ;
-                    match(input,44,FOLLOW_44_in_assignmentOperator3304); if (state.failed) return ;
+                    match(input,33,FOLLOW_33_in_assignmentOperator3293); if (state.failed) return ;
+                    match(input,33,FOLLOW_33_in_assignmentOperator3295); if (state.failed) return ;
+                    match(input,44,FOLLOW_44_in_assignmentOperator3297); if (state.failed) return ;
 
                     }
                     break;
                 case 11 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:821:9: '>' '>' '='
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:820:9: '>' '>' '='
                     {
-                    match(input,35,FOLLOW_35_in_assignmentOperator3314); if (state.failed) return ;
-                    match(input,35,FOLLOW_35_in_assignmentOperator3316); if (state.failed) return ;
-                    match(input,44,FOLLOW_44_in_assignmentOperator3318); if (state.failed) return ;
+                    match(input,35,FOLLOW_35_in_assignmentOperator3307); if (state.failed) return ;
+                    match(input,35,FOLLOW_35_in_assignmentOperator3309); if (state.failed) return ;
+                    match(input,44,FOLLOW_44_in_assignmentOperator3311); if (state.failed) return ;
 
                     }
                     break;
                 case 12 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:822:9: '>' '>' '>' '='
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:821:9: '>' '>' '>' '='
                     {
-                    match(input,35,FOLLOW_35_in_assignmentOperator3328); if (state.failed) return ;
-                    match(input,35,FOLLOW_35_in_assignmentOperator3330); if (state.failed) return ;
-                    match(input,35,FOLLOW_35_in_assignmentOperator3332); if (state.failed) return ;
-                    match(input,44,FOLLOW_44_in_assignmentOperator3334); if (state.failed) return ;
+                    match(input,35,FOLLOW_35_in_assignmentOperator3321); if (state.failed) return ;
+                    match(input,35,FOLLOW_35_in_assignmentOperator3323); if (state.failed) return ;
+                    match(input,35,FOLLOW_35_in_assignmentOperator3325); if (state.failed) return ;
+                    match(input,44,FOLLOW_44_in_assignmentOperator3327); if (state.failed) return ;
 
                     }
                     break;
@@ -7466,34 +7455,34 @@
 
 
     // $ANTLR start "conditionalExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:825:1: conditionalExpression : conditionalOrExpression ( '?' expression ':' expression )? ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:824:1: conditionalExpression : conditionalOrExpression ( '?' expression ':' expression )? ;
     public final void conditionalExpression() throws RecognitionException {
         int conditionalExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 103) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:826:5: ( conditionalOrExpression ( '?' expression ':' expression )? )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:826:9: conditionalOrExpression ( '?' expression ':' expression )?
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:825:5: ( conditionalOrExpression ( '?' expression ':' expression )? )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:825:9: conditionalOrExpression ( '?' expression ':' expression )?
             {
-            pushFollow(FOLLOW_conditionalOrExpression_in_conditionalExpression3350);
+            pushFollow(FOLLOW_conditionalOrExpression_in_conditionalExpression3343);
             conditionalOrExpression();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:826:33: ( '?' expression ':' expression )?
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:825:33: ( '?' expression ':' expression )?
             int alt133=2;
             alt133 = dfa133.predict(input);
             switch (alt133) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:826:35: '?' expression ':' expression
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:825:35: '?' expression ':' expression
                     {
-                    match(input,63,FOLLOW_63_in_conditionalExpression3354); if (state.failed) return ;
-                    pushFollow(FOLLOW_expression_in_conditionalExpression3356);
+                    match(input,63,FOLLOW_63_in_conditionalExpression3347); if (state.failed) return ;
+                    pushFollow(FOLLOW_expression_in_conditionalExpression3349);
                     expression();
 
                     state._fsp--;
                     if (state.failed) return ;
-                    match(input,74,FOLLOW_74_in_conditionalExpression3358); if (state.failed) return ;
-                    pushFollow(FOLLOW_expression_in_conditionalExpression3360);
+                    match(input,74,FOLLOW_74_in_conditionalExpression3351); if (state.failed) return ;
+                    pushFollow(FOLLOW_expression_in_conditionalExpression3353);
                     expression();
 
                     state._fsp--;
@@ -7521,30 +7510,30 @@
 
 
     // $ANTLR start "conditionalOrExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:829:1: conditionalOrExpression : conditionalAndExpression ( '||' conditionalAndExpression )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:828:1: conditionalOrExpression : conditionalAndExpression ( '||' conditionalAndExpression )* ;
     public final void conditionalOrExpression() throws RecognitionException {
         int conditionalOrExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 104) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:830:5: ( conditionalAndExpression ( '||' conditionalAndExpression )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:830:9: conditionalAndExpression ( '||' conditionalAndExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:829:5: ( conditionalAndExpression ( '||' conditionalAndExpression )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:829:9: conditionalAndExpression ( '||' conditionalAndExpression )*
             {
-            pushFollow(FOLLOW_conditionalAndExpression_in_conditionalOrExpression3379);
+            pushFollow(FOLLOW_conditionalAndExpression_in_conditionalOrExpression3372);
             conditionalAndExpression();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:830:34: ( '||' conditionalAndExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:829:34: ( '||' conditionalAndExpression )*
             loop134:
             do {
                 int alt134=2;
                 alt134 = dfa134.predict(input);
                 switch (alt134) {
             	case 1 :
-            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:830:36: '||' conditionalAndExpression
+            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:829:36: '||' conditionalAndExpression
             	    {
-            	    match(input,100,FOLLOW_100_in_conditionalOrExpression3383); if (state.failed) return ;
-            	    pushFollow(FOLLOW_conditionalAndExpression_in_conditionalOrExpression3385);
+            	    match(input,100,FOLLOW_100_in_conditionalOrExpression3376); if (state.failed) return ;
+            	    pushFollow(FOLLOW_conditionalAndExpression_in_conditionalOrExpression3378);
             	    conditionalAndExpression();
 
             	    state._fsp--;
@@ -7575,30 +7564,30 @@
 
 
     // $ANTLR start "conditionalAndExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:833:1: conditionalAndExpression : inclusiveOrExpression ( '&&' inclusiveOrExpression )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:832:1: conditionalAndExpression : inclusiveOrExpression ( '&&' inclusiveOrExpression )* ;
     public final void conditionalAndExpression() throws RecognitionException {
         int conditionalAndExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 105) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:834:5: ( inclusiveOrExpression ( '&&' inclusiveOrExpression )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:834:9: inclusiveOrExpression ( '&&' inclusiveOrExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:833:5: ( inclusiveOrExpression ( '&&' inclusiveOrExpression )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:833:9: inclusiveOrExpression ( '&&' inclusiveOrExpression )*
             {
-            pushFollow(FOLLOW_inclusiveOrExpression_in_conditionalAndExpression3404);
+            pushFollow(FOLLOW_inclusiveOrExpression_in_conditionalAndExpression3397);
             inclusiveOrExpression();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:834:31: ( '&&' inclusiveOrExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:833:31: ( '&&' inclusiveOrExpression )*
             loop135:
             do {
                 int alt135=2;
                 alt135 = dfa135.predict(input);
                 switch (alt135) {
             	case 1 :
-            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:834:33: '&&' inclusiveOrExpression
+            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:833:33: '&&' inclusiveOrExpression
             	    {
-            	    match(input,101,FOLLOW_101_in_conditionalAndExpression3408); if (state.failed) return ;
-            	    pushFollow(FOLLOW_inclusiveOrExpression_in_conditionalAndExpression3410);
+            	    match(input,101,FOLLOW_101_in_conditionalAndExpression3401); if (state.failed) return ;
+            	    pushFollow(FOLLOW_inclusiveOrExpression_in_conditionalAndExpression3403);
             	    inclusiveOrExpression();
 
             	    state._fsp--;
@@ -7629,30 +7618,30 @@
 
 
     // $ANTLR start "inclusiveOrExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:837:1: inclusiveOrExpression : exclusiveOrExpression ( '|' exclusiveOrExpression )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:836:1: inclusiveOrExpression : exclusiveOrExpression ( '|' exclusiveOrExpression )* ;
     public final void inclusiveOrExpression() throws RecognitionException {
         int inclusiveOrExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 106) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:838:5: ( exclusiveOrExpression ( '|' exclusiveOrExpression )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:838:9: exclusiveOrExpression ( '|' exclusiveOrExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:837:5: ( exclusiveOrExpression ( '|' exclusiveOrExpression )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:837:9: exclusiveOrExpression ( '|' exclusiveOrExpression )*
             {
-            pushFollow(FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression3429);
+            pushFollow(FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression3422);
             exclusiveOrExpression();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:838:31: ( '|' exclusiveOrExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:837:31: ( '|' exclusiveOrExpression )*
             loop136:
             do {
                 int alt136=2;
                 alt136 = dfa136.predict(input);
                 switch (alt136) {
             	case 1 :
-            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:838:33: '|' exclusiveOrExpression
+            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:837:33: '|' exclusiveOrExpression
             	    {
-            	    match(input,102,FOLLOW_102_in_inclusiveOrExpression3433); if (state.failed) return ;
-            	    pushFollow(FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression3435);
+            	    match(input,102,FOLLOW_102_in_inclusiveOrExpression3426); if (state.failed) return ;
+            	    pushFollow(FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression3428);
             	    exclusiveOrExpression();
 
             	    state._fsp--;
@@ -7683,30 +7672,30 @@
 
 
     // $ANTLR start "exclusiveOrExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:841:1: exclusiveOrExpression : andExpression ( '^' andExpression )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:840:1: exclusiveOrExpression : andExpression ( '^' andExpression )* ;
     public final void exclusiveOrExpression() throws RecognitionException {
         int exclusiveOrExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 107) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:842:5: ( andExpression ( '^' andExpression )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:842:9: andExpression ( '^' andExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:841:5: ( andExpression ( '^' andExpression )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:841:9: andExpression ( '^' andExpression )*
             {
-            pushFollow(FOLLOW_andExpression_in_exclusiveOrExpression3454);
+            pushFollow(FOLLOW_andExpression_in_exclusiveOrExpression3447);
             andExpression();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:842:23: ( '^' andExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:841:23: ( '^' andExpression )*
             loop137:
             do {
                 int alt137=2;
                 alt137 = dfa137.predict(input);
                 switch (alt137) {
             	case 1 :
-            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:842:25: '^' andExpression
+            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:841:25: '^' andExpression
             	    {
-            	    match(input,103,FOLLOW_103_in_exclusiveOrExpression3458); if (state.failed) return ;
-            	    pushFollow(FOLLOW_andExpression_in_exclusiveOrExpression3460);
+            	    match(input,103,FOLLOW_103_in_exclusiveOrExpression3451); if (state.failed) return ;
+            	    pushFollow(FOLLOW_andExpression_in_exclusiveOrExpression3453);
             	    andExpression();
 
             	    state._fsp--;
@@ -7737,30 +7726,30 @@
 
 
     // $ANTLR start "andExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:845:1: andExpression : equalityExpression ( '&' equalityExpression )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:844:1: andExpression : equalityExpression ( '&' equalityExpression )* ;
     public final void andExpression() throws RecognitionException {
         int andExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 108) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:846:5: ( equalityExpression ( '&' equalityExpression )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:846:9: equalityExpression ( '&' equalityExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:845:5: ( equalityExpression ( '&' equalityExpression )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:845:9: equalityExpression ( '&' equalityExpression )*
             {
-            pushFollow(FOLLOW_equalityExpression_in_andExpression3479);
+            pushFollow(FOLLOW_equalityExpression_in_andExpression3472);
             equalityExpression();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:846:28: ( '&' equalityExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:845:28: ( '&' equalityExpression )*
             loop138:
             do {
                 int alt138=2;
                 alt138 = dfa138.predict(input);
                 switch (alt138) {
             	case 1 :
-            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:846:30: '&' equalityExpression
+            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:845:30: '&' equalityExpression
             	    {
-            	    match(input,36,FOLLOW_36_in_andExpression3483); if (state.failed) return ;
-            	    pushFollow(FOLLOW_equalityExpression_in_andExpression3485);
+            	    match(input,36,FOLLOW_36_in_andExpression3476); if (state.failed) return ;
+            	    pushFollow(FOLLOW_equalityExpression_in_andExpression3478);
             	    equalityExpression();
 
             	    state._fsp--;
@@ -7791,27 +7780,27 @@
 
 
     // $ANTLR start "equalityExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:849:1: equalityExpression : instanceOfExpression ( ( '==' | '!=' ) instanceOfExpression )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:848:1: equalityExpression : instanceOfExpression ( ( '==' | '!=' ) instanceOfExpression )* ;
     public final void equalityExpression() throws RecognitionException {
         int equalityExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 109) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:850:5: ( instanceOfExpression ( ( '==' | '!=' ) instanceOfExpression )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:850:9: instanceOfExpression ( ( '==' | '!=' ) instanceOfExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:849:5: ( instanceOfExpression ( ( '==' | '!=' ) instanceOfExpression )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:849:9: instanceOfExpression ( ( '==' | '!=' ) instanceOfExpression )*
             {
-            pushFollow(FOLLOW_instanceOfExpression_in_equalityExpression3504);
+            pushFollow(FOLLOW_instanceOfExpression_in_equalityExpression3497);
             instanceOfExpression();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:850:30: ( ( '==' | '!=' ) instanceOfExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:849:30: ( ( '==' | '!=' ) instanceOfExpression )*
             loop139:
             do {
                 int alt139=2;
                 alt139 = dfa139.predict(input);
                 switch (alt139) {
             	case 1 :
-            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:850:32: ( '==' | '!=' ) instanceOfExpression
+            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:849:32: ( '==' | '!=' ) instanceOfExpression
             	    {
             	    if ( (input.LA(1)>=104 && input.LA(1)<=105) ) {
             	        input.consume();
@@ -7823,7 +7812,7 @@
             	        throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_instanceOfExpression_in_equalityExpression3516);
+            	    pushFollow(FOLLOW_instanceOfExpression_in_equalityExpression3509);
             	    instanceOfExpression();
 
             	    state._fsp--;
@@ -7854,28 +7843,28 @@
 
 
     // $ANTLR start "instanceOfExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:853:1: instanceOfExpression : relationalExpression ( 'instanceof' type )? ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:852:1: instanceOfExpression : relationalExpression ( 'instanceof' type )? ;
     public final void instanceOfExpression() throws RecognitionException {
         int instanceOfExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 110) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:854:5: ( relationalExpression ( 'instanceof' type )? )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:854:9: relationalExpression ( 'instanceof' type )?
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:853:5: ( relationalExpression ( 'instanceof' type )? )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:853:9: relationalExpression ( 'instanceof' type )?
             {
-            pushFollow(FOLLOW_relationalExpression_in_instanceOfExpression3535);
+            pushFollow(FOLLOW_relationalExpression_in_instanceOfExpression3528);
             relationalExpression();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:854:30: ( 'instanceof' type )?
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:853:30: ( 'instanceof' type )?
             int alt140=2;
             alt140 = dfa140.predict(input);
             switch (alt140) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:854:31: 'instanceof' type
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:853:31: 'instanceof' type
                     {
-                    match(input,106,FOLLOW_106_in_instanceOfExpression3538); if (state.failed) return ;
-                    pushFollow(FOLLOW_type_in_instanceOfExpression3540);
+                    match(input,106,FOLLOW_106_in_instanceOfExpression3531); if (state.failed) return ;
+                    pushFollow(FOLLOW_type_in_instanceOfExpression3533);
                     type();
 
                     state._fsp--;
@@ -7903,34 +7892,34 @@
 
 
     // $ANTLR start "relationalExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:857:1: relationalExpression : shiftExpression ( relationalOp shiftExpression )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:856:1: relationalExpression : shiftExpression ( relationalOp shiftExpression )* ;
     public final void relationalExpression() throws RecognitionException {
         int relationalExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 111) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:858:5: ( shiftExpression ( relationalOp shiftExpression )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:858:9: shiftExpression ( relationalOp shiftExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:857:5: ( shiftExpression ( relationalOp shiftExpression )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:857:9: shiftExpression ( relationalOp shiftExpression )*
             {
-            pushFollow(FOLLOW_shiftExpression_in_relationalExpression3558);
+            pushFollow(FOLLOW_shiftExpression_in_relationalExpression3551);
             shiftExpression();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:858:25: ( relationalOp shiftExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:857:25: ( relationalOp shiftExpression )*
             loop141:
             do {
                 int alt141=2;
                 alt141 = dfa141.predict(input);
                 switch (alt141) {
             	case 1 :
-            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:858:27: relationalOp shiftExpression
+            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:857:27: relationalOp shiftExpression
             	    {
-            	    pushFollow(FOLLOW_relationalOp_in_relationalExpression3562);
+            	    pushFollow(FOLLOW_relationalOp_in_relationalExpression3555);
             	    relationalOp();
 
             	    state._fsp--;
             	    if (state.failed) return ;
-            	    pushFollow(FOLLOW_shiftExpression_in_relationalExpression3564);
+            	    pushFollow(FOLLOW_shiftExpression_in_relationalExpression3557);
             	    shiftExpression();
 
             	    state._fsp--;
@@ -7961,45 +7950,45 @@
 
 
     // $ANTLR start "relationalOp"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:861:1: relationalOp : ( '<' '=' | '>' '=' | '<' | '>' ) ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:860:1: relationalOp : ( '<' '=' | '>' '=' | '<' | '>' ) ;
     public final void relationalOp() throws RecognitionException {
         int relationalOp_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 112) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:862:2: ( ( '<' '=' | '>' '=' | '<' | '>' ) )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:862:4: ( '<' '=' | '>' '=' | '<' | '>' )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:861:2: ( ( '<' '=' | '>' '=' | '<' | '>' ) )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:861:4: ( '<' '=' | '>' '=' | '<' | '>' )
             {
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:862:4: ( '<' '=' | '>' '=' | '<' | '>' )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:861:4: ( '<' '=' | '>' '=' | '<' | '>' )
             int alt142=4;
             alt142 = dfa142.predict(input);
             switch (alt142) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:862:5: '<' '='
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:861:5: '<' '='
                     {
-                    match(input,33,FOLLOW_33_in_relationalOp3580); if (state.failed) return ;
-                    match(input,44,FOLLOW_44_in_relationalOp3582); if (state.failed) return ;
+                    match(input,33,FOLLOW_33_in_relationalOp3573); if (state.failed) return ;
+                    match(input,44,FOLLOW_44_in_relationalOp3575); if (state.failed) return ;
 
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:862:15: '>' '='
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:861:15: '>' '='
                     {
-                    match(input,35,FOLLOW_35_in_relationalOp3586); if (state.failed) return ;
-                    match(input,44,FOLLOW_44_in_relationalOp3588); if (state.failed) return ;
+                    match(input,35,FOLLOW_35_in_relationalOp3579); if (state.failed) return ;
+                    match(input,44,FOLLOW_44_in_relationalOp3581); if (state.failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:862:25: '<'
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:861:25: '<'
                     {
-                    match(input,33,FOLLOW_33_in_relationalOp3592); if (state.failed) return ;
+                    match(input,33,FOLLOW_33_in_relationalOp3585); if (state.failed) return ;
 
                     }
                     break;
                 case 4 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:862:31: '>'
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:861:31: '>'
                     {
-                    match(input,35,FOLLOW_35_in_relationalOp3596); if (state.failed) return ;
+                    match(input,35,FOLLOW_35_in_relationalOp3589); if (state.failed) return ;
 
                     }
                     break;
@@ -8023,34 +8012,34 @@
 
 
     // $ANTLR start "shiftExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:865:1: shiftExpression : additiveExpression ( shiftOp additiveExpression )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:864:1: shiftExpression : additiveExpression ( shiftOp additiveExpression )* ;
     public final void shiftExpression() throws RecognitionException {
         int shiftExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 113) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:866:5: ( additiveExpression ( shiftOp additiveExpression )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:866:9: additiveExpression ( shiftOp additiveExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:865:5: ( additiveExpression ( shiftOp additiveExpression )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:865:9: additiveExpression ( shiftOp additiveExpression )*
             {
-            pushFollow(FOLLOW_additiveExpression_in_shiftExpression3613);
+            pushFollow(FOLLOW_additiveExpression_in_shiftExpression3606);
             additiveExpression();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:866:28: ( shiftOp additiveExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:865:28: ( shiftOp additiveExpression )*
             loop143:
             do {
                 int alt143=2;
                 alt143 = dfa143.predict(input);
                 switch (alt143) {
             	case 1 :
-            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:866:30: shiftOp additiveExpression
+            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:865:30: shiftOp additiveExpression
             	    {
-            	    pushFollow(FOLLOW_shiftOp_in_shiftExpression3617);
+            	    pushFollow(FOLLOW_shiftOp_in_shiftExpression3610);
             	    shiftOp();
 
             	    state._fsp--;
             	    if (state.failed) return ;
-            	    pushFollow(FOLLOW_additiveExpression_in_shiftExpression3619);
+            	    pushFollow(FOLLOW_additiveExpression_in_shiftExpression3612);
             	    additiveExpression();
 
             	    state._fsp--;
@@ -8081,15 +8070,15 @@
 
 
     // $ANTLR start "shiftOp"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:870:1: shiftOp : ( '<' '<' | '>' '>' '>' | '>' '>' ) ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:869:1: shiftOp : ( '<' '<' | '>' '>' '>' | '>' '>' ) ;
     public final void shiftOp() throws RecognitionException {
         int shiftOp_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 114) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:871:2: ( ( '<' '<' | '>' '>' '>' | '>' '>' ) )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:871:4: ( '<' '<' | '>' '>' '>' | '>' '>' )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:870:2: ( ( '<' '<' | '>' '>' '>' | '>' '>' ) )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:870:4: ( '<' '<' | '>' '>' '>' | '>' '>' )
             {
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:871:4: ( '<' '<' | '>' '>' '>' | '>' '>' )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:870:4: ( '<' '<' | '>' '>' '>' | '>' '>' )
             int alt144=3;
             int LA144_0 = input.LA(1);
 
@@ -8102,7 +8091,7 @@
                 if ( (LA144_2==35) ) {
                     int LA144_3 = input.LA(3);
 
-                    if ( (synpred216_Java()) ) {
+                    if ( (synpred215_Java()) ) {
                         alt144=2;
                     }
                     else if ( (true) ) {
@@ -8133,27 +8122,27 @@
             }
             switch (alt144) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:871:5: '<' '<'
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:870:5: '<' '<'
                     {
-                    match(input,33,FOLLOW_33_in_shiftOp3643); if (state.failed) return ;
-                    match(input,33,FOLLOW_33_in_shiftOp3645); if (state.failed) return ;
+                    match(input,33,FOLLOW_33_in_shiftOp3636); if (state.failed) return ;
+                    match(input,33,FOLLOW_33_in_shiftOp3638); if (state.failed) return ;
 
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:871:15: '>' '>' '>'
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:870:15: '>' '>' '>'
                     {
-                    match(input,35,FOLLOW_35_in_shiftOp3649); if (state.failed) return ;
-                    match(input,35,FOLLOW_35_in_shiftOp3651); if (state.failed) return ;
-                    match(input,35,FOLLOW_35_in_shiftOp3653); if (state.failed) return ;
+                    match(input,35,FOLLOW_35_in_shiftOp3642); if (state.failed) return ;
+                    match(input,35,FOLLOW_35_in_shiftOp3644); if (state.failed) return ;
+                    match(input,35,FOLLOW_35_in_shiftOp3646); if (state.failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:871:29: '>' '>'
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:870:29: '>' '>'
                     {
-                    match(input,35,FOLLOW_35_in_shiftOp3657); if (state.failed) return ;
-                    match(input,35,FOLLOW_35_in_shiftOp3659); if (state.failed) return ;
+                    match(input,35,FOLLOW_35_in_shiftOp3650); if (state.failed) return ;
+                    match(input,35,FOLLOW_35_in_shiftOp3652); if (state.failed) return ;
 
                     }
                     break;
@@ -8177,27 +8166,27 @@
 
 
     // $ANTLR start "additiveExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:875:1: additiveExpression : multiplicativeExpression ( ( '+' | '-' ) multiplicativeExpression )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:874:1: additiveExpression : multiplicativeExpression ( ( '+' | '-' ) multiplicativeExpression )* ;
     public final void additiveExpression() throws RecognitionException {
         int additiveExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 115) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:876:5: ( multiplicativeExpression ( ( '+' | '-' ) multiplicativeExpression )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:876:9: multiplicativeExpression ( ( '+' | '-' ) multiplicativeExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:875:5: ( multiplicativeExpression ( ( '+' | '-' ) multiplicativeExpression )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:875:9: multiplicativeExpression ( ( '+' | '-' ) multiplicativeExpression )*
             {
-            pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression3677);
+            pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression3670);
             multiplicativeExpression();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:876:34: ( ( '+' | '-' ) multiplicativeExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:875:34: ( ( '+' | '-' ) multiplicativeExpression )*
             loop145:
             do {
                 int alt145=2;
                 alt145 = dfa145.predict(input);
                 switch (alt145) {
             	case 1 :
-            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:876:36: ( '+' | '-' ) multiplicativeExpression
+            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:875:36: ( '+' | '-' ) multiplicativeExpression
             	    {
             	    if ( (input.LA(1)>=107 && input.LA(1)<=108) ) {
             	        input.consume();
@@ -8209,7 +8198,7 @@
             	        throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression3689);
+            	    pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression3682);
             	    multiplicativeExpression();
 
             	    state._fsp--;
@@ -8240,27 +8229,27 @@
 
 
     // $ANTLR start "multiplicativeExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:879:1: multiplicativeExpression : unaryExpression ( ( '*' | '/' | '%' ) unaryExpression )* ;
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:878:1: multiplicativeExpression : unaryExpression ( ( '*' | '/' | '%' ) unaryExpression )* ;
     public final void multiplicativeExpression() throws RecognitionException {
         int multiplicativeExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 116) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:880:5: ( unaryExpression ( ( '*' | '/' | '%' ) unaryExpression )* )
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:880:9: unaryExpression ( ( '*' | '/' | '%' ) unaryExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:879:5: ( unaryExpression ( ( '*' | '/' | '%' ) unaryExpression )* )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:879:9: unaryExpression ( ( '*' | '/' | '%' ) unaryExpression )*
             {
-            pushFollow(FOLLOW_unaryExpression_in_multiplicativeExpression3708);
+            pushFollow(FOLLOW_unaryExpression_in_multiplicativeExpression3701);
             unaryExpression();
 
             state._fsp--;
             if (state.failed) return ;
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:880:25: ( ( '*' | '/' | '%' ) unaryExpression )*
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:879:25: ( ( '*' | '/' | '%' ) unaryExpression )*
             loop146:
             do {
                 int alt146=2;
                 alt146 = dfa146.predict(input);
                 switch (alt146) {
             	case 1 :
-            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:880:27: ( '*' | '/' | '%' ) unaryExpression
+            	    // src/main/resources/org/drools/semantics/java/parser/Java.g:879:27: ( '*' | '/' | '%' ) unaryExpression
             	    {
             	    if ( input.LA(1)==29||(input.LA(1)>=109 && input.LA(1)<=110) ) {
             	        input.consume();
@@ -8272,7 +8261,7 @@
             	        throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_unaryExpression_in_multiplicativeExpression3726);
+            	    pushFollow(FOLLOW_unaryExpression_in_multiplicativeExpression3719);
             	    unaryExpression();
 
             	    state._fsp--;
@@ -8303,20 +8292,20 @@
 
 
     // $ANTLR start "unaryExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:883:1: unaryExpression : ( '+' unaryExpression | '-' unaryExpression | '++' primary | '--' primary | unaryExpressionNotPlusMinus );
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:882:1: unaryExpression : ( '+' unaryExpression | '-' unaryExpression | '++' primary | '--' primary | unaryExpressionNotPlusMinus );
     public final void unaryExpression() throws RecognitionException {
         int unaryExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 117) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:884:5: ( '+' unaryExpression | '-' unaryExpression | '++' primary | '--' primary | unaryExpressionNotPlusMinus )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:883:5: ( '+' unaryExpression | '-' unaryExpression | '++' primary | '--' primary | unaryExpressionNotPlusMinus )
             int alt147=5;
             alt147 = dfa147.predict(input);
             switch (alt147) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:884:9: '+' unaryExpression
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:883:9: '+' unaryExpression
                     {
-                    match(input,107,FOLLOW_107_in_unaryExpression3746); if (state.failed) return ;
-                    pushFollow(FOLLOW_unaryExpression_in_unaryExpression3748);
+                    match(input,107,FOLLOW_107_in_unaryExpression3739); if (state.failed) return ;
+                    pushFollow(FOLLOW_unaryExpression_in_unaryExpression3741);
                     unaryExpression();
 
                     state._fsp--;
@@ -8325,10 +8314,10 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:885:7: '-' unaryExpression
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:884:7: '-' unaryExpression
                     {
-                    match(input,108,FOLLOW_108_in_unaryExpression3756); if (state.failed) return ;
-                    pushFollow(FOLLOW_unaryExpression_in_unaryExpression3758);
+                    match(input,108,FOLLOW_108_in_unaryExpression3749); if (state.failed) return ;
+                    pushFollow(FOLLOW_unaryExpression_in_unaryExpression3751);
                     unaryExpression();
 
                     state._fsp--;
@@ -8337,10 +8326,10 @@
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:886:9: '++' primary
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:885:9: '++' primary
                     {
-                    match(input,111,FOLLOW_111_in_unaryExpression3768); if (state.failed) return ;
-                    pushFollow(FOLLOW_primary_in_unaryExpression3770);
+                    match(input,111,FOLLOW_111_in_unaryExpression3761); if (state.failed) return ;
+                    pushFollow(FOLLOW_primary_in_unaryExpression3763);
                     primary();
 
                     state._fsp--;
@@ -8349,10 +8338,10 @@
                     }
                     break;
                 case 4 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:887:9: '--' primary
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:886:9: '--' primary
                     {
-                    match(input,112,FOLLOW_112_in_unaryExpression3780); if (state.failed) return ;
-                    pushFollow(FOLLOW_primary_in_unaryExpression3782);
+                    match(input,112,FOLLOW_112_in_unaryExpression3773); if (state.failed) return ;
+                    pushFollow(FOLLOW_primary_in_unaryExpression3775);
                     primary();
 
                     state._fsp--;
@@ -8361,9 +8350,9 @@
                     }
                     break;
                 case 5 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:888:9: unaryExpressionNotPlusMinus
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:887:9: unaryExpressionNotPlusMinus
                     {
-                    pushFollow(FOLLOW_unaryExpressionNotPlusMinus_in_unaryExpression3792);
+                    pushFollow(FOLLOW_unaryExpressionNotPlusMinus_in_unaryExpression3785);
                     unaryExpressionNotPlusMinus();
 
                     state._fsp--;
@@ -8387,20 +8376,20 @@
 
 
     // $ANTLR start "unaryExpressionNotPlusMinus"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:891:1: unaryExpressionNotPlusMinus : ( '~' unaryExpression | '!' unaryExpression | castExpression | primary ( selector )* ( '++' | '--' )? );
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:890:1: unaryExpressionNotPlusMinus : ( '~' unaryExpression | '!' unaryExpression | castExpression | primary ( selector )* ( '++' | '--' )? );
     public final void unaryExpressionNotPlusMinus() throws RecognitionException {
         int unaryExpressionNotPlusMinus_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 118) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:892:5: ( '~' unaryExpression | '!' unaryExpression | castExpression | primary ( selector )* ( '++' | '--' )? )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:891:5: ( '~' unaryExpression | '!' unaryExpression | castExpression | primary ( selector )* ( '++' | '--' )? )
             int alt150=4;
             alt150 = dfa150.predict(input);
             switch (alt150) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:892:9: '~' unaryExpression
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:891:9: '~' unaryExpression
                     {
-                    match(input,113,FOLLOW_113_in_unaryExpressionNotPlusMinus3811); if (state.failed) return ;
-                    pushFollow(FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus3813);
+                    match(input,113,FOLLOW_113_in_unaryExpressionNotPlusMinus3804); if (state.failed) return ;
+                    pushFollow(FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus3806);
                     unaryExpression();
 
                     state._fsp--;
@@ -8409,10 +8398,10 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:893:8: '!' unaryExpression
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:892:8: '!' unaryExpression
                     {
-                    match(input,114,FOLLOW_114_in_unaryExpressionNotPlusMinus3822); if (state.failed) return ;
-                    pushFollow(FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus3824);
+                    match(input,114,FOLLOW_114_in_unaryExpressionNotPlusMinus3815); if (state.failed) return ;
+                    pushFollow(FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus3817);
                     unaryExpression();
 
                     state._fsp--;
@@ -8421,9 +8410,9 @@
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:894:9: castExpression
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:893:9: castExpression
                     {
-                    pushFollow(FOLLOW_castExpression_in_unaryExpressionNotPlusMinus3834);
+                    pushFollow(FOLLOW_castExpression_in_unaryExpressionNotPlusMinus3827);
                     castExpression();
 
                     state._fsp--;
@@ -8432,14 +8421,14 @@
                     }
                     break;
                 case 4 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:895:9: primary ( selector )* ( '++' | '--' )?
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:894:9: primary ( selector )* ( '++' | '--' )?
                     {
-                    pushFollow(FOLLOW_primary_in_unaryExpressionNotPlusMinus3844);
+                    pushFollow(FOLLOW_primary_in_unaryExpressionNotPlusMinus3837);
                     primary();
 
                     state._fsp--;
                     if (state.failed) return ;
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:895:17: ( selector )*
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:894:17: ( selector )*
                     loop148:
                     do {
                         int alt148=2;
@@ -8448,7 +8437,7 @@
                     	case 1 :
                     	    // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: selector
                     	    {
-                    	    pushFollow(FOLLOW_selector_in_unaryExpressionNotPlusMinus3846);
+                    	    pushFollow(FOLLOW_selector_in_unaryExpressionNotPlusMinus3839);
                     	    selector();
 
                     	    state._fsp--;
@@ -8462,7 +8451,7 @@
                         }
                     } while (true);
 
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:895:27: ( '++' | '--' )?
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:894:27: ( '++' | '--' )?
                     int alt149=2;
                     alt149 = dfa149.predict(input);
                     switch (alt149) {
@@ -8504,26 +8493,26 @@
 
 
     // $ANTLR start "castExpression"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:898:1: castExpression : ( '(' primitiveType ')' unaryExpression | '(' ( type | expression ) ')' unaryExpressionNotPlusMinus );
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:897:1: castExpression : ( '(' primitiveType ')' unaryExpression | '(' ( type | expression ) ')' unaryExpressionNotPlusMinus );
     public final void castExpression() throws RecognitionException {
         int castExpression_StartIndex = input.index();
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 119) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:899:5: ( '(' primitiveType ')' unaryExpression | '(' ( type | expression ) ')' unaryExpressionNotPlusMinus )
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:898:5: ( '(' primitiveType ')' unaryExpression | '(' ( type | expression ) ')' unaryExpressionNotPlusMinus )
             int alt152=2;
             alt152 = dfa152.predict(input);
             switch (alt152) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:899:8: '(' primitiveType ')' unaryExpression
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:898:8: '(' primitiveType ')' unaryExpression
                     {
-                    match(input,65,FOLLOW_65_in_castExpression3872); if (state.failed) return ;
-                    pushFollow(FOLLOW_primitiveType_in_castExpression3874);
+                    match(input,65,FOLLOW_65_in_castExpression3865); if (state.failed) return ;
+                    pushFollow(FOLLOW_primitiveType_in_castExpression3867);
                     primitiveType();
 
                     state._fsp--;
                     if (state.failed) return ;
-                    match(input,66,FOLLOW_66_in_castExpression3876); if (state.failed) return ;
-                    pushFollow(FOLLOW_unaryExpression_in_castExpression3878);
+                    match(input,66,FOLLOW_66_in_castExpression3869); if (state.failed) return ;
+                    pushFollow(FOLLOW_unaryExpression_in_castExpression3871);
                     unaryExpression();
 
                     state._fsp--;
@@ -8532,17 +8521,17 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:900:8: '(' ( type | expression ) ')' unaryExpressionNotPlusMinus
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:899:8: '(' ( type | expression ) ')' unaryExpressionNotPlusMinus
                     {
-                    match(input,65,FOLLOW_65_in_castExpression3887); if (state.failed) return ;
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:900:12: ( type | expression )
+                    match(input,65,FOLLOW_65_in_castExpression3880); if (state.failed) return ;
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:899:12: ( type | expression )
                     int alt151=2;
                     alt151 = dfa151.predict(input);
                     switch (alt151) {
                         case 1 :
-                            // src/main/resources/org/drools/semantics/java/parser/Java.g:900:13: type
+                            // src/main/resources/org/drools/semantics/java/parser/Java.g:899:13: type
                             {
-                            pushFollow(FOLLOW_type_in_castExpression3890);
+                            pushFollow(FOLLOW_type_in_castExpression3883);
                             type();
 
                             state._fsp--;
@@ -8551,9 +8540,9 @@
                             }
                             break;
                         case 2 :
-                            // src/main/resources/org/drools/semantics/java/parser/Java.g:900:20: expression
+                            // src/main/resources/org/drools/semantics/java/parser/Java.g:899:20: expression
                             {
-                            pushFollow(FOLLOW_expression_in_castExpression3894);
+                            pushFollow(FOLLOW_expression_in_castExpression3887);
                             expression();
 
                             state._fsp--;
@@ -8564,8 +8553,8 @@
 
                     }
 
-                    match(input,66,FOLLOW_66_in_castExpression3897); if (state.failed) return ;
-                    pushFollow(FOLLOW_unaryExpressionNotPlusMinus_in_castExpression3899);
+                    match(input,66,FOLLOW_66_in_castExpression3890); if (state.failed) return ;
+                    pushFollow(FOLLOW_unaryExpressionNotPlusMinus_in_castExpression3892);
                     unaryExpressionNotPlusMinus();
 
                     state._fsp--;
@@ -8589,21 +8578,21 @@
 
 
     // $ANTLR start "primary"
-    // src/main/resources/org/drools/semantics/java/parser/Java.g:903:1: primary : ( parExpression | nonWildcardTypeArguments ( explicitGenericInvocationSuffix | 'this' arguments ) | 'this' ( '.' Identifier )* ( identifierSuffix )? | 'super' superSuffix | literal | 'new' creator | i= Identifier ( '.' Identifier )* ( identifierSuffix )? | primitiveType ( '[' ']' )* '.' 'class' | 'void' '.' 'class' );
+    // src/main/resources/org/drools/semantics/java/parser/Java.g:902:1: primary : ( parExpression | nonWildcardTypeArguments ( explicitGenericInvocationSuffix | 'this' arguments ) | 'this' ( '.' Identifier )* ( identifierSuffix )? | 'super' superSuffix | epStatement ( '.' Identifier )* ( identifierSuffix )? | literal | 'new' creator | i= Identifier ( '.' Identifier )* ( identifierSuffix )? | primitiveType ( '[' ']' )* '.' 'class' | 'void' '.' 'class' );
     public final void primary() throws RecognitionException {
         int primary_StartIndex = input.index();
         Token i=null;
 
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 120) ) { return ; }
-            // src/main/resources/org/drools/semantics/java/parser/Java.g:904:5: ( parExpression | nonWildcardTypeArguments ( explicitGenericInvocationSuffix | 'this' arguments ) | 'this' ( '.' Identifier )* ( identifierSuffix )? | 'super' superSuffix | literal | 'new' creator | i= Identifier ( '.' Identifier )* ( identifierSuffix )? | primitiveType ( '[' ']' )* '.' 'class' | 'void' '.' 'class' )
-            int alt159=9;
-            alt159 = dfa159.predict(input);
-            switch (alt159) {
+            // src/main/resources/org/drools/semantics/java/parser/Java.g:903:5: ( parExpression | nonWildcardTypeArguments ( explicitGenericInvocationSuffix | 'this' arguments ) | 'this' ( '.' Identifier )* ( identifierSuffix )? | 'super' superSuffix | epStatement ( '.' Identifier )* ( identifierSuffix )? | literal | 'new' creator | i= Identifier ( '.' Identifier )* ( identifierSuffix )? | primitiveType ( '[' ']' )* '.' 'class' | 'void' '.' 'class' )
+            int alt161=10;
+            alt161 = dfa161.predict(input);
+            switch (alt161) {
                 case 1 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:904:7: parExpression
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:903:7: parExpression
                     {
-                    pushFollow(FOLLOW_parExpression_in_primary3916);
+                    pushFollow(FOLLOW_parExpression_in_primary3909);
                     parExpression();
 
                     state._fsp--;
@@ -8612,14 +8601,14 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:905:9: nonWildcardTypeArguments ( explicitGenericInvocationSuffix | 'this' arguments )
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:904:9: nonWildcardTypeArguments ( explicitGenericInvocationSuffix | 'this' arguments )
                     {
-                    pushFollow(FOLLOW_nonWildcardTypeArguments_in_primary3926);
+                    pushFollow(FOLLOW_nonWildcardTypeArguments_in_primary3919);
                     nonWildcardTypeArguments();
 
                     state._fsp--;
                     if (state.failed) return ;
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:906:9: ( explicitGenericInvocationSuffix | 'this' arguments )
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:905:9: ( explicitGenericInvocationSuffix | 'this' arguments )
                     int alt153=2;
                     int LA153_0 = input.LA(1);
 
@@ -8638,9 +8627,9 @@
                     }
                     switch (alt153) {
                         case 1 :
-                            // src/main/resources/org/drools/semantics/java/parser/Java.g:906:10: explicitGenericInvocationSuffix
+                            // src/main/resources/org/drools/semantics/java/parser/Java.g:905:10: explicitGenericInvocationSuffix
                             {
-                            pushFollow(FOLLOW_explicitGenericInvocationSuffix_in_primary3937);
+                            pushFollow(FOLLOW_explicitGenericInvocationSuffix_in_primary3930);
                             explicitGenericInvocationSuffix();
 
                             state._fsp--;
@@ -8649,10 +8638,10 @@
                             }
                             break;
                         case 2 :
-                            // src/main/resources/org/drools/semantics/java/parser/Java.g:906:44: 'this' arguments
+                            // src/main/resources/org/drools/semantics/java/parser/Java.g:905:44: 'this' arguments
                             {
-                            match(input,115,FOLLOW_115_in_primary3941); if (state.failed) return ;
-                            pushFollow(FOLLOW_arguments_in_primary3943);
+                            match(input,115,FOLLOW_115_in_primary3934); if (state.failed) return ;
+                            pushFollow(FOLLOW_arguments_in_primary3936);
                             arguments();
 
                             state._fsp--;
@@ -8667,20 +8656,20 @@
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:907:9: 'this' ( '.' Identifier )* ( identifierSuffix )?
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:906:9: 'this' ( '.' Identifier )* ( identifierSuffix )?
                     {
-                    match(input,115,FOLLOW_115_in_primary3954); if (state.failed) return ;
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:907:16: ( '.' Identifier )*
+                    match(input,115,FOLLOW_115_in_primary3947); if (state.failed) return ;
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:906:16: ( '.' Identifier )*
                     loop154:
                     do {
                         int alt154=2;
                         alt154 = dfa154.predict(input);
                         switch (alt154) {
                     	case 1 :
-                    	    // src/main/resources/org/drools/semantics/java/parser/Java.g:907:17: '.' Identifier
+                    	    // src/main/resources/org/drools/semantics/java/parser/Java.g:906:17: '.' Identifier
                     	    {
-                    	    match(input,28,FOLLOW_28_in_primary3957); if (state.failed) return ;
-                    	    match(input,Identifier,FOLLOW_Identifier_in_primary3959); if (state.failed) return ;
+                    	    match(input,28,FOLLOW_28_in_primary3950); if (state.failed) return ;
+                    	    match(input,Identifier,FOLLOW_Identifier_in_primary3952); if (state.failed) return ;
 
                     	    }
                     	    break;
@@ -8690,14 +8679,14 @@
                         }
                     } while (true);
 
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:907:34: ( identifierSuffix )?
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:906:34: ( identifierSuffix )?
                     int alt155=2;
                     alt155 = dfa155.predict(input);
                     switch (alt155) {
                         case 1 :
-                            // src/main/resources/org/drools/semantics/java/parser/Java.g:907:35: identifierSuffix
+                            // src/main/resources/org/drools/semantics/java/parser/Java.g:906:35: identifierSuffix
                             {
-                            pushFollow(FOLLOW_identifierSuffix_in_primary3964);
+                            pushFollow(FOLLOW_identifierSuffix_in_primary3957);
                             identifierSuffix();
 
                             state._fsp--;
@@ -8712,10 +8701,10 @@
                     }
                     break;
                 case 4 :
-                    // src/main/resources/org/drools/semantics/java/parser/Java.g:908:9: 'super' superSuffix
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:907:9: 'super' superSuffix
                     {
-                    match(input,64,FOLLOW_64_in_primary3976); if (state.failed) return ;
-                    pushFollow(FOLLOW_superSuffix_in_primary3978);
+                    match(input,64,FOLLOW_64_in_primary3969); if (state.failed) return ;
+                    pushFollow(FOLLOW_superSuffix_in_primary3971);
                     superSuffix();
 
                     state._fsp--;
@@ -8724,9 +8713,58 @@
                     }
                     break;
                 case 5 :
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:908:9: epStatement ( '.' Identifier )* ( identifierSuffix )?
+                    {
+                    pushFollow(FOLLOW_epStatement_in_primary3981);
+                    epStatement();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:908:21: ( '.' Identifier )*
+                    loop156:
+                    do {
+                        int alt156=2;
+                        alt156 = dfa156.predict(input);
+                        switch (alt156) {
+                    	case 1 :
+                    	    // src/main/resources/org/drools/semantics/java/parser/Java.g:908:22: '.' Identifier
+                    	    {
+                    	    match(input,28,FOLLOW_28_in_primary3984); if (state.failed) return ;
+                    	    match(input,Identifier,FOLLOW_Identifier_in_primary3986); if (state.failed) return ;
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop156;
+                        }
+                    } while (true);
+
+                    // src/main/resources/org/drools/semantics/java/parser/Java.g:908:39: ( identifierSuffix )?
+                    int alt157=2;
+                    alt157 = dfa157.predict(input);
+                    switch (alt157) {
+                        case 1 :
+                            // src/main/resources/org/drools/semantics/java/parser/Java.g:908:40: identifierSuffix
+                            {
+                            pushFollow(FOLLOW_identifierSuffix_in_primary3991);
+                            identifierSuffix();
+
+                            state._fsp--;
+                            if (state.failed) return ;
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+                    break;
+                case 6 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:909:9: literal
                     {
-                    pushFollow(FOLLOW_literal_in_primary3988);
+                    pushFollow(FOLLOW_literal_in_primary4003);
                     literal();
 
                     state._fsp--;
@@ -8734,11 +8772,11 @@
 
                     }
                     break;
-                case 6 :
+                case 7 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:910:9: 'new' creator
                     {
-                    match(input,116,FOLLOW_116_in_primary3998); if (state.failed) return ;
-                    pushFollow(FOLLOW_creator_in_primary4000);
+                    match(input,116,FOLLOW_116_in_primary4013); if (state.failed) return ;
+                    pushFollow(FOLLOW_creator_in_primary4015);
                     creator();
 
                     state._fsp--;
@@ -8746,41 +8784,41 @@
 
                     }
                     break;
-                case 7 :
+                case 8 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:911:9: i= Identifier ( '.' Identifier )* ( identifierSuffix )?
                     {
-                    i=(Token)match(input,Identifier,FOLLOW_Identifier_in_primary4012); if (state.failed) return ;
+                    i=(Token)match(input,Identifier,FOLLOW_Identifier_in_primary4027); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        if( ! "(".equals( input.LT(1) == null ? "" : input.LT(1).getText() ) ) identifiers.add( (i!=null?i.getText():null) );  
                     }
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:911:126: ( '.' Identifier )*
-                    loop156:
+                    loop158:
                     do {
-                        int alt156=2;
-                        alt156 = dfa156.predict(input);
-                        switch (alt156) {
+                        int alt158=2;
+                        alt158 = dfa158.predict(input);
+                        switch (alt158) {
                     	case 1 :
                     	    // src/main/resources/org/drools/semantics/java/parser/Java.g:911:127: '.' Identifier
                     	    {
-                    	    match(input,28,FOLLOW_28_in_primary4017); if (state.failed) return ;
-                    	    match(input,Identifier,FOLLOW_Identifier_in_primary4019); if (state.failed) return ;
+                    	    match(input,28,FOLLOW_28_in_primary4032); if (state.failed) return ;
+                    	    match(input,Identifier,FOLLOW_Identifier_in_primary4034); if (state.failed) return ;
 
                     	    }
                     	    break;
 
                     	default :
-                    	    break loop156;
+                    	    break loop158;
                         }
                     } while (true);
 
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:911:144: ( identifierSuffix )?
-                    int alt157=2;
-                    alt157 = dfa157.predict(input);
-                    switch (alt157) {
+                    int alt159=2;
+                    alt159 = dfa159.predict(input);
+                    switch (alt159) {
                         case 1 :
                             // src/main/resources/org/drools/semantics/java/parser/Java.g:911:145: identifierSuffix
                             {
-                            pushFollow(FOLLOW_identifierSuffix_in_primary4024);
+                            pushFollow(FOLLOW_identifierSuffix_in_primary4039);
                             identifierSuffix();
 
                             state._fsp--;
@@ -8794,51 +8832,51 @@
 
                     }
                     break;
-                case 8 :
+                case 9 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:912:9: primitiveType ( '[' ']' )* '.' 'class'
                     {
-                    pushFollow(FOLLOW_primitiveType_in_primary4036);
+                    pushFollow(FOLLOW_primitiveType_in_primary4051);
                     primitiveType();
 
                     state._fsp--;
                     if (state.failed) return ;
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:912:23: ( '[' ']' )*
-                    loop158:
+                    loop160:
                     do {
-                        int alt158=2;
-                        int LA158_0 = input.LA(1);
+                        int alt160=2;
+                        int LA160_0 = input.LA(1);
 
-                        if ( (LA158_0==41) ) {
-                            alt158=1;
+                        if ( (LA160_0==41) ) {
+                            alt160=1;
                         }
 
 
-                        switch (alt158) {
+                        switch (alt160) {
                     	case 1 :
                     	    // src/main/resources/org/drools/semantics/java/parser/Java.g:912:24: '[' ']'
                     	    {
-                    	    match(input,41,FOLLOW_41_in_primary4039); if (state.failed) return ;
-                    	    match(input,42,FOLLOW_42_in_primary4041); if (state.failed) return ;
+                    	    match(input,41,FOLLOW_41_in_primary4054); if (state.failed) return ;
+                    	    match(input,42,FOLLOW_42_in_primary4056); if (state.failed) return ;
 
                     	    }
                     	    break;
 
                     	default :
-                    	    break loop158;
+                    	    break loop160;
                         }
                     } while (true);
 
-                    match(input,28,FOLLOW_28_in_primary4045); if (state.failed) return ;
-                    match(input,30,FOLLOW_30_in_primary4047); if (state.failed) return ;
+                    match(input,28,FOLLOW_28_in_primary4060); if (state.failed) return ;
+                    match(input,30,FOLLOW_30_in_primary4062); if (state.failed) return ;
 
                     }
                     break;
-                case 9 :
+                case 10 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:913:9: 'void' '.' 'class'
                     {
-                    match(input,40,FOLLOW_40_in_primary4057); if (state.failed) return ;
-                    match(input,28,FOLLOW_28_in_primary4059); if (state.failed) return ;
-                    match(input,30,FOLLOW_30_in_primary4061); if (state.failed) return ;
+                    match(input,40,FOLLOW_40_in_primary4072); if (state.failed) return ;
+                    match(input,28,FOLLOW_28_in_primary4074); if (state.failed) return ;
+                    match(input,30,FOLLOW_30_in_primary4076); if (state.failed) return ;
 
                     }
                     break;
@@ -8864,46 +8902,46 @@
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 121) ) { return ; }
             // src/main/resources/org/drools/semantics/java/parser/Java.g:917:2: ( ( '[' ']' )+ '.' 'class' | ( '[' expression ']' )+ | arguments | '.' 'class' | '.' explicitGenericInvocation | '.' 'this' | '.' 'super' arguments | '.' 'new' ( nonWildcardTypeArguments )? innerCreator )
-            int alt163=8;
-            alt163 = dfa163.predict(input);
-            switch (alt163) {
+            int alt165=8;
+            alt165 = dfa165.predict(input);
+            switch (alt165) {
                 case 1 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:917:4: ( '[' ']' )+ '.' 'class'
                     {
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:917:4: ( '[' ']' )+
-                    int cnt160=0;
-                    loop160:
+                    int cnt162=0;
+                    loop162:
                     do {
-                        int alt160=2;
-                        int LA160_0 = input.LA(1);
+                        int alt162=2;
+                        int LA162_0 = input.LA(1);
 
-                        if ( (LA160_0==41) ) {
-                            alt160=1;
+                        if ( (LA162_0==41) ) {
+                            alt162=1;
                         }
 
 
-                        switch (alt160) {
+                        switch (alt162) {
                     	case 1 :
                     	    // src/main/resources/org/drools/semantics/java/parser/Java.g:917:5: '[' ']'
                     	    {
-                    	    match(input,41,FOLLOW_41_in_identifierSuffix4073); if (state.failed) return ;
-                    	    match(input,42,FOLLOW_42_in_identifierSuffix4075); if (state.failed) return ;
+                    	    match(input,41,FOLLOW_41_in_identifierSuffix4088); if (state.failed) return ;
+                    	    match(input,42,FOLLOW_42_in_identifierSuffix4090); if (state.failed) return ;
 
                     	    }
                     	    break;
 
                     	default :
-                    	    if ( cnt160 >= 1 ) break loop160;
+                    	    if ( cnt162 >= 1 ) break loop162;
                     	    if (state.backtracking>0) {state.failed=true; return ;}
                                 EarlyExitException eee =
-                                    new EarlyExitException(160, input);
+                                    new EarlyExitException(162, input);
                                 throw eee;
                         }
-                        cnt160++;
+                        cnt162++;
                     } while (true);
 
-                    match(input,28,FOLLOW_28_in_identifierSuffix4079); if (state.failed) return ;
-                    match(input,30,FOLLOW_30_in_identifierSuffix4081); if (state.failed) return ;
+                    match(input,28,FOLLOW_28_in_identifierSuffix4094); if (state.failed) return ;
+                    match(input,30,FOLLOW_30_in_identifierSuffix4096); if (state.failed) return ;
 
                     }
                     break;
@@ -8911,34 +8949,34 @@
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:918:4: ( '[' expression ']' )+
                     {
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:918:4: ( '[' expression ']' )+
-                    int cnt161=0;
-                    loop161:
+                    int cnt163=0;
+                    loop163:
                     do {
-                        int alt161=2;
-                        alt161 = dfa161.predict(input);
-                        switch (alt161) {
+                        int alt163=2;
+                        alt163 = dfa163.predict(input);
+                        switch (alt163) {
                     	case 1 :
                     	    // src/main/resources/org/drools/semantics/java/parser/Java.g:918:5: '[' expression ']'
                     	    {
-                    	    match(input,41,FOLLOW_41_in_identifierSuffix4087); if (state.failed) return ;
-                    	    pushFollow(FOLLOW_expression_in_identifierSuffix4089);
+                    	    match(input,41,FOLLOW_41_in_identifierSuffix4102); if (state.failed) return ;
+                    	    pushFollow(FOLLOW_expression_in_identifierSuffix4104);
                     	    expression();
 
                     	    state._fsp--;
                     	    if (state.failed) return ;
-                    	    match(input,42,FOLLOW_42_in_identifierSuffix4091); if (state.failed) return ;
+                    	    match(input,42,FOLLOW_42_in_identifierSuffix4106); if (state.failed) return ;
 
                     	    }
                     	    break;
 
                     	default :
-                    	    if ( cnt161 >= 1 ) break loop161;
+                    	    if ( cnt163 >= 1 ) break loop163;
                     	    if (state.backtracking>0) {state.failed=true; return ;}
                                 EarlyExitException eee =
-                                    new EarlyExitException(161, input);
+                                    new EarlyExitException(163, input);
                                 throw eee;
                         }
-                        cnt161++;
+                        cnt163++;
                     } while (true);
 
 
@@ -8947,7 +8985,7 @@
                 case 3 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:919:9: arguments
                     {
-                    pushFollow(FOLLOW_arguments_in_identifierSuffix4104);
+                    pushFollow(FOLLOW_arguments_in_identifierSuffix4119);
                     arguments();
 
                     state._fsp--;
@@ -8958,16 +8996,16 @@
                 case 4 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:920:9: '.' 'class'
                     {
-                    match(input,28,FOLLOW_28_in_identifierSuffix4114); if (state.failed) return ;
-                    match(input,30,FOLLOW_30_in_identifierSuffix4116); if (state.failed) return ;
+                    match(input,28,FOLLOW_28_in_identifierSuffix4129); if (state.failed) return ;
+                    match(input,30,FOLLOW_30_in_identifierSuffix4131); if (state.failed) return ;
 
                     }
                     break;
                 case 5 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:921:9: '.' explicitGenericInvocation
                     {
-                    match(input,28,FOLLOW_28_in_identifierSuffix4126); if (state.failed) return ;
-                    pushFollow(FOLLOW_explicitGenericInvocation_in_identifierSuffix4128);
+                    match(input,28,FOLLOW_28_in_identifierSuffix4141); if (state.failed) return ;
+                    pushFollow(FOLLOW_explicitGenericInvocation_in_identifierSuffix4143);
                     explicitGenericInvocation();
 
                     state._fsp--;
@@ -8978,17 +9016,17 @@
                 case 6 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:922:9: '.' 'this'
                     {
-                    match(input,28,FOLLOW_28_in_identifierSuffix4138); if (state.failed) return ;
-                    match(input,115,FOLLOW_115_in_identifierSuffix4140); if (state.failed) return ;
+                    match(input,28,FOLLOW_28_in_identifierSuffix4153); if (state.failed) return ;
+                    match(input,115,FOLLOW_115_in_identifierSuffix4155); if (state.failed) return ;
 
                     }
                     break;
                 case 7 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:923:9: '.' 'super' arguments
                     {
-                    match(input,28,FOLLOW_28_in_identifierSuffix4150); if (state.failed) return ;
-                    match(input,64,FOLLOW_64_in_identifierSuffix4152); if (state.failed) return ;
-                    pushFollow(FOLLOW_arguments_in_identifierSuffix4154);
+                    match(input,28,FOLLOW_28_in_identifierSuffix4165); if (state.failed) return ;
+                    match(input,64,FOLLOW_64_in_identifierSuffix4167); if (state.failed) return ;
+                    pushFollow(FOLLOW_arguments_in_identifierSuffix4169);
                     arguments();
 
                     state._fsp--;
@@ -8999,20 +9037,20 @@
                 case 8 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:924:9: '.' 'new' ( nonWildcardTypeArguments )? innerCreator
                     {
-                    match(input,28,FOLLOW_28_in_identifierSuffix4164); if (state.failed) return ;
-                    match(input,116,FOLLOW_116_in_identifierSuffix4166); if (state.failed) return ;
+                    match(input,28,FOLLOW_28_in_identifierSuffix4179); if (state.failed) return ;
+                    match(input,116,FOLLOW_116_in_identifierSuffix4181); if (state.failed) return ;
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:924:19: ( nonWildcardTypeArguments )?
-                    int alt162=2;
-                    int LA162_0 = input.LA(1);
+                    int alt164=2;
+                    int LA164_0 = input.LA(1);
 
-                    if ( (LA162_0==33) ) {
-                        alt162=1;
+                    if ( (LA164_0==33) ) {
+                        alt164=1;
                     }
-                    switch (alt162) {
+                    switch (alt164) {
                         case 1 :
                             // src/main/resources/org/drools/semantics/java/parser/Java.g:924:20: nonWildcardTypeArguments
                             {
-                            pushFollow(FOLLOW_nonWildcardTypeArguments_in_identifierSuffix4169);
+                            pushFollow(FOLLOW_nonWildcardTypeArguments_in_identifierSuffix4184);
                             nonWildcardTypeArguments();
 
                             state._fsp--;
@@ -9023,7 +9061,7 @@
 
                     }
 
-                    pushFollow(FOLLOW_innerCreator_in_identifierSuffix4173);
+                    pushFollow(FOLLOW_innerCreator_in_identifierSuffix4188);
                     innerCreator();
 
                     state._fsp--;
@@ -9056,17 +9094,17 @@
             // src/main/resources/org/drools/semantics/java/parser/Java.g:928:4: ( nonWildcardTypeArguments )? createdName ( arrayCreatorRest | classCreatorRest )
             {
             // src/main/resources/org/drools/semantics/java/parser/Java.g:928:4: ( nonWildcardTypeArguments )?
-            int alt164=2;
-            int LA164_0 = input.LA(1);
+            int alt166=2;
+            int LA166_0 = input.LA(1);
 
-            if ( (LA164_0==33) ) {
-                alt164=1;
+            if ( (LA166_0==33) ) {
+                alt166=1;
             }
-            switch (alt164) {
+            switch (alt166) {
                 case 1 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: nonWildcardTypeArguments
                     {
-                    pushFollow(FOLLOW_nonWildcardTypeArguments_in_creator4185);
+                    pushFollow(FOLLOW_nonWildcardTypeArguments_in_creator4200);
                     nonWildcardTypeArguments();
 
                     state._fsp--;
@@ -9077,33 +9115,33 @@
 
             }
 
-            pushFollow(FOLLOW_createdName_in_creator4188);
+            pushFollow(FOLLOW_createdName_in_creator4203);
             createdName();
 
             state._fsp--;
             if (state.failed) return ;
             // src/main/resources/org/drools/semantics/java/parser/Java.g:929:9: ( arrayCreatorRest | classCreatorRest )
-            int alt165=2;
-            int LA165_0 = input.LA(1);
+            int alt167=2;
+            int LA167_0 = input.LA(1);
 
-            if ( (LA165_0==41) ) {
-                alt165=1;
+            if ( (LA167_0==41) ) {
+                alt167=1;
             }
-            else if ( (LA165_0==65) ) {
-                alt165=2;
+            else if ( (LA167_0==65) ) {
+                alt167=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 165, 0, input);
+                    new NoViableAltException("", 167, 0, input);
 
                 throw nvae;
             }
-            switch (alt165) {
+            switch (alt167) {
                 case 1 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:929:10: arrayCreatorRest
                     {
-                    pushFollow(FOLLOW_arrayCreatorRest_in_creator4199);
+                    pushFollow(FOLLOW_arrayCreatorRest_in_creator4214);
                     arrayCreatorRest();
 
                     state._fsp--;
@@ -9114,7 +9152,7 @@
                 case 2 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:929:29: classCreatorRest
                     {
-                    pushFollow(FOLLOW_classCreatorRest_in_creator4203);
+                    pushFollow(FOLLOW_classCreatorRest_in_creator4218);
                     classCreatorRest();
 
                     state._fsp--;
@@ -9148,39 +9186,39 @@
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 123) ) { return ; }
             // src/main/resources/org/drools/semantics/java/parser/Java.g:933:2: ( Identifier ( typeArguments )? ( '.' Identifier ( typeArguments )? )* | primitiveType )
-            int alt169=2;
-            int LA169_0 = input.LA(1);
+            int alt171=2;
+            int LA171_0 = input.LA(1);
 
-            if ( (LA169_0==Identifier) ) {
-                alt169=1;
+            if ( (LA171_0==Identifier) ) {
+                alt171=1;
             }
-            else if ( ((LA169_0>=55 && LA169_0<=62)) ) {
-                alt169=2;
+            else if ( ((LA171_0>=55 && LA171_0<=62)) ) {
+                alt171=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 169, 0, input);
+                    new NoViableAltException("", 171, 0, input);
 
                 throw nvae;
             }
-            switch (alt169) {
+            switch (alt171) {
                 case 1 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:933:4: Identifier ( typeArguments )? ( '.' Identifier ( typeArguments )? )*
                     {
-                    match(input,Identifier,FOLLOW_Identifier_in_createdName4215); if (state.failed) return ;
+                    match(input,Identifier,FOLLOW_Identifier_in_createdName4230); if (state.failed) return ;
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:933:15: ( typeArguments )?
-                    int alt166=2;
-                    int LA166_0 = input.LA(1);
+                    int alt168=2;
+                    int LA168_0 = input.LA(1);
 
-                    if ( (LA166_0==33) ) {
-                        alt166=1;
+                    if ( (LA168_0==33) ) {
+                        alt168=1;
                     }
-                    switch (alt166) {
+                    switch (alt168) {
                         case 1 :
                             // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: typeArguments
                             {
-                            pushFollow(FOLLOW_typeArguments_in_createdName4217);
+                            pushFollow(FOLLOW_typeArguments_in_createdName4232);
                             typeArguments();
 
                             state._fsp--;
@@ -9192,34 +9230,34 @@
                     }
 
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:934:9: ( '.' Identifier ( typeArguments )? )*
-                    loop168:
+                    loop170:
                     do {
-                        int alt168=2;
-                        int LA168_0 = input.LA(1);
+                        int alt170=2;
+                        int LA170_0 = input.LA(1);
 
-                        if ( (LA168_0==28) ) {
-                            alt168=1;
+                        if ( (LA170_0==28) ) {
+                            alt170=1;
                         }
 
 
-                        switch (alt168) {
+                        switch (alt170) {
                     	case 1 :
                     	    // src/main/resources/org/drools/semantics/java/parser/Java.g:934:10: '.' Identifier ( typeArguments )?
                     	    {
-                    	    match(input,28,FOLLOW_28_in_createdName4229); if (state.failed) return ;
-                    	    match(input,Identifier,FOLLOW_Identifier_in_createdName4231); if (state.failed) return ;
+                    	    match(input,28,FOLLOW_28_in_createdName4244); if (state.failed) return ;
+                    	    match(input,Identifier,FOLLOW_Identifier_in_createdName4246); if (state.failed) return ;
                     	    // src/main/resources/org/drools/semantics/java/parser/Java.g:934:25: ( typeArguments )?
-                    	    int alt167=2;
-                    	    int LA167_0 = input.LA(1);
+                    	    int alt169=2;
+                    	    int LA169_0 = input.LA(1);
 
-                    	    if ( (LA167_0==33) ) {
-                    	        alt167=1;
+                    	    if ( (LA169_0==33) ) {
+                    	        alt169=1;
                     	    }
-                    	    switch (alt167) {
+                    	    switch (alt169) {
                     	        case 1 :
                     	            // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: typeArguments
                     	            {
-                    	            pushFollow(FOLLOW_typeArguments_in_createdName4233);
+                    	            pushFollow(FOLLOW_typeArguments_in_createdName4248);
                     	            typeArguments();
 
                     	            state._fsp--;
@@ -9235,7 +9273,7 @@
                     	    break;
 
                     	default :
-                    	    break loop168;
+                    	    break loop170;
                         }
                     } while (true);
 
@@ -9245,7 +9283,7 @@
                 case 2 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:935:7: primitiveType
                     {
-                    pushFollow(FOLLOW_primitiveType_in_createdName4244);
+                    pushFollow(FOLLOW_primitiveType_in_createdName4259);
                     primitiveType();
 
                     state._fsp--;
@@ -9277,8 +9315,8 @@
             // src/main/resources/org/drools/semantics/java/parser/Java.g:939:2: ( Identifier classCreatorRest )
             // src/main/resources/org/drools/semantics/java/parser/Java.g:939:4: Identifier classCreatorRest
             {
-            match(input,Identifier,FOLLOW_Identifier_in_innerCreator4256); if (state.failed) return ;
-            pushFollow(FOLLOW_classCreatorRest_in_innerCreator4258);
+            match(input,Identifier,FOLLOW_Identifier_in_innerCreator4271); if (state.failed) return ;
+            pushFollow(FOLLOW_classCreatorRest_in_innerCreator4273);
             classCreatorRest();
 
             state._fsp--;
@@ -9308,42 +9346,42 @@
             // src/main/resources/org/drools/semantics/java/parser/Java.g:943:2: ( '[' ( ']' ( '[' ']' )* arrayInitializer | expression ']' ( '[' expression ']' )* ( '[' ']' )* ) )
             // src/main/resources/org/drools/semantics/java/parser/Java.g:943:4: '[' ( ']' ( '[' ']' )* arrayInitializer | expression ']' ( '[' expression ']' )* ( '[' ']' )* )
             {
-            match(input,41,FOLLOW_41_in_arrayCreatorRest4269); if (state.failed) return ;
+            match(input,41,FOLLOW_41_in_arrayCreatorRest4284); if (state.failed) return ;
             // src/main/resources/org/drools/semantics/java/parser/Java.g:944:9: ( ']' ( '[' ']' )* arrayInitializer | expression ']' ( '[' expression ']' )* ( '[' ']' )* )
-            int alt173=2;
-            alt173 = dfa173.predict(input);
-            switch (alt173) {
+            int alt175=2;
+            alt175 = dfa175.predict(input);
+            switch (alt175) {
                 case 1 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:944:13: ']' ( '[' ']' )* arrayInitializer
                     {
-                    match(input,42,FOLLOW_42_in_arrayCreatorRest4283); if (state.failed) return ;
+                    match(input,42,FOLLOW_42_in_arrayCreatorRest4298); if (state.failed) return ;
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:944:17: ( '[' ']' )*
-                    loop170:
+                    loop172:
                     do {
-                        int alt170=2;
-                        int LA170_0 = input.LA(1);
+                        int alt172=2;
+                        int LA172_0 = input.LA(1);
 
-                        if ( (LA170_0==41) ) {
-                            alt170=1;
+                        if ( (LA172_0==41) ) {
+                            alt172=1;
                         }
 
 
-                        switch (alt170) {
+                        switch (alt172) {
                     	case 1 :
                     	    // src/main/resources/org/drools/semantics/java/parser/Java.g:944:18: '[' ']'
                     	    {
-                    	    match(input,41,FOLLOW_41_in_arrayCreatorRest4286); if (state.failed) return ;
-                    	    match(input,42,FOLLOW_42_in_arrayCreatorRest4288); if (state.failed) return ;
+                    	    match(input,41,FOLLOW_41_in_arrayCreatorRest4301); if (state.failed) return ;
+                    	    match(input,42,FOLLOW_42_in_arrayCreatorRest4303); if (state.failed) return ;
 
                     	    }
                     	    break;
 
                     	default :
-                    	    break loop170;
+                    	    break loop172;
                         }
                     } while (true);
 
-                    pushFollow(FOLLOW_arrayInitializer_in_arrayCreatorRest4292);
+                    pushFollow(FOLLOW_arrayInitializer_in_arrayCreatorRest4307);
                     arrayInitializer();
 
                     state._fsp--;
@@ -9354,54 +9392,54 @@
                 case 2 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:945:13: expression ']' ( '[' expression ']' )* ( '[' ']' )*
                     {
-                    pushFollow(FOLLOW_expression_in_arrayCreatorRest4306);
+                    pushFollow(FOLLOW_expression_in_arrayCreatorRest4321);
                     expression();
 
                     state._fsp--;
                     if (state.failed) return ;
-                    match(input,42,FOLLOW_42_in_arrayCreatorRest4308); if (state.failed) return ;
+                    match(input,42,FOLLOW_42_in_arrayCreatorRest4323); if (state.failed) return ;
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:945:28: ( '[' expression ']' )*
-                    loop171:
+                    loop173:
                     do {
-                        int alt171=2;
-                        alt171 = dfa171.predict(input);
-                        switch (alt171) {
+                        int alt173=2;
+                        alt173 = dfa173.predict(input);
+                        switch (alt173) {
                     	case 1 :
                     	    // src/main/resources/org/drools/semantics/java/parser/Java.g:945:29: '[' expression ']'
                     	    {
-                    	    match(input,41,FOLLOW_41_in_arrayCreatorRest4311); if (state.failed) return ;
-                    	    pushFollow(FOLLOW_expression_in_arrayCreatorRest4313);
+                    	    match(input,41,FOLLOW_41_in_arrayCreatorRest4326); if (state.failed) return ;
+                    	    pushFollow(FOLLOW_expression_in_arrayCreatorRest4328);
                     	    expression();
 
                     	    state._fsp--;
                     	    if (state.failed) return ;
-                    	    match(input,42,FOLLOW_42_in_arrayCreatorRest4315); if (state.failed) return ;
+                    	    match(input,42,FOLLOW_42_in_arrayCreatorRest4330); if (state.failed) return ;
 
                     	    }
                     	    break;
 
                     	default :
-                    	    break loop171;
+                    	    break loop173;
                         }
                     } while (true);
 
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:945:50: ( '[' ']' )*
-                    loop172:
+                    loop174:
                     do {
-                        int alt172=2;
-                        alt172 = dfa172.predict(input);
-                        switch (alt172) {
+                        int alt174=2;
+                        alt174 = dfa174.predict(input);
+                        switch (alt174) {
                     	case 1 :
                     	    // src/main/resources/org/drools/semantics/java/parser/Java.g:945:51: '[' ']'
                     	    {
-                    	    match(input,41,FOLLOW_41_in_arrayCreatorRest4320); if (state.failed) return ;
-                    	    match(input,42,FOLLOW_42_in_arrayCreatorRest4322); if (state.failed) return ;
+                    	    match(input,41,FOLLOW_41_in_arrayCreatorRest4335); if (state.failed) return ;
+                    	    match(input,42,FOLLOW_42_in_arrayCreatorRest4337); if (state.failed) return ;
 
                     	    }
                     	    break;
 
                     	default :
-                    	    break loop172;
+                    	    break loop174;
                         }
                     } while (true);
 
@@ -9436,19 +9474,19 @@
             // src/main/resources/org/drools/semantics/java/parser/Java.g:950:2: ( arguments ( classBody )? )
             // src/main/resources/org/drools/semantics/java/parser/Java.g:950:4: arguments ( classBody )?
             {
-            pushFollow(FOLLOW_arguments_in_classCreatorRest4345);
+            pushFollow(FOLLOW_arguments_in_classCreatorRest4360);
             arguments();
 
             state._fsp--;
             if (state.failed) return ;
             // src/main/resources/org/drools/semantics/java/parser/Java.g:950:14: ( classBody )?
-            int alt174=2;
-            alt174 = dfa174.predict(input);
-            switch (alt174) {
+            int alt176=2;
+            alt176 = dfa176.predict(input);
+            switch (alt176) {
                 case 1 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: classBody
                     {
-                    pushFollow(FOLLOW_classBody_in_classCreatorRest4347);
+                    pushFollow(FOLLOW_classBody_in_classCreatorRest4362);
                     classBody();
 
                     state._fsp--;
@@ -9484,12 +9522,12 @@
             // src/main/resources/org/drools/semantics/java/parser/Java.g:954:2: ( nonWildcardTypeArguments explicitGenericInvocationSuffix )
             // src/main/resources/org/drools/semantics/java/parser/Java.g:954:4: nonWildcardTypeArguments explicitGenericInvocationSuffix
             {
-            pushFollow(FOLLOW_nonWildcardTypeArguments_in_explicitGenericInvocation4360);
+            pushFollow(FOLLOW_nonWildcardTypeArguments_in_explicitGenericInvocation4375);
             nonWildcardTypeArguments();
 
             state._fsp--;
             if (state.failed) return ;
-            pushFollow(FOLLOW_explicitGenericInvocationSuffix_in_explicitGenericInvocation4362);
+            pushFollow(FOLLOW_explicitGenericInvocationSuffix_in_explicitGenericInvocation4377);
             explicitGenericInvocationSuffix();
 
             state._fsp--;
@@ -9519,13 +9557,13 @@
             // src/main/resources/org/drools/semantics/java/parser/Java.g:958:2: ( '<' typeList '>' )
             // src/main/resources/org/drools/semantics/java/parser/Java.g:958:4: '<' typeList '>'
             {
-            match(input,33,FOLLOW_33_in_nonWildcardTypeArguments4374); if (state.failed) return ;
-            pushFollow(FOLLOW_typeList_in_nonWildcardTypeArguments4376);
+            match(input,33,FOLLOW_33_in_nonWildcardTypeArguments4389); if (state.failed) return ;
+            pushFollow(FOLLOW_typeList_in_nonWildcardTypeArguments4391);
             typeList();
 
             state._fsp--;
             if (state.failed) return ;
-            match(input,35,FOLLOW_35_in_nonWildcardTypeArguments4378); if (state.failed) return ;
+            match(input,35,FOLLOW_35_in_nonWildcardTypeArguments4393); if (state.failed) return ;
 
             }
 
@@ -9549,28 +9587,28 @@
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 129) ) { return ; }
             // src/main/resources/org/drools/semantics/java/parser/Java.g:962:2: ( 'super' superSuffix | Identifier arguments )
-            int alt175=2;
-            int LA175_0 = input.LA(1);
+            int alt177=2;
+            int LA177_0 = input.LA(1);
 
-            if ( (LA175_0==64) ) {
-                alt175=1;
+            if ( (LA177_0==64) ) {
+                alt177=1;
             }
-            else if ( (LA175_0==Identifier) ) {
-                alt175=2;
+            else if ( (LA177_0==Identifier) ) {
+                alt177=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 175, 0, input);
+                    new NoViableAltException("", 177, 0, input);
 
                 throw nvae;
             }
-            switch (alt175) {
+            switch (alt177) {
                 case 1 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:962:4: 'super' superSuffix
                     {
-                    match(input,64,FOLLOW_64_in_explicitGenericInvocationSuffix4390); if (state.failed) return ;
-                    pushFollow(FOLLOW_superSuffix_in_explicitGenericInvocationSuffix4392);
+                    match(input,64,FOLLOW_64_in_explicitGenericInvocationSuffix4405); if (state.failed) return ;
+                    pushFollow(FOLLOW_superSuffix_in_explicitGenericInvocationSuffix4407);
                     superSuffix();
 
                     state._fsp--;
@@ -9581,8 +9619,8 @@
                 case 2 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:963:6: Identifier arguments
                     {
-                    match(input,Identifier,FOLLOW_Identifier_in_explicitGenericInvocationSuffix4399); if (state.failed) return ;
-                    pushFollow(FOLLOW_arguments_in_explicitGenericInvocationSuffix4401);
+                    match(input,Identifier,FOLLOW_Identifier_in_explicitGenericInvocationSuffix4414); if (state.failed) return ;
+                    pushFollow(FOLLOW_arguments_in_explicitGenericInvocationSuffix4416);
                     arguments();
 
                     state._fsp--;
@@ -9612,64 +9650,64 @@
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 130) ) { return ; }
             // src/main/resources/org/drools/semantics/java/parser/Java.g:967:2: ( '.' Identifier ( arguments )? | '.' 'this' | '.' 'super' superSuffix | '.' 'new' ( nonWildcardTypeArguments )? innerCreator | '[' expression ']' )
-            int alt178=5;
-            int LA178_0 = input.LA(1);
+            int alt180=5;
+            int LA180_0 = input.LA(1);
 
-            if ( (LA178_0==28) ) {
+            if ( (LA180_0==28) ) {
                 switch ( input.LA(2) ) {
                 case Identifier:
                     {
-                    alt178=1;
+                    alt180=1;
                     }
                     break;
                 case 115:
                     {
-                    alt178=2;
+                    alt180=2;
                     }
                     break;
                 case 64:
                     {
-                    alt178=3;
+                    alt180=3;
                     }
                     break;
                 case 116:
                     {
-                    alt178=4;
+                    alt180=4;
                     }
                     break;
                 default:
                     if (state.backtracking>0) {state.failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("", 178, 1, input);
+                        new NoViableAltException("", 180, 1, input);
 
                     throw nvae;
                 }
 
             }
-            else if ( (LA178_0==41) ) {
-                alt178=5;
+            else if ( (LA180_0==41) ) {
+                alt180=5;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 178, 0, input);
+                    new NoViableAltException("", 180, 0, input);
 
                 throw nvae;
             }
-            switch (alt178) {
+            switch (alt180) {
                 case 1 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:967:4: '.' Identifier ( arguments )?
                     {
-                    match(input,28,FOLLOW_28_in_selector4413); if (state.failed) return ;
-                    match(input,Identifier,FOLLOW_Identifier_in_selector4415); if (state.failed) return ;
+                    match(input,28,FOLLOW_28_in_selector4428); if (state.failed) return ;
+                    match(input,Identifier,FOLLOW_Identifier_in_selector4430); if (state.failed) return ;
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:967:19: ( arguments )?
-                    int alt176=2;
-                    alt176 = dfa176.predict(input);
-                    switch (alt176) {
+                    int alt178=2;
+                    alt178 = dfa178.predict(input);
+                    switch (alt178) {
                         case 1 :
                             // src/main/resources/org/drools/semantics/java/parser/Java.g:967:20: arguments
                             {
-                            pushFollow(FOLLOW_arguments_in_selector4418);
+                            pushFollow(FOLLOW_arguments_in_selector4433);
                             arguments();
 
                             state._fsp--;
@@ -9686,17 +9724,17 @@
                 case 2 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:968:6: '.' 'this'
                     {
-                    match(input,28,FOLLOW_28_in_selector4427); if (state.failed) return ;
-                    match(input,115,FOLLOW_115_in_selector4429); if (state.failed) return ;
+                    match(input,28,FOLLOW_28_in_selector4442); if (state.failed) return ;
+                    match(input,115,FOLLOW_115_in_selector4444); if (state.failed) return ;
 
                     }
                     break;
                 case 3 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:969:6: '.' 'super' superSuffix
                     {
-                    match(input,28,FOLLOW_28_in_selector4436); if (state.failed) return ;
-                    match(input,64,FOLLOW_64_in_selector4438); if (state.failed) return ;
-                    pushFollow(FOLLOW_superSuffix_in_selector4440);
+                    match(input,28,FOLLOW_28_in_selector4451); if (state.failed) return ;
+                    match(input,64,FOLLOW_64_in_selector4453); if (state.failed) return ;
+                    pushFollow(FOLLOW_superSuffix_in_selector4455);
                     superSuffix();
 
                     state._fsp--;
@@ -9707,20 +9745,20 @@
                 case 4 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:970:6: '.' 'new' ( nonWildcardTypeArguments )? innerCreator
                     {
-                    match(input,28,FOLLOW_28_in_selector4447); if (state.failed) return ;
-                    match(input,116,FOLLOW_116_in_selector4449); if (state.failed) return ;
+                    match(input,28,FOLLOW_28_in_selector4462); if (state.failed) return ;
+                    match(input,116,FOLLOW_116_in_selector4464); if (state.failed) return ;
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:970:16: ( nonWildcardTypeArguments )?
-                    int alt177=2;
-                    int LA177_0 = input.LA(1);
+                    int alt179=2;
+                    int LA179_0 = input.LA(1);
 
-                    if ( (LA177_0==33) ) {
-                        alt177=1;
+                    if ( (LA179_0==33) ) {
+                        alt179=1;
                     }
-                    switch (alt177) {
+                    switch (alt179) {
                         case 1 :
                             // src/main/resources/org/drools/semantics/java/parser/Java.g:970:17: nonWildcardTypeArguments
                             {
-                            pushFollow(FOLLOW_nonWildcardTypeArguments_in_selector4452);
+                            pushFollow(FOLLOW_nonWildcardTypeArguments_in_selector4467);
                             nonWildcardTypeArguments();
 
                             state._fsp--;
@@ -9731,7 +9769,7 @@
 
                     }
 
-                    pushFollow(FOLLOW_innerCreator_in_selector4456);
+                    pushFollow(FOLLOW_innerCreator_in_selector4471);
                     innerCreator();
 
                     state._fsp--;
@@ -9742,13 +9780,13 @@
                 case 5 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:971:6: '[' expression ']'
                     {
-                    match(input,41,FOLLOW_41_in_selector4463); if (state.failed) return ;
-                    pushFollow(FOLLOW_expression_in_selector4465);
+                    match(input,41,FOLLOW_41_in_selector4478); if (state.failed) return ;
+                    pushFollow(FOLLOW_expression_in_selector4480);
                     expression();
 
                     state._fsp--;
                     if (state.failed) return ;
-                    match(input,42,FOLLOW_42_in_selector4467); if (state.failed) return ;
+                    match(input,42,FOLLOW_42_in_selector4482); if (state.failed) return ;
 
                     }
                     break;
@@ -9774,27 +9812,27 @@
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 131) ) { return ; }
             // src/main/resources/org/drools/semantics/java/parser/Java.g:975:2: ( arguments | '.' Identifier ( arguments )? )
-            int alt180=2;
-            int LA180_0 = input.LA(1);
+            int alt182=2;
+            int LA182_0 = input.LA(1);
 
-            if ( (LA180_0==65) ) {
-                alt180=1;
+            if ( (LA182_0==65) ) {
+                alt182=1;
             }
-            else if ( (LA180_0==28) ) {
-                alt180=2;
+            else if ( (LA182_0==28) ) {
+                alt182=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 180, 0, input);
+                    new NoViableAltException("", 182, 0, input);
 
                 throw nvae;
             }
-            switch (alt180) {
+            switch (alt182) {
                 case 1 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:975:4: arguments
                     {
-                    pushFollow(FOLLOW_arguments_in_superSuffix4479);
+                    pushFollow(FOLLOW_arguments_in_superSuffix4494);
                     arguments();
 
                     state._fsp--;
@@ -9805,16 +9843,16 @@
                 case 2 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:976:6: '.' Identifier ( arguments )?
                     {
-                    match(input,28,FOLLOW_28_in_superSuffix4486); if (state.failed) return ;
-                    match(input,Identifier,FOLLOW_Identifier_in_superSuffix4488); if (state.failed) return ;
+                    match(input,28,FOLLOW_28_in_superSuffix4501); if (state.failed) return ;
+                    match(input,Identifier,FOLLOW_Identifier_in_superSuffix4503); if (state.failed) return ;
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:976:21: ( arguments )?
-                    int alt179=2;
-                    alt179 = dfa179.predict(input);
-                    switch (alt179) {
+                    int alt181=2;
+                    alt181 = dfa181.predict(input);
+                    switch (alt181) {
                         case 1 :
                             // src/main/resources/org/drools/semantics/java/parser/Java.g:976:22: arguments
                             {
-                            pushFollow(FOLLOW_arguments_in_superSuffix4491);
+                            pushFollow(FOLLOW_arguments_in_superSuffix4506);
                             arguments();
 
                             state._fsp--;
@@ -9852,15 +9890,15 @@
             // src/main/resources/org/drools/semantics/java/parser/Java.g:980:2: ( '(' ( expressionList )? ')' )
             // src/main/resources/org/drools/semantics/java/parser/Java.g:980:4: '(' ( expressionList )? ')'
             {
-            match(input,65,FOLLOW_65_in_arguments4507); if (state.failed) return ;
+            match(input,65,FOLLOW_65_in_arguments4522); if (state.failed) return ;
             // src/main/resources/org/drools/semantics/java/parser/Java.g:980:8: ( expressionList )?
-            int alt181=2;
-            alt181 = dfa181.predict(input);
-            switch (alt181) {
+            int alt183=2;
+            alt183 = dfa183.predict(input);
+            switch (alt183) {
                 case 1 :
                     // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: expressionList
                     {
-                    pushFollow(FOLLOW_expressionList_in_arguments4509);
+                    pushFollow(FOLLOW_expressionList_in_arguments4524);
                     expressionList();
 
                     state._fsp--;
@@ -9871,7 +9909,7 @@
 
             }
 
-            match(input,66,FOLLOW_66_in_arguments4512); if (state.failed) return ;
+            match(input,66,FOLLOW_66_in_arguments4527); if (state.failed) return ;
 
             }
 
@@ -9970,13 +10008,13 @@
         state._fsp--;
         if (state.failed) return ;
         // src/main/resources/org/drools/semantics/java/parser/Java.g:596:23: ( ';' )?
-        int alt197=2;
-        int LA197_0 = input.LA(1);
+        int alt199=2;
+        int LA199_0 = input.LA(1);
 
-        if ( (LA197_0==25) ) {
-            alt197=1;
+        if ( (LA199_0==25) ) {
+            alt199=1;
         }
-        switch (alt197) {
+        switch (alt199) {
             case 1 :
                 // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: ';'
                 {
@@ -10003,13 +10041,13 @@
         state._fsp--;
         if (state.failed) return ;
         // src/main/resources/org/drools/semantics/java/parser/Java.g:597:27: ( ';' )?
-        int alt198=2;
-        int LA198_0 = input.LA(1);
+        int alt200=2;
+        int LA200_0 = input.LA(1);
 
-        if ( (LA198_0==25) ) {
-            alt198=1;
+        if ( (LA200_0==25) ) {
+            alt200=1;
         }
-        switch (alt198) {
+        switch (alt200) {
             case 1 :
                 // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: ';'
                 {
@@ -10036,13 +10074,13 @@
         state._fsp--;
         if (state.failed) return ;
         // src/main/resources/org/drools/semantics/java/parser/Java.g:598:22: ( ';' )?
-        int alt199=2;
-        int LA199_0 = input.LA(1);
+        int alt201=2;
+        int LA201_0 = input.LA(1);
 
-        if ( (LA199_0==25) ) {
-            alt199=1;
+        if ( (LA201_0==25) ) {
+            alt201=1;
         }
-        switch (alt199) {
+        switch (alt201) {
             case 1 :
                 // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: ';'
                 {
@@ -10140,46 +10178,46 @@
     }
     // $ANTLR end synpred156_Java
 
-    // $ANTLR start synpred178_Java
-    public final void synpred178_Java_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:754:4: ( 'case' constantExpression ':' )
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:754:4: 'case' constantExpression ':'
+    // $ANTLR start synpred177_Java
+    public final void synpred177_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:753:4: ( 'case' constantExpression ':' )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:753:4: 'case' constantExpression ':'
         {
-        match(input,91,FOLLOW_91_in_synpred178_Java2957); if (state.failed) return ;
-        pushFollow(FOLLOW_constantExpression_in_synpred178_Java2959);
+        match(input,91,FOLLOW_91_in_synpred177_Java2950); if (state.failed) return ;
+        pushFollow(FOLLOW_constantExpression_in_synpred177_Java2952);
         constantExpression();
 
         state._fsp--;
         if (state.failed) return ;
-        match(input,74,FOLLOW_74_in_synpred178_Java2961); if (state.failed) return ;
+        match(input,74,FOLLOW_74_in_synpred177_Java2954); if (state.failed) return ;
 
         }
     }
-    // $ANTLR end synpred178_Java
+    // $ANTLR end synpred177_Java
 
-    // $ANTLR start synpred179_Java
-    public final void synpred179_Java_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:755:6: ( 'case' enumConstantName ':' )
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:755:6: 'case' enumConstantName ':'
+    // $ANTLR start synpred178_Java
+    public final void synpred178_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:754:6: ( 'case' enumConstantName ':' )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:754:6: 'case' enumConstantName ':'
         {
-        match(input,91,FOLLOW_91_in_synpred179_Java2968); if (state.failed) return ;
-        pushFollow(FOLLOW_enumConstantName_in_synpred179_Java2970);
+        match(input,91,FOLLOW_91_in_synpred178_Java2961); if (state.failed) return ;
+        pushFollow(FOLLOW_enumConstantName_in_synpred178_Java2963);
         enumConstantName();
 
         state._fsp--;
         if (state.failed) return ;
-        match(input,74,FOLLOW_74_in_synpred179_Java2972); if (state.failed) return ;
+        match(input,74,FOLLOW_74_in_synpred178_Java2965); if (state.failed) return ;
 
         }
     }
-    // $ANTLR end synpred179_Java
+    // $ANTLR end synpred178_Java
 
-    // $ANTLR start synpred181_Java
-    public final void synpred181_Java_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:765:4: ( forVarControl )
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:765:4: forVarControl
+    // $ANTLR start synpred180_Java
+    public final void synpred180_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:764:4: ( forVarControl )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:764:4: forVarControl
         {
-        pushFollow(FOLLOW_forVarControl_in_synpred181_Java3017);
+        pushFollow(FOLLOW_forVarControl_in_synpred180_Java3010);
         forVarControl();
 
         state._fsp--;
@@ -10187,29 +10225,29 @@
 
         }
     }
-    // $ANTLR end synpred181_Java
+    // $ANTLR end synpred180_Java
 
-    // $ANTLR start synpred186_Java
-    public final void synpred186_Java_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:776:4: ( ( variableModifier )* type variableDeclarators )
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:776:4: ( variableModifier )* type variableDeclarators
+    // $ANTLR start synpred185_Java
+    public final void synpred185_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:775:4: ( ( variableModifier )* type variableDeclarators )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:775:4: ( variableModifier )* type variableDeclarators
         {
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:776:4: ( variableModifier )*
-        loop207:
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:775:4: ( variableModifier )*
+        loop209:
         do {
-            int alt207=2;
-            int LA207_0 = input.LA(1);
+            int alt209=2;
+            int LA209_0 = input.LA(1);
 
-            if ( (LA207_0==49||LA207_0==71) ) {
-                alt207=1;
+            if ( (LA209_0==49||LA209_0==71) ) {
+                alt209=1;
             }
 
 
-            switch (alt207) {
+            switch (alt209) {
         	case 1 :
         	    // src/main/resources/org/drools/semantics/java/parser/Java.g:0:0: variableModifier
         	    {
-        	    pushFollow(FOLLOW_variableModifier_in_synpred186_Java3070);
+        	    pushFollow(FOLLOW_variableModifier_in_synpred185_Java3063);
         	    variableModifier();
 
         	    state._fsp--;
@@ -10219,16 +10257,16 @@
         	    break;
 
         	default :
-        	    break loop207;
+        	    break loop209;
             }
         } while (true);
 
-        pushFollow(FOLLOW_type_in_synpred186_Java3073);
+        pushFollow(FOLLOW_type_in_synpred185_Java3066);
         type();
 
         state._fsp--;
         if (state.failed) return ;
-        pushFollow(FOLLOW_variableDeclarators_in_synpred186_Java3075);
+        pushFollow(FOLLOW_variableDeclarators_in_synpred185_Java3068);
         variableDeclarators();
 
         state._fsp--;
@@ -10236,19 +10274,19 @@
 
         }
     }
-    // $ANTLR end synpred186_Java
+    // $ANTLR end synpred185_Java
 
-    // $ANTLR start synpred189_Java
-    public final void synpred189_Java_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:807:27: ( assignmentOperator expression )
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:807:27: assignmentOperator expression
+    // $ANTLR start synpred188_Java
+    public final void synpred188_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:806:27: ( assignmentOperator expression )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:806:27: assignmentOperator expression
         {
-        pushFollow(FOLLOW_assignmentOperator_in_synpred189_Java3194);
+        pushFollow(FOLLOW_assignmentOperator_in_synpred188_Java3187);
         assignmentOperator();
 
         state._fsp--;
         if (state.failed) return ;
-        pushFollow(FOLLOW_expression_in_synpred189_Java3196);
+        pushFollow(FOLLOW_expression_in_synpred188_Java3189);
         expression();
 
         state._fsp--;
@@ -10256,32 +10294,32 @@
 
         }
     }
-    // $ANTLR end synpred189_Java
+    // $ANTLR end synpred188_Java
 
-    // $ANTLR start synpred200_Java
-    public final void synpred200_Java_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:821:9: ( '>' '>' '=' )
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:821:9: '>' '>' '='
+    // $ANTLR start synpred199_Java
+    public final void synpred199_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:820:9: ( '>' '>' '=' )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:820:9: '>' '>' '='
         {
-        match(input,35,FOLLOW_35_in_synpred200_Java3314); if (state.failed) return ;
-        match(input,35,FOLLOW_35_in_synpred200_Java3316); if (state.failed) return ;
-        match(input,44,FOLLOW_44_in_synpred200_Java3318); if (state.failed) return ;
+        match(input,35,FOLLOW_35_in_synpred199_Java3307); if (state.failed) return ;
+        match(input,35,FOLLOW_35_in_synpred199_Java3309); if (state.failed) return ;
+        match(input,44,FOLLOW_44_in_synpred199_Java3311); if (state.failed) return ;
 
         }
     }
-    // $ANTLR end synpred200_Java
+    // $ANTLR end synpred199_Java
 
-    // $ANTLR start synpred210_Java
-    public final void synpred210_Java_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:858:27: ( relationalOp shiftExpression )
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:858:27: relationalOp shiftExpression
+    // $ANTLR start synpred209_Java
+    public final void synpred209_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:857:27: ( relationalOp shiftExpression )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:857:27: relationalOp shiftExpression
         {
-        pushFollow(FOLLOW_relationalOp_in_synpred210_Java3562);
+        pushFollow(FOLLOW_relationalOp_in_synpred209_Java3555);
         relationalOp();
 
         state._fsp--;
         if (state.failed) return ;
-        pushFollow(FOLLOW_shiftExpression_in_synpred210_Java3564);
+        pushFollow(FOLLOW_shiftExpression_in_synpred209_Java3557);
         shiftExpression();
 
         state._fsp--;
@@ -10289,19 +10327,19 @@
 
         }
     }
-    // $ANTLR end synpred210_Java
+    // $ANTLR end synpred209_Java
 
-    // $ANTLR start synpred214_Java
-    public final void synpred214_Java_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:866:30: ( shiftOp additiveExpression )
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:866:30: shiftOp additiveExpression
+    // $ANTLR start synpred213_Java
+    public final void synpred213_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:865:30: ( shiftOp additiveExpression )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:865:30: shiftOp additiveExpression
         {
-        pushFollow(FOLLOW_shiftOp_in_synpred214_Java3617);
+        pushFollow(FOLLOW_shiftOp_in_synpred213_Java3610);
         shiftOp();
 
         state._fsp--;
         if (state.failed) return ;
-        pushFollow(FOLLOW_additiveExpression_in_synpred214_Java3619);
+        pushFollow(FOLLOW_additiveExpression_in_synpred213_Java3612);
         additiveExpression();
 
         state._fsp--;
@@ -10309,27 +10347,27 @@
 
         }
     }
-    // $ANTLR end synpred214_Java
+    // $ANTLR end synpred213_Java
 
-    // $ANTLR start synpred216_Java
-    public final void synpred216_Java_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:871:15: ( '>' '>' '>' )
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:871:15: '>' '>' '>'
+    // $ANTLR start synpred215_Java
+    public final void synpred215_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:870:15: ( '>' '>' '>' )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:870:15: '>' '>' '>'
         {
-        match(input,35,FOLLOW_35_in_synpred216_Java3649); if (state.failed) return ;
-        match(input,35,FOLLOW_35_in_synpred216_Java3651); if (state.failed) return ;
-        match(input,35,FOLLOW_35_in_synpred216_Java3653); if (state.failed) return ;
+        match(input,35,FOLLOW_35_in_synpred215_Java3642); if (state.failed) return ;
+        match(input,35,FOLLOW_35_in_synpred215_Java3644); if (state.failed) return ;
+        match(input,35,FOLLOW_35_in_synpred215_Java3646); if (state.failed) return ;
 
         }
     }
-    // $ANTLR end synpred216_Java
+    // $ANTLR end synpred215_Java
 
-    // $ANTLR start synpred228_Java
-    public final void synpred228_Java_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:894:9: ( castExpression )
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:894:9: castExpression
+    // $ANTLR start synpred227_Java
+    public final void synpred227_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:893:9: ( castExpression )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:893:9: castExpression
         {
-        pushFollow(FOLLOW_castExpression_in_synpred228_Java3834);
+        pushFollow(FOLLOW_castExpression_in_synpred227_Java3827);
         castExpression();
 
         state._fsp--;
@@ -10337,21 +10375,21 @@
 
         }
     }
-    // $ANTLR end synpred228_Java
+    // $ANTLR end synpred227_Java
 
-    // $ANTLR start synpred232_Java
-    public final void synpred232_Java_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:899:8: ( '(' primitiveType ')' unaryExpression )
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:899:8: '(' primitiveType ')' unaryExpression
+    // $ANTLR start synpred231_Java
+    public final void synpred231_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:898:8: ( '(' primitiveType ')' unaryExpression )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:898:8: '(' primitiveType ')' unaryExpression
         {
-        match(input,65,FOLLOW_65_in_synpred232_Java3872); if (state.failed) return ;
-        pushFollow(FOLLOW_primitiveType_in_synpred232_Java3874);
+        match(input,65,FOLLOW_65_in_synpred231_Java3865); if (state.failed) return ;
+        pushFollow(FOLLOW_primitiveType_in_synpred231_Java3867);
         primitiveType();
 
         state._fsp--;
         if (state.failed) return ;
-        match(input,66,FOLLOW_66_in_synpred232_Java3876); if (state.failed) return ;
-        pushFollow(FOLLOW_unaryExpression_in_synpred232_Java3878);
+        match(input,66,FOLLOW_66_in_synpred231_Java3869); if (state.failed) return ;
+        pushFollow(FOLLOW_unaryExpression_in_synpred231_Java3871);
         unaryExpression();
 
         state._fsp--;
@@ -10359,14 +10397,14 @@
 
         }
     }
-    // $ANTLR end synpred232_Java
+    // $ANTLR end synpred231_Java
 
-    // $ANTLR start synpred233_Java
-    public final void synpred233_Java_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:900:13: ( type )
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:900:13: type
+    // $ANTLR start synpred232_Java
+    public final void synpred232_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:899:13: ( type )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:899:13: type
         {
-        pushFollow(FOLLOW_type_in_synpred233_Java3890);
+        pushFollow(FOLLOW_type_in_synpred232_Java3883);
         type();
 
         state._fsp--;
@@ -10374,26 +10412,53 @@
 
         }
     }
-    // $ANTLR end synpred233_Java
+    // $ANTLR end synpred232_Java
 
+    // $ANTLR start synpred236_Java
+    public final void synpred236_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:906:17: ( '.' Identifier )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:906:17: '.' Identifier
+        {
+        match(input,28,FOLLOW_28_in_synpred236_Java3950); if (state.failed) return ;
+        match(input,Identifier,FOLLOW_Identifier_in_synpred236_Java3952); if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred236_Java
+
     // $ANTLR start synpred237_Java
     public final void synpred237_Java_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:907:17: ( '.' Identifier )
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:907:17: '.' Identifier
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:906:35: ( identifierSuffix )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:906:35: identifierSuffix
         {
-        match(input,28,FOLLOW_28_in_synpred237_Java3957); if (state.failed) return ;
-        match(input,Identifier,FOLLOW_Identifier_in_synpred237_Java3959); if (state.failed) return ;
+        pushFollow(FOLLOW_identifierSuffix_in_synpred237_Java3957);
+        identifierSuffix();
 
+        state._fsp--;
+        if (state.failed) return ;
+
         }
     }
     // $ANTLR end synpred237_Java
 
-    // $ANTLR start synpred238_Java
-    public final void synpred238_Java_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:907:35: ( identifierSuffix )
-        // src/main/resources/org/drools/semantics/java/parser/Java.g:907:35: identifierSuffix
+    // $ANTLR start synpred240_Java
+    public final void synpred240_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:908:22: ( '.' Identifier )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:908:22: '.' Identifier
         {
-        pushFollow(FOLLOW_identifierSuffix_in_synpred238_Java3964);
+        match(input,28,FOLLOW_28_in_synpred240_Java3984); if (state.failed) return ;
+        match(input,Identifier,FOLLOW_Identifier_in_synpred240_Java3986); if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred240_Java
+
+    // $ANTLR start synpred241_Java
+    public final void synpred241_Java_fragment() throws RecognitionException {   
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:908:40: ( identifierSuffix )
+        // src/main/resources/org/drools/semantics/java/parser/Java.g:908:40: identifierSuffix
+        {
+        pushFollow(FOLLOW_identifierSuffix_in_synpred241_Java3991);
         identifierSuffix();
 
         state._fsp--;
@@ -10401,26 +10466,26 @@
 
         }
     }
-    // $ANTLR end synpred238_Java
+    // $ANTLR end synpred241_Java
 
-    // $ANTLR start synpred243_Java
-    public final void synpred243_Java_fragment() throws RecognitionException {   
+    // $ANTLR start synpred245_Java
+    public final void synpred245_Java_fragment() throws RecognitionException {   
         // src/main/resources/org/drools/semantics/java/parser/Java.g:911:127: ( '.' Identifier )
         // src/main/resources/org/drools/semantics/java/parser/Java.g:911:127: '.' Identifier
         {
-        match(input,28,FOLLOW_28_in_synpred243_Java4017); if (state.failed) return ;
-        match(input,Identifier,FOLLOW_Identifier_in_synpred243_Java4019); if (state.failed) return ;
+        match(input,28,FOLLOW_28_in_synpred245_Java4032); if (state.failed) return ;
+        match(input,Identifier,FOLLOW_Identifier_in_synpred245_Java4034); if (state.failed) return ;
 
         }
     }
-    // $ANTLR end synpred243_Java
+    // $ANTLR end synpred245_Java
 
-    // $ANTLR start synpred244_Java
-    public final void synpred244_Java_fragment() throws RecognitionException {   
+    // $ANTLR start synpred246_Java
+    public final void synpred246_Java_fragment() throws RecognitionException {   
         // src/main/resources/org/drools/semantics/java/parser/Java.g:911:145: ( identifierSuffix )
         // src/main/resources/org/drools/semantics/java/parser/Java.g:911:145: identifierSuffix
         {
-        pushFollow(FOLLOW_identifierSuffix_in_synpred244_Java4024);
+        pushFollow(FOLLOW_identifierSuffix_in_synpred246_Java4039);
         identifierSuffix();
 
         state._fsp--;
@@ -10428,49 +10493,49 @@
 
         }
     }
-    // $ANTLR end synpred244_Java
+    // $ANTLR end synpred246_Java
 
-    // $ANTLR start synpred250_Java
-    public final void synpred250_Java_fragment() throws RecognitionException {   
+    // $ANTLR start synpred252_Java
+    public final void synpred252_Java_fragment() throws RecognitionException {   
         // src/main/resources/org/drools/semantics/java/parser/Java.g:918:5: ( '[' expression ']' )
         // src/main/resources/org/drools/semantics/java/parser/Java.g:918:5: '[' expression ']'
         {
-        match(input,41,FOLLOW_41_in_synpred250_Java4087); if (state.failed) return ;
-        pushFollow(FOLLOW_expression_in_synpred250_Java4089);
+        match(input,41,FOLLOW_41_in_synpred252_Java4102); if (state.failed) return ;
+        pushFollow(FOLLOW_expression_in_synpred252_Java4104);
         expression();
 
         state._fsp--;
         if (state.failed) return ;
-        match(input,42,FOLLOW_42_in_synpred250_Java4091); if (state.failed) return ;
+        match(input,42,FOLLOW_42_in_synpred252_Java4106); if (state.failed) return ;
 
         }
     }
-    // $ANTLR end synpred250_Java
+    // $ANTLR end synpred252_Java
 
-    // $ANTLR start synpred266_Java
-    public final void synpred266_Java_fragment() throws RecognitionException {   
+    // $ANTLR start synpred268_Java
+    public final void synpred268_Java_fragment() throws RecognitionException {   
         // src/main/resources/org/drools/semantics/java/parser/Java.g:945:29: ( '[' expression ']' )
         // src/main/resources/org/drools/semantics/java/parser/Java.g:945:29: '[' expression ']'
         {
-        match(input,41,FOLLOW_41_in_synpred266_Java4311); if (state.failed) return ;
-        pushFollow(FOLLOW_expression_in_synpred266_Java4313);
+        match(input,41,FOLLOW_41_in_synpred268_Java4326); if (state.failed) return ;
+        pushFollow(FOLLOW_expression_in_synpred268_Java4328);
         expression();
 
         state._fsp--;
         if (state.failed) return ;
-        match(input,42,FOLLOW_42_in_synpred266_Java4315); if (state.failed) return ;
+        match(input,42,FOLLOW_42_in_synpred268_Java4330); if (state.failed) return ;
 
         }
     }
-    // $ANTLR end synpred266_Java
+    // $ANTLR end synpred268_Java
 
     // Delegated rules
 
-    public final boolean synpred244_Java() {
+    public final boolean synpred199_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred244_Java_fragment(); // can never throw exception
+            synpred199_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10494,11 +10559,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred210_Java() {
+    public final boolean synpred240_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred210_Java_fragment(); // can never throw exception
+            synpred240_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10508,11 +10573,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred38_Java() {
+    public final boolean synpred227_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred38_Java_fragment(); // can never throw exception
+            synpred227_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10522,11 +10587,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred145_Java() {
+    public final boolean synpred38_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred145_Java_fragment(); // can never throw exception
+            synpred38_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10536,11 +10601,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred181_Java() {
+    public final boolean synpred213_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred181_Java_fragment(); // can never throw exception
+            synpred213_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10550,11 +10615,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred135_Java() {
+    public final boolean synpred145_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred135_Java_fragment(); // can never throw exception
+            synpred145_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10564,11 +10629,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred228_Java() {
+    public final boolean synpred135_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred228_Java_fragment(); // can never throw exception
+            synpred135_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10578,11 +10643,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred266_Java() {
+    public final boolean synpred144_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred266_Java_fragment(); // can never throw exception
+            synpred144_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10592,11 +10657,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred144_Java() {
+    public final boolean synpred178_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred144_Java_fragment(); // can never throw exception
+            synpred178_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10606,11 +10671,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred178_Java() {
+    public final boolean synpred39_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred178_Java_fragment(); // can never throw exception
+            synpred39_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10620,11 +10685,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred39_Java() {
+    public final boolean synpred155_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred39_Java_fragment(); // can never throw exception
+            synpred155_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10634,11 +10699,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred155_Java() {
+    public final boolean synpred236_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred155_Java_fragment(); // can never throw exception
+            synpred236_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10662,11 +10727,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred186_Java() {
+    public final boolean synpred188_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred186_Java_fragment(); // can never throw exception
+            synpred188_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10676,11 +10741,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred216_Java() {
+    public final boolean synpred185_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred216_Java_fragment(); // can never throw exception
+            synpred185_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10718,11 +10783,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred179_Java() {
+    public final boolean synpred215_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred179_Java_fragment(); // can never throw exception
+            synpred215_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10746,11 +10811,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred189_Java() {
+    public final boolean synpred246_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred189_Java_fragment(); // can never throw exception
+            synpred246_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10760,11 +10825,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred214_Java() {
+    public final boolean synpred232_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred214_Java_fragment(); // can never throw exception
+            synpred232_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10774,11 +10839,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred232_Java() {
+    public final boolean synpred180_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred232_Java_fragment(); // can never throw exception
+            synpred180_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10802,11 +10867,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred250_Java() {
+    public final boolean synpred245_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred250_Java_fragment(); // can never throw exception
+            synpred245_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10816,11 +10881,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred243_Java() {
+    public final boolean synpred231_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred243_Java_fragment(); // can never throw exception
+            synpred231_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10830,11 +10895,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred1_Java() {
+    public final boolean synpred209_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred1_Java_fragment(); // can never throw exception
+            synpred209_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10844,11 +10909,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred237_Java() {
+    public final boolean synpred177_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred237_Java_fragment(); // can never throw exception
+            synpred177_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10858,11 +10923,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred200_Java() {
+    public final boolean synpred268_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred200_Java_fragment(); // can never throw exception
+            synpred268_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10872,11 +10937,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred233_Java() {
+    public final boolean synpred1_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred233_Java_fragment(); // can never throw exception
+            synpred1_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10886,11 +10951,11 @@
         state.failed=false;
         return success;
     }
-    public final boolean synpred238_Java() {
+    public final boolean synpred252_Java() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred238_Java_fragment(); // can never throw exception
+            synpred252_Java_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -10900,6 +10965,34 @@
         state.failed=false;
         return success;
     }
+    public final boolean synpred237_Java() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred237_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 synpred241_Java() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred241_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 DFA1 dfa1 = new DFA1(this);
@@ -10974,20 +11067,22 @@
     protected DFA149 dfa149 = new DFA149(this);
     protected DFA152 dfa152 = new DFA152(this);
     protected DFA151 dfa151 = new DFA151(this);
-    protected DFA159 dfa159 = new DFA159(this);
+    protected DFA161 dfa161 = new DFA161(this);
     protected DFA154 dfa154 = new DFA154(this);
     protected DFA155 dfa155 = new DFA155(this);
     protected DFA156 dfa156 = new DFA156(this);
     protected DFA157 dfa157 = new DFA157(this);
+    protected DFA158 dfa158 = new DFA158(this);
+    protected DFA159 dfa159 = new DFA159(this);
+    protected DFA165 dfa165 = new DFA165(this);
     protected DFA163 dfa163 = new DFA163(this);
-    protected DFA161 dfa161 = new DFA161(this);
+    protected DFA175 dfa175 = new DFA175(this);
     protected DFA173 dfa173 = new DFA173(this);
-    protected DFA171 dfa171 = new DFA171(this);
-    protected DFA172 dfa172 = new DFA172(this);
     protected DFA174 dfa174 = new DFA174(this);
     protected DFA176 dfa176 = new DFA176(this);
-    protected DFA179 dfa179 = new DFA179(this);
+    protected DFA178 dfa178 = new DFA178(this);
     protected DFA181 dfa181 = new DFA181(this);
+    protected DFA183 dfa183 = new DFA183(this);
     static final String DFA1_eotS =
         "\27\uffff";
     static final String DFA1_eofS =
@@ -11807,30 +11902,30 @@
     static final String DFA36_eofS =
         "\22\uffff";
     static final String DFA36_minS =
-        "\1\4\1\uffff\2\4\5\uffff\4\0\1\uffff\2\0\2\uffff";
+        "\1\4\1\uffff\2\4\6\uffff\6\0\2\uffff";
     static final String DFA36_maxS =
-        "\1\107\1\uffff\1\101\1\51\5\uffff\4\0\1\uffff\2\0\2\uffff";
+        "\1\107\1\uffff\1\101\1\51\6\uffff\6\0\2\uffff";
     static final String DFA36_acceptS =
-        "\1\uffff\1\1\2\uffff\1\4\1\6\1\uffff\1\7\5\uffff\1\5\2\uffff\1"+
+        "\1\uffff\1\1\2\uffff\1\4\1\6\1\uffff\1\7\1\uffff\1\5\6\uffff\1"+
         "\2\1\3";
     static final String DFA36_specialS =
-        "\11\uffff\1\0\1\1\1\2\1\3\1\uffff\1\4\1\5\2\uffff}>";
+        "\12\uffff\1\0\1\1\1\2\1\3\1\4\1\5\2\uffff}>";
     static final String[] DFA36_transitionS = {
             "\1\2\1\7\30\uffff\1\7\2\uffff\1\1\5\uffff\1\5\1\4\16\uffff"+
             "\10\3\10\uffff\1\5",
             "",
-            "\1\14\27\uffff\1\12\4\uffff\1\11\7\uffff\1\13\27\uffff\1\15",
+            "\1\15\27\uffff\1\13\4\uffff\1\12\7\uffff\1\14\27\uffff\1\11",
             "\1\17\44\uffff\1\16",
             "",
             "",
             "",
             "",
             "",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "",
             "\1\uffff",
             "\1\uffff",
             "",
@@ -11874,10 +11969,10 @@
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA36_9 = input.LA(1);
+                        int LA36_10 = input.LA(1);
 
                          
-                        int index36_9 = input.index();
+                        int index36_10 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred38_Java()) ) {s = 16;}
@@ -11885,14 +11980,14 @@
                         else if ( (synpred39_Java()) ) {s = 17;}
 
                          
-                        input.seek(index36_9);
+                        input.seek(index36_10);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA36_10 = input.LA(1);
+                        int LA36_11 = input.LA(1);
 
                          
-                        int index36_10 = input.index();
+                        int index36_11 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred38_Java()) ) {s = 16;}
@@ -11900,14 +11995,14 @@
                         else if ( (synpred39_Java()) ) {s = 17;}
 
                          
-                        input.seek(index36_10);
+                        input.seek(index36_11);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA36_11 = input.LA(1);
+                        int LA36_12 = input.LA(1);
 
                          
-                        int index36_11 = input.index();
+                        int index36_12 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred38_Java()) ) {s = 16;}
@@ -11915,14 +12010,14 @@
                         else if ( (synpred39_Java()) ) {s = 17;}
 
                          
-                        input.seek(index36_11);
+                        input.seek(index36_12);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA36_12 = input.LA(1);
+                        int LA36_13 = input.LA(1);
 
                          
-                        int index36_12 = input.index();
+                        int index36_13 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred38_Java()) ) {s = 16;}
@@ -11930,7 +12025,7 @@
                         else if ( (synpred39_Java()) ) {s = 17;}
 
                          
-                        input.seek(index36_12);
+                        input.seek(index36_13);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
@@ -12113,20 +12208,21 @@
         }
     }
     static final String DFA60_eotS =
-        "\26\uffff";
+        "\30\uffff";
     static final String DFA60_eofS =
-        "\26\uffff";
+        "\30\uffff";
     static final String DFA60_minS =
-        "\1\4\25\uffff";
+        "\1\4\27\uffff";
     static final String DFA60_maxS =
-        "\1\164\25\uffff";
+        "\1\164\27\uffff";
     static final String DFA60_acceptS =
-        "\1\uffff\1\1\1\2\23\uffff";
+        "\1\uffff\1\1\1\2\25\uffff";
     static final String DFA60_specialS =
-        "\26\uffff}>";
+        "\30\uffff}>";
     static final String[] DFA60_transitionS = {
             "\1\2\1\uffff\6\2\25\uffff\1\2\3\uffff\1\1\2\uffff\1\2\16\uffff"+
-            "\10\2\1\uffff\2\2\2\uffff\3\2\44\uffff\2\2\2\uffff\6\2",
+            "\10\2\1\uffff\2\2\2\uffff\3\2\21\uffff\2\2\21\uffff\2\2\2\uffff"+
+            "\6\2",
             "",
             "",
             "",
@@ -12147,6 +12243,8 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
@@ -12184,21 +12282,21 @@
         }
     }
     static final String DFA63_eotS =
-        "\27\uffff";
+        "\31\uffff";
     static final String DFA63_eofS =
-        "\27\uffff";
+        "\31\uffff";
     static final String DFA63_minS =
-        "\1\4\26\uffff";
+        "\1\4\30\uffff";
     static final String DFA63_maxS =
-        "\1\164\26\uffff";
+        "\1\164\30\uffff";
     static final String DFA63_acceptS =
-        "\1\uffff\1\1\24\uffff\1\2";
+        "\1\uffff\1\1\26\uffff\1\2";
     static final String DFA63_specialS =
-        "\27\uffff}>";
+        "\31\uffff}>";
     static final String[] DFA63_transitionS = {
-            "\1\1\1\uffff\6\1\25\uffff\1\1\3\uffff\1\1\1\26\1\uffff\1\1"+
-            "\16\uffff\10\1\1\uffff\2\1\2\uffff\3\1\44\uffff\2\1\2\uffff"+
-            "\6\1",
+            "\1\1\1\uffff\6\1\25\uffff\1\1\3\uffff\1\1\1\30\1\uffff\1\1"+
+            "\16\uffff\10\1\1\uffff\2\1\2\uffff\3\1\21\uffff\2\1\21\uffff"+
+            "\2\1\2\uffff\6\1",
             "",
             "",
             "",
@@ -12220,6 +12318,8 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
@@ -12257,22 +12357,22 @@
         }
     }
     static final String DFA61_eotS =
-        "\31\uffff";
+        "\33\uffff";
     static final String DFA61_eofS =
-        "\31\uffff";
+        "\33\uffff";
     static final String DFA61_minS =
-        "\1\42\1\4\27\uffff";
+        "\1\42\1\4\31\uffff";
     static final String DFA61_maxS =
-        "\1\46\1\164\27\uffff";
+        "\1\46\1\164\31\uffff";
     static final String DFA61_acceptS =
-        "\2\uffff\1\2\1\uffff\1\1\24\uffff";
+        "\2\uffff\1\2\1\uffff\1\1\26\uffff";
     static final String DFA61_specialS =
-        "\31\uffff}>";
+        "\33\uffff}>";
     static final String[] DFA61_transitionS = {
             "\1\1\3\uffff\1\2",
             "\1\4\1\uffff\6\4\25\uffff\1\4\3\uffff\1\4\1\2\1\uffff\1\4"+
-            "\16\uffff\10\4\1\uffff\2\4\2\uffff\3\4\44\uffff\2\4\2\uffff"+
-            "\6\4",
+            "\16\uffff\10\4\1\uffff\2\4\2\uffff\3\4\21\uffff\2\4\21\uffff"+
+            "\2\4\2\uffff\6\4",
             "",
             "",
             "",
@@ -12295,6 +12395,8 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
@@ -12983,20 +13085,21 @@
         }
     }
     static final String DFA86_eotS =
-        "\30\uffff";
+        "\32\uffff";
     static final String DFA86_eofS =
-        "\30\uffff";
+        "\32\uffff";
     static final String DFA86_minS =
-        "\1\4\27\uffff";
+        "\1\4\31\uffff";
     static final String DFA86_maxS =
-        "\1\164\27\uffff";
+        "\1\164\31\uffff";
     static final String DFA86_acceptS =
-        "\1\uffff\1\1\25\uffff\1\2";
+        "\1\uffff\1\1\27\uffff\1\2";
     static final String DFA86_specialS =
-        "\30\uffff}>";
+        "\32\uffff}>";
     static final String[] DFA86_transitionS = {
             "\1\1\1\uffff\6\1\25\uffff\1\1\3\uffff\1\1\2\uffff\1\1\16\uffff"+
-            "\10\1\1\uffff\2\1\1\27\1\uffff\4\1\43\uffff\2\1\2\uffff\6\1",
+            "\10\1\1\uffff\2\1\1\31\1\uffff\4\1\20\uffff\2\1\21\uffff\2\1"+
+            "\2\uffff\6\1",
             "",
             "",
             "",
@@ -13019,6 +13122,8 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
@@ -13134,21 +13239,22 @@
         }
     }
     static final String DFA90_eotS =
-        "\53\uffff";
+        "\55\uffff";
     static final String DFA90_eofS =
-        "\1\uffff\1\2\51\uffff";
+        "\1\uffff\1\2\53\uffff";
     static final String DFA90_minS =
-        "\1\4\1\34\51\uffff";
+        "\1\4\1\34\53\uffff";
     static final String DFA90_maxS =
-        "\1\164\1\160\51\uffff";
+        "\1\164\1\160\53\uffff";
     static final String DFA90_acceptS =
-        "\2\uffff\1\2\24\uffff\1\1\23\uffff";
+        "\2\uffff\1\2\26\uffff\1\1\23\uffff";
     static final String DFA90_specialS =
-        "\53\uffff}>";
+        "\55\uffff}>";
     static final String[] DFA90_transitionS = {
             "\1\1\1\uffff\6\2\25\uffff\1\2\3\uffff\1\2\2\uffff\1\2\16\uffff"+
-            "\10\2\1\uffff\2\2\2\uffff\4\2\43\uffff\2\2\2\uffff\6\2",
-            "\2\2\3\uffff\4\2\4\uffff\1\2\2\uffff\1\27\22\uffff\1\2\1\uffff"+
+            "\10\2\1\uffff\2\2\2\uffff\4\2\20\uffff\2\2\21\uffff\2\2\2\uffff"+
+            "\6\2",
+            "\2\2\3\uffff\4\2\4\uffff\1\2\2\uffff\1\31\22\uffff\1\2\1\uffff"+
             "\2\2\41\uffff\15\2",
             "",
             "",
@@ -13190,6 +13296,8 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
@@ -13227,20 +13335,21 @@
         }
     }
     static final String DFA91_eotS =
-        "\27\uffff";
+        "\31\uffff";
     static final String DFA91_eofS =
-        "\27\uffff";
+        "\31\uffff";
     static final String DFA91_minS =
-        "\1\4\26\uffff";
+        "\1\4\30\uffff";
     static final String DFA91_maxS =
-        "\1\164\26\uffff";
+        "\1\164\30\uffff";
     static final String DFA91_acceptS =
-        "\1\uffff\1\1\23\uffff\1\2\1\3";
+        "\1\uffff\1\1\25\uffff\1\2\1\3";
     static final String DFA91_specialS =
-        "\27\uffff}>";
+        "\31\uffff}>";
     static final String[] DFA91_transitionS = {
-            "\1\1\1\uffff\6\1\25\uffff\1\1\3\uffff\1\26\2\uffff\1\1\16\uffff"+
-            "\10\1\1\uffff\2\1\2\uffff\3\1\1\25\43\uffff\2\1\2\uffff\6\1",
+            "\1\1\1\uffff\6\1\25\uffff\1\1\3\uffff\1\30\2\uffff\1\1\16\uffff"+
+            "\10\1\1\uffff\2\1\2\uffff\3\1\1\27\20\uffff\2\1\21\uffff\2\1"+
+            "\2\uffff\6\1",
             "",
             "",
             "",
@@ -13262,6 +13371,8 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
@@ -13299,21 +13410,21 @@
         }
     }
     static final String DFA93_eotS =
-        "\30\uffff";
+        "\32\uffff";
     static final String DFA93_eofS =
-        "\30\uffff";
+        "\32\uffff";
     static final String DFA93_minS =
-        "\1\4\27\uffff";
+        "\1\4\31\uffff";
     static final String DFA93_maxS =
-        "\1\164\27\uffff";
+        "\1\164\31\uffff";
     static final String DFA93_acceptS =
-        "\1\uffff\1\1\25\uffff\1\2";
+        "\1\uffff\1\1\27\uffff\1\2";
     static final String DFA93_specialS =
-        "\30\uffff}>";
+        "\32\uffff}>";
     static final String[] DFA93_transitionS = {
-            "\1\1\1\uffff\6\1\25\uffff\1\1\3\uffff\1\1\1\27\1\uffff\1\1"+
-            "\16\uffff\10\1\1\uffff\2\1\2\uffff\4\1\43\uffff\2\1\2\uffff"+
-            "\6\1",
+            "\1\1\1\uffff\6\1\25\uffff\1\1\3\uffff\1\1\1\31\1\uffff\1\1"+
+            "\16\uffff\10\1\1\uffff\2\1\2\uffff\4\1\20\uffff\2\1\21\uffff"+
+            "\2\1\2\uffff\6\1",
             "",
             "",
             "",
@@ -13336,6 +13447,8 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
@@ -14068,28 +14181,28 @@
     static final String DFA105_eofS =
         "\166\uffff";
     static final String DFA105_minS =
-        "\5\4\6\uffff\1\5\52\uffff\2\0\16\uffff\1\0\1\uffff\3\0\30\uffff"+
-        "\1\0\22\uffff";
+        "\5\4\6\uffff\1\5\53\uffff\1\0\5\uffff\1\0\10\uffff\1\0\1\uffff"+
+        "\3\0\30\uffff\1\0\22\uffff";
     static final String DFA105_maxS =
-        "\1\164\1\107\1\47\1\160\1\51\6\uffff\1\107\52\uffff\2\0\16\uffff"+
-        "\1\0\1\uffff\3\0\30\uffff\1\0\22\uffff";
+        "\1\164\1\107\1\47\1\160\1\51\6\uffff\1\107\53\uffff\1\0\5\uffff"+
+        "\1\0\10\uffff\1\0\1\uffff\3\0\30\uffff\1\0\22\uffff";
     static final String DFA105_acceptS =
-        "\5\uffff\1\2\14\uffff\1\3\41\uffff\1\1\101\uffff";
+        "\5\uffff\1\2\14\uffff\1\3\60\uffff\1\1\62\uffff";
     static final String DFA105_specialS =
-        "\66\uffff\1\0\1\1\16\uffff\1\2\1\uffff\1\3\1\4\1\5\30\uffff\1\6"+
-        "\22\uffff}>";
+        "\67\uffff\1\0\5\uffff\1\1\10\uffff\1\2\1\uffff\1\3\1\4\1\5\30\uffff"+
+        "\1\6\22\uffff}>";
     static final String[] DFA105_transitionS = {
             "\1\3\1\5\6\22\15\uffff\1\22\1\uffff\1\5\2\uffff\1\5\2\uffff"+
             "\1\22\3\uffff\1\22\1\uffff\1\5\1\22\4\uffff\4\5\1\1\1\5\1\13"+
             "\3\5\10\4\1\uffff\2\22\2\uffff\3\22\1\2\1\uffff\1\22\1\uffff"+
             "\1\22\1\uffff\4\22\1\uffff\10\22\21\uffff\2\22\2\uffff\6\22",
-            "\1\64\1\5\25\uffff\1\5\2\uffff\1\5\10\uffff\1\5\5\uffff\4"+
-            "\5\1\66\5\5\10\64\10\uffff\1\67",
+            "\1\103\1\5\25\uffff\1\5\2\uffff\1\5\10\uffff\1\5\5\uffff\4"+
+            "\5\1\75\5\5\10\103\10\uffff\1\67",
             "\1\106\42\uffff\1\5",
-            "\1\64\24\uffff\1\22\2\uffff\1\111\1\22\3\uffff\1\110\1\uffff"+
+            "\1\103\24\uffff\1\22\2\uffff\1\111\1\22\3\uffff\1\110\1\uffff"+
             "\2\22\4\uffff\1\112\2\uffff\1\22\22\uffff\1\22\1\uffff\1\22"+
             "\10\uffff\1\22\21\uffff\25\22",
-            "\1\64\27\uffff\1\22\14\uffff\1\143",
+            "\1\103\27\uffff\1\22\14\uffff\1\143",
             "",
             "",
             "",
@@ -14140,13 +14253,14 @@
             "",
             "",
             "",
+            "",
             "\1\uffff",
-            "\1\uffff",
             "",
             "",
             "",
             "",
             "",
+            "\1\uffff",
             "",
             "",
             "",
@@ -14155,7 +14269,6 @@
             "",
             "",
             "",
-            "",
             "\1\uffff",
             "",
             "\1\uffff",
@@ -14243,33 +14356,33 @@
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA105_54 = input.LA(1);
+                        int LA105_55 = input.LA(1);
 
                          
-                        int index105_54 = input.index();
+                        int index105_55 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred144_Java()) ) {s = 52;}
+                        if ( (synpred144_Java()) ) {s = 67;}
 
                         else if ( (synpred145_Java()) ) {s = 5;}
 
                          
-                        input.seek(index105_54);
+                        input.seek(index105_55);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA105_55 = input.LA(1);
+                        int LA105_61 = input.LA(1);
 
                          
-                        int index105_55 = input.index();
+                        int index105_61 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred144_Java()) ) {s = 52;}
+                        if ( (synpred144_Java()) ) {s = 67;}
 
                         else if ( (synpred145_Java()) ) {s = 5;}
 
                          
-                        input.seek(index105_55);
+                        input.seek(index105_61);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
@@ -14279,7 +14392,7 @@
                         int index105_70 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred144_Java()) ) {s = 52;}
+                        if ( (synpred144_Java()) ) {s = 67;}
 
                         else if ( (synpred145_Java()) ) {s = 5;}
 
@@ -14294,7 +14407,7 @@
                         int index105_72 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred144_Java()) ) {s = 52;}
+                        if ( (synpred144_Java()) ) {s = 67;}
 
                         else if ( (true) ) {s = 18;}
 
@@ -14309,7 +14422,7 @@
                         int index105_73 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred144_Java()) ) {s = 52;}
+                        if ( (synpred144_Java()) ) {s = 67;}
 
                         else if ( (true) ) {s = 18;}
 
@@ -14324,7 +14437,7 @@
                         int index105_74 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred144_Java()) ) {s = 52;}
+                        if ( (synpred144_Java()) ) {s = 67;}
 
                         else if ( (true) ) {s = 18;}
 
@@ -14339,7 +14452,7 @@
                         int index105_99 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred144_Java()) ) {s = 52;}
+                        if ( (synpred144_Java()) ) {s = 67;}
 
                         else if ( (true) ) {s = 18;}
 
@@ -14365,15 +14478,15 @@
         "\1\164\42\uffff\1\160\35\uffff";
     static final String DFA113_acceptS =
         "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1"+
-        "\15\1\16\1\17\1\uffff\1\20\1\21\23\uffff\1\22\32\uffff";
+        "\15\1\16\1\17\1\20\25\uffff\1\21\32\uffff";
     static final String DFA113_specialS =
         "\101\uffff}>";
     static final String[] DFA113_transitionS = {
-            "\1\43\1\uffff\6\22\15\uffff\1\21\7\uffff\1\22\3\uffff\1\1\2"+
-            "\uffff\1\22\12\uffff\1\11\3\uffff\10\22\1\uffff\2\22\2\uffff"+
-            "\3\22\2\uffff\1\2\1\uffff\1\3\1\uffff\1\4\1\5\1\6\1\7\1\uffff"+
-            "\1\10\1\12\1\13\1\14\1\15\1\16\2\17\21\uffff\2\22\2\uffff\6"+
-            "\22",
+            "\1\43\1\uffff\6\20\15\uffff\1\17\7\uffff\1\20\3\uffff\1\1\2"+
+            "\uffff\1\20\12\uffff\1\11\3\uffff\10\20\1\uffff\2\20\2\uffff"+
+            "\3\20\2\uffff\1\2\1\uffff\1\3\1\uffff\1\4\1\5\1\6\1\7\1\uffff"+
+            "\1\10\1\12\1\13\1\14\1\15\1\16\2\20\21\uffff\2\20\2\uffff\6"+
+            "\20",
             "",
             "",
             "",
@@ -14408,9 +14521,9 @@
             "",
             "",
             "",
-            "\1\22\2\uffff\2\22\3\uffff\1\22\1\uffff\2\22\4\uffff\1\22"+
-            "\2\uffff\1\22\22\uffff\1\22\1\uffff\1\22\10\uffff\1\46\21\uffff"+
-            "\25\22",
+            "\1\20\2\uffff\2\20\3\uffff\1\20\1\uffff\2\20\4\uffff\1\20"+
+            "\2\uffff\1\20\22\uffff\1\20\1\uffff\1\20\10\uffff\1\46\21\uffff"+
+            "\25\20",
             "",
             "",
             "",
@@ -14472,24 +14585,25 @@
             this.transition = DFA113_transition;
         }
         public String getDescription() {
-            return "663:1: 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 )? ';' | modifyStatement | exitPointsStatement | ';' | statementExpression ';' | Identifier ':' statement );";
+            return "663:1: 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 )? ';' | modifyStatement | ';' | statementExpression ';' | Identifier ':' statement );";
         }
     }
     static final String DFA110_eotS =
-        "\26\uffff";
+        "\30\uffff";
     static final String DFA110_eofS =
-        "\26\uffff";
+        "\30\uffff";
     static final String DFA110_minS =
-        "\1\4\25\uffff";
+        "\1\4\27\uffff";
     static final String DFA110_maxS =
-        "\1\164\25\uffff";
+        "\1\164\27\uffff";
     static final String DFA110_acceptS =
-        "\1\uffff\1\1\23\uffff\1\2";
+        "\1\uffff\1\1\25\uffff\1\2";
     static final String DFA110_specialS =
-        "\26\uffff}>";
+        "\30\uffff}>";
     static final String[] DFA110_transitionS = {
-            "\1\1\1\uffff\6\1\15\uffff\1\25\7\uffff\1\1\6\uffff\1\1\16\uffff"+
-            "\10\1\1\uffff\2\1\2\uffff\3\1\44\uffff\2\1\2\uffff\6\1",
+            "\1\1\1\uffff\6\1\15\uffff\1\27\7\uffff\1\1\6\uffff\1\1\16\uffff"+
+            "\10\1\1\uffff\2\1\2\uffff\3\1\21\uffff\2\1\21\uffff\2\1\2\uffff"+
+            "\6\1",
             "",
             "",
             "",
@@ -14510,6 +14624,8 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
@@ -14547,20 +14663,21 @@
         }
     }
     static final String DFA115_eotS =
-        "\26\uffff";
+        "\30\uffff";
     static final String DFA115_eofS =
-        "\26\uffff";
+        "\30\uffff";
     static final String DFA115_minS =
-        "\1\4\25\uffff";
+        "\1\4\27\uffff";
     static final String DFA115_maxS =
-        "\1\164\25\uffff";
+        "\1\164\27\uffff";
     static final String DFA115_acceptS =
-        "\1\uffff\1\1\23\uffff\1\2";
+        "\1\uffff\1\1\25\uffff\1\2";
     static final String DFA115_specialS =
-        "\26\uffff}>";
+        "\30\uffff}>";
     static final String[] DFA115_transitionS = {
-            "\1\1\1\uffff\6\1\25\uffff\1\1\4\uffff\1\25\1\uffff\1\1\16\uffff"+
-            "\10\1\1\uffff\2\1\2\uffff\3\1\44\uffff\2\1\2\uffff\6\1",
+            "\1\1\1\uffff\6\1\25\uffff\1\1\4\uffff\1\27\1\uffff\1\1\16\uffff"+
+            "\10\1\1\uffff\2\1\2\uffff\3\1\21\uffff\2\1\21\uffff\2\1\2\uffff"+
+            "\6\1",
             "",
             "",
             "",
@@ -14581,6 +14698,8 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
@@ -14614,7 +14733,7 @@
             this.transition = DFA115_transition;
         }
         public String getDescription() {
-            return "700:6: (e= expression ( ',' e= expression )* )?";
+            return "699:6: (e= expression ( ',' e= expression )* )?";
         }
     }
     static final String DFA117_eotS =
@@ -14723,7 +14842,7 @@
             this.transition = DFA117_transition;
         }
         public String getDescription() {
-            return "()* loopback of 734:16: ( catchClause )*";
+            return "()* loopback of 733:16: ( catchClause )*";
         }
     }
     static final String DFA120_eotS =
@@ -14830,25 +14949,25 @@
             this.transition = DFA120_transition;
         }
         public String getDescription() {
-            return "()* loopback of 750:16: ( blockStatement )*";
+            return "()* loopback of 749:16: ( blockStatement )*";
         }
     }
     static final String DFA121_eotS =
-        "\30\uffff";
+        "\32\uffff";
     static final String DFA121_eofS =
-        "\30\uffff";
+        "\32\uffff";
     static final String DFA121_minS =
-        "\1\110\1\4\22\uffff\1\0\3\uffff";
+        "\1\110\1\4\24\uffff\1\0\3\uffff";
     static final String DFA121_maxS =
-        "\1\133\1\164\22\uffff\1\0\3\uffff";
+        "\1\133\1\164\24\uffff\1\0\3\uffff";
     static final String DFA121_acceptS =
-        "\2\uffff\1\3\1\1\23\uffff\1\2";
+        "\2\uffff\1\3\1\1\25\uffff\1\2";
     static final String DFA121_specialS =
-        "\24\uffff\1\0\3\uffff}>";
+        "\26\uffff\1\0\3\uffff}>";
     static final String[] DFA121_transitionS = {
             "\1\2\22\uffff\1\1",
-            "\1\24\1\uffff\6\3\25\uffff\1\3\6\uffff\1\3\16\uffff\10\3\1"+
-            "\uffff\2\3\2\uffff\3\3\44\uffff\2\3\2\uffff\6\3",
+            "\1\26\1\uffff\6\3\25\uffff\1\3\6\uffff\1\3\16\uffff\10\3\1"+
+            "\uffff\2\3\2\uffff\3\3\21\uffff\2\3\21\uffff\2\3\2\uffff\6\3",
             "",
             "",
             "",
@@ -14867,6 +14986,8 @@
             "",
             "",
             "",
+            "",
+            "",
             "\1\uffff",
             "",
             "",
@@ -14903,25 +15024,25 @@
             this.transition = DFA121_transition;
         }
         public String getDescription() {
-            return "753:1: switchLabel : ( 'case' constantExpression ':' | 'case' enumConstantName ':' | 'default' ':' );";
+            return "752:1: switchLabel : ( 'case' constantExpression ':' | 'case' enumConstantName ':' | 'default' ':' );";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA121_20 = input.LA(1);
+                        int LA121_22 = input.LA(1);
 
                          
-                        int index121_20 = input.index();
+                        int index121_22 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred178_Java()) ) {s = 3;}
+                        if ( (synpred177_Java()) ) {s = 3;}
 
-                        else if ( (synpred179_Java()) ) {s = 23;}
+                        else if ( (synpred178_Java()) ) {s = 25;}
 
                          
-                        input.seek(index121_20);
+                        input.seek(index121_22);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -14933,31 +15054,31 @@
         }
     }
     static final String DFA126_eotS =
-        "\u0089\uffff";
+        "\u008f\uffff";
     static final String DFA126_eofS =
-        "\u0089\uffff";
+        "\u008f\uffff";
     static final String DFA126_minS =
-        "\5\4\23\uffff\10\4\1\31\30\uffff\1\52\1\uffff\1\31\21\0\22\uffff"+
-        "\2\0\1\uffff\2\0\5\uffff\1\0\31\uffff\1\0\5\uffff";
+        "\5\4\25\uffff\10\4\1\31\30\uffff\1\52\1\31\1\uffff\21\0\2\uffff"+
+        "\3\0\23\uffff\1\0\5\uffff\1\0\33\uffff\1\0\5\uffff";
     static final String DFA126_maxS =
-        "\1\164\1\107\1\4\1\160\1\51\23\uffff\2\51\1\107\1\4\1\107\3\164"+
-        "\1\112\30\uffff\1\52\1\uffff\1\112\21\0\22\uffff\2\0\1\uffff\2\0"+
-        "\5\uffff\1\0\31\uffff\1\0\5\uffff";
+        "\1\164\1\107\1\4\1\160\1\51\25\uffff\2\51\1\107\1\4\1\107\3\164"+
+        "\1\112\30\uffff\1\52\1\112\1\uffff\21\0\2\uffff\3\0\23\uffff\1\0"+
+        "\5\uffff\1\0\33\uffff\1\0\5\uffff";
     static final String DFA126_acceptS =
-        "\5\uffff\1\2\170\uffff\1\1\12\uffff";
+        "\5\uffff\1\2\176\uffff\1\1\12\uffff";
     static final String DFA126_specialS =
-        "\74\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+
-        "\14\1\15\1\16\1\17\1\20\22\uffff\1\21\1\22\1\uffff\1\23\1\24\5\uffff"+
-        "\1\25\31\uffff\1\26\5\uffff}>";
+        "\76\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+
+        "\14\1\15\1\16\1\17\1\20\2\uffff\1\21\1\22\1\23\23\uffff\1\24\5\uffff"+
+        "\1\25\33\uffff\1\26\5\uffff}>";
     static final String[] DFA126_transitionS = {
             "\1\3\1\uffff\6\5\15\uffff\1\5\7\uffff\1\5\6\uffff\1\5\10\uffff"+
-            "\1\1\5\uffff\10\4\1\uffff\2\5\2\uffff\3\5\1\2\43\uffff\2\5\2"+
-            "\uffff\6\5",
-            "\1\30\54\uffff\1\32\5\uffff\10\31\10\uffff\1\33",
-            "\1\34",
-            "\1\40\24\uffff\1\5\2\uffff\1\36\1\5\3\uffff\1\35\3\5\4\uffff"+
-            "\1\37\2\uffff\1\5\22\uffff\1\5\1\uffff\1\5\32\uffff\25\5",
-            "\1\73\27\uffff\1\5\14\uffff\1\71",
+            "\1\1\5\uffff\10\4\1\uffff\2\5\2\uffff\3\5\1\2\20\uffff\2\5\21"+
+            "\uffff\2\5\2\uffff\6\5",
+            "\1\32\54\uffff\1\34\5\uffff\10\33\10\uffff\1\35",
+            "\1\36",
+            "\1\42\24\uffff\1\5\2\uffff\1\40\1\5\3\uffff\1\37\3\5\4\uffff"+
+            "\1\41\2\uffff\1\5\22\uffff\1\5\1\uffff\1\5\32\uffff\25\5",
+            "\1\74\27\uffff\1\5\14\uffff\1\73",
             "",
             "",
             "",
@@ -14977,20 +15098,22 @@
             "",
             "",
             "",
-            "\1\77\27\uffff\1\75\4\uffff\1\74\7\uffff\1\76",
-            "\1\101\44\uffff\1\100",
-            "\1\102\54\uffff\1\104\5\uffff\10\103\10\uffff\1\105",
-            "\1\106",
-            "\1\111\27\uffff\1\107\24\uffff\1\113\5\uffff\10\112\2\uffff"+
-            "\1\110\5\uffff\1\114",
-            "\1\137\1\uffff\6\5\25\uffff\1\5\6\uffff\1\5\3\uffff\1\5\12"+
-            "\uffff\10\140\1\142\2\5\2\uffff\3\5\44\uffff\2\5\2\uffff\6\5",
-            "\1\143\31\uffff\1\5\2\uffff\1\5\36\uffff\1\5\62\uffff\2\5",
-            "\1\5\1\uffff\6\5\25\uffff\1\5\6\uffff\1\5\1\uffff\1\151\14"+
-            "\uffff\10\5\1\uffff\2\5\2\uffff\3\5\44\uffff\2\5\2\uffff\6\5",
-            "\1\5\10\uffff\1\5\6\uffff\1\5\2\uffff\1\5\35\uffff\1\176",
             "",
             "",
+            "\1\101\27\uffff\1\77\4\uffff\1\76\7\uffff\1\100",
+            "\1\103\44\uffff\1\102",
+            "\1\104\54\uffff\1\106\5\uffff\10\105\10\uffff\1\107",
+            "\1\110",
+            "\1\113\27\uffff\1\111\24\uffff\1\115\5\uffff\10\114\2\uffff"+
+            "\1\112\5\uffff\1\116",
+            "\1\121\1\uffff\6\5\25\uffff\1\5\6\uffff\1\5\3\uffff\1\5\12"+
+            "\uffff\10\122\1\123\2\5\2\uffff\3\5\21\uffff\2\5\21\uffff\2"+
+            "\5\2\uffff\6\5",
+            "\1\147\31\uffff\1\5\2\uffff\1\5\36\uffff\1\5\62\uffff\2\5",
+            "\1\5\1\uffff\6\5\25\uffff\1\5\6\uffff\1\5\1\uffff\1\155\14"+
+            "\uffff\10\5\1\uffff\2\5\2\uffff\3\5\21\uffff\2\5\21\uffff\2"+
+            "\5\2\uffff\6\5",
+            "\1\5\10\uffff\1\5\6\uffff\1\5\2\uffff\1\5\35\uffff\1\u0084",
             "",
             "",
             "",
@@ -15013,9 +15136,11 @@
             "",
             "",
             "",
-            "\1\u0083",
             "",
-            "\1\5\10\uffff\1\5\6\uffff\1\5\2\uffff\1\5\35\uffff\1\176",
+            "",
+            "\1\u0089",
+            "\1\5\10\uffff\1\5\6\uffff\1\5\2\uffff\1\5\35\uffff\1\u0084",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -15035,6 +15160,9 @@
             "\1\uffff",
             "",
             "",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
             "",
             "",
             "",
@@ -15051,11 +15179,10 @@
             "",
             "",
             "",
-            "\1\uffff",
-            "\1\uffff",
             "",
+            "",
+            "",
             "\1\uffff",
-            "\1\uffff",
             "",
             "",
             "",
@@ -15087,6 +15214,8 @@
             "",
             "",
             "",
+            "",
+            "",
             "\1\uffff",
             "",
             "",
@@ -15125,50 +15254,20 @@
             this.transition = DFA126_transition;
         }
         public String getDescription() {
-            return "763:1: forControl options {k=3; } : ( forVarControl | ( forInit )? ';' ( expression )? ';' ( forUpdate )? );";
+            return "762:1: forControl options {k=3; } : ( forVarControl | ( forInit )? ';' ( expression )? ';' ( forUpdate )? );";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA126_60 = input.LA(1);
-
-                         
-                        int index126_60 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
-
-                        else if ( (true) ) {s = 5;}
-
-                         
-                        input.seek(index126_60);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA126_61 = input.LA(1);
-
-                         
-                        int index126_61 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
-
-                        else if ( (true) ) {s = 5;}
-
-                         
-                        input.seek(index126_61);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
                         int LA126_62 = input.LA(1);
 
                          
                         int index126_62 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15176,14 +15275,14 @@
                         input.seek(index126_62);
                         if ( s>=0 ) return s;
                         break;
-                    case 3 : 
+                    case 1 : 
                         int LA126_63 = input.LA(1);
 
                          
                         int index126_63 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15191,14 +15290,14 @@
                         input.seek(index126_63);
                         if ( s>=0 ) return s;
                         break;
-                    case 4 : 
+                    case 2 : 
                         int LA126_64 = input.LA(1);
 
                          
                         int index126_64 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15206,14 +15305,14 @@
                         input.seek(index126_64);
                         if ( s>=0 ) return s;
                         break;
-                    case 5 : 
+                    case 3 : 
                         int LA126_65 = input.LA(1);
 
                          
                         int index126_65 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15221,14 +15320,14 @@
                         input.seek(index126_65);
                         if ( s>=0 ) return s;
                         break;
-                    case 6 : 
+                    case 4 : 
                         int LA126_66 = input.LA(1);
 
                          
                         int index126_66 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15236,14 +15335,14 @@
                         input.seek(index126_66);
                         if ( s>=0 ) return s;
                         break;
-                    case 7 : 
+                    case 5 : 
                         int LA126_67 = input.LA(1);
 
                          
                         int index126_67 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15251,14 +15350,14 @@
                         input.seek(index126_67);
                         if ( s>=0 ) return s;
                         break;
-                    case 8 : 
+                    case 6 : 
                         int LA126_68 = input.LA(1);
 
                          
                         int index126_68 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15266,14 +15365,14 @@
                         input.seek(index126_68);
                         if ( s>=0 ) return s;
                         break;
-                    case 9 : 
+                    case 7 : 
                         int LA126_69 = input.LA(1);
 
                          
                         int index126_69 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15281,14 +15380,14 @@
                         input.seek(index126_69);
                         if ( s>=0 ) return s;
                         break;
-                    case 10 : 
+                    case 8 : 
                         int LA126_70 = input.LA(1);
 
                          
                         int index126_70 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15296,14 +15395,14 @@
                         input.seek(index126_70);
                         if ( s>=0 ) return s;
                         break;
-                    case 11 : 
+                    case 9 : 
                         int LA126_71 = input.LA(1);
 
                          
                         int index126_71 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15311,14 +15410,14 @@
                         input.seek(index126_71);
                         if ( s>=0 ) return s;
                         break;
-                    case 12 : 
+                    case 10 : 
                         int LA126_72 = input.LA(1);
 
                          
                         int index126_72 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15326,14 +15425,14 @@
                         input.seek(index126_72);
                         if ( s>=0 ) return s;
                         break;
-                    case 13 : 
+                    case 11 : 
                         int LA126_73 = input.LA(1);
 
                          
                         int index126_73 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15341,14 +15440,14 @@
                         input.seek(index126_73);
                         if ( s>=0 ) return s;
                         break;
-                    case 14 : 
+                    case 12 : 
                         int LA126_74 = input.LA(1);
 
                          
                         int index126_74 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15356,14 +15455,14 @@
                         input.seek(index126_74);
                         if ( s>=0 ) return s;
                         break;
-                    case 15 : 
+                    case 13 : 
                         int LA126_75 = input.LA(1);
 
                          
                         int index126_75 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15371,14 +15470,14 @@
                         input.seek(index126_75);
                         if ( s>=0 ) return s;
                         break;
-                    case 16 : 
+                    case 14 : 
                         int LA126_76 = input.LA(1);
 
                          
                         int index126_76 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
@@ -15386,94 +15485,124 @@
                         input.seek(index126_76);
                         if ( s>=0 ) return s;
                         break;
+                    case 15 : 
+                        int LA126_77 = input.LA(1);
+
+                         
+                        int index126_77 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred180_Java()) ) {s = 132;}
+
+                        else if ( (true) ) {s = 5;}
+
+                         
+                        input.seek(index126_77);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 16 : 
+                        int LA126_78 = input.LA(1);
+
+                         
+                        int index126_78 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred180_Java()) ) {s = 132;}
+
+                        else if ( (true) ) {s = 5;}
+
+                         
+                        input.seek(index126_78);
+                        if ( s>=0 ) return s;
+                        break;
                     case 17 : 
-                        int LA126_95 = input.LA(1);
+                        int LA126_81 = input.LA(1);
 
                          
-                        int index126_95 = input.index();
+                        int index126_81 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
                          
-                        input.seek(index126_95);
+                        input.seek(index126_81);
                         if ( s>=0 ) return s;
                         break;
                     case 18 : 
-                        int LA126_96 = input.LA(1);
+                        int LA126_82 = input.LA(1);
 
                          
-                        int index126_96 = input.index();
+                        int index126_82 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
                          
-                        input.seek(index126_96);
+                        input.seek(index126_82);
                         if ( s>=0 ) return s;
                         break;
                     case 19 : 
-                        int LA126_98 = input.LA(1);
+                        int LA126_83 = input.LA(1);
 
                          
-                        int index126_98 = input.index();
+                        int index126_83 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
                          
-                        input.seek(index126_98);
+                        input.seek(index126_83);
                         if ( s>=0 ) return s;
                         break;
                     case 20 : 
-                        int LA126_99 = input.LA(1);
+                        int LA126_103 = input.LA(1);
 
                          
-                        int index126_99 = input.index();
+                        int index126_103 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
                          
-                        input.seek(index126_99);
+                        input.seek(index126_103);
                         if ( s>=0 ) return s;
                         break;
                     case 21 : 
-                        int LA126_105 = input.LA(1);
+                        int LA126_109 = input.LA(1);
 
                          
-                        int index126_105 = input.index();
+                        int index126_109 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
                          
-                        input.seek(index126_105);
+                        input.seek(index126_109);
                         if ( s>=0 ) return s;
                         break;
                     case 22 : 
-                        int LA126_131 = input.LA(1);
+                        int LA126_137 = input.LA(1);
 
                          
-                        int index126_131 = input.index();
+                        int index126_137 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred181_Java()) ) {s = 126;}
+                        if ( (synpred180_Java()) ) {s = 132;}
 
                         else if ( (true) ) {s = 5;}
 
                          
-                        input.seek(index126_131);
+                        input.seek(index126_137);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -15485,21 +15614,21 @@
         }
     }
     static final String DFA123_eotS =
-        "\30\uffff";
+        "\32\uffff";
     static final String DFA123_eofS =
-        "\30\uffff";
+        "\32\uffff";
     static final String DFA123_minS =
-        "\1\4\27\uffff";
+        "\1\4\31\uffff";
     static final String DFA123_maxS =
-        "\1\164\27\uffff";
+        "\1\164\31\uffff";
     static final String DFA123_acceptS =
-        "\1\uffff\1\1\25\uffff\1\2";
+        "\1\uffff\1\1\27\uffff\1\2";
     static final String DFA123_specialS =
-        "\30\uffff}>";
+        "\32\uffff}>";
     static final String[] DFA123_transitionS = {
-            "\1\1\1\uffff\6\1\15\uffff\1\27\7\uffff\1\1\6\uffff\1\1\10\uffff"+
-            "\1\1\5\uffff\10\1\1\uffff\2\1\2\uffff\4\1\43\uffff\2\1\2\uffff"+
-            "\6\1",
+            "\1\1\1\uffff\6\1\15\uffff\1\31\7\uffff\1\1\6\uffff\1\1\10\uffff"+
+            "\1\1\5\uffff\10\1\1\uffff\2\1\2\uffff\4\1\20\uffff\2\1\21\uffff"+
+            "\2\1\2\uffff\6\1",
             "",
             "",
             "",
@@ -15522,6 +15651,8 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
@@ -15555,24 +15686,25 @@
             this.transition = DFA123_transition;
         }
         public String getDescription() {
-            return "766:4: ( forInit )?";
+            return "765:4: ( forInit )?";
         }
     }
     static final String DFA124_eotS =
-        "\26\uffff";
+        "\30\uffff";
     static final String DFA124_eofS =
-        "\26\uffff";
+        "\30\uffff";
     static final String DFA124_minS =
-        "\1\4\25\uffff";
+        "\1\4\27\uffff";
     static final String DFA124_maxS =
-        "\1\164\25\uffff";
+        "\1\164\27\uffff";
     static final String DFA124_acceptS =
-        "\1\uffff\1\1\23\uffff\1\2";
+        "\1\uffff\1\1\25\uffff\1\2";
     static final String DFA124_specialS =
-        "\26\uffff}>";
+        "\30\uffff}>";
     static final String[] DFA124_transitionS = {
-            "\1\1\1\uffff\6\1\15\uffff\1\25\7\uffff\1\1\6\uffff\1\1\16\uffff"+
-            "\10\1\1\uffff\2\1\2\uffff\3\1\44\uffff\2\1\2\uffff\6\1",
+            "\1\1\1\uffff\6\1\15\uffff\1\27\7\uffff\1\1\6\uffff\1\1\16\uffff"+
+            "\10\1\1\uffff\2\1\2\uffff\3\1\21\uffff\2\1\21\uffff\2\1\2\uffff"+
+            "\6\1",
             "",
             "",
             "",
@@ -15593,6 +15725,8 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
@@ -15626,24 +15760,24 @@
             this.transition = DFA124_transition;
         }
         public String getDescription() {
-            return "766:17: ( expression )?";
+            return "765:17: ( expression )?";
         }
     }
     static final String DFA125_eotS =
-        "\26\uffff";
+        "\30\uffff";
     static final String DFA125_eofS =
-        "\26\uffff";
+        "\30\uffff";
     static final String DFA125_minS =
-        "\1\4\25\uffff";
+        "\1\4\27\uffff";
     static final String DFA125_maxS =
-        "\1\164\25\uffff";
+        "\1\164\27\uffff";
     static final String DFA125_acceptS =
-        "\1\uffff\1\1\23\uffff\1\2";
+        "\1\uffff\1\1\25\uffff\1\2";
     static final String DFA125_specialS =
-        "\26\uffff}>";
+        "\30\uffff}>";
     static final String[] DFA125_transitionS = {
             "\1\1\1\uffff\6\1\25\uffff\1\1\6\uffff\1\1\16\uffff\10\1\1\uffff"+
-            "\2\1\1\25\1\uffff\3\1\44\uffff\2\1\2\uffff\6\1",
+            "\2\1\1\27\1\uffff\3\1\21\uffff\2\1\21\uffff\2\1\2\uffff\6\1",
             "",
             "",
             "",
@@ -15664,6 +15798,8 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
@@ -15697,30 +15833,30 @@
             this.transition = DFA125_transition;
         }
         public String getDescription() {
-            return "766:33: ( forUpdate )?";
+            return "765:33: ( forUpdate )?";
         }
     }
     static final String DFA128_eotS =
-        "\67\uffff";
+        "\71\uffff";
     static final String DFA128_eofS =
-        "\3\uffff\1\5\63\uffff";
+        "\3\uffff\1\5\65\uffff";
     static final String DFA128_minS =
-        "\1\4\2\uffff\2\4\22\uffff\2\0\4\uffff\1\0\26\uffff\1\0\2\uffff";
+        "\1\4\2\uffff\2\4\24\uffff\3\0\32\uffff\1\0\2\uffff";
     static final String DFA128_maxS =
-        "\1\164\2\uffff\1\160\1\51\22\uffff\2\0\4\uffff\1\0\26\uffff\1\0"+
-        "\2\uffff";
+        "\1\164\2\uffff\1\160\1\51\24\uffff\3\0\32\uffff\1\0\2\uffff";
     static final String DFA128_acceptS =
-        "\1\uffff\1\1\3\uffff\1\2\61\uffff";
+        "\1\uffff\1\1\3\uffff\1\2\63\uffff";
     static final String DFA128_specialS =
-        "\27\uffff\1\0\1\1\4\uffff\1\2\26\uffff\1\3\2\uffff}>";
+        "\31\uffff\1\0\1\1\1\2\32\uffff\1\3\2\uffff}>";
     static final String[] DFA128_transitionS = {
             "\1\3\1\uffff\6\5\25\uffff\1\5\6\uffff\1\5\10\uffff\1\1\5\uffff"+
-            "\10\4\1\uffff\2\5\2\uffff\3\5\1\1\43\uffff\2\5\2\uffff\6\5",
+            "\10\4\1\uffff\2\5\2\uffff\3\5\1\1\20\uffff\2\5\21\uffff\2\5"+
+            "\2\uffff\6\5",
             "",
             "",
-            "\1\1\24\uffff\1\5\2\uffff\1\27\1\5\3\uffff\1\35\3\5\4\uffff"+
-            "\1\30\2\uffff\1\5\22\uffff\1\5\1\uffff\1\5\32\uffff\25\5",
-            "\1\1\27\uffff\1\5\14\uffff\1\64",
+            "\1\1\24\uffff\1\5\2\uffff\1\32\1\5\3\uffff\1\31\3\5\4\uffff"+
+            "\1\33\2\uffff\1\5\22\uffff\1\5\1\uffff\1\5\32\uffff\25\5",
+            "\1\1\27\uffff\1\5\14\uffff\1\66",
             "",
             "",
             "",
@@ -15739,13 +15875,15 @@
             "",
             "",
             "",
+            "",
+            "",
             "\1\uffff",
             "\1\uffff",
+            "\1\uffff",
             "",
             "",
             "",
             "",
-            "\1\uffff",
             "",
             "",
             "",
@@ -15803,70 +15941,70 @@
             this.transition = DFA128_transition;
         }
         public String getDescription() {
-            return "769:1: forInit : ( ( variableModifier )* type variableDeclarators | expressionList );";
+            return "768:1: forInit : ( ( variableModifier )* type variableDeclarators | expressionList );";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA128_23 = input.LA(1);
+                        int LA128_25 = input.LA(1);
 
                          
-                        int index128_23 = input.index();
+                        int index128_25 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred186_Java()) ) {s = 1;}
+                        if ( (synpred185_Java()) ) {s = 1;}
 
                         else if ( (true) ) {s = 5;}
 
                          
-                        input.seek(index128_23);
+                        input.seek(index128_25);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA128_24 = input.LA(1);
+                        int LA128_26 = input.LA(1);
 
                          
-                        int index128_24 = input.index();
+                        int index128_26 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred186_Java()) ) {s = 1;}
+                        if ( (synpred185_Java()) ) {s = 1;}
 
                         else if ( (true) ) {s = 5;}
 
                          
-                        input.seek(index128_24);
+                        input.seek(index128_26);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA128_29 = input.LA(1);
+                        int LA128_27 = input.LA(1);
 
                          
-                        int index128_29 = input.index();
+                        int index128_27 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred186_Java()) ) {s = 1;}
+                        if ( (synpred185_Java()) ) {s = 1;}
 
                         else if ( (true) ) {s = 5;}
 
                          
-                        input.seek(index128_29);
+                        input.seek(index128_27);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA128_52 = input.LA(1);
+                        int LA128_54 = input.LA(1);
 
                          
-                        int index128_52 = input.index();
+                        int index128_54 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred186_Java()) ) {s = 1;}
+                        if ( (synpred185_Java()) ) {s = 1;}
 
                         else if ( (true) ) {s = 5;}
 
                          
-                        input.seek(index128_52);
+                        input.seek(index128_54);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -15878,17 +16016,17 @@
         }
     }
     static final String DFA131_eotS =
-        "\u00ca\uffff";
+        "\u00dc\uffff";
     static final String DFA131_eofS =
-        "\1\14\u00c9\uffff";
+        "\1\14\u00db\uffff";
     static final String DFA131_minS =
-        "\1\31\13\0\u00be\uffff";
+        "\1\31\13\0\u00d0\uffff";
     static final String DFA131_maxS =
-        "\1\143\13\0\u00be\uffff";
+        "\1\143\13\0\u00d0\uffff";
     static final String DFA131_acceptS =
-        "\14\uffff\1\2\32\uffff\1\1\u00a2\uffff";
+        "\14\uffff\1\2\34\uffff\1\1\u00b2\uffff";
     static final String DFA131_specialS =
-        "\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\u00be\uffff}>";
+        "\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\u00d0\uffff}>";
     static final String[] DFA131_transitionS = {
             "\1\14\7\uffff\1\12\1\14\1\13\2\uffff\1\14\3\uffff\1\14\1\uffff"+
             "\1\1\25\uffff\1\14\7\uffff\1\14\21\uffff\1\2\1\3\1\4\1\5\1\6"+
@@ -16093,6 +16231,24 @@
             "",
             "",
             "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
             ""
     };
 
@@ -16126,7 +16282,7 @@
             this.transition = DFA131_transition;
         }
         public String getDescription() {
-            return "807:26: ( assignmentOperator expression )?";
+            return "806:26: ( assignmentOperator expression )?";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
@@ -16139,7 +16295,7 @@
                         int index131_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred189_Java()) ) {s = 39;}
+                        if ( (synpred188_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 12;}
 
@@ -16154,7 +16310,7 @@
                         int index131_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred189_Java()) ) {s = 39;}
+                        if ( (synpred188_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 12;}
 
@@ -16169,7 +16325,7 @@
                         int index131_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred189_Java()) ) {s = 39;}
+                        if ( (synpred188_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 12;}
 
@@ -16184,7 +16340,7 @@
                         int index131_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred189_Java()) ) {s = 39;}
+                        if ( (synpred188_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 12;}
 
@@ -16199,7 +16355,7 @@
                         int index131_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred189_Java()) ) {s = 39;}
+                        if ( (synpred188_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 12;}
 
@@ -16214,7 +16370,7 @@
                         int index131_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred189_Java()) ) {s = 39;}
+                        if ( (synpred188_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 12;}
 
@@ -16229,7 +16385,7 @@
                         int index131_7 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred189_Java()) ) {s = 39;}
+                        if ( (synpred188_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 12;}
 
@@ -16244,7 +16400,7 @@
                         int index131_8 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred189_Java()) ) {s = 39;}
+                        if ( (synpred188_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 12;}
 
@@ -16259,7 +16415,7 @@
                         int index131_9 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred189_Java()) ) {s = 39;}
+                        if ( (synpred188_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 12;}
 
@@ -16274,7 +16430,7 @@
                         int index131_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred189_Java()) ) {s = 39;}
+                        if ( (synpred188_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 12;}
 
@@ -16289,7 +16445,7 @@
                         int index131_11 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred189_Java()) ) {s = 39;}
+                        if ( (synpred188_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 12;}
 
@@ -16367,7 +16523,7 @@
             this.transition = DFA132_transition;
         }
         public String getDescription() {
-            return "810:1: assignmentOperator : ( '=' | '+=' | '-=' | '*=' | '/=' | '&=' | '|=' | '^=' | '%=' | '<' '<' '=' | '>' '>' '=' | '>' '>' '>' '=' );";
+            return "809:1: assignmentOperator : ( '=' | '+=' | '-=' | '*=' | '/=' | '&=' | '|=' | '^=' | '%=' | '<' '<' '=' | '>' '>' '=' | '>' '>' '>' '=' );";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
@@ -16380,7 +16536,7 @@
                         int index132_12 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred200_Java()) ) {s = 13;}
+                        if ( (synpred199_Java()) ) {s = 13;}
 
                         else if ( (true) ) {s = 14;}
 
@@ -16462,7 +16618,7 @@
             this.transition = DFA133_transition;
         }
         public String getDescription() {
-            return "826:33: ( '?' expression ':' expression )?";
+            return "825:33: ( '?' expression ':' expression )?";
         }
     }
     static final String DFA134_eotS =
@@ -16532,7 +16688,7 @@
             this.transition = DFA134_transition;
         }
         public String getDescription() {
-            return "()* loopback of 830:34: ( '||' conditionalAndExpression )*";
+            return "()* loopback of 829:34: ( '||' conditionalAndExpression )*";
         }
     }
     static final String DFA135_eotS =
@@ -16603,7 +16759,7 @@
             this.transition = DFA135_transition;
         }
         public String getDescription() {
-            return "()* loopback of 834:31: ( '&&' inclusiveOrExpression )*";
+            return "()* loopback of 833:31: ( '&&' inclusiveOrExpression )*";
         }
     }
     static final String DFA136_eotS =
@@ -16675,7 +16831,7 @@
             this.transition = DFA136_transition;
         }
         public String getDescription() {
-            return "()* loopback of 838:31: ( '|' exclusiveOrExpression )*";
+            return "()* loopback of 837:31: ( '|' exclusiveOrExpression )*";
         }
     }
     static final String DFA137_eotS =
@@ -16748,7 +16904,7 @@
             this.transition = DFA137_transition;
         }
         public String getDescription() {
-            return "()* loopback of 842:23: ( '^' andExpression )*";
+            return "()* loopback of 841:23: ( '^' andExpression )*";
         }
     }
     static final String DFA138_eotS =
@@ -16822,7 +16978,7 @@
             this.transition = DFA138_transition;
         }
         public String getDescription() {
-            return "()* loopback of 846:28: ( '&' equalityExpression )*";
+            return "()* loopback of 845:28: ( '&' equalityExpression )*";
         }
     }
     static final String DFA139_eotS =
@@ -16897,7 +17053,7 @@
             this.transition = DFA139_transition;
         }
         public String getDescription() {
-            return "()* loopback of 850:30: ( ( '==' | '!=' ) instanceOfExpression )*";
+            return "()* loopback of 849:30: ( ( '==' | '!=' ) instanceOfExpression )*";
         }
     }
     static final String DFA140_eotS =
@@ -16973,21 +17129,21 @@
             this.transition = DFA140_transition;
         }
         public String getDescription() {
-            return "854:30: ( 'instanceof' type )?";
+            return "853:30: ( 'instanceof' type )?";
         }
     }
     static final String DFA141_eotS =
-        "\106\uffff";
+        "\112\uffff";
     static final String DFA141_eofS =
-        "\1\1\105\uffff";
+        "\1\1\111\uffff";
     static final String DFA141_minS =
-        "\1\31\26\uffff\2\4\2\uffff\1\0\52\uffff";
+        "\1\31\26\uffff\2\4\2\uffff\1\0\56\uffff";
     static final String DFA141_maxS =
-        "\1\152\26\uffff\2\164\2\uffff\1\0\52\uffff";
+        "\1\152\26\uffff\2\164\2\uffff\1\0\56\uffff";
     static final String DFA141_acceptS =
-        "\1\uffff\1\2\32\uffff\1\1\51\uffff";
+        "\1\uffff\1\2\32\uffff\1\1\55\uffff";
     static final String DFA141_specialS =
-        "\33\uffff\1\0\52\uffff}>";
+        "\33\uffff\1\0\56\uffff}>";
     static final String[] DFA141_transitionS = {
             "\1\1\7\uffff\1\27\1\1\1\30\1\1\1\uffff\1\1\3\uffff\1\1\1\uffff"+
             "\1\1\22\uffff\1\1\2\uffff\1\1\7\uffff\1\1\21\uffff\17\1",
@@ -17014,11 +17170,11 @@
             "",
             "",
             "\1\34\1\uffff\6\34\25\uffff\1\33\6\uffff\1\34\3\uffff\1\34"+
-            "\12\uffff\10\34\1\uffff\2\34\2\uffff\3\34\44\uffff\2\34\2\uffff"+
-            "\6\34",
+            "\12\uffff\10\34\1\uffff\2\34\2\uffff\3\34\21\uffff\2\34\21\uffff"+
+            "\2\34\2\uffff\6\34",
             "\1\34\1\uffff\6\34\25\uffff\1\34\1\uffff\1\1\4\uffff\1\34"+
-            "\3\uffff\1\34\12\uffff\10\34\1\uffff\2\34\2\uffff\3\34\44\uffff"+
-            "\2\34\2\uffff\6\34",
+            "\3\uffff\1\34\12\uffff\10\34\1\uffff\2\34\2\uffff\3\34\21\uffff"+
+            "\2\34\21\uffff\2\34\2\uffff\6\34",
             "",
             "",
             "\1\uffff",
@@ -17063,6 +17219,10 @@
             "",
             "",
             "",
+            "",
+            "",
+            "",
+            "",
             ""
     };
 
@@ -17096,7 +17256,7 @@
             this.transition = DFA141_transition;
         }
         public String getDescription() {
-            return "()* loopback of 858:25: ( relationalOp shiftExpression )*";
+            return "()* loopback of 857:25: ( relationalOp shiftExpression )*";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
@@ -17109,7 +17269,7 @@
                         int index141_27 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred210_Java()) ) {s = 28;}
+                        if ( (synpred209_Java()) ) {s = 28;}
 
                         else if ( (true) ) {s = 1;}
 
@@ -17126,24 +17286,25 @@
         }
     }
     static final String DFA142_eotS =
-        "\55\uffff";
+        "\61\uffff";
     static final String DFA142_eofS =
-        "\55\uffff";
+        "\61\uffff";
     static final String DFA142_minS =
-        "\1\41\2\4\52\uffff";
+        "\1\41\2\4\56\uffff";
     static final String DFA142_maxS =
-        "\1\43\2\164\52\uffff";
+        "\1\43\2\164\56\uffff";
     static final String DFA142_acceptS =
-        "\3\uffff\1\1\1\3\23\uffff\1\2\1\4\23\uffff";
+        "\3\uffff\1\1\1\3\25\uffff\1\2\1\4\25\uffff";
     static final String DFA142_specialS =
-        "\55\uffff}>";
+        "\61\uffff}>";
     static final String[] DFA142_transitionS = {
             "\1\1\1\uffff\1\2",
             "\1\4\1\uffff\6\4\25\uffff\1\4\6\uffff\1\4\3\uffff\1\3\12\uffff"+
-            "\10\4\1\uffff\2\4\2\uffff\3\4\44\uffff\2\4\2\uffff\6\4",
-            "\1\31\1\uffff\6\31\25\uffff\1\31\6\uffff\1\31\3\uffff\1\30"+
-            "\12\uffff\10\31\1\uffff\2\31\2\uffff\3\31\44\uffff\2\31\2\uffff"+
-            "\6\31",
+            "\10\4\1\uffff\2\4\2\uffff\3\4\21\uffff\2\4\21\uffff\2\4\2\uffff"+
+            "\6\4",
+            "\1\33\1\uffff\6\33\25\uffff\1\33\6\uffff\1\33\3\uffff\1\32"+
+            "\12\uffff\10\33\1\uffff\2\33\2\uffff\3\33\21\uffff\2\33\21\uffff"+
+            "\2\33\2\uffff\6\33",
             "",
             "",
             "",
@@ -17185,6 +17346,10 @@
             "",
             "",
             "",
+            "",
+            "",
+            "",
+            "",
             ""
     };
 
@@ -17218,29 +17383,30 @@
             this.transition = DFA142_transition;
         }
         public String getDescription() {
-            return "862:4: ( '<' '=' | '>' '=' | '<' | '>' )";
+            return "861:4: ( '<' '=' | '>' '=' | '<' | '>' )";
         }
     }
     static final String DFA143_eotS =
-        "\107\uffff";
+        "\113\uffff";
     static final String DFA143_eofS =
-        "\1\3\106\uffff";
+        "\1\3\112\uffff";
     static final String DFA143_minS =
-        "\1\31\2\4\31\uffff\1\0\24\uffff\1\0\25\uffff";
+        "\1\31\2\4\31\uffff\1\0\26\uffff\1\0\27\uffff";
     static final String DFA143_maxS =
-        "\1\152\2\164\31\uffff\1\0\24\uffff\1\0\25\uffff";
+        "\1\152\2\164\31\uffff\1\0\26\uffff\1\0\27\uffff";
     static final String DFA143_acceptS =
-        "\3\uffff\1\2\102\uffff\1\1";
+        "\3\uffff\1\2\106\uffff\1\1";
     static final String DFA143_specialS =
-        "\34\uffff\1\0\24\uffff\1\1\25\uffff}>";
+        "\34\uffff\1\0\26\uffff\1\1\27\uffff}>";
     static final String[] DFA143_transitionS = {
             "\1\3\7\uffff\1\1\1\3\1\2\1\3\1\uffff\1\3\3\uffff\1\3\1\uffff"+
             "\1\3\22\uffff\1\3\2\uffff\1\3\7\uffff\1\3\21\uffff\17\3",
             "\1\3\1\uffff\6\3\25\uffff\1\34\6\uffff\1\3\3\uffff\1\3\12"+
-            "\uffff\10\3\1\uffff\2\3\2\uffff\3\3\44\uffff\2\3\2\uffff\6\3",
-            "\1\3\1\uffff\6\3\25\uffff\1\3\1\uffff\1\61\4\uffff\1\3\3\uffff"+
-            "\1\3\12\uffff\10\3\1\uffff\2\3\2\uffff\3\3\44\uffff\2\3\2\uffff"+
-            "\6\3",
+            "\uffff\10\3\1\uffff\2\3\2\uffff\3\3\21\uffff\2\3\21\uffff\2"+
+            "\3\2\uffff\6\3",
+            "\1\3\1\uffff\6\3\25\uffff\1\3\1\uffff\1\63\4\uffff\1\3\3\uffff"+
+            "\1\3\12\uffff\10\3\1\uffff\2\3\2\uffff\3\3\21\uffff\2\3\21\uffff"+
+            "\2\3\2\uffff\6\3",
             "",
             "",
             "",
@@ -17287,6 +17453,8 @@
             "",
             "",
             "",
+            "",
+            "",
             "\1\uffff",
             "",
             "",
@@ -17308,6 +17476,8 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
@@ -17341,7 +17511,7 @@
             this.transition = DFA143_transition;
         }
         public String getDescription() {
-            return "()* loopback of 866:28: ( shiftOp additiveExpression )*";
+            return "()* loopback of 865:28: ( shiftOp additiveExpression )*";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
@@ -17354,7 +17524,7 @@
                         int index143_28 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred214_Java()) ) {s = 70;}
+                        if ( (synpred213_Java()) ) {s = 74;}
 
                         else if ( (true) ) {s = 3;}
 
@@ -17363,18 +17533,18 @@
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA143_49 = input.LA(1);
+                        int LA143_51 = input.LA(1);
 
                          
-                        int index143_49 = input.index();
+                        int index143_51 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred214_Java()) ) {s = 70;}
+                        if ( (synpred213_Java()) ) {s = 74;}
 
                         else if ( (true) ) {s = 3;}
 
                          
-                        input.seek(index143_49);
+                        input.seek(index143_51);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -17459,7 +17629,7 @@
             this.transition = DFA145_transition;
         }
         public String getDescription() {
-            return "()* loopback of 876:34: ( ( '+' | '-' ) multiplicativeExpression )*";
+            return "()* loopback of 875:34: ( ( '+' | '-' ) multiplicativeExpression )*";
         }
     }
     static final String DFA146_eotS =
@@ -17537,24 +17707,25 @@
             this.transition = DFA146_transition;
         }
         public String getDescription() {
-            return "()* loopback of 880:25: ( ( '*' | '/' | '%' ) unaryExpression )*";
+            return "()* loopback of 879:25: ( ( '*' | '/' | '%' ) unaryExpression )*";
         }
     }
     static final String DFA147_eotS =
-        "\25\uffff";
+        "\27\uffff";
     static final String DFA147_eofS =
-        "\25\uffff";
+        "\27\uffff";
     static final String DFA147_minS =
-        "\1\4\24\uffff";
+        "\1\4\26\uffff";
     static final String DFA147_maxS =
-        "\1\164\24\uffff";
+        "\1\164\26\uffff";
     static final String DFA147_acceptS =
-        "\1\uffff\1\1\1\2\1\3\1\4\1\5\17\uffff";
+        "\1\uffff\1\1\1\2\1\3\1\4\1\5\21\uffff";
     static final String DFA147_specialS =
-        "\25\uffff}>";
+        "\27\uffff}>";
     static final String[] DFA147_transitionS = {
             "\1\5\1\uffff\6\5\25\uffff\1\5\6\uffff\1\5\16\uffff\10\5\1\uffff"+
-            "\2\5\2\uffff\3\5\44\uffff\1\1\1\2\2\uffff\1\3\1\4\4\5",
+            "\2\5\2\uffff\3\5\21\uffff\2\5\21\uffff\1\1\1\2\2\uffff\1\3\1"+
+            "\4\4\5",
             "",
             "",
             "",
@@ -17574,6 +17745,8 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
@@ -17607,30 +17780,31 @@
             this.transition = DFA147_transition;
         }
         public String getDescription() {
-            return "883:1: unaryExpression : ( '+' unaryExpression | '-' unaryExpression | '++' primary | '--' primary | unaryExpressionNotPlusMinus );";
+            return "882:1: unaryExpression : ( '+' unaryExpression | '-' unaryExpression | '++' primary | '--' primary | unaryExpressionNotPlusMinus );";
         }
     }
     static final String DFA150_eotS =
-        "\46\uffff";
+        "\52\uffff";
     static final String DFA150_eofS =
-        "\46\uffff";
+        "\52\uffff";
     static final String DFA150_minS =
-        "\1\4\2\uffff\1\4\15\uffff\24\0\1\uffff";
+        "\1\4\2\uffff\1\4\17\uffff\26\0\1\uffff";
     static final String DFA150_maxS =
-        "\1\164\2\uffff\1\164\15\uffff\24\0\1\uffff";
+        "\1\164\2\uffff\1\164\17\uffff\26\0\1\uffff";
     static final String DFA150_acceptS =
-        "\1\uffff\1\1\1\2\1\uffff\1\4\40\uffff\1\3";
+        "\1\uffff\1\1\1\2\1\uffff\1\4\44\uffff\1\3";
     static final String DFA150_specialS =
-        "\21\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+
-        "\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\uffff}>";
+        "\23\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+
+        "\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\uffff}>";
     static final String[] DFA150_transitionS = {
             "\1\4\1\uffff\6\4\25\uffff\1\4\6\uffff\1\4\16\uffff\10\4\1\uffff"+
-            "\1\4\1\3\2\uffff\3\4\52\uffff\1\1\1\2\2\4",
+            "\1\4\1\3\2\uffff\3\4\21\uffff\2\4\27\uffff\1\1\1\2\2\4",
             "",
             "",
-            "\1\43\1\uffff\1\35\1\36\1\37\3\34\25\uffff\1\31\6\uffff\1"+
-            "\44\16\uffff\10\21\1\uffff\1\33\1\30\2\uffff\1\41\2\40\44\uffff"+
-            "\1\22\1\23\2\uffff\1\24\1\25\1\26\1\27\1\32\1\42",
+            "\1\46\1\uffff\1\40\1\41\1\42\3\37\25\uffff\1\32\6\uffff\1"+
+            "\50\16\uffff\10\47\1\uffff\1\34\1\31\2\uffff\1\44\2\43\21\uffff"+
+            "\1\35\1\36\21\uffff\1\23\1\24\2\uffff\1\25\1\26\1\27\1\30\1"+
+            "\33\1\45",
             "",
             "",
             "",
@@ -17644,6 +17818,8 @@
             "",
             "",
             "",
+            "",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17664,6 +17840,8 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
             ""
     };
 
@@ -17697,50 +17875,20 @@
             this.transition = DFA150_transition;
         }
         public String getDescription() {
-            return "891:1: unaryExpressionNotPlusMinus : ( '~' unaryExpression | '!' unaryExpression | castExpression | primary ( selector )* ( '++' | '--' )? );";
+            return "890:1: unaryExpressionNotPlusMinus : ( '~' unaryExpression | '!' unaryExpression | castExpression | primary ( selector )* ( '++' | '--' )? );";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA150_17 = input.LA(1);
-
-                         
-                        int index150_17 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
-
-                        else if ( (true) ) {s = 4;}
-
-                         
-                        input.seek(index150_17);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA150_18 = input.LA(1);
-
-                         
-                        int index150_18 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
-
-                        else if ( (true) ) {s = 4;}
-
-                         
-                        input.seek(index150_18);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
                         int LA150_19 = input.LA(1);
 
                          
                         int index150_19 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17748,14 +17896,14 @@
                         input.seek(index150_19);
                         if ( s>=0 ) return s;
                         break;
-                    case 3 : 
+                    case 1 : 
                         int LA150_20 = input.LA(1);
 
                          
                         int index150_20 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17763,14 +17911,14 @@
                         input.seek(index150_20);
                         if ( s>=0 ) return s;
                         break;
-                    case 4 : 
+                    case 2 : 
                         int LA150_21 = input.LA(1);
 
                          
                         int index150_21 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17778,14 +17926,14 @@
                         input.seek(index150_21);
                         if ( s>=0 ) return s;
                         break;
-                    case 5 : 
+                    case 3 : 
                         int LA150_22 = input.LA(1);
 
                          
                         int index150_22 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17793,14 +17941,14 @@
                         input.seek(index150_22);
                         if ( s>=0 ) return s;
                         break;
-                    case 6 : 
+                    case 4 : 
                         int LA150_23 = input.LA(1);
 
                          
                         int index150_23 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17808,14 +17956,14 @@
                         input.seek(index150_23);
                         if ( s>=0 ) return s;
                         break;
-                    case 7 : 
+                    case 5 : 
                         int LA150_24 = input.LA(1);
 
                          
                         int index150_24 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17823,14 +17971,14 @@
                         input.seek(index150_24);
                         if ( s>=0 ) return s;
                         break;
-                    case 8 : 
+                    case 6 : 
                         int LA150_25 = input.LA(1);
 
                          
                         int index150_25 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17838,14 +17986,14 @@
                         input.seek(index150_25);
                         if ( s>=0 ) return s;
                         break;
-                    case 9 : 
+                    case 7 : 
                         int LA150_26 = input.LA(1);
 
                          
                         int index150_26 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17853,14 +18001,14 @@
                         input.seek(index150_26);
                         if ( s>=0 ) return s;
                         break;
-                    case 10 : 
+                    case 8 : 
                         int LA150_27 = input.LA(1);
 
                          
                         int index150_27 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17868,14 +18016,14 @@
                         input.seek(index150_27);
                         if ( s>=0 ) return s;
                         break;
-                    case 11 : 
+                    case 9 : 
                         int LA150_28 = input.LA(1);
 
                          
                         int index150_28 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17883,14 +18031,14 @@
                         input.seek(index150_28);
                         if ( s>=0 ) return s;
                         break;
-                    case 12 : 
+                    case 10 : 
                         int LA150_29 = input.LA(1);
 
                          
                         int index150_29 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17898,14 +18046,14 @@
                         input.seek(index150_29);
                         if ( s>=0 ) return s;
                         break;
-                    case 13 : 
+                    case 11 : 
                         int LA150_30 = input.LA(1);
 
                          
                         int index150_30 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17913,14 +18061,14 @@
                         input.seek(index150_30);
                         if ( s>=0 ) return s;
                         break;
-                    case 14 : 
+                    case 12 : 
                         int LA150_31 = input.LA(1);
 
                          
                         int index150_31 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17928,14 +18076,14 @@
                         input.seek(index150_31);
                         if ( s>=0 ) return s;
                         break;
-                    case 15 : 
+                    case 13 : 
                         int LA150_32 = input.LA(1);
 
                          
                         int index150_32 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17943,14 +18091,14 @@
                         input.seek(index150_32);
                         if ( s>=0 ) return s;
                         break;
-                    case 16 : 
+                    case 14 : 
                         int LA150_33 = input.LA(1);
 
                          
                         int index150_33 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17958,14 +18106,14 @@
                         input.seek(index150_33);
                         if ( s>=0 ) return s;
                         break;
-                    case 17 : 
+                    case 15 : 
                         int LA150_34 = input.LA(1);
 
                          
                         int index150_34 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17973,14 +18121,14 @@
                         input.seek(index150_34);
                         if ( s>=0 ) return s;
                         break;
-                    case 18 : 
+                    case 16 : 
                         int LA150_35 = input.LA(1);
 
                          
                         int index150_35 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -17988,14 +18136,14 @@
                         input.seek(index150_35);
                         if ( s>=0 ) return s;
                         break;
-                    case 19 : 
+                    case 17 : 
                         int LA150_36 = input.LA(1);
 
                          
                         int index150_36 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred228_Java()) ) {s = 37;}
+                        if ( (synpred227_Java()) ) {s = 41;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18003,6 +18151,66 @@
                         input.seek(index150_36);
                         if ( s>=0 ) return s;
                         break;
+                    case 18 : 
+                        int LA150_37 = input.LA(1);
+
+                         
+                        int index150_37 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred227_Java()) ) {s = 41;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index150_37);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 19 : 
+                        int LA150_38 = input.LA(1);
+
+                         
+                        int index150_38 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred227_Java()) ) {s = 41;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index150_38);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 20 : 
+                        int LA150_39 = input.LA(1);
+
+                         
+                        int index150_39 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred227_Java()) ) {s = 41;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index150_39);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 21 : 
+                        int LA150_40 = input.LA(1);
+
+                         
+                        int index150_40 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred227_Java()) ) {s = 41;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index150_40);
+                        if ( s>=0 ) return s;
+                        break;
             }
             if (state.backtracking>0) {state.failed=true; return -1;}
             NoViableAltException nvae =
@@ -18090,7 +18298,7 @@
             this.transition = DFA148_transition;
         }
         public String getDescription() {
-            return "()* loopback of 895:17: ( selector )*";
+            return "()* loopback of 894:17: ( selector )*";
         }
     }
     static final String DFA149_eotS =
@@ -18169,25 +18377,26 @@
             this.transition = DFA149_transition;
         }
         public String getDescription() {
-            return "895:27: ( '++' | '--' )?";
+            return "894:27: ( '++' | '--' )?";
         }
     }
     static final String DFA152_eotS =
-        "\27\uffff";
+        "\31\uffff";
     static final String DFA152_eofS =
-        "\27\uffff";
+        "\31\uffff";
     static final String DFA152_minS =
-        "\1\101\1\4\1\0\24\uffff";
+        "\1\101\1\4\1\uffff\1\0\25\uffff";
     static final String DFA152_maxS =
-        "\1\101\1\164\1\0\24\uffff";
+        "\1\101\1\164\1\uffff\1\0\25\uffff";
     static final String DFA152_acceptS =
-        "\3\uffff\1\2\22\uffff\1\1";
+        "\2\uffff\1\2\25\uffff\1\1";
     static final String DFA152_specialS =
-        "\2\uffff\1\0\24\uffff}>";
+        "\3\uffff\1\0\25\uffff}>";
     static final String[] DFA152_transitionS = {
             "\1\1",
-            "\1\3\1\uffff\6\3\25\uffff\1\3\6\uffff\1\3\16\uffff\10\2\1"+
-            "\uffff\2\3\2\uffff\3\3\44\uffff\2\3\2\uffff\6\3",
+            "\1\2\1\uffff\6\2\25\uffff\1\2\6\uffff\1\2\16\uffff\10\3\1"+
+            "\uffff\2\2\2\uffff\3\2\21\uffff\2\2\21\uffff\2\2\2\uffff\6\2",
+            "",
             "\1\uffff",
             "",
             "",
@@ -18208,6 +18417,7 @@
             "",
             "",
             "",
+            "",
             ""
     };
 
@@ -18241,25 +18451,25 @@
             this.transition = DFA152_transition;
         }
         public String getDescription() {
-            return "898:1: castExpression : ( '(' primitiveType ')' unaryExpression | '(' ( type | expression ) ')' unaryExpressionNotPlusMinus );";
+            return "897:1: castExpression : ( '(' primitiveType ')' unaryExpression | '(' ( type | expression ) ')' unaryExpressionNotPlusMinus );";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA152_2 = input.LA(1);
+                        int LA152_3 = input.LA(1);
 
                          
-                        int index152_2 = input.index();
+                        int index152_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred232_Java()) ) {s = 22;}
+                        if ( (synpred231_Java()) ) {s = 24;}
 
-                        else if ( (true) ) {s = 3;}
+                        else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index152_2);
+                        input.seek(index152_3);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -18271,22 +18481,22 @@
         }
     }
     static final String DFA151_eotS =
-        "\63\uffff";
+        "\65\uffff";
     static final String DFA151_eofS =
-        "\63\uffff";
+        "\65\uffff";
     static final String DFA151_minS =
-        "\1\4\1\0\1\34\55\uffff\1\0\2\uffff";
+        "\1\4\1\0\1\34\57\uffff\1\0\2\uffff";
     static final String DFA151_maxS =
-        "\1\164\1\0\1\102\55\uffff\1\0\2\uffff";
+        "\1\164\1\0\1\102\57\uffff\1\0\2\uffff";
     static final String DFA151_acceptS =
-        "\3\uffff\1\2\53\uffff\1\1\3\uffff";
+        "\3\uffff\1\2\55\uffff\1\1\3\uffff";
     static final String DFA151_specialS =
-        "\1\uffff\1\0\56\uffff\1\1\2\uffff}>";
+        "\1\uffff\1\0\60\uffff\1\1\2\uffff}>";
     static final String[] DFA151_transitionS = {
             "\1\1\1\uffff\6\3\25\uffff\1\3\6\uffff\1\3\16\uffff\10\2\1\uffff"+
-            "\2\3\2\uffff\3\3\44\uffff\2\3\2\uffff\6\3",
+            "\2\3\2\uffff\3\3\21\uffff\2\3\21\uffff\2\3\2\uffff\6\3",
             "\1\uffff",
-            "\1\3\14\uffff\1\60\30\uffff\1\57",
+            "\1\3\14\uffff\1\62\30\uffff\1\61",
             "",
             "",
             "",
@@ -18332,6 +18542,8 @@
             "",
             "",
             "",
+            "",
+            "",
             "\1\uffff",
             "",
             ""
@@ -18367,7 +18579,7 @@
             this.transition = DFA151_transition;
         }
         public String getDescription() {
-            return "900:12: ( type | expression )";
+            return "899:12: ( type | expression )";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
@@ -18380,7 +18592,7 @@
                         int index151_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred233_Java()) ) {s = 47;}
+                        if ( (synpred232_Java()) ) {s = 49;}
 
                         else if ( (true) ) {s = 3;}
 
@@ -18389,18 +18601,18 @@
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA151_48 = input.LA(1);
+                        int LA151_50 = input.LA(1);
 
                          
-                        int index151_48 = input.index();
+                        int index151_50 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred233_Java()) ) {s = 47;}
+                        if ( (synpred232_Java()) ) {s = 49;}
 
                         else if ( (true) ) {s = 3;}
 
                          
-                        input.seek(index151_48);
+                        input.seek(index151_50);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -18411,21 +18623,22 @@
             throw nvae;
         }
     }
-    static final String DFA159_eotS =
-        "\17\uffff";
-    static final String DFA159_eofS =
-        "\17\uffff";
-    static final String DFA159_minS =
-        "\1\4\16\uffff";
-    static final String DFA159_maxS =
-        "\1\164\16\uffff";
-    static final String DFA159_acceptS =
-        "\1\uffff\1\1\1\2\1\3\1\4\1\5\5\uffff\1\6\1\7\1\10\1\11";
-    static final String DFA159_specialS =
-        "\17\uffff}>";
-    static final String[] DFA159_transitionS = {
-            "\1\14\1\uffff\6\5\25\uffff\1\2\6\uffff\1\16\16\uffff\10\15"+
-            "\1\uffff\1\4\1\1\2\uffff\3\5\54\uffff\1\3\1\13",
+    static final String DFA161_eotS =
+        "\21\uffff";
+    static final String DFA161_eofS =
+        "\21\uffff";
+    static final String DFA161_minS =
+        "\1\4\20\uffff";
+    static final String DFA161_maxS =
+        "\1\164\20\uffff";
+    static final String DFA161_acceptS =
+        "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\uffff\1\6\5\uffff\1\7\1\10\1\11"+
+        "\1\12";
+    static final String DFA161_specialS =
+        "\21\uffff}>";
+    static final String[] DFA161_transitionS = {
+            "\1\16\1\uffff\6\7\25\uffff\1\2\6\uffff\1\20\16\uffff\10\17"+
+            "\1\uffff\1\4\1\1\2\uffff\3\7\21\uffff\2\5\31\uffff\1\3\1\15",
             "",
             "",
             "",
@@ -18439,40 +18652,42 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
-    static final short[] DFA159_eot = DFA.unpackEncodedString(DFA159_eotS);
-    static final short[] DFA159_eof = DFA.unpackEncodedString(DFA159_eofS);
-    static final char[] DFA159_min = DFA.unpackEncodedStringToUnsignedChars(DFA159_minS);
-    static final char[] DFA159_max = DFA.unpackEncodedStringToUnsignedChars(DFA159_maxS);
-    static final short[] DFA159_accept = DFA.unpackEncodedString(DFA159_acceptS);
-    static final short[] DFA159_special = DFA.unpackEncodedString(DFA159_specialS);
-    static final short[][] DFA159_transition;
+    static final short[] DFA161_eot = DFA.unpackEncodedString(DFA161_eotS);
+    static final short[] DFA161_eof = DFA.unpackEncodedString(DFA161_eofS);
+    static final char[] DFA161_min = DFA.unpackEncodedStringToUnsignedChars(DFA161_minS);
+    static final char[] DFA161_max = DFA.unpackEncodedStringToUnsignedChars(DFA161_maxS);
+    static final short[] DFA161_accept = DFA.unpackEncodedString(DFA161_acceptS);
+    static final short[] DFA161_special = DFA.unpackEncodedString(DFA161_specialS);
+    static final short[][] DFA161_transition;
 
     static {
-        int numStates = DFA159_transitionS.length;
-        DFA159_transition = new short[numStates][];
+        int numStates = DFA161_transitionS.length;
+        DFA161_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA159_transition[i] = DFA.unpackEncodedString(DFA159_transitionS[i]);
+            DFA161_transition[i] = DFA.unpackEncodedString(DFA161_transitionS[i]);
         }
     }
 
-    class DFA159 extends DFA {
+    class DFA161 extends DFA {
 
-        public DFA159(BaseRecognizer recognizer) {
+        public DFA161(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 159;
-            this.eot = DFA159_eot;
-            this.eof = DFA159_eof;
-            this.min = DFA159_min;
-            this.max = DFA159_max;
-            this.accept = DFA159_accept;
-            this.special = DFA159_special;
-            this.transition = DFA159_transition;
+            this.decisionNumber = 161;
+            this.eot = DFA161_eot;
+            this.eof = DFA161_eof;
+            this.min = DFA161_min;
+            this.max = DFA161_max;
+            this.accept = DFA161_accept;
+            this.special = DFA161_special;
+            this.transition = DFA161_transition;
         }
         public String getDescription() {
-            return "903:1: primary : ( parExpression | nonWildcardTypeArguments ( explicitGenericInvocationSuffix | 'this' arguments ) | 'this' ( '.' Identifier )* ( identifierSuffix )? | 'super' superSuffix | literal | 'new' creator | i= Identifier ( '.' Identifier )* ( identifierSuffix )? | primitiveType ( '[' ']' )* '.' 'class' | 'void' '.' 'class' );";
+            return "902:1: primary : ( parExpression | nonWildcardTypeArguments ( explicitGenericInvocationSuffix | 'this' arguments ) | 'this' ( '.' Identifier )* ( identifierSuffix )? | 'super' superSuffix | epStatement ( '.' Identifier )* ( identifierSuffix )? | literal | 'new' creator | i= Identifier ( '.' Identifier )* ( identifierSuffix )? | primitiveType ( '[' ']' )* '.' 'class' | 'void' '.' 'class' );";
         }
     }
     static final String DFA154_eotS =
@@ -18562,7 +18777,7 @@
             this.transition = DFA154_transition;
         }
         public String getDescription() {
-            return "()* loopback of 907:16: ( '.' Identifier )*";
+            return "()* loopback of 906:16: ( '.' Identifier )*";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
@@ -18575,7 +18790,7 @@
                         int index154_37 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred237_Java()) ) {s = 39;}
+                        if ( (synpred236_Java()) ) {s = 39;}
 
                         else if ( (true) ) {s = 1;}
 
@@ -18592,30 +18807,30 @@
         }
     }
     static final String DFA155_eotS =
-        "\74\uffff";
+        "\76\uffff";
     static final String DFA155_eofS =
-        "\1\4\73\uffff";
+        "\1\4\75\uffff";
     static final String DFA155_minS =
-        "\1\31\1\4\1\uffff\1\4\36\uffff\24\0\1\uffff\3\0\2\uffff";
+        "\1\31\1\4\1\uffff\1\4\36\uffff\26\0\1\uffff\3\0\2\uffff";
     static final String DFA155_maxS =
-        "\1\160\1\164\1\uffff\1\164\36\uffff\24\0\1\uffff\3\0\2\uffff";
+        "\1\160\1\164\1\uffff\1\164\36\uffff\26\0\1\uffff\3\0\2\uffff";
     static final String DFA155_acceptS =
-        "\2\uffff\1\1\1\uffff\1\2\67\uffff";
+        "\2\uffff\1\1\1\uffff\1\2\71\uffff";
     static final String DFA155_specialS =
         "\42\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+
-        "\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\uffff\1\24\1\25\1\26\2"+
-        "\uffff}>";
+        "\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\uffff\1\26\1"+
+        "\27\1\30\2\uffff}>";
     static final String[] DFA155_transitionS = {
             "\1\4\2\uffff\1\3\1\4\3\uffff\4\4\1\uffff\1\4\2\uffff\1\1\1"+
             "\4\1\uffff\1\4\22\uffff\1\4\1\uffff\1\2\1\4\7\uffff\1\4\21\uffff"+
             "\25\4",
-            "\1\63\1\uffff\1\55\1\56\1\57\3\54\25\uffff\1\51\6\uffff\1"+
-            "\65\1\uffff\1\2\14\uffff\10\64\1\uffff\1\53\1\50\2\uffff\1\61"+
-            "\2\60\44\uffff\1\42\1\43\2\uffff\1\44\1\45\1\46\1\47\1\52\1"+
-            "\62",
+            "\1\65\1\uffff\1\57\1\60\1\61\3\56\25\uffff\1\51\6\uffff\1"+
+            "\67\1\uffff\1\2\14\uffff\10\66\1\uffff\1\53\1\50\2\uffff\1\63"+
+            "\2\62\21\uffff\1\54\1\55\21\uffff\1\42\1\43\2\uffff\1\44\1\45"+
+            "\1\46\1\47\1\52\1\64",
             "",
-            "\1\4\31\uffff\1\2\2\uffff\1\2\36\uffff\1\70\62\uffff\1\67"+
-            "\1\71",
+            "\1\4\31\uffff\1\2\2\uffff\1\2\36\uffff\1\72\62\uffff\1\71"+
+            "\1\73",
             "",
             "",
             "",
@@ -18666,6 +18881,8 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
             "",
             "\1\uffff",
             "\1\uffff",
@@ -18704,7 +18921,7 @@
             this.transition = DFA155_transition;
         }
         public String getDescription() {
-            return "907:34: ( identifierSuffix )?";
+            return "906:34: ( identifierSuffix )?";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
@@ -18717,7 +18934,7 @@
                         int index155_34 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18732,7 +18949,7 @@
                         int index155_35 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18747,7 +18964,7 @@
                         int index155_36 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18762,7 +18979,7 @@
                         int index155_37 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18777,7 +18994,7 @@
                         int index155_38 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18792,7 +19009,7 @@
                         int index155_39 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18807,7 +19024,7 @@
                         int index155_40 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18822,7 +19039,7 @@
                         int index155_41 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18837,7 +19054,7 @@
                         int index155_42 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18852,7 +19069,7 @@
                         int index155_43 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18867,7 +19084,7 @@
                         int index155_44 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18882,7 +19099,7 @@
                         int index155_45 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18897,7 +19114,7 @@
                         int index155_46 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18912,7 +19129,7 @@
                         int index155_47 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18927,7 +19144,7 @@
                         int index155_48 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18942,7 +19159,7 @@
                         int index155_49 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18957,7 +19174,7 @@
                         int index155_50 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18972,7 +19189,7 @@
                         int index155_51 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -18987,7 +19204,7 @@
                         int index155_52 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19002,7 +19219,7 @@
                         int index155_53 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19011,33 +19228,33 @@
                         if ( s>=0 ) return s;
                         break;
                     case 20 : 
-                        int LA155_55 = input.LA(1);
+                        int LA155_54 = input.LA(1);
 
                          
-                        int index155_55 = input.index();
+                        int index155_54 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
                          
-                        input.seek(index155_55);
+                        input.seek(index155_54);
                         if ( s>=0 ) return s;
                         break;
                     case 21 : 
-                        int LA155_56 = input.LA(1);
+                        int LA155_55 = input.LA(1);
 
                          
-                        int index155_56 = input.index();
+                        int index155_55 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
                          
-                        input.seek(index155_56);
+                        input.seek(index155_55);
                         if ( s>=0 ) return s;
                         break;
                     case 22 : 
@@ -19047,7 +19264,7 @@
                         int index155_57 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred238_Java()) ) {s = 2;}
+                        if ( (synpred237_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19055,6 +19272,36 @@
                         input.seek(index155_57);
                         if ( s>=0 ) return s;
                         break;
+                    case 23 : 
+                        int LA155_58 = input.LA(1);
+
+                         
+                        int index155_58 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred237_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index155_58);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 24 : 
+                        int LA155_59 = input.LA(1);
+
+                         
+                        int index155_59 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred237_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index155_59);
+                        if ( s>=0 ) return s;
+                        break;
             }
             if (state.backtracking>0) {state.failed=true; return -1;}
             NoViableAltException nvae =
@@ -19150,7 +19397,7 @@
             this.transition = DFA156_transition;
         }
         public String getDescription() {
-            return "()* loopback of 911:126: ( '.' Identifier )*";
+            return "()* loopback of 908:21: ( '.' Identifier )*";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
@@ -19163,7 +19410,7 @@
                         int index156_37 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred243_Java()) ) {s = 39;}
+                        if ( (synpred240_Java()) ) {s = 39;}
 
                         else if ( (true) ) {s = 1;}
 
@@ -19180,30 +19427,30 @@
         }
     }
     static final String DFA157_eotS =
-        "\74\uffff";
+        "\76\uffff";
     static final String DFA157_eofS =
-        "\1\4\73\uffff";
+        "\1\4\75\uffff";
     static final String DFA157_minS =
-        "\1\31\1\4\1\uffff\1\4\36\uffff\24\0\1\uffff\3\0\2\uffff";
+        "\1\31\1\4\1\uffff\1\4\36\uffff\26\0\1\uffff\3\0\2\uffff";
     static final String DFA157_maxS =
-        "\1\160\1\164\1\uffff\1\164\36\uffff\24\0\1\uffff\3\0\2\uffff";
+        "\1\160\1\164\1\uffff\1\164\36\uffff\26\0\1\uffff\3\0\2\uffff";
     static final String DFA157_acceptS =
-        "\2\uffff\1\1\1\uffff\1\2\67\uffff";
+        "\2\uffff\1\1\1\uffff\1\2\71\uffff";
     static final String DFA157_specialS =
         "\42\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+
-        "\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\uffff\1\24\1\25\1\26\2"+
-        "\uffff}>";
+        "\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\uffff\1\26\1"+
+        "\27\1\30\2\uffff}>";
     static final String[] DFA157_transitionS = {
             "\1\4\2\uffff\1\3\1\4\3\uffff\4\4\1\uffff\1\4\2\uffff\1\1\1"+
             "\4\1\uffff\1\4\22\uffff\1\4\1\uffff\1\2\1\4\7\uffff\1\4\21\uffff"+
             "\25\4",
-            "\1\63\1\uffff\1\55\1\56\1\57\3\54\25\uffff\1\51\6\uffff\1"+
-            "\65\1\uffff\1\2\14\uffff\10\64\1\uffff\1\53\1\50\2\uffff\1\61"+
-            "\2\60\44\uffff\1\42\1\43\2\uffff\1\44\1\45\1\46\1\47\1\52\1"+
-            "\62",
+            "\1\65\1\uffff\1\57\1\60\1\61\3\56\25\uffff\1\51\6\uffff\1"+
+            "\67\1\uffff\1\2\14\uffff\10\66\1\uffff\1\53\1\50\2\uffff\1\63"+
+            "\2\62\21\uffff\1\54\1\55\21\uffff\1\42\1\43\2\uffff\1\44\1\45"+
+            "\1\46\1\47\1\52\1\64",
             "",
-            "\1\4\31\uffff\1\2\2\uffff\1\2\36\uffff\1\70\62\uffff\1\67"+
-            "\1\71",
+            "\1\4\31\uffff\1\2\2\uffff\1\2\36\uffff\1\72\62\uffff\1\71"+
+            "\1\73",
             "",
             "",
             "",
@@ -19254,6 +19501,8 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
             "",
             "\1\uffff",
             "\1\uffff",
@@ -19292,7 +19541,7 @@
             this.transition = DFA157_transition;
         }
         public String getDescription() {
-            return "911:144: ( identifierSuffix )?";
+            return "908:39: ( identifierSuffix )?";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             TokenStream input = (TokenStream)_input;
@@ -19305,7 +19554,7 @@
                         int index157_34 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19320,7 +19569,7 @@
                         int index157_35 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19335,7 +19584,7 @@
                         int index157_36 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19350,7 +19599,7 @@
                         int index157_37 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19365,7 +19614,7 @@
                         int index157_38 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19380,7 +19629,7 @@
                         int index157_39 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19395,7 +19644,7 @@
                         int index157_40 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19410,7 +19659,7 @@
                         int index157_41 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19425,7 +19674,7 @@
                         int index157_42 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19440,7 +19689,7 @@
                         int index157_43 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19455,7 +19704,7 @@
                         int index157_44 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19470,7 +19719,7 @@
                         int index157_45 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19485,7 +19734,7 @@
                         int index157_46 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19500,7 +19749,7 @@
                         int index157_47 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19515,7 +19764,7 @@
                         int index157_48 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19530,7 +19779,7 @@
                         int index157_49 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19545,7 +19794,7 @@
                         int index157_50 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19560,7 +19809,7 @@
                         int index157_51 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19575,7 +19824,7 @@
                         int index157_52 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19590,7 +19839,7 @@
                         int index157_53 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19599,33 +19848,33 @@
                         if ( s>=0 ) return s;
                         break;
                     case 20 : 
-                        int LA157_55 = input.LA(1);
+                        int LA157_54 = input.LA(1);
 
                          
-                        int index157_55 = input.index();
+                        int index157_54 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
                          
-                        input.seek(index157_55);
+                        input.seek(index157_54);
                         if ( s>=0 ) return s;
                         break;
                     case 21 : 
-                        int LA157_56 = input.LA(1);
+                        int LA157_55 = input.LA(1);
 
                          
-                        int index157_56 = input.index();
+                        int index157_55 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
                          
-                        input.seek(index157_56);
+                        input.seek(index157_55);
                         if ( s>=0 ) return s;
                         break;
                     case 22 : 
@@ -19635,7 +19884,7 @@
                         int index157_57 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred244_Java()) ) {s = 2;}
+                        if ( (synpred241_Java()) ) {s = 2;}
 
                         else if ( (true) ) {s = 4;}
 
@@ -19643,6 +19892,36 @@
                         input.seek(index157_57);
                         if ( s>=0 ) return s;
                         break;
+                    case 23 : 
+                        int LA157_58 = input.LA(1);
+
+                         
+                        int index157_58 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred241_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index157_58);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 24 : 
+                        int LA157_59 = input.LA(1);
+
+                         
+                        int index157_59 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred241_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index157_59);
+                        if ( s>=0 ) return s;
+                        break;
             }
             if (state.backtracking>0) {state.failed=true; return -1;}
             NoViableAltException nvae =
@@ -19651,24 +19930,645 @@
             throw nvae;
         }
     }
-    static final String DFA163_eotS =
-        "\36\uffff";
-    static final String DFA163_eofS =
-        "\36\uffff";
-    static final String DFA163_minS =
-        "\1\34\1\4\1\uffff\1\36\32\uffff";
-    static final String DFA163_maxS =
-        "\1\101\1\164\1\uffff\1\164\32\uffff";
-    static final String DFA163_acceptS =
-        "\2\uffff\1\3\1\uffff\1\1\1\2\23\uffff\1\4\1\6\1\7\1\10\1\5";
-    static final String DFA163_specialS =
-        "\36\uffff}>";
-    static final String[] DFA163_transitionS = {
+    static final String DFA158_eotS =
+        "\50\uffff";
+    static final String DFA158_eofS =
+        "\1\1\47\uffff";
+    static final String DFA158_minS =
+        "\1\31\2\uffff\1\4\41\uffff\1\0\2\uffff";
+    static final String DFA158_maxS =
+        "\1\160\2\uffff\1\164\41\uffff\1\0\2\uffff";
+    static final String DFA158_acceptS =
+        "\1\uffff\1\2\45\uffff\1\1";
+    static final String DFA158_specialS =
+        "\45\uffff\1\0\2\uffff}>";
+    static final String[] DFA158_transitionS = {
+            "\1\1\2\uffff\1\3\1\1\3\uffff\4\1\1\uffff\1\1\2\uffff\2\1\1"+
+            "\uffff\1\1\22\uffff\1\1\1\uffff\2\1\7\uffff\1\1\21\uffff\25"+
+            "\1",
+            "",
+            "",
+            "\1\45\31\uffff\1\1\2\uffff\1\1\36\uffff\1\1\62\uffff\2\1",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\uffff",
+            "",
+            ""
+    };
+
+    static final short[] DFA158_eot = DFA.unpackEncodedString(DFA158_eotS);
+    static final short[] DFA158_eof = DFA.unpackEncodedString(DFA158_eofS);
+    static final char[] DFA158_min = DFA.unpackEncodedStringToUnsignedChars(DFA158_minS);
+    static final char[] DFA158_max = DFA.unpackEncodedStringToUnsignedChars(DFA158_maxS);
+    static final short[] DFA158_accept = DFA.unpackEncodedString(DFA158_acceptS);
+    static final short[] DFA158_special = DFA.unpackEncodedString(DFA158_specialS);
+    static final short[][] DFA158_transition;
+
+    static {
+        int numStates = DFA158_transitionS.length;
+        DFA158_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA158_transition[i] = DFA.unpackEncodedString(DFA158_transitionS[i]);
+        }
+    }
+
+    class DFA158 extends DFA {
+
+        public DFA158(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 158;
+            this.eot = DFA158_eot;
+            this.eof = DFA158_eof;
+            this.min = DFA158_min;
+            this.max = DFA158_max;
+            this.accept = DFA158_accept;
+            this.special = DFA158_special;
+            this.transition = DFA158_transition;
+        }
+        public String getDescription() {
+            return "()* loopback of 911:126: ( '.' Identifier )*";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA158_37 = input.LA(1);
+
+                         
+                        int index158_37 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred245_Java()) ) {s = 39;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index158_37);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 158, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA159_eotS =
+        "\76\uffff";
+    static final String DFA159_eofS =
+        "\1\4\75\uffff";
+    static final String DFA159_minS =
+        "\1\31\1\4\1\uffff\1\4\36\uffff\26\0\1\uffff\3\0\2\uffff";
+    static final String DFA159_maxS =
+        "\1\160\1\164\1\uffff\1\164\36\uffff\26\0\1\uffff\3\0\2\uffff";
+    static final String DFA159_acceptS =
+        "\2\uffff\1\1\1\uffff\1\2\71\uffff";
+    static final String DFA159_specialS =
+        "\42\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+
+        "\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\uffff\1\26\1"+
+        "\27\1\30\2\uffff}>";
+    static final String[] DFA159_transitionS = {
+            "\1\4\2\uffff\1\3\1\4\3\uffff\4\4\1\uffff\1\4\2\uffff\1\1\1"+
+            "\4\1\uffff\1\4\22\uffff\1\4\1\uffff\1\2\1\4\7\uffff\1\4\21\uffff"+
+            "\25\4",
+            "\1\65\1\uffff\1\57\1\60\1\61\3\56\25\uffff\1\51\6\uffff\1"+
+            "\67\1\uffff\1\2\14\uffff\10\66\1\uffff\1\53\1\50\2\uffff\1\63"+
+            "\2\62\21\uffff\1\54\1\55\21\uffff\1\42\1\43\2\uffff\1\44\1\45"+
+            "\1\46\1\47\1\52\1\64",
+            "",
+            "\1\4\31\uffff\1\2\2\uffff\1\2\36\uffff\1\72\62\uffff\1\71"+
+            "\1\73",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\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[] DFA159_eot = DFA.unpackEncodedString(DFA159_eotS);
+    static final short[] DFA159_eof = DFA.unpackEncodedString(DFA159_eofS);
+    static final char[] DFA159_min = DFA.unpackEncodedStringToUnsignedChars(DFA159_minS);
+    static final char[] DFA159_max = DFA.unpackEncodedStringToUnsignedChars(DFA159_maxS);
+    static final short[] DFA159_accept = DFA.unpackEncodedString(DFA159_acceptS);
+    static final short[] DFA159_special = DFA.unpackEncodedString(DFA159_specialS);
+    static final short[][] DFA159_transition;
+
+    static {
+        int numStates = DFA159_transitionS.length;
+        DFA159_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA159_transition[i] = DFA.unpackEncodedString(DFA159_transitionS[i]);
+        }
+    }
+
+    class DFA159 extends DFA {
+
+        public DFA159(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 159;
+            this.eot = DFA159_eot;
+            this.eof = DFA159_eof;
+            this.min = DFA159_min;
+            this.max = DFA159_max;
+            this.accept = DFA159_accept;
+            this.special = DFA159_special;
+            this.transition = DFA159_transition;
+        }
+        public String getDescription() {
+            return "911:144: ( identifierSuffix )?";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA159_34 = input.LA(1);
+
+                         
+                        int index159_34 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_34);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA159_35 = input.LA(1);
+
+                         
+                        int index159_35 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_35);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA159_36 = input.LA(1);
+
+                         
+                        int index159_36 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_36);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA159_37 = input.LA(1);
+
+                         
+                        int index159_37 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_37);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA159_38 = input.LA(1);
+
+                         
+                        int index159_38 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_38);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA159_39 = input.LA(1);
+
+                         
+                        int index159_39 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_39);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA159_40 = input.LA(1);
+
+                         
+                        int index159_40 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_40);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA159_41 = input.LA(1);
+
+                         
+                        int index159_41 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_41);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA159_42 = input.LA(1);
+
+                         
+                        int index159_42 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_42);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        int LA159_43 = input.LA(1);
+
+                         
+                        int index159_43 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_43);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        int LA159_44 = input.LA(1);
+
+                         
+                        int index159_44 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_44);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 11 : 
+                        int LA159_45 = input.LA(1);
+
+                         
+                        int index159_45 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_45);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 12 : 
+                        int LA159_46 = input.LA(1);
+
+                         
+                        int index159_46 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_46);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 13 : 
+                        int LA159_47 = input.LA(1);
+
+                         
+                        int index159_47 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_47);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 14 : 
+                        int LA159_48 = input.LA(1);
+
+                         
+                        int index159_48 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_48);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 15 : 
+                        int LA159_49 = input.LA(1);
+
+                         
+                        int index159_49 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_49);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 16 : 
+                        int LA159_50 = input.LA(1);
+
+                         
+                        int index159_50 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_50);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 17 : 
+                        int LA159_51 = input.LA(1);
+
+                         
+                        int index159_51 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_51);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 18 : 
+                        int LA159_52 = input.LA(1);
+
+                         
+                        int index159_52 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_52);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 19 : 
+                        int LA159_53 = input.LA(1);
+
+                         
+                        int index159_53 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_53);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 20 : 
+                        int LA159_54 = input.LA(1);
+
+                         
+                        int index159_54 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_54);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 21 : 
+                        int LA159_55 = input.LA(1);
+
+                         
+                        int index159_55 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_55);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 22 : 
+                        int LA159_57 = input.LA(1);
+
+                         
+                        int index159_57 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_57);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 23 : 
+                        int LA159_58 = input.LA(1);
+
+                         
+                        int index159_58 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_58);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 24 : 
+                        int LA159_59 = input.LA(1);
+
+                         
+                        int index159_59 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred246_Java()) ) {s = 2;}
+
+                        else if ( (true) ) {s = 4;}
+
+                         
+                        input.seek(index159_59);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 159, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA165_eotS =
+        "\40\uffff";
+    static final String DFA165_eofS =
+        "\40\uffff";
+    static final String DFA165_minS =
+        "\1\34\1\4\1\uffff\1\36\34\uffff";
+    static final String DFA165_maxS =
+        "\1\101\1\164\1\uffff\1\164\34\uffff";
+    static final String DFA165_acceptS =
+        "\2\uffff\1\3\1\uffff\1\1\1\2\25\uffff\1\4\1\6\1\7\1\10\1\5";
+    static final String DFA165_specialS =
+        "\40\uffff}>";
+    static final String[] DFA165_transitionS = {
             "\1\3\14\uffff\1\1\27\uffff\1\2",
             "\1\5\1\uffff\6\5\25\uffff\1\5\6\uffff\1\5\1\uffff\1\4\14\uffff"+
-            "\10\5\1\uffff\2\5\2\uffff\3\5\44\uffff\2\5\2\uffff\6\5",
+            "\10\5\1\uffff\2\5\2\uffff\3\5\21\uffff\2\5\21\uffff\2\5\2\uffff"+
+            "\6\5",
             "",
-            "\1\31\2\uffff\1\35\36\uffff\1\33\62\uffff\1\32\1\34",
+            "\1\33\2\uffff\1\37\36\uffff\1\35\62\uffff\1\34\1\36",
             "",
             "",
             "",
@@ -19694,56 +20594,58 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
-    static final short[] DFA163_eot = DFA.unpackEncodedString(DFA163_eotS);
-    static final short[] DFA163_eof = DFA.unpackEncodedString(DFA163_eofS);
-    static final char[] DFA163_min = DFA.unpackEncodedStringToUnsignedChars(DFA163_minS);
-    static final char[] DFA163_max = DFA.unpackEncodedStringToUnsignedChars(DFA163_maxS);
-    static final short[] DFA163_accept = DFA.unpackEncodedString(DFA163_acceptS);
-    static final short[] DFA163_special = DFA.unpackEncodedString(DFA163_specialS);
-    static final short[][] DFA163_transition;
+    static final short[] DFA165_eot = DFA.unpackEncodedString(DFA165_eotS);
+    static final short[] DFA165_eof = DFA.unpackEncodedString(DFA165_eofS);
+    static final char[] DFA165_min = DFA.unpackEncodedStringToUnsignedChars(DFA165_minS);
+    static final char[] DFA165_max = DFA.unpackEncodedStringToUnsignedChars(DFA165_maxS);
+    static final short[] DFA165_accept = DFA.unpackEncodedString(DFA165_acceptS);
+    static final short[] DFA165_special = DFA.unpackEncodedString(DFA165_specialS);
+    static final short[][] DFA165_transition;
 
     static {
-        int numStates = DFA163_transitionS.length;
-        DFA163_transition = new short[numStates][];
+        int numStates = DFA165_transitionS.length;
+        DFA165_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA163_transition[i] = DFA.unpackEncodedString(DFA163_transitionS[i]);
+            DFA165_transition[i] = DFA.unpackEncodedString(DFA165_transitionS[i]);
         }
     }
 
-    class DFA163 extends DFA {
+    class DFA165 extends DFA {
 
-        public DFA163(BaseRecognizer recognizer) {
+        public DFA165(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 163;
-            this.eot = DFA163_eot;
-            this.eof = DFA163_eof;
-            this.min = DFA163_min;
-            this.max = DFA163_max;
-            this.accept = DFA163_accept;
-            this.special = DFA163_special;
-            this.transition = DFA163_transition;
+            this.decisionNumber = 165;
+            this.eot = DFA165_eot;
+            this.eof = DFA165_eof;
+            this.min = DFA165_min;
+            this.max = DFA165_max;
+            this.accept = DFA165_accept;
+            this.special = DFA165_special;
+            this.transition = DFA165_transition;
         }
         public String getDescription() {
             return "916:1: identifierSuffix : ( ( '[' ']' )+ '.' 'class' | ( '[' expression ']' )+ | arguments | '.' 'class' | '.' explicitGenericInvocation | '.' 'this' | '.' 'super' arguments | '.' 'new' ( nonWildcardTypeArguments )? innerCreator );";
         }
     }
-    static final String DFA161_eotS =
-        "\65\uffff";
-    static final String DFA161_eofS =
-        "\1\1\64\uffff";
-    static final String DFA161_minS =
-        "\1\31\35\uffff\1\4\1\uffff\24\0\1\uffff";
-    static final String DFA161_maxS =
-        "\1\160\35\uffff\1\164\1\uffff\24\0\1\uffff";
-    static final String DFA161_acceptS =
-        "\1\uffff\1\2\62\uffff\1\1";
-    static final String DFA161_specialS =
+    static final String DFA163_eotS =
+        "\67\uffff";
+    static final String DFA163_eofS =
+        "\1\1\66\uffff";
+    static final String DFA163_minS =
+        "\1\31\35\uffff\1\4\1\uffff\26\0\1\uffff";
+    static final String DFA163_maxS =
+        "\1\160\35\uffff\1\164\1\uffff\26\0\1\uffff";
+    static final String DFA163_acceptS =
+        "\1\uffff\1\2\64\uffff\1\1";
+    static final String DFA163_specialS =
         "\40\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+
-        "\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\uffff}>";
-    static final String[] DFA161_transitionS = {
+        "\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\uffff}>";
+    static final String[] DFA163_transitionS = {
             "\1\1\2\uffff\2\1\3\uffff\4\1\1\uffff\1\1\2\uffff\1\36\1\1\1"+
             "\uffff\1\1\22\uffff\1\1\2\uffff\1\1\7\uffff\1\1\21\uffff\25"+
             "\1",
@@ -19776,9 +20678,10 @@
             "",
             "",
             "",
-            "\1\61\1\uffff\1\53\1\54\1\55\3\52\25\uffff\1\47\6\uffff\1"+
-            "\63\16\uffff\10\62\1\uffff\1\51\1\46\2\uffff\1\57\2\56\44\uffff"+
-            "\1\40\1\41\2\uffff\1\42\1\43\1\44\1\45\1\50\1\60",
+            "\1\63\1\uffff\1\55\1\56\1\57\3\54\25\uffff\1\47\6\uffff\1"+
+            "\65\16\uffff\10\64\1\uffff\1\51\1\46\2\uffff\1\61\2\60\21\uffff"+
+            "\1\52\1\53\21\uffff\1\40\1\41\2\uffff\1\42\1\43\1\44\1\45\1"+
+            "\50\1\62",
             "",
             "\1\uffff",
             "\1\uffff",
@@ -19800,37 +20703,39 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
             ""
     };
 
-    static final short[] DFA161_eot = DFA.unpackEncodedString(DFA161_eotS);
-    static final short[] DFA161_eof = DFA.unpackEncodedString(DFA161_eofS);
-    static final char[] DFA161_min = DFA.unpackEncodedStringToUnsignedChars(DFA161_minS);
-    static final char[] DFA161_max = DFA.unpackEncodedStringToUnsignedChars(DFA161_maxS);
-    static final short[] DFA161_accept = DFA.unpackEncodedString(DFA161_acceptS);
-    static final short[] DFA161_special = DFA.unpackEncodedString(DFA161_specialS);
-    static final short[][] DFA161_transition;
+    static final short[] DFA163_eot = DFA.unpackEncodedString(DFA163_eotS);
+    static final short[] DFA163_eof = DFA.unpackEncodedString(DFA163_eofS);
+    static final char[] DFA163_min = DFA.unpackEncodedStringToUnsignedChars(DFA163_minS);
+    static final char[] DFA163_max = DFA.unpackEncodedStringToUnsignedChars(DFA163_maxS);
+    static final short[] DFA163_accept = DFA.unpackEncodedString(DFA163_acceptS);
+    static final short[] DFA163_special = DFA.unpackEncodedString(DFA163_specialS);
+    static final short[][] DFA163_transition;
 
     static {
-        int numStates = DFA161_transitionS.length;
-        DFA161_transition = new short[numStates][];
+        int numStates = DFA163_transitionS.length;
+        DFA163_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA161_transition[i] = DFA.unpackEncodedString(DFA161_transitionS[i]);
+            DFA163_transition[i] = DFA.unpackEncodedString(DFA163_transitionS[i]);
         }
     }
 
-    class DFA161 extends DFA {
+    class DFA163 extends DFA {
 
-        public DFA161(BaseRecognizer recognizer) {
+        public DFA163(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 161;
-            this.eot = DFA161_eot;
-            this.eof = DFA161_eof;
-            this.min = DFA161_min;
-            this.max = DFA161_max;
-            this.accept = DFA161_accept;
-            this.special = DFA161_special;
-            this.transition = DFA161_transition;
+            this.decisionNumber = 163;
+            this.eot = DFA163_eot;
+            this.eof = DFA163_eof;
+            this.min = DFA163_min;
+            this.max = DFA163_max;
+            this.accept = DFA163_accept;
+            this.special = DFA163_special;
+            this.transition = DFA163_transition;
         }
         public String getDescription() {
             return "()+ loopback of 918:4: ( '[' expression ']' )+";
@@ -19840,328 +20745,359 @@
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA161_32 = input.LA(1);
+                        int LA163_32 = input.LA(1);
 
                          
-                        int index161_32 = input.index();
+                        int index163_32 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_32);
+                        input.seek(index163_32);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA161_33 = input.LA(1);
+                        int LA163_33 = input.LA(1);
 
                          
-                        int index161_33 = input.index();
+                        int index163_33 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_33);
+                        input.seek(index163_33);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA161_34 = input.LA(1);
+                        int LA163_34 = input.LA(1);
 
                          
-                        int index161_34 = input.index();
+                        int index163_34 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_34);
+                        input.seek(index163_34);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA161_35 = input.LA(1);
+                        int LA163_35 = input.LA(1);
 
                          
-                        int index161_35 = input.index();
+                        int index163_35 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_35);
+                        input.seek(index163_35);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA161_36 = input.LA(1);
+                        int LA163_36 = input.LA(1);
 
                          
-                        int index161_36 = input.index();
+                        int index163_36 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_36);
+                        input.seek(index163_36);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA161_37 = input.LA(1);
+                        int LA163_37 = input.LA(1);
 
                          
-                        int index161_37 = input.index();
+                        int index163_37 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_37);
+                        input.seek(index163_37);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA161_38 = input.LA(1);
+                        int LA163_38 = input.LA(1);
 
                          
-                        int index161_38 = input.index();
+                        int index163_38 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_38);
+                        input.seek(index163_38);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA161_39 = input.LA(1);
+                        int LA163_39 = input.LA(1);
 
                          
-                        int index161_39 = input.index();
+                        int index163_39 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_39);
+                        input.seek(index163_39);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA161_40 = input.LA(1);
+                        int LA163_40 = input.LA(1);
 
                          
-                        int index161_40 = input.index();
+                        int index163_40 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_40);
+                        input.seek(index163_40);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA161_41 = input.LA(1);
+                        int LA163_41 = input.LA(1);
 
                          
-                        int index161_41 = input.index();
+                        int index163_41 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_41);
+                        input.seek(index163_41);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA161_42 = input.LA(1);
+                        int LA163_42 = input.LA(1);
 
                          
-                        int index161_42 = input.index();
+                        int index163_42 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_42);
+                        input.seek(index163_42);
                         if ( s>=0 ) return s;
                         break;
                     case 11 : 
-                        int LA161_43 = input.LA(1);
+                        int LA163_43 = input.LA(1);
 
                          
-                        int index161_43 = input.index();
+                        int index163_43 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_43);
+                        input.seek(index163_43);
                         if ( s>=0 ) return s;
                         break;
                     case 12 : 
-                        int LA161_44 = input.LA(1);
+                        int LA163_44 = input.LA(1);
 
                          
-                        int index161_44 = input.index();
+                        int index163_44 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_44);
+                        input.seek(index163_44);
                         if ( s>=0 ) return s;
                         break;
                     case 13 : 
-                        int LA161_45 = input.LA(1);
+                        int LA163_45 = input.LA(1);
 
                          
-                        int index161_45 = input.index();
+                        int index163_45 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_45);
+                        input.seek(index163_45);
                         if ( s>=0 ) return s;
                         break;
                     case 14 : 
-                        int LA161_46 = input.LA(1);
+                        int LA163_46 = input.LA(1);
 
                          
-                        int index161_46 = input.index();
+                        int index163_46 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_46);
+                        input.seek(index163_46);
                         if ( s>=0 ) return s;
                         break;
                     case 15 : 
-                        int LA161_47 = input.LA(1);
+                        int LA163_47 = input.LA(1);
 
                          
-                        int index161_47 = input.index();
+                        int index163_47 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_47);
+                        input.seek(index163_47);
                         if ( s>=0 ) return s;
                         break;
                     case 16 : 
-                        int LA161_48 = input.LA(1);
+                        int LA163_48 = input.LA(1);
 
                          
-                        int index161_48 = input.index();
+                        int index163_48 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_48);
+                        input.seek(index163_48);
                         if ( s>=0 ) return s;
                         break;
                     case 17 : 
-                        int LA161_49 = input.LA(1);
+                        int LA163_49 = input.LA(1);
 
                          
-                        int index161_49 = input.index();
+                        int index163_49 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_49);
+                        input.seek(index163_49);
                         if ( s>=0 ) return s;
                         break;
                     case 18 : 
-                        int LA161_50 = input.LA(1);
+                        int LA163_50 = input.LA(1);
 
                          
-                        int index161_50 = input.index();
+                        int index163_50 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_50);
+                        input.seek(index163_50);
                         if ( s>=0 ) return s;
                         break;
                     case 19 : 
-                        int LA161_51 = input.LA(1);
+                        int LA163_51 = input.LA(1);
 
                          
-                        int index161_51 = input.index();
+                        int index163_51 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred250_Java()) ) {s = 52;}
+                        if ( (synpred252_Java()) ) {s = 54;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index161_51);
+                        input.seek(index163_51);
                         if ( s>=0 ) return s;
                         break;
+                    case 20 : 
+                        int LA163_52 = input.LA(1);
+
+                         
+                        int index163_52 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred252_Java()) ) {s = 54;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index163_52);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 21 : 
+                        int LA163_53 = input.LA(1);
+
+                         
+                        int index163_53 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred252_Java()) ) {s = 54;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index163_53);
+                        if ( s>=0 ) return s;
+                        break;
             }
             if (state.backtracking>0) {state.failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 161, _s, input);
+                new NoViableAltException(getDescription(), 163, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA173_eotS =
-        "\26\uffff";
-    static final String DFA173_eofS =
-        "\26\uffff";
-    static final String DFA173_minS =
-        "\1\4\25\uffff";
-    static final String DFA173_maxS =
-        "\1\164\25\uffff";
-    static final String DFA173_acceptS =
-        "\1\uffff\1\1\1\2\23\uffff";
-    static final String DFA173_specialS =
-        "\26\uffff}>";
-    static final String[] DFA173_transitionS = {
+    static final String DFA175_eotS =
+        "\30\uffff";
+    static final String DFA175_eofS =
+        "\30\uffff";
+    static final String DFA175_minS =
+        "\1\4\27\uffff";
+    static final String DFA175_maxS =
+        "\1\164\27\uffff";
+    static final String DFA175_acceptS =
+        "\1\uffff\1\1\1\2\25\uffff";
+    static final String DFA175_specialS =
+        "\30\uffff}>";
+    static final String[] DFA175_transitionS = {
             "\1\2\1\uffff\6\2\25\uffff\1\2\6\uffff\1\2\1\uffff\1\1\14\uffff"+
-            "\10\2\1\uffff\2\2\2\uffff\3\2\44\uffff\2\2\2\uffff\6\2",
+            "\10\2\1\uffff\2\2\2\uffff\3\2\21\uffff\2\2\21\uffff\2\2\2\uffff"+
+            "\6\2",
             "",
             "",
             "",
@@ -20182,63 +21118,65 @@
             "",
             "",
             "",
+            "",
+            "",
             ""
     };
 
-    static final short[] DFA173_eot = DFA.unpackEncodedString(DFA173_eotS);
-    static final short[] DFA173_eof = DFA.unpackEncodedString(DFA173_eofS);
-    static final char[] DFA173_min = DFA.unpackEncodedStringToUnsignedChars(DFA173_minS);
-    static final char[] DFA173_max = DFA.unpackEncodedStringToUnsignedChars(DFA173_maxS);
-    static final short[] DFA173_accept = DFA.unpackEncodedString(DFA173_acceptS);
-    static final short[] DFA173_special = DFA.unpackEncodedString(DFA173_specialS);
-    static final short[][] DFA173_transition;
+    static final short[] DFA175_eot = DFA.unpackEncodedString(DFA175_eotS);
+    static final short[] DFA175_eof = DFA.unpackEncodedString(DFA175_eofS);
+    static final char[] DFA175_min = DFA.unpackEncodedStringToUnsignedChars(DFA175_minS);
+    static final char[] DFA175_max = DFA.unpackEncodedStringToUnsignedChars(DFA175_maxS);
+    static final short[] DFA175_accept = DFA.unpackEncodedString(DFA175_acceptS);
+    static final short[] DFA175_special = DFA.unpackEncodedString(DFA175_specialS);
+    static final short[][] DFA175_transition;
 
     static {
-        int numStates = DFA173_transitionS.length;
-        DFA173_transition = new short[numStates][];
+        int numStates = DFA175_transitionS.length;
+        DFA175_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA173_transition[i] = DFA.unpackEncodedString(DFA173_transitionS[i]);
+            DFA175_transition[i] = DFA.unpackEncodedString(DFA175_transitionS[i]);
         }
     }
 
-    class DFA173 extends DFA {
+    class DFA175 extends DFA {
 
-        public DFA173(BaseRecognizer recognizer) {
+        public DFA175(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 173;
-            this.eot = DFA173_eot;
-            this.eof = DFA173_eof;
-            this.min = DFA173_min;
-            this.max = DFA173_max;
-            this.accept = DFA173_accept;
-            this.special = DFA173_special;
-            this.transition = DFA173_transition;
+            this.decisionNumber = 175;
+            this.eot = DFA175_eot;
+            this.eof = DFA175_eof;
+            this.min = DFA175_min;
+            this.max = DFA175_max;
+            this.accept = DFA175_accept;
+            this.special = DFA175_special;
+            this.transition = DFA175_transition;
         }
         public String getDescription() {
             return "944:9: ( ']' ( '[' ']' )* arrayInitializer | expression ']' ( '[' expression ']' )* ( '[' ']' )* )";
         }
     }
-    static final String DFA171_eotS =
-        "\66\uffff";
-    static final String DFA171_eofS =
-        "\1\2\65\uffff";
-    static final String DFA171_minS =
-        "\1\31\1\4\37\uffff\24\0\1\uffff";
-    static final String DFA171_maxS =
-        "\1\160\1\164\37\uffff\24\0\1\uffff";
-    static final String DFA171_acceptS =
-        "\2\uffff\1\2\62\uffff\1\1";
-    static final String DFA171_specialS =
+    static final String DFA173_eotS =
+        "\70\uffff";
+    static final String DFA173_eofS =
+        "\1\2\67\uffff";
+    static final String DFA173_minS =
+        "\1\31\1\4\37\uffff\26\0\1\uffff";
+    static final String DFA173_maxS =
+        "\1\160\1\164\37\uffff\26\0\1\uffff";
+    static final String DFA173_acceptS =
+        "\2\uffff\1\2\64\uffff\1\1";
+    static final String DFA173_specialS =
         "\41\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+
-        "\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\uffff}>";
-    static final String[] DFA171_transitionS = {
+        "\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\uffff}>";
+    static final String[] DFA173_transitionS = {
             "\1\2\2\uffff\2\2\3\uffff\4\2\1\uffff\1\2\2\uffff\1\1\1\2\1"+
             "\uffff\1\2\22\uffff\1\2\2\uffff\1\2\7\uffff\1\2\21\uffff\25"+
             "\2",
-            "\1\62\1\uffff\1\54\1\55\1\56\3\53\25\uffff\1\50\6\uffff\1"+
-            "\64\1\uffff\1\2\14\uffff\10\63\1\uffff\1\52\1\47\2\uffff\1\60"+
-            "\2\57\44\uffff\1\41\1\42\2\uffff\1\43\1\44\1\45\1\46\1\51\1"+
-            "\61",
+            "\1\64\1\uffff\1\56\1\57\1\60\3\55\25\uffff\1\50\6\uffff\1"+
+            "\66\1\uffff\1\2\14\uffff\10\65\1\uffff\1\52\1\47\2\uffff\1\62"+
+            "\2\61\21\uffff\1\53\1\54\21\uffff\1\41\1\42\2\uffff\1\43\1\44"+
+            "\1\45\1\46\1\51\1\63",
             "",
             "",
             "",
@@ -20290,37 +21228,39 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
             ""
     };
 
-    static final short[] DFA171_eot = DFA.unpackEncodedString(DFA171_eotS);
-    static final short[] DFA171_eof = DFA.unpackEncodedString(DFA171_eofS);
-    static final char[] DFA171_min = DFA.unpackEncodedStringToUnsignedChars(DFA171_minS);
-    static final char[] DFA171_max = DFA.unpackEncodedStringToUnsignedChars(DFA171_maxS);
-    static final short[] DFA171_accept = DFA.unpackEncodedString(DFA171_acceptS);
-    static final short[] DFA171_special = DFA.unpackEncodedString(DFA171_specialS);
-    static final short[][] DFA171_transition;
+    static final short[] DFA173_eot = DFA.unpackEncodedString(DFA173_eotS);
+    static final short[] DFA173_eof = DFA.unpackEncodedString(DFA173_eofS);
+    static final char[] DFA173_min = DFA.unpackEncodedStringToUnsignedChars(DFA173_minS);
+    static final char[] DFA173_max = DFA.unpackEncodedStringToUnsignedChars(DFA173_maxS);
+    static final short[] DFA173_accept = DFA.unpackEncodedString(DFA173_acceptS);
+    static final short[] DFA173_special = DFA.unpackEncodedString(DFA173_specialS);
+    static final short[][] DFA173_transition;
 
     static {
-        int numStates = DFA171_transitionS.length;
-        DFA171_transition = new short[numStates][];
+        int numStates = DFA173_transitionS.length;
+        DFA173_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA171_transition[i] = DFA.unpackEncodedString(DFA171_transitionS[i]);
+            DFA173_transition[i] = DFA.unpackEncodedString(DFA173_transitionS[i]);
         }
     }
 
-    class DFA171 extends DFA {
+    class DFA173 extends DFA {
 
-        public DFA171(BaseRecognizer recognizer) {
+        public DFA173(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 171;
-            this.eot = DFA171_eot;
-            this.eof = DFA171_eof;
-            this.min = DFA171_min;
-            this.max = DFA171_max;
-            this.accept = DFA171_accept;
-            this.special = DFA171_special;
-            this.transition = DFA171_transition;
+            this.decisionNumber = 173;
+            this.eot = DFA173_eot;
+            this.eof = DFA173_eof;
+            this.min = DFA173_min;
+            this.max = DFA173_max;
+            this.accept = DFA173_accept;
+            this.special = DFA173_special;
+            this.transition = DFA173_transition;
         }
         public String getDescription() {
             return "()* loopback of 945:28: ( '[' expression ']' )*";
@@ -20330,326 +21270,356 @@
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA171_33 = input.LA(1);
+                        int LA173_33 = input.LA(1);
 
                          
-                        int index171_33 = input.index();
+                        int index173_33 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_33);
+                        input.seek(index173_33);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA171_34 = input.LA(1);
+                        int LA173_34 = input.LA(1);
 
                          
-                        int index171_34 = input.index();
+                        int index173_34 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_34);
+                        input.seek(index173_34);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA171_35 = input.LA(1);
+                        int LA173_35 = input.LA(1);
 
                          
-                        int index171_35 = input.index();
+                        int index173_35 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_35);
+                        input.seek(index173_35);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA171_36 = input.LA(1);
+                        int LA173_36 = input.LA(1);
 
                          
-                        int index171_36 = input.index();
+                        int index173_36 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_36);
+                        input.seek(index173_36);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA171_37 = input.LA(1);
+                        int LA173_37 = input.LA(1);
 
                          
-                        int index171_37 = input.index();
+                        int index173_37 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_37);
+                        input.seek(index173_37);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA171_38 = input.LA(1);
+                        int LA173_38 = input.LA(1);
 
                          
-                        int index171_38 = input.index();
+                        int index173_38 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_38);
+                        input.seek(index173_38);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA171_39 = input.LA(1);
+                        int LA173_39 = input.LA(1);
 
                          
-                        int index171_39 = input.index();
+                        int index173_39 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_39);
+                        input.seek(index173_39);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA171_40 = input.LA(1);
+                        int LA173_40 = input.LA(1);
 
                          
-                        int index171_40 = input.index();
+                        int index173_40 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_40);
+                        input.seek(index173_40);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA171_41 = input.LA(1);
+                        int LA173_41 = input.LA(1);
 
                          
-                        int index171_41 = input.index();
+                        int index173_41 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_41);
+                        input.seek(index173_41);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA171_42 = input.LA(1);
+                        int LA173_42 = input.LA(1);
 
                          
-                        int index171_42 = input.index();
+                        int index173_42 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_42);
+                        input.seek(index173_42);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA171_43 = input.LA(1);
+                        int LA173_43 = input.LA(1);
 
                          
-                        int index171_43 = input.index();
+                        int index173_43 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_43);
+                        input.seek(index173_43);
                         if ( s>=0 ) return s;
                         break;
                     case 11 : 
-                        int LA171_44 = input.LA(1);
+                        int LA173_44 = input.LA(1);
 
                          
-                        int index171_44 = input.index();
+                        int index173_44 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_44);
+                        input.seek(index173_44);
                         if ( s>=0 ) return s;
                         break;
                     case 12 : 
-                        int LA171_45 = input.LA(1);
+                        int LA173_45 = input.LA(1);
 
                          
-                        int index171_45 = input.index();
+                        int index173_45 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_45);
+                        input.seek(index173_45);
                         if ( s>=0 ) return s;
                         break;
                     case 13 : 
-                        int LA171_46 = input.LA(1);
+                        int LA173_46 = input.LA(1);
 
                          
-                        int index171_46 = input.index();
+                        int index173_46 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_46);
+                        input.seek(index173_46);
                         if ( s>=0 ) return s;
                         break;
                     case 14 : 
-                        int LA171_47 = input.LA(1);
+                        int LA173_47 = input.LA(1);
 
                          
-                        int index171_47 = input.index();
+                        int index173_47 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_47);
+                        input.seek(index173_47);
                         if ( s>=0 ) return s;
                         break;
                     case 15 : 
-                        int LA171_48 = input.LA(1);
+                        int LA173_48 = input.LA(1);
 
                          
-                        int index171_48 = input.index();
+                        int index173_48 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_48);
+                        input.seek(index173_48);
                         if ( s>=0 ) return s;
                         break;
                     case 16 : 
-                        int LA171_49 = input.LA(1);
+                        int LA173_49 = input.LA(1);
 
                          
-                        int index171_49 = input.index();
+                        int index173_49 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_49);
+                        input.seek(index173_49);
                         if ( s>=0 ) return s;
                         break;
                     case 17 : 
-                        int LA171_50 = input.LA(1);
+                        int LA173_50 = input.LA(1);
 
                          
-                        int index171_50 = input.index();
+                        int index173_50 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_50);
+                        input.seek(index173_50);
                         if ( s>=0 ) return s;
                         break;
                     case 18 : 
-                        int LA171_51 = input.LA(1);
+                        int LA173_51 = input.LA(1);
 
                          
-                        int index171_51 = input.index();
+                        int index173_51 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_51);
+                        input.seek(index173_51);
                         if ( s>=0 ) return s;
                         break;
                     case 19 : 
-                        int LA171_52 = input.LA(1);
+                        int LA173_52 = input.LA(1);
 
                          
-                        int index171_52 = input.index();
+                        int index173_52 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred266_Java()) ) {s = 53;}
+                        if ( (synpred268_Java()) ) {s = 55;}
 
                         else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index171_52);
+                        input.seek(index173_52);
                         if ( s>=0 ) return s;
                         break;
+                    case 20 : 
+                        int LA173_53 = input.LA(1);
+
+                         
+                        int index173_53 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred268_Java()) ) {s = 55;}
+
+                        else if ( (true) ) {s = 2;}
+
+                         
+                        input.seek(index173_53);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 21 : 
+                        int LA173_54 = input.LA(1);
+
+                         
+                        int index173_54 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred268_Java()) ) {s = 55;}
+
+                        else if ( (true) ) {s = 2;}
+
+                         
+                        input.seek(index173_54);
+                        if ( s>=0 ) return s;
+                        break;
             }
             if (state.backtracking>0) {state.failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 171, _s, input);
+                new NoViableAltException(getDescription(), 173, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA172_eotS =
-        "\65\uffff";
-    static final String DFA172_eofS =
-        "\1\1\64\uffff";
-    static final String DFA172_minS =
-        "\1\31\35\uffff\1\4\26\uffff";
-    static final String DFA172_maxS =
-        "\1\160\35\uffff\1\164\26\uffff";
-    static final String DFA172_acceptS =
-        "\1\uffff\1\2\36\uffff\1\1\24\uffff";
-    static final String DFA172_specialS =
-        "\65\uffff}>";
-    static final String[] DFA172_transitionS = {
+    static final String DFA174_eotS =
+        "\67\uffff";
+    static final String DFA174_eofS =
+        "\1\1\66\uffff";
+    static final String DFA174_minS =
+        "\1\31\35\uffff\1\4\30\uffff";
+    static final String DFA174_maxS =
+        "\1\160\35\uffff\1\164\30\uffff";
+    static final String DFA174_acceptS =
+        "\1\uffff\1\2\36\uffff\1\1\26\uffff";
+    static final String DFA174_specialS =
+        "\67\uffff}>";
+    static final String[] DFA174_transitionS = {
             "\1\1\2\uffff\2\1\3\uffff\4\1\1\uffff\1\1\2\uffff\1\36\1\1\1"+
             "\uffff\1\1\22\uffff\1\1\2\uffff\1\1\7\uffff\1\1\21\uffff\25"+
             "\1",
@@ -20683,7 +21653,8 @@
             "",
             "",
             "\1\1\1\uffff\6\1\25\uffff\1\1\6\uffff\1\1\1\uffff\1\40\14"+
-            "\uffff\10\1\1\uffff\2\1\2\uffff\3\1\44\uffff\2\1\2\uffff\6\1",
+            "\uffff\10\1\1\uffff\2\1\2\uffff\3\1\21\uffff\2\1\21\uffff\2"+
+            "\1\2\uffff\6\1",
             "",
             "",
             "",
@@ -20705,88 +21676,8 @@
             "",
             "",
             "",
-            ""
-    };
-
-    static final short[] DFA172_eot = DFA.unpackEncodedString(DFA172_eotS);
-    static final short[] DFA172_eof = DFA.unpackEncodedString(DFA172_eofS);
-    static final char[] DFA172_min = DFA.unpackEncodedStringToUnsignedChars(DFA172_minS);
-    static final char[] DFA172_max = DFA.unpackEncodedStringToUnsignedChars(DFA172_maxS);
-    static final short[] DFA172_accept = DFA.unpackEncodedString(DFA172_acceptS);
-    static final short[] DFA172_special = DFA.unpackEncodedString(DFA172_specialS);
-    static final short[][] DFA172_transition;
-
-    static {
-        int numStates = DFA172_transitionS.length;
-        DFA172_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA172_transition[i] = DFA.unpackEncodedString(DFA172_transitionS[i]);
-        }
-    }
-
-    class DFA172 extends DFA {
-
-        public DFA172(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 172;
-            this.eot = DFA172_eot;
-            this.eof = DFA172_eof;
-            this.min = DFA172_min;
-            this.max = DFA172_max;
-            this.accept = DFA172_accept;
-            this.special = DFA172_special;
-            this.transition = DFA172_transition;
-        }
-        public String getDescription() {
-            return "()* loopback of 945:50: ( '[' ']' )*";
-        }
-    }
-    static final String DFA174_eotS =
-        "\41\uffff";
-    static final String DFA174_eofS =
-        "\1\2\40\uffff";
-    static final String DFA174_minS =
-        "\1\31\40\uffff";
-    static final String DFA174_maxS =
-        "\1\160\40\uffff";
-    static final String DFA174_acceptS =
-        "\1\uffff\1\1\1\2\36\uffff";
-    static final String DFA174_specialS =
-        "\41\uffff}>";
-    static final String[] DFA174_transitionS = {
-            "\1\2\2\uffff\2\2\3\uffff\4\2\1\1\1\2\2\uffff\2\2\1\uffff\1"+
-            "\2\22\uffff\1\2\2\uffff\1\2\7\uffff\1\2\21\uffff\25\2",
             "",
             "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
             ""
     };
 
@@ -20820,7 +21711,7 @@
             this.transition = DFA174_transition;
         }
         public String getDescription() {
-            return "950:14: ( classBody )?";
+            return "()* loopback of 945:50: ( '[' ']' )*";
         }
     }
     static final String DFA176_eotS =
@@ -20836,8 +21727,8 @@
     static final String DFA176_specialS =
         "\41\uffff}>";
     static final String[] DFA176_transitionS = {
-            "\1\2\2\uffff\2\2\3\uffff\4\2\1\uffff\1\2\2\uffff\2\2\1\uffff"+
-            "\1\2\22\uffff\1\2\1\uffff\1\1\1\2\7\uffff\1\2\21\uffff\25\2",
+            "\1\2\2\uffff\2\2\3\uffff\4\2\1\1\1\2\2\uffff\2\2\1\uffff\1"+
+            "\2\22\uffff\1\2\2\uffff\1\2\7\uffff\1\2\21\uffff\25\2",
             "",
             "",
             "",
@@ -20902,22 +21793,22 @@
             this.transition = DFA176_transition;
         }
         public String getDescription() {
-            return "967:19: ( arguments )?";
+            return "950:14: ( classBody )?";
         }
     }
-    static final String DFA179_eotS =
+    static final String DFA178_eotS =
         "\41\uffff";
-    static final String DFA179_eofS =
+    static final String DFA178_eofS =
         "\1\2\40\uffff";
-    static final String DFA179_minS =
+    static final String DFA178_minS =
         "\1\31\40\uffff";
-    static final String DFA179_maxS =
+    static final String DFA178_maxS =
         "\1\160\40\uffff";
-    static final String DFA179_acceptS =
+    static final String DFA178_acceptS =
         "\1\uffff\1\1\1\2\36\uffff";
-    static final String DFA179_specialS =
+    static final String DFA178_specialS =
         "\41\uffff}>";
-    static final String[] DFA179_transitionS = {
+    static final String[] DFA178_transitionS = {
             "\1\2\2\uffff\2\2\3\uffff\4\2\1\uffff\1\2\2\uffff\2\2\1\uffff"+
             "\1\2\22\uffff\1\2\1\uffff\1\1\1\2\7\uffff\1\2\21\uffff\25\2",
             "",
@@ -20954,54 +21845,54 @@
             ""
     };
 
-    static final short[] DFA179_eot = DFA.unpackEncodedString(DFA179_eotS);
-    static final short[] DFA179_eof = DFA.unpackEncodedString(DFA179_eofS);
-    static final char[] DFA179_min = DFA.unpackEncodedStringToUnsignedChars(DFA179_minS);
-    static final char[] DFA179_max = DFA.unpackEncodedStringToUnsignedChars(DFA179_maxS);
-    static final short[] DFA179_accept = DFA.unpackEncodedString(DFA179_acceptS);
-    static final short[] DFA179_special = DFA.unpackEncodedString(DFA179_specialS);
-    static final short[][] DFA179_transition;
+    static final short[] DFA178_eot = DFA.unpackEncodedString(DFA178_eotS);
+    static final short[] DFA178_eof = DFA.unpackEncodedString(DFA178_eofS);
+    static final char[] DFA178_min = DFA.unpackEncodedStringToUnsignedChars(DFA178_minS);
+    static final char[] DFA178_max = DFA.unpackEncodedStringToUnsignedChars(DFA178_maxS);
+    static final short[] DFA178_accept = DFA.unpackEncodedString(DFA178_acceptS);
+    static final short[] DFA178_special = DFA.unpackEncodedString(DFA178_specialS);
+    static final short[][] DFA178_transition;
 
     static {
-        int numStates = DFA179_transitionS.length;
-        DFA179_transition = new short[numStates][];
+        int numStates = DFA178_transitionS.length;
+        DFA178_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA179_transition[i] = DFA.unpackEncodedString(DFA179_transitionS[i]);
+            DFA178_transition[i] = DFA.unpackEncodedString(DFA178_transitionS[i]);
         }
     }
 
-    class DFA179 extends DFA {
+    class DFA178 extends DFA {
 
-        public DFA179(BaseRecognizer recognizer) {
+        public DFA178(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 179;
-            this.eot = DFA179_eot;
-            this.eof = DFA179_eof;
-            this.min = DFA179_min;
-            this.max = DFA179_max;
-            this.accept = DFA179_accept;
-            this.special = DFA179_special;
-            this.transition = DFA179_transition;
+            this.decisionNumber = 178;
+            this.eot = DFA178_eot;
+            this.eof = DFA178_eof;
+            this.min = DFA178_min;
+            this.max = DFA178_max;
+            this.accept = DFA178_accept;
+            this.special = DFA178_special;
+            this.transition = DFA178_transition;
         }
         public String getDescription() {
-            return "976:21: ( arguments )?";
+            return "967:19: ( arguments )?";
         }
     }
     static final String DFA181_eotS =
-        "\26\uffff";
+        "\41\uffff";
     static final String DFA181_eofS =
-        "\26\uffff";
+        "\1\2\40\uffff";
     static final String DFA181_minS =
-        "\1\4\25\uffff";
+        "\1\31\40\uffff";
     static final String DFA181_maxS =
-        "\1\164\25\uffff";
+        "\1\160\40\uffff";
     static final String DFA181_acceptS =
-        "\1\uffff\1\1\23\uffff\1\2";
+        "\1\uffff\1\1\1\2\36\uffff";
     static final String DFA181_specialS =
-        "\26\uffff}>";
+        "\41\uffff}>";
     static final String[] DFA181_transitionS = {
-            "\1\1\1\uffff\6\1\25\uffff\1\1\6\uffff\1\1\16\uffff\10\1\1\uffff"+
-            "\2\1\1\25\1\uffff\3\1\44\uffff\2\1\2\uffff\6\1",
+            "\1\2\2\uffff\2\2\3\uffff\4\2\1\uffff\1\2\2\uffff\2\2\1\uffff"+
+            "\1\2\22\uffff\1\2\1\uffff\1\1\1\2\7\uffff\1\2\21\uffff\25\2",
             "",
             "",
             "",
@@ -21022,6 +21913,17 @@
             "",
             "",
             "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
             ""
     };
 
@@ -21055,6 +21957,79 @@
             this.transition = DFA181_transition;
         }
         public String getDescription() {
+            return "976:21: ( arguments )?";
+        }
+    }
+    static final String DFA183_eotS =
+        "\30\uffff";
+    static final String DFA183_eofS =
+        "\30\uffff";
+    static final String DFA183_minS =
+        "\1\4\27\uffff";
+    static final String DFA183_maxS =
+        "\1\164\27\uffff";
+    static final String DFA183_acceptS =
+        "\1\uffff\1\1\25\uffff\1\2";
+    static final String DFA183_specialS =
+        "\30\uffff}>";
+    static final String[] DFA183_transitionS = {
+            "\1\1\1\uffff\6\1\25\uffff\1\1\6\uffff\1\1\16\uffff\10\1\1\uffff"+
+            "\2\1\1\27\1\uffff\3\1\21\uffff\2\1\21\uffff\2\1\2\uffff\6\1",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA183_eot = DFA.unpackEncodedString(DFA183_eotS);
+    static final short[] DFA183_eof = DFA.unpackEncodedString(DFA183_eofS);
+    static final char[] DFA183_min = DFA.unpackEncodedStringToUnsignedChars(DFA183_minS);
+    static final char[] DFA183_max = DFA.unpackEncodedStringToUnsignedChars(DFA183_maxS);
+    static final short[] DFA183_accept = DFA.unpackEncodedString(DFA183_acceptS);
+    static final short[] DFA183_special = DFA.unpackEncodedString(DFA183_specialS);
+    static final short[][] DFA183_transition;
+
+    static {
+        int numStates = DFA183_transitionS.length;
+        DFA183_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA183_transition[i] = DFA.unpackEncodedString(DFA183_transitionS[i]);
+        }
+    }
+
+    class DFA183 extends DFA {
+
+        public DFA183(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 183;
+            this.eot = DFA183_eot;
+            this.eof = DFA183_eof;
+            this.min = DFA183_min;
+            this.max = DFA183_max;
+            this.accept = DFA183_accept;
+            this.special = DFA183_special;
+            this.transition = DFA183_transition;
+        }
+        public String getDescription() {
             return "980:8: ( expressionList )?";
         }
     }
@@ -21222,25 +22197,25 @@
     public static final BitSet FOLLOW_variableDeclaratorRest_in_variableDeclarator1088 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_41_in_variableDeclaratorRest1106 = new BitSet(new long[]{0x0000040000000000L});
     public static final BitSet FOLLOW_42_in_variableDeclaratorRest1108 = new BitSet(new long[]{0x0000120000000002L});
-    public static final BitSet FOLLOW_44_in_variableDeclaratorRest1113 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
+    public static final BitSet FOLLOW_44_in_variableDeclaratorRest1113 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
     public static final BitSet FOLLOW_variableInitializer_in_variableDeclaratorRest1115 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_44_in_variableDeclaratorRest1122 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
+    public static final BitSet FOLLOW_44_in_variableDeclaratorRest1122 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
     public static final BitSet FOLLOW_variableInitializer_in_variableDeclaratorRest1124 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_constantDeclaratorRest_in_constantDeclaratorsRest1144 = new BitSet(new long[]{0x0000000400000002L});
     public static final BitSet FOLLOW_34_in_constantDeclaratorsRest1147 = new BitSet(new long[]{0x0000000000000010L});
     public static final BitSet FOLLOW_constantDeclarator_in_constantDeclaratorsRest1149 = new BitSet(new long[]{0x0000000400000002L});
     public static final BitSet FOLLOW_41_in_constantDeclaratorRest1166 = new BitSet(new long[]{0x0000040000000000L});
     public static final BitSet FOLLOW_42_in_constantDeclaratorRest1168 = new BitSet(new long[]{0x0000120000000000L});
-    public static final BitSet FOLLOW_44_in_constantDeclaratorRest1172 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
+    public static final BitSet FOLLOW_44_in_constantDeclaratorRest1172 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
     public static final BitSet FOLLOW_variableInitializer_in_constantDeclaratorRest1174 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_Identifier_in_variableDeclaratorId1186 = new BitSet(new long[]{0x0000020000000002L});
     public static final BitSet FOLLOW_41_in_variableDeclaratorId1189 = new BitSet(new long[]{0x0000040000000000L});
     public static final BitSet FOLLOW_42_in_variableDeclaratorId1191 = new BitSet(new long[]{0x0000020000000002L});
     public static final BitSet FOLLOW_arrayInitializer_in_variableInitializer1204 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_expression_in_variableInitializer1214 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_37_in_arrayInitializer1226 = new BitSet(new long[]{0x7F80016200000FD0L,0x001F980000000073L});
+    public static final BitSet FOLLOW_37_in_arrayInitializer1226 = new BitSet(new long[]{0x7F80016200000FD0L,0x001F980003000073L});
     public static final BitSet FOLLOW_variableInitializer_in_arrayInitializer1229 = new BitSet(new long[]{0x0000004400000000L});
-    public static final BitSet FOLLOW_34_in_arrayInitializer1232 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
+    public static final BitSet FOLLOW_34_in_arrayInitializer1232 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
     public static final BitSet FOLLOW_variableInitializer_in_arrayInitializer1234 = new BitSet(new long[]{0x0000004400000000L});
     public static final BitSet FOLLOW_34_in_arrayInitializer1239 = new BitSet(new long[]{0x0000004000000000L});
     public static final BitSet FOLLOW_38_in_arrayInitializer1246 = new BitSet(new long[]{0x0000000000000002L});
@@ -21315,24 +22290,24 @@
     public static final BitSet FOLLOW_annotation_in_annotations1893 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
     public static final BitSet FOLLOW_71_in_annotation1905 = new BitSet(new long[]{0x0000000000000010L});
     public static final BitSet FOLLOW_annotationName_in_annotation1907 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_65_in_annotation1910 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F9800000000F7L});
+    public static final BitSet FOLLOW_65_in_annotation1910 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F9800030000F7L});
     public static final BitSet FOLLOW_elementValuePairs_in_annotation1912 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
     public static final BitSet FOLLOW_66_in_annotation1915 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_Identifier_in_annotationName1929 = new BitSet(new long[]{0x0000000010000002L});
     public static final BitSet FOLLOW_28_in_annotationName1932 = new BitSet(new long[]{0x0000000000000010L});
     public static final BitSet FOLLOW_Identifier_in_annotationName1934 = new BitSet(new long[]{0x0000000010000002L});
     public static final BitSet FOLLOW_elementValuePair_in_elementValuePairs1948 = new BitSet(new long[]{0x0000000400000002L});
-    public static final BitSet FOLLOW_34_in_elementValuePairs1951 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F9800000000F3L});
+    public static final BitSet FOLLOW_34_in_elementValuePairs1951 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F9800030000F3L});
     public static final BitSet FOLLOW_elementValuePair_in_elementValuePairs1953 = new BitSet(new long[]{0x0000000400000002L});
     public static final BitSet FOLLOW_Identifier_in_elementValuePair1968 = new BitSet(new long[]{0x0000100000000000L});
-    public static final BitSet FOLLOW_44_in_elementValuePair1970 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F9800000000F3L});
+    public static final BitSet FOLLOW_44_in_elementValuePair1970 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F9800030000F3L});
     public static final BitSet FOLLOW_elementValue_in_elementValuePair1974 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_conditionalExpression_in_elementValue1986 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_annotation_in_elementValue1993 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_elementValueArrayInitializer_in_elementValue2000 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_37_in_elementValueArrayInitializer2012 = new BitSet(new long[]{0x7F80016200000FD0L,0x001F9800000000F3L});
+    public static final BitSet FOLLOW_37_in_elementValueArrayInitializer2012 = new BitSet(new long[]{0x7F80016200000FD0L,0x001F9800030000F3L});
     public static final BitSet FOLLOW_elementValue_in_elementValueArrayInitializer2015 = new BitSet(new long[]{0x0000004400000000L});
-    public static final BitSet FOLLOW_34_in_elementValueArrayInitializer2018 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F9800000000F3L});
+    public static final BitSet FOLLOW_34_in_elementValueArrayInitializer2018 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F9800030000F3L});
     public static final BitSet FOLLOW_elementValue_in_elementValueArrayInitializer2020 = new BitSet(new long[]{0x0000004400000000L});
     public static final BitSet FOLLOW_38_in_elementValueArrayInitializer2027 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_71_in_annotationTypeDeclaration2039 = new BitSet(new long[]{0x0000008000000000L});
@@ -21364,7 +22339,7 @@
     public static final BitSet FOLLOW_66_in_annotationMethodRest2192 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000100L});
     public static final BitSet FOLLOW_defaultValue_in_annotationMethodRest2195 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_variableDeclarators_in_annotationConstantRest2212 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_72_in_defaultValue2227 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F9800000000F3L});
+    public static final BitSet FOLLOW_72_in_defaultValue2227 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F9800030000F3L});
     public static final BitSet FOLLOW_elementValue_in_defaultValue2229 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_37_in_block2269 = new BitSet(new long[]{0x7FFFE1E24A000FF0L,0x001F980003FDEAF3L});
     public static final BitSet FOLLOW_blockStatement_in_block2271 = new BitSet(new long[]{0x7FFFE1E24A000FF0L,0x001F980003FDEAF3L});
@@ -21377,9 +22352,9 @@
     public static final BitSet FOLLOW_variableDeclarators_in_localVariableDeclaration2376 = new BitSet(new long[]{0x0000000002000000L});
     public static final BitSet FOLLOW_25_in_localVariableDeclaration2378 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_block_in_statement2390 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_73_in_statement2398 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
+    public static final BitSet FOLLOW_73_in_statement2398 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
     public static final BitSet FOLLOW_expression_in_statement2400 = new BitSet(new long[]{0x0000000002000000L,0x0000000000000400L});
-    public static final BitSet FOLLOW_74_in_statement2403 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
+    public static final BitSet FOLLOW_74_in_statement2403 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
     public static final BitSet FOLLOW_expression_in_statement2405 = new BitSet(new long[]{0x0000000002000000L});
     public static final BitSet FOLLOW_25_in_statement2409 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_75_in_statement2417 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
@@ -21388,7 +22363,7 @@
     public static final BitSet FOLLOW_76_in_statement2431 = new BitSet(new long[]{0x7FFFE1A24A000FF0L,0x001F980003FDEAF3L});
     public static final BitSet FOLLOW_statement_in_statement2433 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_77_in_statement2443 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
-    public static final BitSet FOLLOW_65_in_statement2445 = new BitSet(new long[]{0x7F82012202000FD0L,0x001F9800000000F3L});
+    public static final BitSet FOLLOW_65_in_statement2445 = new BitSet(new long[]{0x7F82012202000FD0L,0x001F9800030000F3L});
     public static final BitSet FOLLOW_forControl_in_statement2447 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
     public static final BitSet FOLLOW_66_in_statement2449 = new BitSet(new long[]{0x7FFFE1A24A000FF0L,0x001F980003FDEAF3L});
     public static final BitSet FOLLOW_statement_in_statement2451 = new BitSet(new long[]{0x0000000000000002L});
@@ -21416,10 +22391,10 @@
     public static final BitSet FOLLOW_51_in_statement2557 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
     public static final BitSet FOLLOW_parExpression_in_statement2559 = new BitSet(new long[]{0x0000002008000000L});
     public static final BitSet FOLLOW_block_in_statement2561 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_83_in_statement2569 = new BitSet(new long[]{0x7F80012202000FD0L,0x001F980000000073L});
+    public static final BitSet FOLLOW_83_in_statement2569 = new BitSet(new long[]{0x7F80012202000FD0L,0x001F980003000073L});
     public static final BitSet FOLLOW_expression_in_statement2571 = new BitSet(new long[]{0x0000000002000000L});
     public static final BitSet FOLLOW_25_in_statement2574 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_84_in_statement2582 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
+    public static final BitSet FOLLOW_84_in_statement2582 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
     public static final BitSet FOLLOW_expression_in_statement2584 = new BitSet(new long[]{0x0000000002000000L});
     public static final BitSet FOLLOW_25_in_statement2586 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_85_in_statement2594 = new BitSet(new long[]{0x0000000002000010L});
@@ -21429,278 +22404,281 @@
     public static final BitSet FOLLOW_Identifier_in_statement2609 = new BitSet(new long[]{0x0000000002000000L});
     public static final BitSet FOLLOW_25_in_statement2612 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_modifyStatement_in_statement2625 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_exitPointsStatement_in_statement2633 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_25_in_statement2641 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_statementExpression_in_statement2649 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_statement2651 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_Identifier_in_statement2659 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
-    public static final BitSet FOLLOW_74_in_statement2661 = new BitSet(new long[]{0x7FFFE1A24A000FF0L,0x001F980003FDEAF3L});
-    public static final BitSet FOLLOW_statement_in_statement2663 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_87_in_modifyStatement2683 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
-    public static final BitSet FOLLOW_parExpression_in_modifyStatement2685 = new BitSet(new long[]{0x0000002000000000L});
-    public static final BitSet FOLLOW_37_in_modifyStatement2692 = new BitSet(new long[]{0x7F80016200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_modifyStatement2700 = new BitSet(new long[]{0x0000004400000000L});
-    public static final BitSet FOLLOW_34_in_modifyStatement2713 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_modifyStatement2717 = new BitSet(new long[]{0x0000004400000000L});
-    public static final BitSet FOLLOW_38_in_modifyStatement2736 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_88_in_exitPointsStatement2786 = new BitSet(new long[]{0x0000020000000000L});
-    public static final BitSet FOLLOW_41_in_exitPointsStatement2788 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_StringLiteral_in_exitPointsStatement2792 = new BitSet(new long[]{0x0000040000000000L});
-    public static final BitSet FOLLOW_42_in_exitPointsStatement2796 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_89_in_exitPointsStatement2822 = new BitSet(new long[]{0x0000020000000000L});
-    public static final BitSet FOLLOW_41_in_exitPointsStatement2824 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_StringLiteral_in_exitPointsStatement2828 = new BitSet(new long[]{0x0000040000000000L});
-    public static final BitSet FOLLOW_42_in_exitPointsStatement2832 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_catchClause_in_catches2873 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L});
-    public static final BitSet FOLLOW_catchClause_in_catches2876 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L});
-    public static final BitSet FOLLOW_90_in_catchClause2890 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
-    public static final BitSet FOLLOW_65_in_catchClause2892 = new BitSet(new long[]{0x7F82000000000010L,0x0000000000000080L});
-    public static final BitSet FOLLOW_formalParameter_in_catchClause2894 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
-    public static final BitSet FOLLOW_66_in_catchClause2896 = new BitSet(new long[]{0x0000002008000000L});
-    public static final BitSet FOLLOW_block_in_catchClause2898 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_variableModifier_in_formalParameter2909 = new BitSet(new long[]{0x7F82000000000010L,0x0000000000000080L});
-    public static final BitSet FOLLOW_type_in_formalParameter2912 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_variableDeclaratorId_in_formalParameter2914 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_switchBlockStatementGroup_in_switchBlockStatementGroups2928 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000100L});
-    public static final BitSet FOLLOW_switchLabel_in_switchBlockStatementGroup2942 = new BitSet(new long[]{0x7FFFE1A24A000FF2L,0x001F980003FDEAF3L});
-    public static final BitSet FOLLOW_blockStatement_in_switchBlockStatementGroup2944 = new BitSet(new long[]{0x7FFFE1A24A000FF2L,0x001F980003FDEAF3L});
-    public static final BitSet FOLLOW_91_in_switchLabel2957 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_constantExpression_in_switchLabel2959 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
-    public static final BitSet FOLLOW_74_in_switchLabel2961 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_91_in_switchLabel2968 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_enumConstantName_in_switchLabel2970 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
-    public static final BitSet FOLLOW_74_in_switchLabel2972 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_72_in_switchLabel2979 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
-    public static final BitSet FOLLOW_74_in_switchLabel2981 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_34_in_moreStatementExpressions2994 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_statementExpression_in_moreStatementExpressions2996 = new BitSet(new long[]{0x0000000400000002L});
-    public static final BitSet FOLLOW_forVarControl_in_forControl3017 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forInit_in_forControl3022 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_forControl3025 = new BitSet(new long[]{0x7F80012202000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_forControl3027 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_forControl3030 = new BitSet(new long[]{0x7F82012200000FD2L,0x001F9800000000F3L});
-    public static final BitSet FOLLOW_forUpdate_in_forControl3032 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_variableModifier_in_forInit3070 = new BitSet(new long[]{0x7F82000000000010L,0x0000000000000080L});
-    public static final BitSet FOLLOW_type_in_forInit3073 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_variableDeclarators_in_forInit3075 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_expressionList_in_forInit3080 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_variableModifier_in_forVarControl3092 = new BitSet(new long[]{0x7F82000000000010L,0x0000000000000080L});
-    public static final BitSet FOLLOW_type_in_forVarControl3095 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_Identifier_in_forVarControl3097 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
-    public static final BitSet FOLLOW_74_in_forVarControl3099 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_forVarControl3101 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_expressionList_in_forUpdate3112 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_65_in_parExpression3125 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_parExpression3127 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
-    public static final BitSet FOLLOW_66_in_parExpression3129 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_expression_in_expressionList3146 = new BitSet(new long[]{0x0000000400000002L});
-    public static final BitSet FOLLOW_34_in_expressionList3149 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_expressionList3151 = new BitSet(new long[]{0x0000000400000002L});
-    public static final BitSet FOLLOW_expression_in_statementExpression3167 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_expression_in_constantExpression3179 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_conditionalExpression_in_expression3191 = new BitSet(new long[]{0x0000100A00000002L,0x0000000FF0000000L});
-    public static final BitSet FOLLOW_assignmentOperator_in_expression3194 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_expression3196 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_44_in_assignmentOperator3210 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_92_in_assignmentOperator3220 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_93_in_assignmentOperator3230 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_94_in_assignmentOperator3240 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_95_in_assignmentOperator3250 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_96_in_assignmentOperator3260 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_97_in_assignmentOperator3270 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_98_in_assignmentOperator3280 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_99_in_assignmentOperator3290 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_33_in_assignmentOperator3300 = new BitSet(new long[]{0x0000000200000000L});
-    public static final BitSet FOLLOW_33_in_assignmentOperator3302 = new BitSet(new long[]{0x0000100000000000L});
-    public static final BitSet FOLLOW_44_in_assignmentOperator3304 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_35_in_assignmentOperator3314 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_35_in_assignmentOperator3316 = new BitSet(new long[]{0x0000100000000000L});
-    public static final BitSet FOLLOW_44_in_assignmentOperator3318 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_35_in_assignmentOperator3328 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_35_in_assignmentOperator3330 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_35_in_assignmentOperator3332 = new BitSet(new long[]{0x0000100000000000L});
-    public static final BitSet FOLLOW_44_in_assignmentOperator3334 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_conditionalOrExpression_in_conditionalExpression3350 = new BitSet(new long[]{0x8000000000000002L});
-    public static final BitSet FOLLOW_63_in_conditionalExpression3354 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_conditionalExpression3356 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
-    public static final BitSet FOLLOW_74_in_conditionalExpression3358 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_conditionalExpression3360 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_conditionalAndExpression_in_conditionalOrExpression3379 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
-    public static final BitSet FOLLOW_100_in_conditionalOrExpression3383 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_conditionalAndExpression_in_conditionalOrExpression3385 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
-    public static final BitSet FOLLOW_inclusiveOrExpression_in_conditionalAndExpression3404 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
-    public static final BitSet FOLLOW_101_in_conditionalAndExpression3408 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_inclusiveOrExpression_in_conditionalAndExpression3410 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
-    public static final BitSet FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression3429 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
-    public static final BitSet FOLLOW_102_in_inclusiveOrExpression3433 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression3435 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
-    public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression3454 = new BitSet(new long[]{0x0000000000000002L,0x0000008000000000L});
-    public static final BitSet FOLLOW_103_in_exclusiveOrExpression3458 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression3460 = new BitSet(new long[]{0x0000000000000002L,0x0000008000000000L});
-    public static final BitSet FOLLOW_equalityExpression_in_andExpression3479 = new BitSet(new long[]{0x0000001000000002L});
-    public static final BitSet FOLLOW_36_in_andExpression3483 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_equalityExpression_in_andExpression3485 = new BitSet(new long[]{0x0000001000000002L});
-    public static final BitSet FOLLOW_instanceOfExpression_in_equalityExpression3504 = new BitSet(new long[]{0x0000000000000002L,0x0000030000000000L});
-    public static final BitSet FOLLOW_set_in_equalityExpression3508 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_instanceOfExpression_in_equalityExpression3516 = new BitSet(new long[]{0x0000000000000002L,0x0000030000000000L});
-    public static final BitSet FOLLOW_relationalExpression_in_instanceOfExpression3535 = new BitSet(new long[]{0x0000000000000002L,0x0000040000000000L});
-    public static final BitSet FOLLOW_106_in_instanceOfExpression3538 = new BitSet(new long[]{0x7F80000000000010L});
-    public static final BitSet FOLLOW_type_in_instanceOfExpression3540 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_shiftExpression_in_relationalExpression3558 = new BitSet(new long[]{0x0000000A00000002L});
-    public static final BitSet FOLLOW_relationalOp_in_relationalExpression3562 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_shiftExpression_in_relationalExpression3564 = new BitSet(new long[]{0x0000000A00000002L});
-    public static final BitSet FOLLOW_33_in_relationalOp3580 = new BitSet(new long[]{0x0000100000000000L});
-    public static final BitSet FOLLOW_44_in_relationalOp3582 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_35_in_relationalOp3586 = new BitSet(new long[]{0x0000100000000000L});
-    public static final BitSet FOLLOW_44_in_relationalOp3588 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_33_in_relationalOp3592 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_35_in_relationalOp3596 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_additiveExpression_in_shiftExpression3613 = new BitSet(new long[]{0x0000000A00000002L});
-    public static final BitSet FOLLOW_shiftOp_in_shiftExpression3617 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_additiveExpression_in_shiftExpression3619 = new BitSet(new long[]{0x0000000A00000002L});
-    public static final BitSet FOLLOW_33_in_shiftOp3643 = new BitSet(new long[]{0x0000000200000000L});
-    public static final BitSet FOLLOW_33_in_shiftOp3645 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_35_in_shiftOp3649 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_35_in_shiftOp3651 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_35_in_shiftOp3653 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_35_in_shiftOp3657 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_35_in_shiftOp3659 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression3677 = new BitSet(new long[]{0x0000000000000002L,0x0000180000000000L});
-    public static final BitSet FOLLOW_set_in_additiveExpression3681 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression3689 = new BitSet(new long[]{0x0000000000000002L,0x0000180000000000L});
-    public static final BitSet FOLLOW_unaryExpression_in_multiplicativeExpression3708 = new BitSet(new long[]{0x0000000020000002L,0x0000600000000000L});
-    public static final BitSet FOLLOW_set_in_multiplicativeExpression3712 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_unaryExpression_in_multiplicativeExpression3726 = new BitSet(new long[]{0x0000000020000002L,0x0000600000000000L});
-    public static final BitSet FOLLOW_107_in_unaryExpression3746 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_unaryExpression_in_unaryExpression3748 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_108_in_unaryExpression3756 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_unaryExpression_in_unaryExpression3758 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_111_in_unaryExpression3768 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_primary_in_unaryExpression3770 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_112_in_unaryExpression3780 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_primary_in_unaryExpression3782 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_unaryExpressionNotPlusMinus_in_unaryExpression3792 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_113_in_unaryExpressionNotPlusMinus3811 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus3813 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_114_in_unaryExpressionNotPlusMinus3822 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus3824 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_castExpression_in_unaryExpressionNotPlusMinus3834 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_primary_in_unaryExpressionNotPlusMinus3844 = new BitSet(new long[]{0x0000020010000002L,0x0001800000000000L});
-    public static final BitSet FOLLOW_selector_in_unaryExpressionNotPlusMinus3846 = new BitSet(new long[]{0x0000020010000002L,0x0001800000000000L});
-    public static final BitSet FOLLOW_set_in_unaryExpressionNotPlusMinus3849 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_65_in_castExpression3872 = new BitSet(new long[]{0x7F80000000000010L});
-    public static final BitSet FOLLOW_primitiveType_in_castExpression3874 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
-    public static final BitSet FOLLOW_66_in_castExpression3876 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_unaryExpression_in_castExpression3878 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_65_in_castExpression3887 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_type_in_castExpression3890 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
-    public static final BitSet FOLLOW_expression_in_castExpression3894 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
-    public static final BitSet FOLLOW_66_in_castExpression3897 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_unaryExpressionNotPlusMinus_in_castExpression3899 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_parExpression_in_primary3916 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_nonWildcardTypeArguments_in_primary3926 = new BitSet(new long[]{0x0000000000000010L,0x0008000000000001L});
-    public static final BitSet FOLLOW_explicitGenericInvocationSuffix_in_primary3937 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_115_in_primary3941 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
-    public static final BitSet FOLLOW_arguments_in_primary3943 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_115_in_primary3954 = new BitSet(new long[]{0x0000020010000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_primary3957 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_Identifier_in_primary3959 = new BitSet(new long[]{0x0000020010000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_identifierSuffix_in_primary3964 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_64_in_primary3976 = new BitSet(new long[]{0x0000000010000000L,0x0000000000000002L});
-    public static final BitSet FOLLOW_superSuffix_in_primary3978 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_literal_in_primary3988 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_116_in_primary3998 = new BitSet(new long[]{0x7F80000200000010L});
-    public static final BitSet FOLLOW_creator_in_primary4000 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_Identifier_in_primary4012 = new BitSet(new long[]{0x0000020010000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_primary4017 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_Identifier_in_primary4019 = new BitSet(new long[]{0x0000020010000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_identifierSuffix_in_primary4024 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_primitiveType_in_primary4036 = new BitSet(new long[]{0x0000020010000000L});
-    public static final BitSet FOLLOW_41_in_primary4039 = new BitSet(new long[]{0x0000040000000000L});
-    public static final BitSet FOLLOW_42_in_primary4041 = new BitSet(new long[]{0x0000020010000000L});
-    public static final BitSet FOLLOW_28_in_primary4045 = new BitSet(new long[]{0x0000000040000000L});
-    public static final BitSet FOLLOW_30_in_primary4047 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_40_in_primary4057 = new BitSet(new long[]{0x0000000010000000L});
-    public static final BitSet FOLLOW_28_in_primary4059 = new BitSet(new long[]{0x0000000040000000L});
-    public static final BitSet FOLLOW_30_in_primary4061 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_41_in_identifierSuffix4073 = new BitSet(new long[]{0x0000040000000000L});
-    public static final BitSet FOLLOW_42_in_identifierSuffix4075 = new BitSet(new long[]{0x0000020010000000L});
-    public static final BitSet FOLLOW_28_in_identifierSuffix4079 = new BitSet(new long[]{0x0000000040000000L});
-    public static final BitSet FOLLOW_30_in_identifierSuffix4081 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_41_in_identifierSuffix4087 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_identifierSuffix4089 = new BitSet(new long[]{0x0000040000000000L});
-    public static final BitSet FOLLOW_42_in_identifierSuffix4091 = new BitSet(new long[]{0x0000020000000002L});
-    public static final BitSet FOLLOW_arguments_in_identifierSuffix4104 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_identifierSuffix4114 = new BitSet(new long[]{0x0000000040000000L});
-    public static final BitSet FOLLOW_30_in_identifierSuffix4116 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_identifierSuffix4126 = new BitSet(new long[]{0x0000000200000000L});
-    public static final BitSet FOLLOW_explicitGenericInvocation_in_identifierSuffix4128 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_identifierSuffix4138 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
-    public static final BitSet FOLLOW_115_in_identifierSuffix4140 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_identifierSuffix4150 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
-    public static final BitSet FOLLOW_64_in_identifierSuffix4152 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
-    public static final BitSet FOLLOW_arguments_in_identifierSuffix4154 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_identifierSuffix4164 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
-    public static final BitSet FOLLOW_116_in_identifierSuffix4166 = new BitSet(new long[]{0x0000000200000010L});
-    public static final BitSet FOLLOW_nonWildcardTypeArguments_in_identifierSuffix4169 = new BitSet(new long[]{0x0000000200000010L});
-    public static final BitSet FOLLOW_innerCreator_in_identifierSuffix4173 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_nonWildcardTypeArguments_in_creator4185 = new BitSet(new long[]{0x7F80000200000010L});
-    public static final BitSet FOLLOW_createdName_in_creator4188 = new BitSet(new long[]{0x0000020000000000L,0x0000000000000002L});
-    public static final BitSet FOLLOW_arrayCreatorRest_in_creator4199 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_classCreatorRest_in_creator4203 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_Identifier_in_createdName4215 = new BitSet(new long[]{0x0000000210000002L});
-    public static final BitSet FOLLOW_typeArguments_in_createdName4217 = new BitSet(new long[]{0x0000000010000002L});
-    public static final BitSet FOLLOW_28_in_createdName4229 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_Identifier_in_createdName4231 = new BitSet(new long[]{0x0000000210000002L});
-    public static final BitSet FOLLOW_typeArguments_in_createdName4233 = new BitSet(new long[]{0x0000000010000002L});
-    public static final BitSet FOLLOW_primitiveType_in_createdName4244 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_Identifier_in_innerCreator4256 = new BitSet(new long[]{0x0000020000000000L,0x0000000000000002L});
-    public static final BitSet FOLLOW_classCreatorRest_in_innerCreator4258 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_41_in_arrayCreatorRest4269 = new BitSet(new long[]{0x7F80052200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_42_in_arrayCreatorRest4283 = new BitSet(new long[]{0x0000022000000000L});
-    public static final BitSet FOLLOW_41_in_arrayCreatorRest4286 = new BitSet(new long[]{0x0000040000000000L});
-    public static final BitSet FOLLOW_42_in_arrayCreatorRest4288 = new BitSet(new long[]{0x0000022000000000L});
-    public static final BitSet FOLLOW_arrayInitializer_in_arrayCreatorRest4292 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_expression_in_arrayCreatorRest4306 = new BitSet(new long[]{0x0000040000000000L});
-    public static final BitSet FOLLOW_42_in_arrayCreatorRest4308 = new BitSet(new long[]{0x0000020000000002L});
-    public static final BitSet FOLLOW_41_in_arrayCreatorRest4311 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_arrayCreatorRest4313 = new BitSet(new long[]{0x0000040000000000L});
-    public static final BitSet FOLLOW_42_in_arrayCreatorRest4315 = new BitSet(new long[]{0x0000020000000002L});
-    public static final BitSet FOLLOW_41_in_arrayCreatorRest4320 = new BitSet(new long[]{0x0000040000000000L});
-    public static final BitSet FOLLOW_42_in_arrayCreatorRest4322 = new BitSet(new long[]{0x0000020000000002L});
-    public static final BitSet FOLLOW_arguments_in_classCreatorRest4345 = new BitSet(new long[]{0x0000002380000002L});
-    public static final BitSet FOLLOW_classBody_in_classCreatorRest4347 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_nonWildcardTypeArguments_in_explicitGenericInvocation4360 = new BitSet(new long[]{0x0000000000000010L,0x0000000000000001L});
-    public static final BitSet FOLLOW_explicitGenericInvocationSuffix_in_explicitGenericInvocation4362 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_33_in_nonWildcardTypeArguments4374 = new BitSet(new long[]{0x7F80000000000010L});
-    public static final BitSet FOLLOW_typeList_in_nonWildcardTypeArguments4376 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_35_in_nonWildcardTypeArguments4378 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_64_in_explicitGenericInvocationSuffix4390 = new BitSet(new long[]{0x0000000010000000L,0x0000000000000002L});
-    public static final BitSet FOLLOW_superSuffix_in_explicitGenericInvocationSuffix4392 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_Identifier_in_explicitGenericInvocationSuffix4399 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
-    public static final BitSet FOLLOW_arguments_in_explicitGenericInvocationSuffix4401 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_selector4413 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_Identifier_in_selector4415 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_arguments_in_selector4418 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_selector4427 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
-    public static final BitSet FOLLOW_115_in_selector4429 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_selector4436 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
-    public static final BitSet FOLLOW_64_in_selector4438 = new BitSet(new long[]{0x0000000010000000L,0x0000000000000002L});
-    public static final BitSet FOLLOW_superSuffix_in_selector4440 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_selector4447 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
-    public static final BitSet FOLLOW_116_in_selector4449 = new BitSet(new long[]{0x0000000200000010L});
-    public static final BitSet FOLLOW_nonWildcardTypeArguments_in_selector4452 = new BitSet(new long[]{0x0000000200000010L});
-    public static final BitSet FOLLOW_innerCreator_in_selector4456 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_41_in_selector4463 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_selector4465 = new BitSet(new long[]{0x0000040000000000L});
-    public static final BitSet FOLLOW_42_in_selector4467 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_arguments_in_superSuffix4479 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_superSuffix4486 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_Identifier_in_superSuffix4488 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_arguments_in_superSuffix4491 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_65_in_arguments4507 = new BitSet(new long[]{0x7F82012200000FD0L,0x001F9800000000F7L});
-    public static final BitSet FOLLOW_expressionList_in_arguments4509 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
-    public static final BitSet FOLLOW_66_in_arguments4512 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_25_in_statement2633 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_statementExpression_in_statement2641 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_statement2643 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_Identifier_in_statement2651 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
+    public static final BitSet FOLLOW_74_in_statement2653 = new BitSet(new long[]{0x7FFFE1A24A000FF0L,0x001F980003FDEAF3L});
+    public static final BitSet FOLLOW_statement_in_statement2655 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_87_in_modifyStatement2675 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
+    public static final BitSet FOLLOW_parExpression_in_modifyStatement2677 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_37_in_modifyStatement2684 = new BitSet(new long[]{0x7F80016200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_modifyStatement2692 = new BitSet(new long[]{0x0000004400000000L});
+    public static final BitSet FOLLOW_34_in_modifyStatement2705 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_modifyStatement2709 = new BitSet(new long[]{0x0000004400000000L});
+    public static final BitSet FOLLOW_38_in_modifyStatement2728 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_88_in_epStatement2778 = new BitSet(new long[]{0x0000020000000000L});
+    public static final BitSet FOLLOW_41_in_epStatement2780 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_StringLiteral_in_epStatement2784 = new BitSet(new long[]{0x0000040000000000L});
+    public static final BitSet FOLLOW_42_in_epStatement2788 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_89_in_epStatement2814 = new BitSet(new long[]{0x0000020000000000L});
+    public static final BitSet FOLLOW_41_in_epStatement2816 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_StringLiteral_in_epStatement2820 = new BitSet(new long[]{0x0000040000000000L});
+    public static final BitSet FOLLOW_42_in_epStatement2824 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_catchClause_in_catches2866 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L});
+    public static final BitSet FOLLOW_catchClause_in_catches2869 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L});
+    public static final BitSet FOLLOW_90_in_catchClause2883 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
+    public static final BitSet FOLLOW_65_in_catchClause2885 = new BitSet(new long[]{0x7F82000000000010L,0x0000000000000080L});
+    public static final BitSet FOLLOW_formalParameter_in_catchClause2887 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
+    public static final BitSet FOLLOW_66_in_catchClause2889 = new BitSet(new long[]{0x0000002008000000L});
+    public static final BitSet FOLLOW_block_in_catchClause2891 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_variableModifier_in_formalParameter2902 = new BitSet(new long[]{0x7F82000000000010L,0x0000000000000080L});
+    public static final BitSet FOLLOW_type_in_formalParameter2905 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_variableDeclaratorId_in_formalParameter2907 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_switchBlockStatementGroup_in_switchBlockStatementGroups2921 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000100L});
+    public static final BitSet FOLLOW_switchLabel_in_switchBlockStatementGroup2935 = new BitSet(new long[]{0x7FFFE1A24A000FF2L,0x001F980003FDEAF3L});
+    public static final BitSet FOLLOW_blockStatement_in_switchBlockStatementGroup2937 = new BitSet(new long[]{0x7FFFE1A24A000FF2L,0x001F980003FDEAF3L});
+    public static final BitSet FOLLOW_91_in_switchLabel2950 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_constantExpression_in_switchLabel2952 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
+    public static final BitSet FOLLOW_74_in_switchLabel2954 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_91_in_switchLabel2961 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_enumConstantName_in_switchLabel2963 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
+    public static final BitSet FOLLOW_74_in_switchLabel2965 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_72_in_switchLabel2972 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
+    public static final BitSet FOLLOW_74_in_switchLabel2974 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_34_in_moreStatementExpressions2987 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_statementExpression_in_moreStatementExpressions2989 = new BitSet(new long[]{0x0000000400000002L});
+    public static final BitSet FOLLOW_forVarControl_in_forControl3010 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forInit_in_forControl3015 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_forControl3018 = new BitSet(new long[]{0x7F80012202000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_forControl3020 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_forControl3023 = new BitSet(new long[]{0x7F82012200000FD2L,0x001F9800030000F3L});
+    public static final BitSet FOLLOW_forUpdate_in_forControl3025 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_variableModifier_in_forInit3063 = new BitSet(new long[]{0x7F82000000000010L,0x0000000000000080L});
+    public static final BitSet FOLLOW_type_in_forInit3066 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_variableDeclarators_in_forInit3068 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_expressionList_in_forInit3073 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_variableModifier_in_forVarControl3085 = new BitSet(new long[]{0x7F82000000000010L,0x0000000000000080L});
+    public static final BitSet FOLLOW_type_in_forVarControl3088 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_Identifier_in_forVarControl3090 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
+    public static final BitSet FOLLOW_74_in_forVarControl3092 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_forVarControl3094 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_expressionList_in_forUpdate3105 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_65_in_parExpression3118 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_parExpression3120 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
+    public static final BitSet FOLLOW_66_in_parExpression3122 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_expression_in_expressionList3139 = new BitSet(new long[]{0x0000000400000002L});
+    public static final BitSet FOLLOW_34_in_expressionList3142 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_expressionList3144 = new BitSet(new long[]{0x0000000400000002L});
+    public static final BitSet FOLLOW_expression_in_statementExpression3160 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_expression_in_constantExpression3172 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_conditionalExpression_in_expression3184 = new BitSet(new long[]{0x0000100A00000002L,0x0000000FF0000000L});
+    public static final BitSet FOLLOW_assignmentOperator_in_expression3187 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_expression3189 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_44_in_assignmentOperator3203 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_92_in_assignmentOperator3213 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_93_in_assignmentOperator3223 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_94_in_assignmentOperator3233 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_95_in_assignmentOperator3243 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_96_in_assignmentOperator3253 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_97_in_assignmentOperator3263 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_98_in_assignmentOperator3273 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_99_in_assignmentOperator3283 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_33_in_assignmentOperator3293 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_assignmentOperator3295 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_44_in_assignmentOperator3297 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_assignmentOperator3307 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_35_in_assignmentOperator3309 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_44_in_assignmentOperator3311 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_assignmentOperator3321 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_35_in_assignmentOperator3323 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_35_in_assignmentOperator3325 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_44_in_assignmentOperator3327 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_conditionalOrExpression_in_conditionalExpression3343 = new BitSet(new long[]{0x8000000000000002L});
+    public static final BitSet FOLLOW_63_in_conditionalExpression3347 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_conditionalExpression3349 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
+    public static final BitSet FOLLOW_74_in_conditionalExpression3351 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_conditionalExpression3353 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_conditionalAndExpression_in_conditionalOrExpression3372 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
+    public static final BitSet FOLLOW_100_in_conditionalOrExpression3376 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_conditionalAndExpression_in_conditionalOrExpression3378 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
+    public static final BitSet FOLLOW_inclusiveOrExpression_in_conditionalAndExpression3397 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_101_in_conditionalAndExpression3401 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_inclusiveOrExpression_in_conditionalAndExpression3403 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression3422 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
+    public static final BitSet FOLLOW_102_in_inclusiveOrExpression3426 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression3428 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
+    public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression3447 = new BitSet(new long[]{0x0000000000000002L,0x0000008000000000L});
+    public static final BitSet FOLLOW_103_in_exclusiveOrExpression3451 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression3453 = new BitSet(new long[]{0x0000000000000002L,0x0000008000000000L});
+    public static final BitSet FOLLOW_equalityExpression_in_andExpression3472 = new BitSet(new long[]{0x0000001000000002L});
+    public static final BitSet FOLLOW_36_in_andExpression3476 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_equalityExpression_in_andExpression3478 = new BitSet(new long[]{0x0000001000000002L});
+    public static final BitSet FOLLOW_instanceOfExpression_in_equalityExpression3497 = new BitSet(new long[]{0x0000000000000002L,0x0000030000000000L});
+    public static final BitSet FOLLOW_set_in_equalityExpression3501 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_instanceOfExpression_in_equalityExpression3509 = new BitSet(new long[]{0x0000000000000002L,0x0000030000000000L});
+    public static final BitSet FOLLOW_relationalExpression_in_instanceOfExpression3528 = new BitSet(new long[]{0x0000000000000002L,0x0000040000000000L});
+    public static final BitSet FOLLOW_106_in_instanceOfExpression3531 = new BitSet(new long[]{0x7F80000000000010L});
+    public static final BitSet FOLLOW_type_in_instanceOfExpression3533 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_shiftExpression_in_relationalExpression3551 = new BitSet(new long[]{0x0000000A00000002L});
+    public static final BitSet FOLLOW_relationalOp_in_relationalExpression3555 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_shiftExpression_in_relationalExpression3557 = new BitSet(new long[]{0x0000000A00000002L});
+    public static final BitSet FOLLOW_33_in_relationalOp3573 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_44_in_relationalOp3575 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_relationalOp3579 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_44_in_relationalOp3581 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_33_in_relationalOp3585 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_relationalOp3589 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_additiveExpression_in_shiftExpression3606 = new BitSet(new long[]{0x0000000A00000002L});
+    public static final BitSet FOLLOW_shiftOp_in_shiftExpression3610 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_additiveExpression_in_shiftExpression3612 = new BitSet(new long[]{0x0000000A00000002L});
+    public static final BitSet FOLLOW_33_in_shiftOp3636 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_shiftOp3638 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_shiftOp3642 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_35_in_shiftOp3644 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_35_in_shiftOp3646 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_shiftOp3650 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_35_in_shiftOp3652 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression3670 = new BitSet(new long[]{0x0000000000000002L,0x0000180000000000L});
+    public static final BitSet FOLLOW_set_in_additiveExpression3674 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression3682 = new BitSet(new long[]{0x0000000000000002L,0x0000180000000000L});
+    public static final BitSet FOLLOW_unaryExpression_in_multiplicativeExpression3701 = new BitSet(new long[]{0x0000000020000002L,0x0000600000000000L});
+    public static final BitSet FOLLOW_set_in_multiplicativeExpression3705 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_unaryExpression_in_multiplicativeExpression3719 = new BitSet(new long[]{0x0000000020000002L,0x0000600000000000L});
+    public static final BitSet FOLLOW_107_in_unaryExpression3739 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_unaryExpression_in_unaryExpression3741 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_108_in_unaryExpression3749 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_unaryExpression_in_unaryExpression3751 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_111_in_unaryExpression3761 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_primary_in_unaryExpression3763 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_112_in_unaryExpression3773 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_primary_in_unaryExpression3775 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_unaryExpressionNotPlusMinus_in_unaryExpression3785 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_113_in_unaryExpressionNotPlusMinus3804 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus3806 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_114_in_unaryExpressionNotPlusMinus3815 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus3817 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_castExpression_in_unaryExpressionNotPlusMinus3827 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_primary_in_unaryExpressionNotPlusMinus3837 = new BitSet(new long[]{0x0000020010000002L,0x0001800000000000L});
+    public static final BitSet FOLLOW_selector_in_unaryExpressionNotPlusMinus3839 = new BitSet(new long[]{0x0000020010000002L,0x0001800000000000L});
+    public static final BitSet FOLLOW_set_in_unaryExpressionNotPlusMinus3842 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_65_in_castExpression3865 = new BitSet(new long[]{0x7F80000000000010L});
+    public static final BitSet FOLLOW_primitiveType_in_castExpression3867 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
+    public static final BitSet FOLLOW_66_in_castExpression3869 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_unaryExpression_in_castExpression3871 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_65_in_castExpression3880 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_type_in_castExpression3883 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
+    public static final BitSet FOLLOW_expression_in_castExpression3887 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
+    public static final BitSet FOLLOW_66_in_castExpression3890 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_unaryExpressionNotPlusMinus_in_castExpression3892 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_parExpression_in_primary3909 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_nonWildcardTypeArguments_in_primary3919 = new BitSet(new long[]{0x0000000000000010L,0x0008000000000001L});
+    public static final BitSet FOLLOW_explicitGenericInvocationSuffix_in_primary3930 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_115_in_primary3934 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
+    public static final BitSet FOLLOW_arguments_in_primary3936 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_115_in_primary3947 = new BitSet(new long[]{0x0000020010000002L,0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_primary3950 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_Identifier_in_primary3952 = new BitSet(new long[]{0x0000020010000002L,0x0000000000000002L});
+    public static final BitSet FOLLOW_identifierSuffix_in_primary3957 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_64_in_primary3969 = new BitSet(new long[]{0x0000000010000000L,0x0000000000000002L});
+    public static final BitSet FOLLOW_superSuffix_in_primary3971 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_epStatement_in_primary3981 = new BitSet(new long[]{0x0000020010000002L,0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_primary3984 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_Identifier_in_primary3986 = new BitSet(new long[]{0x0000020010000002L,0x0000000000000002L});
+    public static final BitSet FOLLOW_identifierSuffix_in_primary3991 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_literal_in_primary4003 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_116_in_primary4013 = new BitSet(new long[]{0x7F80000200000010L});
+    public static final BitSet FOLLOW_creator_in_primary4015 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_Identifier_in_primary4027 = new BitSet(new long[]{0x0000020010000002L,0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_primary4032 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_Identifier_in_primary4034 = new BitSet(new long[]{0x0000020010000002L,0x0000000000000002L});
+    public static final BitSet FOLLOW_identifierSuffix_in_primary4039 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_primitiveType_in_primary4051 = new BitSet(new long[]{0x0000020010000000L});
+    public static final BitSet FOLLOW_41_in_primary4054 = new BitSet(new long[]{0x0000040000000000L});
+    public static final BitSet FOLLOW_42_in_primary4056 = new BitSet(new long[]{0x0000020010000000L});
+    public static final BitSet FOLLOW_28_in_primary4060 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_30_in_primary4062 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_40_in_primary4072 = new BitSet(new long[]{0x0000000010000000L});
+    public static final BitSet FOLLOW_28_in_primary4074 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_30_in_primary4076 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_41_in_identifierSuffix4088 = new BitSet(new long[]{0x0000040000000000L});
+    public static final BitSet FOLLOW_42_in_identifierSuffix4090 = new BitSet(new long[]{0x0000020010000000L});
+    public static final BitSet FOLLOW_28_in_identifierSuffix4094 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_30_in_identifierSuffix4096 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_41_in_identifierSuffix4102 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_identifierSuffix4104 = new BitSet(new long[]{0x0000040000000000L});
+    public static final BitSet FOLLOW_42_in_identifierSuffix4106 = new BitSet(new long[]{0x0000020000000002L});
+    public static final BitSet FOLLOW_arguments_in_identifierSuffix4119 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_identifierSuffix4129 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_30_in_identifierSuffix4131 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_identifierSuffix4141 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_explicitGenericInvocation_in_identifierSuffix4143 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_identifierSuffix4153 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
+    public static final BitSet FOLLOW_115_in_identifierSuffix4155 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_identifierSuffix4165 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
+    public static final BitSet FOLLOW_64_in_identifierSuffix4167 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
+    public static final BitSet FOLLOW_arguments_in_identifierSuffix4169 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_identifierSuffix4179 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
+    public static final BitSet FOLLOW_116_in_identifierSuffix4181 = new BitSet(new long[]{0x0000000200000010L});
+    public static final BitSet FOLLOW_nonWildcardTypeArguments_in_identifierSuffix4184 = new BitSet(new long[]{0x0000000200000010L});
+    public static final BitSet FOLLOW_innerCreator_in_identifierSuffix4188 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_nonWildcardTypeArguments_in_creator4200 = new BitSet(new long[]{0x7F80000200000010L});
+    public static final BitSet FOLLOW_createdName_in_creator4203 = new BitSet(new long[]{0x0000020000000000L,0x0000000000000002L});
+    public static final BitSet FOLLOW_arrayCreatorRest_in_creator4214 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_classCreatorRest_in_creator4218 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_Identifier_in_createdName4230 = new BitSet(new long[]{0x0000000210000002L});
+    public static final BitSet FOLLOW_typeArguments_in_createdName4232 = new BitSet(new long[]{0x0000000010000002L});
+    public static final BitSet FOLLOW_28_in_createdName4244 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_Identifier_in_createdName4246 = new BitSet(new long[]{0x0000000210000002L});
+    public static final BitSet FOLLOW_typeArguments_in_createdName4248 = new BitSet(new long[]{0x0000000010000002L});
+    public static final BitSet FOLLOW_primitiveType_in_createdName4259 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_Identifier_in_innerCreator4271 = new BitSet(new long[]{0x0000020000000000L,0x0000000000000002L});
+    public static final BitSet FOLLOW_classCreatorRest_in_innerCreator4273 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_41_in_arrayCreatorRest4284 = new BitSet(new long[]{0x7F80052200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_42_in_arrayCreatorRest4298 = new BitSet(new long[]{0x0000022000000000L});
+    public static final BitSet FOLLOW_41_in_arrayCreatorRest4301 = new BitSet(new long[]{0x0000040000000000L});
+    public static final BitSet FOLLOW_42_in_arrayCreatorRest4303 = new BitSet(new long[]{0x0000022000000000L});
+    public static final BitSet FOLLOW_arrayInitializer_in_arrayCreatorRest4307 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_expression_in_arrayCreatorRest4321 = new BitSet(new long[]{0x0000040000000000L});
+    public static final BitSet FOLLOW_42_in_arrayCreatorRest4323 = new BitSet(new long[]{0x0000020000000002L});
+    public static final BitSet FOLLOW_41_in_arrayCreatorRest4326 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_arrayCreatorRest4328 = new BitSet(new long[]{0x0000040000000000L});
+    public static final BitSet FOLLOW_42_in_arrayCreatorRest4330 = new BitSet(new long[]{0x0000020000000002L});
+    public static final BitSet FOLLOW_41_in_arrayCreatorRest4335 = new BitSet(new long[]{0x0000040000000000L});
+    public static final BitSet FOLLOW_42_in_arrayCreatorRest4337 = new BitSet(new long[]{0x0000020000000002L});
+    public static final BitSet FOLLOW_arguments_in_classCreatorRest4360 = new BitSet(new long[]{0x0000002380000002L});
+    public static final BitSet FOLLOW_classBody_in_classCreatorRest4362 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_nonWildcardTypeArguments_in_explicitGenericInvocation4375 = new BitSet(new long[]{0x0000000000000010L,0x0000000000000001L});
+    public static final BitSet FOLLOW_explicitGenericInvocationSuffix_in_explicitGenericInvocation4377 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_33_in_nonWildcardTypeArguments4389 = new BitSet(new long[]{0x7F80000000000010L});
+    public static final BitSet FOLLOW_typeList_in_nonWildcardTypeArguments4391 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_35_in_nonWildcardTypeArguments4393 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_64_in_explicitGenericInvocationSuffix4405 = new BitSet(new long[]{0x0000000010000000L,0x0000000000000002L});
+    public static final BitSet FOLLOW_superSuffix_in_explicitGenericInvocationSuffix4407 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_Identifier_in_explicitGenericInvocationSuffix4414 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
+    public static final BitSet FOLLOW_arguments_in_explicitGenericInvocationSuffix4416 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_selector4428 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_Identifier_in_selector4430 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
+    public static final BitSet FOLLOW_arguments_in_selector4433 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_selector4442 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
+    public static final BitSet FOLLOW_115_in_selector4444 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_selector4451 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
+    public static final BitSet FOLLOW_64_in_selector4453 = new BitSet(new long[]{0x0000000010000000L,0x0000000000000002L});
+    public static final BitSet FOLLOW_superSuffix_in_selector4455 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_selector4462 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
+    public static final BitSet FOLLOW_116_in_selector4464 = new BitSet(new long[]{0x0000000200000010L});
+    public static final BitSet FOLLOW_nonWildcardTypeArguments_in_selector4467 = new BitSet(new long[]{0x0000000200000010L});
+    public static final BitSet FOLLOW_innerCreator_in_selector4471 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_41_in_selector4478 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_selector4480 = new BitSet(new long[]{0x0000040000000000L});
+    public static final BitSet FOLLOW_42_in_selector4482 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_arguments_in_superSuffix4494 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_superSuffix4501 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_Identifier_in_superSuffix4503 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
+    public static final BitSet FOLLOW_arguments_in_superSuffix4506 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_65_in_arguments4522 = new BitSet(new long[]{0x7F82012200000FD0L,0x001F9800030000F7L});
+    public static final BitSet FOLLOW_expressionList_in_arguments4524 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
+    public static final BitSet FOLLOW_66_in_arguments4527 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_annotations_in_synpred1_Java70 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_methodDeclaration_in_synpred38_Java577 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_fieldDeclaration_in_synpred39_Java582 = new BitSet(new long[]{0x0000000000000002L});
@@ -21721,45 +22699,48 @@
     public static final BitSet FOLLOW_81_in_synpred155_Java2501 = new BitSet(new long[]{0x0000002008000000L});
     public static final BitSet FOLLOW_block_in_synpred155_Java2503 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_catches_in_synpred156_Java2513 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_91_in_synpred178_Java2957 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_constantExpression_in_synpred178_Java2959 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
-    public static final BitSet FOLLOW_74_in_synpred178_Java2961 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_91_in_synpred179_Java2968 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_enumConstantName_in_synpred179_Java2970 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
-    public static final BitSet FOLLOW_74_in_synpred179_Java2972 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forVarControl_in_synpred181_Java3017 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_variableModifier_in_synpred186_Java3070 = new BitSet(new long[]{0x7F82000000000010L,0x0000000000000080L});
-    public static final BitSet FOLLOW_type_in_synpred186_Java3073 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_variableDeclarators_in_synpred186_Java3075 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_assignmentOperator_in_synpred189_Java3194 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_synpred189_Java3196 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_35_in_synpred200_Java3314 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_35_in_synpred200_Java3316 = new BitSet(new long[]{0x0000100000000000L});
-    public static final BitSet FOLLOW_44_in_synpred200_Java3318 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_relationalOp_in_synpred210_Java3562 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_shiftExpression_in_synpred210_Java3564 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_shiftOp_in_synpred214_Java3617 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_additiveExpression_in_synpred214_Java3619 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_35_in_synpred216_Java3649 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_35_in_synpred216_Java3651 = new BitSet(new long[]{0x0000000800000000L});
-    public static final BitSet FOLLOW_35_in_synpred216_Java3653 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_castExpression_in_synpred228_Java3834 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_65_in_synpred232_Java3872 = new BitSet(new long[]{0x7F80000000000010L});
-    public static final BitSet FOLLOW_primitiveType_in_synpred232_Java3874 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
-    public static final BitSet FOLLOW_66_in_synpred232_Java3876 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_unaryExpression_in_synpred232_Java3878 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_type_in_synpred233_Java3890 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_synpred237_Java3957 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_Identifier_in_synpred237_Java3959 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifierSuffix_in_synpred238_Java3964 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_synpred243_Java4017 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_Identifier_in_synpred243_Java4019 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifierSuffix_in_synpred244_Java4024 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_41_in_synpred250_Java4087 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_synpred250_Java4089 = new BitSet(new long[]{0x0000040000000000L});
-    public static final BitSet FOLLOW_42_in_synpred250_Java4091 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_41_in_synpred266_Java4311 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980000000073L});
-    public static final BitSet FOLLOW_expression_in_synpred266_Java4313 = new BitSet(new long[]{0x0000040000000000L});
-    public static final BitSet FOLLOW_42_in_synpred266_Java4315 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_91_in_synpred177_Java2950 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_constantExpression_in_synpred177_Java2952 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
+    public static final BitSet FOLLOW_74_in_synpred177_Java2954 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_91_in_synpred178_Java2961 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_enumConstantName_in_synpred178_Java2963 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
+    public static final BitSet FOLLOW_74_in_synpred178_Java2965 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forVarControl_in_synpred180_Java3010 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_variableModifier_in_synpred185_Java3063 = new BitSet(new long[]{0x7F82000000000010L,0x0000000000000080L});
+    public static final BitSet FOLLOW_type_in_synpred185_Java3066 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_variableDeclarators_in_synpred185_Java3068 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_assignmentOperator_in_synpred188_Java3187 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_synpred188_Java3189 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_synpred199_Java3307 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_35_in_synpred199_Java3309 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_44_in_synpred199_Java3311 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_relationalOp_in_synpred209_Java3555 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_shiftExpression_in_synpred209_Java3557 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_shiftOp_in_synpred213_Java3610 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_additiveExpression_in_synpred213_Java3612 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_synpred215_Java3642 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_35_in_synpred215_Java3644 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_35_in_synpred215_Java3646 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_castExpression_in_synpred227_Java3827 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_65_in_synpred231_Java3865 = new BitSet(new long[]{0x7F80000000000010L});
+    public static final BitSet FOLLOW_primitiveType_in_synpred231_Java3867 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
+    public static final BitSet FOLLOW_66_in_synpred231_Java3869 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_unaryExpression_in_synpred231_Java3871 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_type_in_synpred232_Java3883 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_synpred236_Java3950 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_Identifier_in_synpred236_Java3952 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_identifierSuffix_in_synpred237_Java3957 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_synpred240_Java3984 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_Identifier_in_synpred240_Java3986 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_identifierSuffix_in_synpred241_Java3991 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_synpred245_Java4032 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_Identifier_in_synpred245_Java4034 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_identifierSuffix_in_synpred246_Java4039 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_41_in_synpred252_Java4102 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_synpred252_Java4104 = new BitSet(new long[]{0x0000040000000000L});
+    public static final BitSet FOLLOW_42_in_synpred252_Java4106 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_41_in_synpred268_Java4326 = new BitSet(new long[]{0x7F80012200000FD0L,0x001F980003000073L});
+    public static final BitSet FOLLOW_expression_in_synpred268_Java4328 = new BitSet(new long[]{0x0000040000000000L});
+    public static final BitSet FOLLOW_42_in_synpred268_Java4330 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -19,10 +19,7 @@
     implements
     ConsequenceBuilder {
 
-    //private final Interceptor assertInterceptor;
-    //private final Interceptor modifyInterceptor;
-
-    private static final Map macros = new HashMap( 5 );
+    private static final Map<String, Macro> macros = new HashMap<String,Macro>( 10 );
     static {
         macros.put( "insert",
                     new Macro() {
@@ -57,7 +54,19 @@
                         public String doMacro() {
                             return "drools.retract";
                         }
-                    } );;
+                    } );
+        macros.put( "entryPoints",
+                    new Macro() {
+                        public String doMacro() {
+                            return "drools.entryPoints";
+                        }
+                    } );
+        macros.put( "exitPoints",
+                    new Macro() {
+                        public String doMacro() {
+                            return "drools.exitPoints";
+                        }
+                    } );
     }
 
     public MVELConsequenceBuilder() {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g	2009-02-25 03:47:07 UTC (rev 25418)
@@ -680,7 +680,6 @@
     | 'continue' Identifier? ';'
     // adding support to drools modify block
     | modifyStatement
-    | exitPointsStatement
     | ';'
     | statementExpression ';'
     | Identifier ':' statement
@@ -706,7 +705,7 @@
         }
 	;	
 	
-exitPointsStatement
+epStatement
 	@init {
 	    JavaInterfacePointsDescr d = null;
 	}
@@ -727,7 +726,7 @@
             d.setEnd( ((CommonToken)$c).getStopIndex() ); 
 	    this.blocks.add( d );
         }
-        )
+        ) 
         ;	
 	
 catches
@@ -906,6 +905,7 @@
         (explicitGenericInvocationSuffix | 'this' arguments)
     |   'this' ('.' Identifier)* (identifierSuffix)?
     |   'super' superSuffix
+    |   epStatement ('.' Identifier)* (identifierSuffix)?
     |   literal
     |   'new' creator
     |   i=Identifier { if( ! "(".equals( input.LT(1) == null ? "" : input.LT(1).getText() ) ) identifiers.add( $i.text );  } ('.' Identifier)* (identifierSuffix)?

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/conf/KnowledgeBaseConfigurationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/conf/KnowledgeBaseConfigurationTest.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/conf/KnowledgeBaseConfigurationTest.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -20,6 +20,8 @@
 
 import org.drools.KnowledgeBaseConfiguration;
 import org.drools.KnowledgeBaseFactory;
+import org.drools.runtime.rule.ConsequenceExceptionHandler;
+import org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler;
 
 /**
  * @author etirelli
@@ -267,8 +269,77 @@
                       config.getProperty( SequentialAgendaOption.PROPERTY_NAME ) );
     }
     
+    public void testAlphaThresholdConfiguration() {
+        // setting the option using the type safe method
+        config.setOption( AlphaThresholdOption.get(5) );
+
+        // checking the type safe getOption() method
+        assertEquals( AlphaThresholdOption.get(5),
+                      config.getOption( AlphaThresholdOption.class ) );
+        // checking the string based getProperty() method
+        assertEquals( "5",
+                      config.getProperty( AlphaThresholdOption.PROPERTY_NAME ) );
+
+        // setting the options using the string based setProperty() method
+        config.setProperty( AlphaThresholdOption.PROPERTY_NAME,
+                            "7" );
+        
+        // checking the type safe getOption() method
+        assertEquals( AlphaThresholdOption.get(7),
+                      config.getOption( AlphaThresholdOption.class ) );
+        // checking the string based getProperty() method
+        assertEquals( "7",
+                      config.getProperty( AlphaThresholdOption.PROPERTY_NAME ) );
+    }
     
+    public void testCompositeKeyDepthConfiguration() {
+        // setting the option using the type safe method
+        config.setOption( CompositeKeyDepthOption.get(1) );
+
+        // checking the type safe getOption() method
+        assertEquals( CompositeKeyDepthOption.get(1),
+                      config.getOption( CompositeKeyDepthOption.class ) );
+        // checking the string based getProperty() method
+        assertEquals( "1",
+                      config.getProperty( CompositeKeyDepthOption.PROPERTY_NAME ) );
+
+        // setting the options using the string based setProperty() method
+        config.setProperty( CompositeKeyDepthOption.PROPERTY_NAME,
+                            "2" );
+        
+        // checking the type safe getOption() method
+        assertEquals( CompositeKeyDepthOption.get(2),
+                      config.getOption( CompositeKeyDepthOption.class ) );
+        // checking the string based getProperty() method
+        assertEquals( "2",
+                      config.getProperty( CompositeKeyDepthOption.PROPERTY_NAME ) );
+    }
     
+    public void testConsequenceExceptionHandlerConfiguration() {
+        Class<? extends ConsequenceExceptionHandler> handler = DefaultConsequenceExceptionHandler.class;
+        // setting the option using the type safe method
+        config.setOption( ConsequenceExceptionHandlerOption.get(handler) );
+
+        // checking the type safe getOption() method
+        assertEquals( ConsequenceExceptionHandlerOption.get(handler),
+                      config.getOption( ConsequenceExceptionHandlerOption.class ) );
+        // checking the string based getProperty() method
+        assertEquals( handler.getName(),
+                      config.getProperty( ConsequenceExceptionHandlerOption.PROPERTY_NAME ) );
+
+        // setting the options using the string based setProperty() method
+        config.setProperty( ConsequenceExceptionHandlerOption.PROPERTY_NAME,
+                            handler.getName() );
+        
+        // checking the type safe getOption() method
+        assertEquals( handler.getName(),
+                      config.getOption( ConsequenceExceptionHandlerOption.class ).getHandler().getName() );
+        // checking the string based getProperty() method
+        assertEquals( handler.getName(),
+                      config.getProperty( ConsequenceExceptionHandlerOption.PROPERTY_NAME ) );
+    }
     
+    
+    
 
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -27,7 +27,6 @@
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilder;
 import org.drools.lang.descr.PackageDescr;
-import org.drools.rule.CompositeMaxDuration;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
 import org.drools.time.SessionPseudoClock;

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -1652,8 +1652,8 @@
         rule += "    l = new ArrayList();\n";
         rule += "    l.add(\"first\");\n";
         rule += "    m.put(\"content\", l);\n";
-        rule += "    System.out.println(m[\"content\"][0]);\n";
-        rule += "    list.add(m[\"content\"][0]);\n";
+        rule += "    System.out.println(((ArrayList)m[\"content\"])[0]);\n";
+        rule += "    list.add(((ArrayList)m[\"content\"])[0]);\n";
         rule += "end";
 
         final PackageBuilder builder = new PackageBuilder();

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessForEachTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessForEachTest.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessForEachTest.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -4,28 +4,21 @@
 import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 import junit.framework.TestCase;
 
-import org.drools.Message;
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.WorkingMemory;
-import org.drools.compiler.DroolsError;
 import org.drools.compiler.PackageBuilder;
-import org.drools.compiler.PackageBuilderErrors;
 import org.drools.process.instance.ProcessInstance;
 import org.drools.rule.Package;
-import org.drools.runtime.ObjectFilter;
-import org.drools.runtime.process.WorkItem;
-import org.drools.runtime.process.WorkItemHandler;
-import org.drools.runtime.process.WorkItemManager;
 
 public class ProcessForEachTest extends TestCase {
     
+    
     public void testOnEntryExit() {
         PackageBuilder builder = new PackageBuilder();
         Reader source = new StringReader(

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -18,8 +18,6 @@
 package org.drools.integrationtests;
 
 import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -68,7 +66,11 @@
         kbuilder.add( ResourceFactory.newClassPathResource( fileName,
                                                                     getClass() ),
                               ResourceType.DRL );
-
+        
+        if( kbuilder.hasErrors() ) {
+            System.out.println(kbuilder.getErrors());
+            return null;
+        }
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
 
@@ -169,4 +171,55 @@
 
     }
 
+    public void testEntryPointReference() throws Exception {
+        // read in the source
+        KnowledgeBase kbase = loadKnowledgeBase( "test_EntryPointReference.drl" );
+        StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+
+        final List<StockTick> results = new ArrayList<StockTick>();
+        session.setGlobal( "results",
+                           results );
+
+        StockTick tick5 = new StockTick( 5,
+                                         "DROO",
+                                         50,
+                                         System.currentTimeMillis() );
+        StockTick tick6 = new StockTick( 6,
+                                         "ACME",
+                                         10,
+                                         System.currentTimeMillis() );
+        StockTick tick7 = new StockTick( 7,
+                                         "ACME",
+                                         30,
+                                         System.currentTimeMillis() );
+        StockTick tick8 = new StockTick( 8,
+                                         "DROO",
+                                         50,
+                                         System.currentTimeMillis() );
+
+        WorkingMemoryEntryPoint entry = session.getWorkingMemoryEntryPoint( "stream1" );
+
+        InternalFactHandle handle5 = (InternalFactHandle) entry.insert( tick5 );
+        InternalFactHandle handle6 = (InternalFactHandle) entry.insert( tick6 );
+        InternalFactHandle handle7 = (InternalFactHandle) entry.insert( tick7 );
+        InternalFactHandle handle8 = (InternalFactHandle) entry.insert( tick8 );
+
+        assertNotNull( handle5 );
+        assertNotNull( handle6 );
+        assertNotNull( handle7 );
+        assertNotNull( handle8 );
+
+        assertTrue( handle5.isEvent() );
+        assertTrue( handle6.isEvent() );
+        assertTrue( handle7.isEvent() );
+        assertTrue( handle8.isEvent() );
+
+        session.fireAllRules();
+
+        assertEquals( 1,
+                      results.size() );
+        assertSame( tick7,
+                    results.get( 0 ) );
+
+    }
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -1,4 +1,4 @@
-// $ANTLR 3.1.1 src/main/resources/org/drools/lang/Tree2TestDRL.g 2009-02-21 09:28:28
+// $ANTLR 3.1.1 src/main/resources/org/drools/lang/Tree2TestDRL.g 2009-02-23 13:33:45
 
 	package org.drools.lang;
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -81,7 +81,7 @@
 
         final GroupElement subrule = new GroupElement( GroupElement.AND );
         subrule.addChild( pattern );
-        final Map map = new HashMap();
+        final Map<String, Declaration> map = new HashMap<String, Declaration>();
         map.put( "cheese",
                  pattern.getDeclaration() );
         declarationResolver.setDeclarations( map );
@@ -122,10 +122,6 @@
                       cheddar.getPrice() );
     }
 
-    public void testKnowledgeHelper() {
-
-    }
-
     public void testImperativeCodeError() throws Exception {
         final Package pkg = new Package( "pkg1" );
         final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
@@ -161,7 +157,7 @@
         final Declaration declaration = new Declaration( "cheese",
                                                          extractor,
                                                          pattern );
-        final Map map = new HashMap();
+        final Map<String, Declaration> map = new HashMap<String, Declaration>();
         map.put( "cheese",
                  declaration );
         declarationResolver.setDeclarations( map );
@@ -317,4 +313,5 @@
                       count );
 
     }
+    
 }

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_EntryPointReference.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_EntryPointReference.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_EntryPointReference.drl	2009-02-25 03:47:07 UTC (rev 25418)
@@ -0,0 +1,32 @@
+package org.drools;
+
+import org.drools.StockTick;
+
+global java.util.List results;
+
+declare StockTick
+    @role( event )
+end
+
+rule "Test entry point 1"
+when
+    $st : StockTick( company == "ACME", price > 10 ) from entry-point "stream1"
+then
+    entryPoints["stream2"].insert( $st );
+end
+
+rule "Test entry point 2"
+    dialect "mvel"
+when
+    $st : StockTick( company == "ACME", price > 20 ) from entry-point "stream2"
+then
+    entryPoints["stream3"].insert( $st );
+end
+
+rule "Test entry point 3"
+when
+    $st : StockTick( ) from entry-point "stream3"
+then
+    results.add( $st );
+end
+

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -28,20 +28,28 @@
 import java.util.Set;
 import java.util.Map.Entry;
 
+import org.drools.base.FireAllRulesRuleBaseUpdateListener;
 import org.drools.common.AgendaGroupFactory;
 import org.drools.common.ArrayAgendaGroupFactory;
 import org.drools.common.PriorityQueueAgendaGroupFactory;
+import org.drools.concurrent.DefaultExecutorService;
+import org.drools.conf.AlphaThresholdOption;
 import org.drools.conf.AssertBehaviorOption;
+import org.drools.conf.CompositeKeyDepthOption;
+import org.drools.conf.ConsequenceExceptionHandlerOption;
 import org.drools.conf.IndexLeftBetaMemoryOption;
 import org.drools.conf.IndexRightBetaMemoryOption;
 import org.drools.conf.KnowledgeBaseOption;
 import org.drools.conf.LogicalOverrideOption;
 import org.drools.conf.MaintainTMSOption;
+import org.drools.conf.MultiValueKnowledgeBaseOption;
 import org.drools.conf.RemoveIdentitiesOption;
 import org.drools.conf.SequentialAgendaOption;
 import org.drools.conf.SequentialOption;
 import org.drools.conf.ShareAlphaNodesOption;
 import org.drools.conf.ShareBetaNodesOption;
+import org.drools.conf.SingleValueKnowledgeBaseOption;
+import org.drools.conflict.DepthConflictResolver;
 import org.drools.definition.process.Process;
 import org.drools.process.core.Context;
 import org.drools.process.core.ParameterDefinition;
@@ -53,6 +61,8 @@
 import org.drools.process.instance.ProcessInstanceFactoryRegistry;
 import org.drools.process.instance.impl.ContextInstanceFactory;
 import org.drools.process.instance.impl.ContextInstanceFactoryRegistry;
+import org.drools.runtime.rule.ConsequenceExceptionHandler;
+import org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler;
 import org.drools.spi.ConflictResolver;
 import org.drools.util.ChainedProperties;
 import org.drools.util.ConfFileUtils;
@@ -243,7 +253,7 @@
             return;
         }
 
-        if ( name.equals( "drools.sequential.agenda" ) ) {
+        if ( name.equals( SequentialAgendaOption.PROPERTY_NAME ) ) {
             setSequentialAgenda( SequentialAgenda.determineSequentialAgenda( StringUtils.isEmpty( value ) ? "sequential" : value ) );
         } else if ( name.equals( SequentialOption.PROPERTY_NAME ) ) {
             setSequential( StringUtils.isEmpty( value ) ? false : Boolean.valueOf( value ) );
@@ -255,9 +265,9 @@
             setShareAlphaNodes( StringUtils.isEmpty( value ) ? false : Boolean.valueOf( value ) );
         } else if ( name.equals( ShareBetaNodesOption.PROPERTY_NAME ) ) {
             setShareBetaNodes( StringUtils.isEmpty( value ) ? false : Boolean.valueOf( value ) );
-        } else if ( name.equals( "drools.alphaNodeHashingThreshold" ) ) {
+        } else if ( name.equals( AlphaThresholdOption.PROPERTY_NAME ) ) {
             setAlphaNodeHashingThreshold( StringUtils.isEmpty( value ) ? 3 : Integer.parseInt( value ) );
-        } else if ( name.equals( "drools.compositeKeyDepth" ) ) {
+        } else if ( name.equals( CompositeKeyDepthOption.PROPERTY_NAME ) ) {
             setCompositeKeyDepth( StringUtils.isEmpty( value ) ? 3 : Integer.parseInt( value ) );
         } else if ( name.equals( IndexLeftBetaMemoryOption.PROPERTY_NAME ) ) {
             setIndexLeftBetaMemory( StringUtils.isEmpty( value ) ? true : Boolean.valueOf( value ) );
@@ -268,13 +278,13 @@
         } else if ( name.equals( LogicalOverrideOption.PROPERTY_NAME ) ) {
             setLogicalOverride( LogicalOverride.determineLogicalOverride( StringUtils.isEmpty( value ) ? "discard" : value ) );
         } else if ( name.equals( "drools.executorService" ) ) {
-            setExecutorService( StringUtils.isEmpty( value ) ? "org.drools.concurrent.DefaultExecutorService" : value );
-        } else if ( name.equals( "drools.consequenceExceptionHandler" ) ) {
-            setConsequenceExceptionHandler( StringUtils.isEmpty( value ) ? "org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler" : value );
+            setExecutorService( StringUtils.isEmpty( value ) ? DefaultExecutorService.class.getName() : value );
+        } else if ( name.equals( ConsequenceExceptionHandlerOption.PROPERTY_NAME ) ) {
+            setConsequenceExceptionHandler( StringUtils.isEmpty( value ) ? DefaultConsequenceExceptionHandler.class.getName() : value );
         } else if ( name.equals( "drools.ruleBaseUpdateHandler" ) ) {
-            setRuleBaseUpdateHandler( StringUtils.isEmpty( value ) ? "org.drools.base.FireAllRulesRuleBaseUpdateListener" : value );
+            setRuleBaseUpdateHandler( StringUtils.isEmpty( value ) ? FireAllRulesRuleBaseUpdateListener.class.getName() : value );
         } else if ( name.equals( "drools.conflictResolver" ) ) {
-            setConflictResolver( RuleBaseConfiguration.determineConflictResolver( StringUtils.isEmpty( value ) ? "org.drools.conflict.DepthConflictResolver" : value ) );
+            setConflictResolver( RuleBaseConfiguration.determineConflictResolver( StringUtils.isEmpty( value ) ? DepthConflictResolver.class.getName() : value ) );
         } else if ( name.equals( "drools.advancedProcessRuleIntegration" ) ) {
             setAdvancedProcessRuleIntegration( StringUtils.isEmpty( value ) ? false : Boolean.valueOf( value ) );
         } else if ( name.equals( "drools.multithreadEvaluation" ) ) {
@@ -292,34 +302,34 @@
             return null;
         }
 
-        if ( name.equals( "drools.sequential.agenda" ) ) {
+        if ( name.equals( SequentialAgendaOption.PROPERTY_NAME ) ) {
             return getSequentialAgenda().toExternalForm();
-        } else if ( name.equals( "drools.sequential" ) ) {
+        } else if ( name.equals( SequentialOption.PROPERTY_NAME ) ) {
             return Boolean.toString( isSequential() );
-        } else if ( name.equals( "drools.maintainTms" ) ) {
+        } else if ( name.equals( MaintainTMSOption.PROPERTY_NAME ) ) {
             return Boolean.toString( isMaintainTms() );
-        } else if ( name.equals( "drools.removeIdentities" ) ) {
+        } else if ( name.equals( RemoveIdentitiesOption.PROPERTY_NAME ) ) {
             return Boolean.toString( isRemoveIdentities() );
-        } else if ( name.equals( "drools.shareAlphaNodes" ) ) {
+        } else if ( name.equals( ShareAlphaNodesOption.PROPERTY_NAME ) ) {
             return Boolean.toString( isShareAlphaNodes() );
-        } else if ( name.equals( "drools.shareBetaNodes" ) ) {
+        } else if ( name.equals( ShareBetaNodesOption.PROPERTY_NAME ) ) {
             return Boolean.toString( isShareBetaNodes() );
-        } else if ( name.equals( "drools.alphaNodeHashingThreshold" ) ) {
+        } else if ( name.equals( AlphaThresholdOption.PROPERTY_NAME ) ) {
             return Integer.toString( getAlphaNodeHashingThreshold() );
-        } else if ( name.equals( "drools.compositeKeyDepth" ) ) {
+        } else if ( name.equals( CompositeKeyDepthOption.PROPERTY_NAME ) ) {
             return Integer.toString( getCompositeKeyDepth() );
-        } else if ( name.equals( "drools.indexLeftBetaMemory" ) ) {
+        } else if ( name.equals( IndexLeftBetaMemoryOption.PROPERTY_NAME ) ) {
             return Boolean.toString( isIndexLeftBetaMemory() );
-        } else if ( name.equals( "drools.indexRightBetaMemory" ) ) {
+        } else if ( name.equals( IndexRightBetaMemoryOption.PROPERTY_NAME ) ) {
             return Boolean.toString( isIndexRightBetaMemory() );
-        } else if ( name.equals( "drools.assertBehaviour" ) ) {
+        } else if ( name.equals( AssertBehaviorOption.PROPERTY_NAME ) ) {
             return getAssertBehaviour().toExternalForm();
         } else if ( name.equals( "drools.logicalOverride" ) ) {
             return getLogicalOverride().toExternalForm();
         } else if ( name.equals( "drools.executorService" ) ) {
             return getExecutorService();
-        } else if ( name.equals( "drools.consequenceExceptionHandler" ) ) {
-            return getConsequenceExceptionHandler().getClass().getName();
+        } else if ( name.equals( ConsequenceExceptionHandlerOption.PROPERTY_NAME ) ) {
+            return getConsequenceExceptionHandler();
         } else if ( name.equals( "drools.ruleBaseUpdateHandler" ) ) {
             return getRuleBaseUpdateHandler();
         } else if ( name.equals( "drools.conflictResolver" ) ) {
@@ -369,36 +379,36 @@
             this.chainedProperties.addProperties( properties );
         }
 
-        setSequentialAgenda( SequentialAgenda.determineSequentialAgenda( this.chainedProperties.getProperty( "drools.sequential.agenda",
+        setSequentialAgenda( SequentialAgenda.determineSequentialAgenda( this.chainedProperties.getProperty( SequentialAgendaOption.PROPERTY_NAME,
                                                                                                              "sequential" ) ) );
 
-        setSequential( Boolean.valueOf( this.chainedProperties.getProperty( "drools.sequential",
+        setSequential( Boolean.valueOf( this.chainedProperties.getProperty( SequentialOption.PROPERTY_NAME,
                                                                             "false" ) ).booleanValue() );
 
-        setMaintainTms( Boolean.valueOf( this.chainedProperties.getProperty( "drools.maintainTms",
+        setMaintainTms( Boolean.valueOf( this.chainedProperties.getProperty( MaintainTMSOption.PROPERTY_NAME,
                                                                              "true" ) ).booleanValue() );
 
         setRemoveIdentities( Boolean.valueOf( this.chainedProperties.getProperty( "drools.removeIdentities",
                                                                                   "false" ) ).booleanValue() );
 
-        setShareAlphaNodes( Boolean.valueOf( this.chainedProperties.getProperty( "drools.shareAlphaNodes",
+        setShareAlphaNodes( Boolean.valueOf( this.chainedProperties.getProperty( ShareAlphaNodesOption.PROPERTY_NAME,
                                                                                  "true" ) ).booleanValue() );
 
-        setShareBetaNodes( Boolean.valueOf( this.chainedProperties.getProperty( "drools.shareBetaNodes",
+        setShareBetaNodes( Boolean.valueOf( this.chainedProperties.getProperty( ShareBetaNodesOption.PROPERTY_NAME,
                                                                                 "true" ) ).booleanValue() );
 
-        setAlphaNodeHashingThreshold( Integer.parseInt( this.chainedProperties.getProperty( "drools.alphaNodeHashingThreshold",
+        setAlphaNodeHashingThreshold( Integer.parseInt( this.chainedProperties.getProperty( AlphaThresholdOption.PROPERTY_NAME,
                                                                                             "3" ) ) );
 
-        setCompositeKeyDepth( Integer.parseInt( this.chainedProperties.getProperty( "drools.compositeKeyDepth",
+        setCompositeKeyDepth( Integer.parseInt( this.chainedProperties.getProperty( CompositeKeyDepthOption.PROPERTY_NAME,
                                                                                     "3" ) ) );
 
-        setIndexLeftBetaMemory( Boolean.valueOf( this.chainedProperties.getProperty( "drools.indexLeftBetaMemory",
+        setIndexLeftBetaMemory( Boolean.valueOf( this.chainedProperties.getProperty( IndexLeftBetaMemoryOption.PROPERTY_NAME,
                                                                                      "true" ) ).booleanValue() );
-        setIndexRightBetaMemory( Boolean.valueOf( this.chainedProperties.getProperty( "drools.indexRightBetaMemory",
+        setIndexRightBetaMemory( Boolean.valueOf( this.chainedProperties.getProperty( IndexRightBetaMemoryOption.PROPERTY_NAME,
                                                                                       "true" ) ).booleanValue() );
 
-        setAssertBehaviour( AssertBehaviour.determineAssertBehaviour( this.chainedProperties.getProperty( "drools.assertBehaviour",
+        setAssertBehaviour( AssertBehaviour.determineAssertBehaviour( this.chainedProperties.getProperty( AssertBehaviorOption.PROPERTY_NAME,
                                                                                                           "identity" ) ) );
         setLogicalOverride( LogicalOverride.determineLogicalOverride( this.chainedProperties.getProperty( "drools.logicalOverride",
                                                                                                           "discard" ) ) );
@@ -406,7 +416,7 @@
         setExecutorService( this.chainedProperties.getProperty( "drools.executorService",
                                                                 "org.drools.concurrent.DefaultExecutorService" ) );
 
-        setConsequenceExceptionHandler( this.chainedProperties.getProperty( "drools.consequenceExceptionHandler",
+        setConsequenceExceptionHandler( this.chainedProperties.getProperty( ConsequenceExceptionHandlerOption.PROPERTY_NAME,
                                                                             "org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler" ) );
 
         setRuleBaseUpdateHandler( this.chainedProperties.getProperty( "drools.ruleBaseUpdateHandler",
@@ -1187,7 +1197,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public <T extends KnowledgeBaseOption> T getOption(Class<T> option) {
+    public <T extends SingleValueKnowledgeBaseOption> T getOption(Class<T> option) {
         if ( MaintainTMSOption.class.equals( option ) ) {
             return (T) (this.maintainTms ? MaintainTMSOption.YES : MaintainTMSOption.NO);
         } else if ( SequentialOption.class.equals( option ) ) {
@@ -1208,39 +1218,57 @@
             return (T) ( ( this.logicalOverride == LogicalOverride.DISCARD ) ? LogicalOverrideOption.DISCARD : LogicalOverrideOption.PRESERVE);
         } else if ( SequentialAgendaOption.class.equals( option ) ) {
             return (T) ( ( this.sequentialAgenda == SequentialAgenda.SEQUENTIAL ) ? SequentialAgendaOption.SEQUENTIAL : SequentialAgendaOption.DYNAMIC);
+        } else if ( AlphaThresholdOption.class.equals( option ) ) {
+            return (T) AlphaThresholdOption.get( alphaNodeHashingThreshold );
+        } else if ( CompositeKeyDepthOption.class.equals( option ) ) {
+            return (T) CompositeKeyDepthOption.get( compositeKeyDepth );
+        } else if ( ConsequenceExceptionHandlerOption.class.equals( option ) ) {
+            Class< ? extends ConsequenceExceptionHandler> handler;
+            try {
+                handler = (Class< ? extends ConsequenceExceptionHandler>) Class.forName( consequenceExceptionHandler );
+            } catch ( ClassNotFoundException e ) {
+                throw new RuntimeDroolsException("Unable to resolve ConsequenceExceptionHandler class: "+consequenceExceptionHandler, e);
+            }
+            return (T) ConsequenceExceptionHandlerOption.get( handler );
         }
         return null;
         
     }
 
-    public <T extends KnowledgeBaseOption> T getOption(Class<T> option,
-                                          String key) {
-        return null;
-    }
-
     public <T extends KnowledgeBaseOption> void setOption(T option) {
         if ( option instanceof MaintainTMSOption ) {
-            this.maintainTms = ((MaintainTMSOption) option).isMaintainTMS();
+            setMaintainTms( ((MaintainTMSOption) option).isMaintainTMS() );
         } else if ( option instanceof SequentialOption ) {
-            this.sequential = ((SequentialOption) option).isSequential();
+            setSequential( ((SequentialOption) option).isSequential() );
         } else if ( option instanceof RemoveIdentitiesOption ) {
-            this.removeIdentities = ((RemoveIdentitiesOption) option).isRemoveIdentities();
+            setRemoveIdentities( ((RemoveIdentitiesOption) option).isRemoveIdentities() );
         } else if ( option instanceof ShareAlphaNodesOption ) {
-            this.shareAlphaNodes = ((ShareAlphaNodesOption) option).isShareAlphaNodes();
+            setShareAlphaNodes( ((ShareAlphaNodesOption) option).isShareAlphaNodes() );
         } else if ( option instanceof ShareBetaNodesOption ) {
-            this.shareBetaNodes = ((ShareBetaNodesOption) option).isShareBetaNodes();
+            setShareBetaNodes( ((ShareBetaNodesOption) option).isShareBetaNodes() );
         } else if ( option instanceof IndexLeftBetaMemoryOption ) {
-            this.indexLeftBetaMemory = ((IndexLeftBetaMemoryOption) option).isIndexLeftBetaMemory();
+            setIndexLeftBetaMemory( ((IndexLeftBetaMemoryOption) option).isIndexLeftBetaMemory() );
         } else if ( option instanceof IndexRightBetaMemoryOption ) {
-            this.indexRightBetaMemory = ((IndexRightBetaMemoryOption) option).isIndexRightBetaMemory();
+            setIndexRightBetaMemory( ((IndexRightBetaMemoryOption) option).isIndexRightBetaMemory() );
         } else if ( option instanceof AssertBehaviorOption ) {
-            this.assertBehaviour = ( option == AssertBehaviorOption.IDENTITY ) ? AssertBehaviour.IDENTITY : AssertBehaviour.EQUALITY;
+            setAssertBehaviour( ( option == AssertBehaviorOption.IDENTITY ) ? AssertBehaviour.IDENTITY : AssertBehaviour.EQUALITY );
         } else if ( option instanceof LogicalOverrideOption ) {
-            this.logicalOverride = ( option == LogicalOverrideOption.DISCARD ) ? LogicalOverride.DISCARD : LogicalOverride.PRESERVE;
+            setLogicalOverride( ( option == LogicalOverrideOption.DISCARD ) ? LogicalOverride.DISCARD : LogicalOverride.PRESERVE );
         } else if ( option instanceof SequentialAgendaOption ) {
-            this.sequentialAgenda = ( option == SequentialAgendaOption.SEQUENTIAL ) ? SequentialAgenda.SEQUENTIAL : SequentialAgenda.DYNAMIC;
-        }
+            setSequentialAgenda( ( option == SequentialAgendaOption.SEQUENTIAL ) ? SequentialAgenda.SEQUENTIAL : SequentialAgenda.DYNAMIC );
+        } else if ( option instanceof AlphaThresholdOption ) {
+            setAlphaNodeHashingThreshold( ((AlphaThresholdOption) option).getThreshold() );
+        } else if ( option instanceof CompositeKeyDepthOption ) {
+            setCompositeKeyDepth( ((CompositeKeyDepthOption) option).getDepth() );
+        } else if ( option instanceof ConsequenceExceptionHandlerOption) {
+            setConsequenceExceptionHandler( ((ConsequenceExceptionHandlerOption) option).getHandler().getName() );
+        } 
 
     }
 
+    public <T extends MultiValueKnowledgeBaseOption> T getOption(Class<T> option,
+                                                                 String key) {
+        return null;
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -20,6 +20,8 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.util.Collections;
+import java.util.Map;
 
 import org.drools.FactException;
 import org.drools.common.InternalWorkingMemoryActions;
@@ -31,48 +33,51 @@
 import org.drools.rule.Rule;
 import org.drools.runtime.ExitPoint;
 import org.drools.runtime.KnowledgeRuntime;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 import org.drools.FactHandle;
 import org.drools.WorkingMemory;
-import org.drools.WorkingMemoryEntryPoint;
 import org.drools.spi.Activation;
 import org.drools.spi.KnowledgeHelper;
 import org.drools.spi.Tuple;
 
 public class DefaultKnowledgeHelper
     implements
-    KnowledgeHelper, Externalizable {
+    KnowledgeHelper,
+    Externalizable {
 
-    private static final long                  serialVersionUID = 400L;
+    private static final long            serialVersionUID = 400L;
 
-    private Rule                               rule;
-    private GroupElement                       subrule;
-    private Activation                         activation;
-    private Tuple                              tuple;
+    private Rule                         rule;
+    private GroupElement                 subrule;
+    private Activation                   activation;
+    private Tuple                        tuple;
     private InternalWorkingMemoryActions workingMemory;
 
     public DefaultKnowledgeHelper() {
 
     }
+
     public DefaultKnowledgeHelper(final WorkingMemory workingMemory) {
         this.workingMemory = (InternalWorkingMemoryActions) workingMemory;
     }
 
-    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        rule    = (Rule)in.readObject();
-        subrule    = (GroupElement)in.readObject();
-        activation    = (Activation)in.readObject();
-        tuple    = (Tuple)in.readObject();
-        workingMemory    = (InternalWorkingMemoryActions)in.readObject();
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        rule = (Rule) in.readObject();
+        subrule = (GroupElement) in.readObject();
+        activation = (Activation) in.readObject();
+        tuple = (Tuple) in.readObject();
+        workingMemory = (InternalWorkingMemoryActions) in.readObject();
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeObject(rule);
-        out.writeObject(subrule);
-        out.writeObject(activation);
-        out.writeObject(tuple);
-        out.writeObject(workingMemory);
+        out.writeObject( rule );
+        out.writeObject( subrule );
+        out.writeObject( activation );
+        out.writeObject( tuple );
+        out.writeObject( workingMemory );
     }
-    
+
     public void setActivation(final Activation agendaItem) {
         this.rule = agendaItem.getRule();
         this.subrule = agendaItem.getSubRule();
@@ -158,21 +163,31 @@
 
     public void modifyRetract(final Object object) {
         FactHandle handle = this.workingMemory.getFactHandleByIdentity( object );
-        this.workingMemory.modifyRetract( handle, rule, activation );
+        this.workingMemory.modifyRetract( handle,
+                                          rule,
+                                          activation );
     }
 
     public void modifyRetract(final FactHandle factHandle) {
-        this.workingMemory.modifyRetract( factHandle, rule, activation );
+        this.workingMemory.modifyRetract( factHandle,
+                                          rule,
+                                          activation );
     }
 
     public void modifyInsert(final Object object) {
         FactHandle handle = this.workingMemory.getFactHandleByIdentity( object );
-        this.workingMemory.modifyInsert( handle, object, rule, activation );
+        this.workingMemory.modifyInsert( handle,
+                                         object,
+                                         rule,
+                                         activation );
     }
 
     public void modifyInsert(final FactHandle factHandle,
                              final Object object) {
-        this.workingMemory.modifyInsert( factHandle, object, rule, activation );
+        this.workingMemory.modifyInsert( factHandle,
+                                         object,
+                                         rule,
+                                         activation );
     }
 
     public Rule getRule() {
@@ -202,9 +217,9 @@
     public WorkingMemory getWorkingMemory() {
         return this.workingMemory;
     }
-    
-    public KnowledgeRuntime getKnowledgeRuntime() {        
-       return new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) this.workingMemory );
+
+    public KnowledgeRuntime getKnowledgeRuntime() {
+        return new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) this.workingMemory );
     }
 
     public Activation getActivation() {
@@ -229,7 +244,8 @@
     //    }
 
     public Object get(final Declaration declaration) {
-        return declaration.getValue( workingMemory, this.tuple.get( declaration ).getObject() );
+        return declaration.getValue( workingMemory,
+                                     this.tuple.get( declaration ).getObject() );
     }
 
     public Declaration getDeclaration(final String identifier) {
@@ -239,10 +255,20 @@
     public void halt() {
         this.workingMemory.halt();
     }
+
     public WorkingMemoryEntryPoint getEntryPoint(String id) {
         return this.workingMemory.getEntryPoints().get( id );
     }
+
     public ExitPoint getExitPoint(String id) {
         return this.workingMemory.getExitPoints().get( id );
     }
+
+    public Map<String, WorkingMemoryEntryPoint> getEntryPoints() {
+        return Collections.unmodifiableMap( this.workingMemory.getEntryPoints() );
+    }
+
+    public Map<String, ExitPoint> getExitPoints() {
+        return Collections.unmodifiableMap( this.workingMemory.getExitPoints() );
+    }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -16,6 +16,9 @@
  * limitations under the License.
  */
 
+import java.util.Collections;
+import java.util.Map;
+
 import org.drools.FactException;
 import org.drools.common.InternalWorkingMemoryActions;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
@@ -191,5 +194,13 @@
 
     public ExitPoint getExitPoint(String id) {
         return this.workingMemory.getExitPoints().get( id );
-    }    
+    }
+
+    public Map<String, WorkingMemoryEntryPoint> getEntryPoints() {
+        return Collections.unmodifiableMap( this.workingMemory.getEntryPoints() );
+    }
+
+    public Map<String, ExitPoint> getExitPoints() {
+        return Collections.unmodifiableMap( this.workingMemory.getExitPoints() );
+    }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -7,10 +7,10 @@
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
- 
+
+import org.drools.WorkingMemory;
 import org.drools.reteoo.LeftTuple;
 import org.drools.rule.Declaration;
-import org.drools.WorkingMemory;
 import org.drools.spi.KnowledgeHelper;
 import org.drools.spi.Tuple;
 import org.mvel2.CompileException;
@@ -19,7 +19,6 @@
 import org.mvel2.integration.impl.BaseVariableResolverFactory;
 import org.mvel2.integration.impl.LocalVariableResolverFactory;
 import org.mvel2.integration.impl.StaticMethodImportResolverFactory;
-import org.mvel2.integration.impl.MapVariableResolver;
  
 public class DroolsMVELFactory extends BaseVariableResolverFactory
         implements

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCompilationUnit.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCompilationUnit.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCompilationUnit.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -52,7 +52,7 @@
 
     private Map<String, Class>              resolvedInputs;
 
-    private static Map                      interceptors  = new HashMap( 1 );
+    private static Map                      interceptors  = new HashMap( 2 );
     static {
         interceptors.put( "Modify",
                           new ModifyInterceptor() );
@@ -242,7 +242,8 @@
         }
 
         parserContext.setInterceptors( interceptors );
-        parserContext.setStrictTypeEnforcement( strictMode );
+        parserContext.setStrongTyping( strictMode );
+        //parserContext.setStrictTypeEnforcement( strictMode );
 
         resolvedInputs = new HashMap<String, Class>( inputIdentifiers.length );
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -117,101 +117,101 @@
     // ------------------------------------------------------------
     // Constants
     // ------------------------------------------------------------
-    protected static final Class[]                           ADD_REMOVE_PROPERTY_CHANGE_LISTENER_ARG_TYPES = new Class[]{PropertyChangeListener.class};
-    private static final int                                 NODE_MEMORIES_ARRAY_GROWTH                    = 32;
+    protected static final Class[]                                            ADD_REMOVE_PROPERTY_CHANGE_LISTENER_ARG_TYPES = new Class[]{PropertyChangeListener.class};
+    private static final int                                                  NODE_MEMORIES_ARRAY_GROWTH                    = 32;
 
     // ------------------------------------------------------------
     // Instance members
     // ------------------------------------------------------------
-    protected long                                           id;
+    protected long                                                            id;
 
     /** The arguments used when adding/removing a property change listener. */
-    protected Object[]                                       addRemovePropertyChangeListenerArgs;
+    protected Object[]                                                        addRemovePropertyChangeListenerArgs;
 
     /** The actual memory for the <code>JoinNode</code>s. */
-    protected NodeMemories                                   nodeMemories;
+    protected NodeMemories                                                    nodeMemories;
 
-    protected ObjectStore                                    objectStore;
+    protected ObjectStore                                                     objectStore;
 
-    protected Map                                            queryResults;
+    protected Map                                                             queryResults;
 
     /** Global values which are associated with this memory. */
-    protected GlobalResolver                                 globalResolver;
+    protected GlobalResolver                                                  globalResolver;
 
     /** The eventSupport */
-    protected WorkingMemoryEventSupport                      workingMemoryEventSupport;
+    protected WorkingMemoryEventSupport                                       workingMemoryEventSupport;
 
-    protected AgendaEventSupport                             agendaEventSupport;
+    protected AgendaEventSupport                                              agendaEventSupport;
 
-    protected RuleFlowEventSupport                           workflowEventSupport;
+    protected RuleFlowEventSupport                                            workflowEventSupport;
 
-    protected List                                           __ruleBaseEventListeners;
+    protected List                                                            __ruleBaseEventListeners;
 
     /** The <code>RuleBase</code> with which this memory is associated. */
-    protected transient InternalRuleBase                     ruleBase;
+    protected transient InternalRuleBase                                      ruleBase;
 
-    protected FactHandleFactory                              handleFactory;
+    protected FactHandleFactory                                               handleFactory;
 
-    protected TruthMaintenanceSystem                         tms;
+    protected TruthMaintenanceSystem                                          tms;
 
     /** Rule-firing agenda. */
-    protected InternalAgenda                                 agenda;
+    protected InternalAgenda                                                  agenda;
 
-    protected Queue<WorkingMemoryAction>                     actionQueue;
+    protected Queue<WorkingMemoryAction>                                      actionQueue;
 
-    protected volatile boolean                               evaluatingActionQueue;
+    protected volatile boolean                                                evaluatingActionQueue;
 
-    protected ReentrantLock                                  lock;
+    protected ReentrantLock                                                   lock;
 
-    protected boolean                                        discardOnLogicalOverride;
+    protected boolean                                                         discardOnLogicalOverride;
 
     /**
      * This must be thread safe as it is incremented and read via different
      * EntryPoints
      */
-    protected AtomicLong                                     propagationIdCounter;
+    protected AtomicLong                                                      propagationIdCounter;
 
-    private boolean                                          maintainTms;
-    private boolean                                          sequential;
+    private boolean                                                           maintainTms;
+    private boolean                                                           sequential;
 
-    private List                                             liaPropagations;
+    private List                                                              liaPropagations;
 
     /** Flag to determine if a rule is currently being fired. */
-    protected volatile AtomicBoolean                         firing;
+    protected volatile AtomicBoolean                                          firing;
 
-    private ProcessInstanceManager                           processInstanceManager;
+    private ProcessInstanceManager                                            processInstanceManager;
 
-    private WorkItemManager                                  workItemManager;
+    private WorkItemManager                                                   workItemManager;
 
-    private TimerManager                                     timerManager;
+    private TimerManager                                                      timerManager;
 
-    private SignalManager									 signalManager;
+    private SignalManager                                                     signalManager;
 
-    private TimeMachine                                      timeMachine;
+    private TimeMachine                                                       timeMachine;
 
-    protected transient ObjectTypeConfigurationRegistry      typeConfReg;
+    protected transient ObjectTypeConfigurationRegistry                       typeConfReg;
 
-    protected EntryPoint                                     entryPoint;
-    protected transient EntryPointNode                       entryPointNode;
+    protected EntryPoint                                                      entryPoint;
+    protected transient EntryPointNode                                        entryPointNode;
 
-    protected Map<String, WorkingMemoryEntryPoint>           entryPoints;
+    protected Map<String, WorkingMemoryEntryPoint>                            entryPoints;
 
-    protected InternalFactHandle                             initialFactHandle;
+    protected InternalFactHandle                                              initialFactHandle;
 
-    protected SessionConfiguration                           config;
+    protected SessionConfiguration                                            config;
 
-    protected Map<RuleBasePartitionId, PartitionTaskManager> partitionManagers;
+    protected Map<RuleBasePartitionId, PartitionTaskManager>                  partitionManagers;
 
-    protected transient AtomicReference<java.util.concurrent.ExecutorService> threadPool = new AtomicReference<java.util.concurrent.ExecutorService>();
+    protected transient AtomicReference<java.util.concurrent.ExecutorService> threadPool                                    = new AtomicReference<java.util.concurrent.ExecutorService>();
 
-    private Map<InternalFactHandle, PropagationContext>      modifyContexts;
-    
-    private KnowledgeRuntime                                 kruntime;
-    
-    private Map<String, ExitPoint>                           exitPoints;
+    private Map<InternalFactHandle, PropagationContext>                       modifyContexts;
 
-    private Environment                                      environment;
-    
+    private KnowledgeRuntime                                                  kruntime;
+
+    private Map<String, ExitPoint>                                            exitPoints;
+
+    private Environment                                                       environment;
+
     // ------------------------------------------------------------
     // Constructors
     // ------------------------------------------------------------
@@ -229,8 +229,7 @@
                                  final InternalRuleBase ruleBase,
                                  final FactHandleFactory handleFactory,
                                  final SessionConfiguration config,
-                                 final Environment environment)
-    {
+                                 final Environment environment) {
         this( id,
               ruleBase,
               handleFactory,
@@ -305,16 +304,12 @@
             this.discardOnLogicalOverride = false;
         }
 
-        this.entryPoints = new ConcurrentHashMap();
-        this.entryPoints.put( "DEFAULT",
-                              this );
-
-        this.entryPoint = EntryPoint.DEFAULT;
+        initEntryPointsMap();
         this.firing = new AtomicBoolean( false );
         this.modifyContexts = new HashMap<InternalFactHandle, PropagationContext>();
         this.exitPoints = new ConcurrentHashMap<String, ExitPoint>();
         //setGlobal( "exitPoints", Collections.unmodifiableMap( this.exitPoints ) );
-		initProcessEventListeners();
+        initProcessEventListeners();
         initPartitionManagers();
         initTransient();
     }
@@ -329,6 +324,24 @@
         initTransient();
     }
 
+    private void initEntryPointsMap() {
+        this.entryPoints = new ConcurrentHashMap<String, WorkingMemoryEntryPoint>();
+        this.entryPoints.put( "DEFAULT",
+                              this );
+        this.entryPoint = EntryPoint.DEFAULT;
+
+        for ( EntryPointNode entryPointNode : this.ruleBase.getRete().getEntryPointNodes().values() ) {
+            EntryPoint id = entryPointNode.getEntryPoint();
+            if( !  EntryPoint.DEFAULT.equals( id ) ) {
+                WorkingMemoryEntryPoint wmEntryPoint = new NamedEntryPoint( id,
+                                                                            entryPointNode,
+                                                                            this );
+                this.entryPoints.put( entryPointNode.getEntryPoint().getEntryPointId(),
+                                      wmEntryPoint );
+            }
+        }
+    }
+
     /**
      * Creates the actual partition managers and their tasks for multi-thread
      * processing
@@ -353,7 +366,8 @@
     public void startPartitionManagers() {
         if ( this.ruleBase.getConfiguration().isMultithreadEvaluation() ) {
             int maxThreads = (this.ruleBase.getConfiguration().getMaxThreads() > 0) ? this.ruleBase.getConfiguration().getMaxThreads() : this.ruleBase.getPartitionIds().size();
-            if( this.threadPool.compareAndSet( null, Executors.newFixedThreadPool( maxThreads ) ) ) {
+            if ( this.threadPool.compareAndSet( null,
+                                                Executors.newFixedThreadPool( maxThreads ) ) ) {
                 for ( PartitionTaskManager task : this.partitionManagers.values() ) {
                     task.setPool( this.threadPool.get() );
                 }
@@ -364,7 +378,8 @@
     public void stopPartitionManagers() {
         if ( this.ruleBase.getConfiguration().isMultithreadEvaluation() ) {
             java.util.concurrent.ExecutorService service = this.threadPool.get();
-            if( this.threadPool.compareAndSet( service, null ) ) {
+            if ( this.threadPool.compareAndSet( service,
+                                                null ) ) {
                 service.shutdown();
                 for ( PartitionTaskManager task : this.partitionManagers.values() ) {
                     task.setPool( null );
@@ -372,7 +387,7 @@
             }
         }
     }
-    
+
     public boolean isPartitionManagersActive() {
         return this.threadPool.get() != null;
     }
@@ -381,9 +396,9 @@
         this.entryPointNode = this.ruleBase.getRete().getEntryPointNode( this.entryPoint );
         this.typeConfReg = new ObjectTypeConfigurationRegistry( this.ruleBase );
     }
-    
+
     public SessionConfiguration getSessionConfiguration() {
-    	return this.config;
+        return this.config;
     }
 
     public void reset(int handleId,
@@ -538,7 +553,7 @@
             this.lock.unlock();
         }
     }
-    
+
     public Environment getEnvironment() {
         return this.environment;
     }
@@ -1532,7 +1547,7 @@
         if ( process == null ) {
             throw new IllegalArgumentException( "Unknown process ID: " + processId );
         }
-        ProcessInstance processInstance = ( ProcessInstance ) getProcessInstance( process );
+        ProcessInstance processInstance = (ProcessInstance) getProcessInstance( process );
         processInstance.setWorkingMemory( this );
         processInstance.setProcess( process );
         processInstanceManager.addProcessInstance( processInstance );
@@ -1579,7 +1594,7 @@
     }
 
     public Collection<ProcessInstance> getProcessInstances() {
-        return ( Collection<ProcessInstance> ) processInstanceManager.getProcessInstances();
+        return (Collection<ProcessInstance>) processInstanceManager.getProcessInstances();
     }
 
     public ProcessInstance getProcessInstance(long id) {
@@ -1605,65 +1620,80 @@
     }
 
     public SignalManager getSignalManager() {
-    	return signalManager;
+        return signalManager;
     }
 
-	private void initProcessEventListeners() {
-		for (Process process: ruleBase.getProcesses()) {
-			if (process instanceof RuleFlowProcess) {
-				StartNode startNode = ((RuleFlowProcess) process).getStart();
-				List<Trigger> triggers = startNode.getTriggers();
-				if (triggers != null) {
-					for (Trigger trigger: triggers) {
-						if (trigger instanceof EventTrigger) {
-							final List<EventFilter> filters = ((EventTrigger) trigger).getEventFilters();
-							String type = null;
-							for (EventFilter filter: filters) {
-								if (filter instanceof EventTypeFilter) {
-									type = ((EventTypeFilter) filter).getType();
-								}
-							}
-							getSignalManager().addEventListener(type, new StartProcessEventListener(process.getId(), filters, trigger.getInMappings()));
-						}
-					}
-				}
-			}
-		}
-	}
-	
-	private class StartProcessEventListener implements EventListener {
-		private String processId;
-		private List<EventFilter> eventFilters;
-		private Map<String, String> inMappings;
-		public StartProcessEventListener(String processId, List<EventFilter> eventFilters, Map<String, String> inMappings) {
-			this.processId = processId;
-			this.eventFilters = eventFilters;
-			this.inMappings = inMappings;
-		}
-		public String[] getEventTypes() {
-			return null;
-		}
-		public void signalEvent(String type, Object event) {
-			for (EventFilter filter: eventFilters) {
-				if (!filter.acceptsEvent(type, event)) {
-					return;
-				}
-			}
-			Map<String, Object> params = null;
-			if (inMappings != null && !inMappings.isEmpty()) {
-				 params = new HashMap<String, Object>();
-				 for (Map.Entry<String, String> entry: inMappings.entrySet()) {
-					 if ("event".equals(entry.getValue())) {
-						 params.put(entry.getKey(), event);
-					 } else {
-						 params.put(entry.getKey(), entry.getValue());
-					 }
-				 }
-			}
-			startProcess(processId, params);
-		}
-	}
+    private void initProcessEventListeners() {
+        for ( Process process : ruleBase.getProcesses() ) {
+            if ( process instanceof RuleFlowProcess ) {
+                StartNode startNode = ((RuleFlowProcess) process).getStart();
+                List<Trigger> triggers = startNode.getTriggers();
+                if ( triggers != null ) {
+                    for ( Trigger trigger : triggers ) {
+                        if ( trigger instanceof EventTrigger ) {
+                            final List<EventFilter> filters = ((EventTrigger) trigger).getEventFilters();
+                            String type = null;
+                            for ( EventFilter filter : filters ) {
+                                if ( filter instanceof EventTypeFilter ) {
+                                    type = ((EventTypeFilter) filter).getType();
+                                }
+                            }
+                            getSignalManager().addEventListener( type,
+                                                                 new StartProcessEventListener( process.getId(),
+                                                                                                filters,
+                                                                                                trigger.getInMappings() ) );
+                        }
+                    }
+                }
+            }
+        }
+    }
 
+    private class StartProcessEventListener
+        implements
+        EventListener {
+        private String              processId;
+        private List<EventFilter>   eventFilters;
+        private Map<String, String> inMappings;
+
+        public StartProcessEventListener(String processId,
+                                         List<EventFilter> eventFilters,
+                                         Map<String, String> inMappings) {
+            this.processId = processId;
+            this.eventFilters = eventFilters;
+            this.inMappings = inMappings;
+        }
+
+        public String[] getEventTypes() {
+            return null;
+        }
+
+        public void signalEvent(String type,
+                                Object event) {
+            for ( EventFilter filter : eventFilters ) {
+                if ( !filter.acceptsEvent( type,
+                                           event ) ) {
+                    return;
+                }
+            }
+            Map<String, Object> params = null;
+            if ( inMappings != null && !inMappings.isEmpty() ) {
+                params = new HashMap<String, Object>();
+                for ( Map.Entry<String, String> entry : inMappings.entrySet() ) {
+                    if ( "event".equals( entry.getValue() ) ) {
+                        params.put( entry.getKey(),
+                                    event );
+                    } else {
+                        params.put( entry.getKey(),
+                                    entry.getValue() );
+                    }
+                }
+            }
+            startProcess( processId,
+                          params );
+        }
+    }
+
     public TimerManager getTimerManager() {
         return timerManager;
     }
@@ -1732,21 +1762,6 @@
 
     public WorkingMemoryEntryPoint getWorkingMemoryEntryPoint(String name) {
         WorkingMemoryEntryPoint wmEntryPoint = this.entryPoints.get( name );
-        if ( wmEntryPoint == null ) {
-            EntryPoint entryPoint = new EntryPoint( name );
-            EntryPointNode entryPointNode = this.ruleBase.getRete().getEntryPointNode( entryPoint );
-
-            if ( entryPointNode != null ) {
-                wmEntryPoint = new NamedEntryPoint( entryPoint,
-                                                    entryPointNode,
-                                                    this );
-            }
-
-            if ( wmEntryPoint != null ) {
-                this.entryPoints.put( name,
-                                      wmEntryPoint );
-            }
-        }
         return wmEntryPoint;
     }
 
@@ -1813,29 +1828,31 @@
         this.stopPartitionManagers();
         this.timerManager.dispose();
     }
-    
+
     public void setKnowledgeRuntime(KnowledgeRuntime kruntime) {
         this.kruntime = kruntime;
     }
-    
+
     public KnowledgeRuntime getKnowledgeRuntime() {
         return this.kruntime;
-    }       
-    
-	public void registerExitPoint(String name, ExitPoint exitPoint) {
-		this.exitPoints.put(name, exitPoint);
-	}
+    }
 
-	public void unregisterExitPoint(String name) {
-		this.exitPoints.remove( name );
-	}    
-	
-	public Map<String, ExitPoint> getExitPoints() {
-		return this.exitPoints;
-	}
-	
-	public Map<String, WorkingMemoryEntryPoint> getEntryPoints() {
-	    return this.entryPoints;
-	}
+    public void registerExitPoint(String name,
+                                  ExitPoint exitPoint) {
+        this.exitPoints.put( name,
+                             exitPoint );
+    }
 
+    public void unregisterExitPoint(String name) {
+        this.exitPoints.remove( name );
+    }
+
+    public Map<String, ExitPoint> getExitPoints() {
+        return this.exitPoints;
+    }
+
+    public Map<String, WorkingMemoryEntryPoint> getEntryPoints() {
+        return this.entryPoints;
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -860,35 +860,43 @@
     }
 
     /**
-     * Fire the next scheduled <code>Agenda</code> item.
+     * Fire the next scheduled <code>Agenda</code> item, skipping items
+     * that are not allowed by the agenda filter.
      * 
+     * @return true if an activation was fired. false if no more activations 
+     *              to fire
+     * 
      * @throws ConsequenceException
      *             If an error occurs while firing an agenda item.
      */
     public boolean fireNextItem(final AgendaFilter filter) throws ConsequenceException {
-        final InternalAgendaGroup group = (InternalAgendaGroup) getNextFocus();
+        boolean tryagain, result;
+        do {
+            tryagain = result = false;
+            final InternalAgendaGroup group = (InternalAgendaGroup) getNextFocus();
+            // if there is a group with focus
+            if ( group != null ) {
+                final AgendaItem item = (AgendaItem) group.getNext();
+                // if there is an item to fire from that group
+                if ( item != null ) {
+                    // if that item is allowed to fire
+                    if ( filter == null || filter.accept( item ) ) {
+                        // fire it
+                        fireActivation( item );
+                        result = true;
+                    } else {
+                        // otherwise cancel it and try the next
+                        final EventSupport eventsupport = (EventSupport) this.workingMemory;
 
-        // return if there are no Activations to fire
-        if ( group == null ) {
-            return false;
-        }
-
-        final AgendaItem item = (AgendaItem) group.getNext();
-        if ( item == null ) {
-            return false;
-        }
-
-        if ( filter == null || filter.accept( item ) ) {
-            fireActivation( item );
-        } else {
-            final EventSupport eventsupport = (EventSupport) this.workingMemory;
-            
-            eventsupport.getAgendaEventSupport().fireActivationCancelled( item,
-                                                                          this.workingMemory,
-                                                                          ActivationCancelledCause.FILTER );
-        }
-
-        return true;
+                        eventsupport.getAgendaEventSupport().fireActivationCancelled( item,
+                                                                                      this.workingMemory,
+                                                                                      ActivationCancelledCause.FILTER );
+                        tryagain = true;
+                    }
+                }
+            }
+        } while ( tryagain );
+        return result;
     }
 
     /**

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -7,7 +7,6 @@
 import org.drools.FactHandle;
 import org.drools.SessionConfiguration;
 import org.drools.WorkingMemory;
-import org.drools.WorkingMemoryEntryPoint;
 import org.drools.concurrent.ExecutorService;
 import org.drools.event.AgendaEventSupport;
 import org.drools.event.RuleFlowEventSupport;
@@ -20,6 +19,7 @@
 import org.drools.rule.TimeMachine;
 import org.drools.runtime.ExitPoint;
 import org.drools.runtime.KnowledgeRuntime;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 import org.drools.spi.Activation;
 import org.drools.spi.FactHandleFactory;
 import org.drools.spi.PropagationContext;
@@ -126,7 +126,7 @@
     
     public Map<String, ExitPoint> getExitPoints();
     
-    public Map<String, WorkingMemoryEntryPoint> getEntryPoints();
+    public Map<String, ? extends WorkingMemoryEntryPoint> getEntryPoints();
 
     public SessionConfiguration getSessionConfiguration();
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -1,8 +1,5 @@
 package org.drools.impl;
 
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -36,7 +33,6 @@
 import org.drools.runtime.StatelessKnowledgeSession;
 import org.drools.runtime.StatelessKnowledgeSessionResults;
 import org.drools.spi.AgendaFilter;
-import org.drools.spi.GlobalResolver;
 
 public class StatelessKnowledgeSessionImpl
     implements

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -239,4 +239,8 @@
         ruleBase = ((DroolsObjectInputStream)in).getRuleBase();
         super.readExternal( in );
     }
+
+    public Map<EntryPoint,EntryPointNode> getEntryPointNodes() {
+        return this.entryPoints;
+    }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java	2009-02-25 03:28:53 UTC (rev 25417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java	2009-02-25 03:47:07 UTC (rev 25418)
@@ -17,6 +17,7 @@
  */
 
 import java.io.Serializable;
+import java.util.Map;
 
 import org.drools.FactException;
 import org.drools.FactHandle;
@@ -114,7 +115,11 @@
     
     WorkingMemoryEntryPoint getEntryPoint( String id );
     
+    Map<String, WorkingMemoryEntryPoint> getEntryPoints();
+    
     ExitPoint getExitPoint( String id );
+    
+    Map<String, ExitPoint> getExitPoints();
 
     void setFocus(String focus);
 




More information about the jboss-svn-commits mailing list