Merge remote-tracking branch 'origin/master' into amakeev/debugger
authorAnton Makeev <Anton.Makeev@jetbrains.com>
Wed, 11 May 2016 19:24:51 +0000 (21:24 +0200)
committerAnton Makeev <Anton.Makeev@jetbrains.com>
Wed, 11 May 2016 19:24:51 +0000 (21:24 +0200)
67 files changed:
RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java
build/scripts/download_jre.gant [new file with mode: 0644]
java/compiler/impl/src/com/intellij/packaging/impl/elements/LibraryPackagingElement.java
java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java
java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java
java/java-impl/gen/com/intellij/spi/parsing/_SPILexer.java
java/java-impl/src/com/intellij/spi/parsing/_SPILexer.flex
java/java-psi-impl/gen/com/intellij/lang/java/lexer/_JavaDocLexer.java
java/java-psi-impl/gen/com/intellij/lang/java/lexer/_JavaLexer.java
java/java-psi-impl/src/com/intellij/lang/java/lexer/_JavaDocLexer.flex
java/java-psi-impl/src/com/intellij/lang/java/lexer/_JavaLexer.flex
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterMultipleConstructorsWithOneCandidateWithCorrectParamNumber.java [new file with mode: 0644]
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeMultipleConstructorsWithOneCandidateWithCorrectParamNumber.java [new file with mode: 0644]
platform/configuration-store-impl/src/StorageBaseEx.kt
platform/core-api/src/com/intellij/psi/PsiReferenceBase.java
platform/lang-impl/gen/com/intellij/codeInsight/template/impl/_MacroLexer.java
platform/lang-impl/gen/com/intellij/codeInsight/template/impl/_TemplateTextLexer.java
platform/lang-impl/gen/com/intellij/ide/fileTemplates/impl/FileTemplateTextLexer.java
platform/lang-impl/gen/com/intellij/psi/search/scope/packageSet/lexer/_ScopesLexer.java
platform/lang-impl/src/com/intellij/codeInsight/template/impl/ListTemplatesHandler.java
platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleManagerBase.java
platform/lang-impl/src/com/intellij/psi/search/scope/packageSet/lexer/_ScopesLexer.flex
platform/platform-api/src/com/intellij/execution/process/CapturingProcessHandler.java
platform/platform-api/src/com/intellij/execution/process/ProcessOutput.java
platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/MacIntelliJPasswordFieldUI.java
platform/util/src/com/intellij/execution/process/BaseOSProcessHandler.java
platform/util/src/com/intellij/openapi/diagnostic/DefaultLogger.java
platform/util/src/com/intellij/util/ExceptionUtil.java
platform/util/src/com/intellij/util/io/BaseOutputReader.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/CallbackData.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/FictiveBackgroundable.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/Waiter.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowser.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesBrowserBase.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/MultipleChangeListBrowser.java
platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java
plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/META-INF/InspectionGadgets.xml
plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties
plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ControlFlowUtils.java
plugins/InspectionGadgets/src/com/siyeh/ig/performance/ObjectInstantiationInEqualsHashCodeInspection.java [new file with mode: 0644]
plugins/InspectionGadgets/src/inspectionDescriptions/ObjectInstantiationInEqualsHashCode.html [new file with mode: 0644]
plugins/InspectionGadgets/test/com/siyeh/igtest/performance/object_instantiation_in_equals_hash_code/ObjectInstantiationInEqualsHashCode.java [new file with mode: 0644]
plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/ObjectInstantiationInEqualsHashCodeInspectionTest.java [new file with mode: 0644]
plugins/git4idea/src/git4idea/commands/GitHttpGuiAuthenticator.java
plugins/groovy/groovy-psi/gen/org/jetbrains/plugins/groovy/lang/groovydoc/lexer/_GroovyDocLexer.java
plugins/groovy/groovy-psi/gen/org/jetbrains/plugins/groovy/lang/lexer/_GroovyLexer.java
plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/groovydoc/lexer/gdoc.flex
plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.skeleton
plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgDiffProvider.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgHistoryProvider.java
plugins/javaFX/src/org/jetbrains/plugins/javaFX/sceneBuilder/SceneBuilderImpl.java
plugins/properties/properties-psi-api/gen/com/intellij/lang/properties/parsing/_PropertiesLexer.java
plugins/tasks/tasks-core/jira/gen/com/intellij/tasks/jira/jql/_JqlLexer.java
plugins/yaml/gen/org/jetbrains/yaml/lexer/_YAMLLexer.java
python/gen/com/jetbrains/python/buildout/config/lexer/_BuildoutCfgFlexLexer.java
python/gen/com/jetbrains/python/lexer/_PythonLexer.java
python/gen/com/jetbrains/python/psi/types/PyTypeLexer.java
python/rest/gen/com/jetbrains/rest/lexer/_RestFlexLexer.java
python/src/com/jetbrains/python/lexer/Python.flex
tools/lexer/CHANGES [new file with mode: 0644]
tools/lexer/COPYRIGHT [new file with mode: 0644]
tools/lexer/idea-flex.skeleton
tools/lexer/jflex-1.7.0-SNAPSHOT.jar [new file with mode: 0644]
updater/testSrc/com/intellij/updater/PatchTest.java
xml/xml-psi-impl/gen/com/intellij/lexer/_DtdLexer.java
xml/xml-psi-impl/gen/com/intellij/lexer/_HtmlLexer.java
xml/xml-psi-impl/gen/com/intellij/lexer/__XmlLexer.java

index 72796ffe3c304a916de1d6843dce5f7c55bf08d7..2e7aa7bdb7cb8dd4a01d493c04f23511d6063f0a 100644 (file)
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.3 on 11/1/14 12:37 PM */
+/* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */
 
 /* It's an automatically generated code. Do not modify it. */
 package org.intellij.lang.regexp;
@@ -14,29 +14,32 @@ import java.util.EnumSet;
 
 /**
  * This class is a scanner generated by 
- * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
- * on 11/1/14 12:37 PM from the specification file
- * <tt>/Users/bas/Projects/IntelliJ IDEA Ultimate/tools/lexer/../../community/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex</tt>
+ * <a href="http://www.jflex.de/">JFlex</a> 1.7.0-SNAPSHOT
+ * from the specification file <tt>/ideadev/tools/lexer/../../community/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex</tt>
  */
 class _RegExLexer implements FlexLexer {
+
+  /** This character denotes the end of file */
+  public static final int YYEOF = -1;
+
   /** initial size of the lookahead buffer */
   private static final int ZZ_BUFFERSIZE = 16384;
 
   /** lexical states */
+  public static final int YYINITIAL = 0;
+  public static final int QUOTED = 2;
   public static final int EMBRACED = 4;
+  public static final int CLASS1 = 6;
   public static final int NEGATE_CLASS1 = 8;
-  public static final int PY_NAMED_GROUP_REF = 22;
-  public static final int QUOTED = 2;
-  public static final int OPTIONS = 14;
-  public static final int BRACKET_EXPRESSION = 26;
-  public static final int PY_COND_REF = 24;
-  public static final int YYINITIAL = 0;
-  public static final int NAMED_GROUP = 18;
   public static final int CLASS2 = 10;
-  public static final int CLASS1 = 6;
+  public static final int PROP = 12;
+  public static final int OPTIONS = 14;
   public static final int COMMENT = 16;
+  public static final int NAMED_GROUP = 18;
   public static final int QUOTED_NAMED_GROUP = 20;
-  public static final int PROP = 12;
+  public static final int PY_NAMED_GROUP_REF = 22;
+  public static final int PY_COND_REF = 24;
+  public static final int BRACKET_EXPRESSION = 26;
 
   /**
    * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
@@ -53,74 +56,135 @@ class _RegExLexer implements FlexLexer {
    * Translates characters to character classes
    */
   private static final String ZZ_CMAP_PACKED = 
-    "\10\0\2\62\1\16\1\0\1\62\1\67\22\0\1\55\1\65\1\0"+
-    "\1\66\1\20\1\0\1\61\1\54\1\4\1\5\1\22\1\23\1\57"+
-    "\1\50\1\3\1\0\1\2\7\47\2\1\1\60\1\0\1\53\1\64"+
-    "\1\63\1\21\1\0\1\27\1\27\1\35\1\34\1\44\1\42\1\30"+
-    "\1\51\1\37\2\13\1\56\1\56\1\56\1\13\1\41\1\43\1\13"+
-    "\1\33\2\13\1\32\1\32\1\32\1\13\1\31\1\10\1\12\1\11"+
-    "\1\17\1\14\1\0\1\26\1\27\1\36\1\34\1\26\1\26\1\13"+
-    "\1\51\1\37\1\13\1\52\2\13\1\25\1\13\1\40\1\13\1\25"+
-    "\1\32\1\25\1\46\1\32\1\32\1\45\1\13\1\30\1\6\1\24"+
-    "\1\7\54\0\1\13\12\0\1\13\4\0\1\13\5\0\27\13\1\0"+
-    "\37\13\1\0\u013f\13\31\0\162\13\4\0\14\13\16\0\5\13\11\0"+
-    "\1\13\213\0\1\13\13\0\1\13\1\0\3\13\1\0\1\13\1\0"+
-    "\24\13\1\0\54\13\1\0\46\13\1\0\5\13\4\0\202\13\10\0"+
-    "\105\13\1\0\46\13\2\0\2\13\6\0\20\13\41\0\46\13\2\0"+
-    "\1\13\7\0\47\13\110\0\33\13\5\0\3\13\56\0\32\13\5\0"+
-    "\13\13\25\0\12\15\4\0\2\13\1\0\143\13\1\0\1\13\17\0"+
-    "\2\13\7\0\2\13\12\15\3\13\2\0\1\13\20\0\1\13\1\0"+
-    "\36\13\35\0\3\13\60\0\46\13\13\0\1\13\u0152\0\66\13\3\0"+
-    "\1\13\22\0\1\13\7\0\12\13\4\0\12\15\25\0\10\13\2\0"+
-    "\2\13\2\0\26\13\1\0\7\13\1\0\1\13\3\0\4\13\3\0"+
-    "\1\13\36\0\2\13\1\0\3\13\4\0\12\15\2\13\23\0\6\13"+
-    "\4\0\2\13\2\0\26\13\1\0\7\13\1\0\2\13\1\0\2\13"+
-    "\1\0\2\13\37\0\4\13\1\0\1\13\7\0\12\15\2\0\3\13"+
-    "\20\0\11\13\1\0\3\13\1\0\26\13\1\0\7\13\1\0\2\13"+
-    "\1\0\5\13\3\0\1\13\22\0\1\13\17\0\2\13\4\0\12\15"+
-    "\25\0\10\13\2\0\2\13\2\0\26\13\1\0\7\13\1\0\2\13"+
-    "\1\0\5\13\3\0\1\13\36\0\2\13\1\0\3\13\4\0\12\15"+
-    "\1\0\1\13\21\0\1\13\1\0\6\13\3\0\3\13\1\0\4\13"+
-    "\3\0\2\13\1\0\1\13\1\0\2\13\3\0\2\13\3\0\3\13"+
-    "\3\0\10\13\1\0\3\13\55\0\11\15\25\0\10\13\1\0\3\13"+
-    "\1\0\27\13\1\0\12\13\1\0\5\13\46\0\2\13\4\0\12\15"+
-    "\25\0\10\13\1\0\3\13\1\0\27\13\1\0\12\13\1\0\5\13"+
-    "\3\0\1\13\40\0\1\13\1\0\2\13\4\0\12\15\25\0\10\13"+
-    "\1\0\3\13\1\0\27\13\1\0\20\13\46\0\2\13\4\0\12\15"+
-    "\25\0\22\13\3\0\30\13\1\0\11\13\1\0\1\13\2\0\7\13"+
-    "\72\0\60\13\1\0\2\13\14\0\7\13\11\0\12\15\47\0\2\13"+
-    "\1\0\1\13\2\0\2\13\1\0\1\13\2\0\1\13\6\0\4\13"+
-    "\1\0\7\13\1\0\3\13\1\0\1\13\1\0\1\13\2\0\2\13"+
-    "\1\0\4\13\1\0\2\13\11\0\1\13\2\0\5\13\1\0\1\13"+
-    "\11\0\12\15\2\0\2\13\42\0\1\13\37\0\12\15\26\0\10\13"+
-    "\1\0\42\13\35\0\4\13\164\0\42\13\1\0\5\13\1\0\2\13"+
-    "\25\0\12\15\6\0\6\13\112\0\46\13\12\0\51\13\7\0\132\13"+
-    "\5\0\104\13\5\0\122\13\6\0\7\13\1\0\77\13\1\0\1\13"+
-    "\1\0\4\13\2\0\7\13\1\0\1\13\1\0\4\13\2\0\47\13"+
-    "\1\0\1\13\1\0\4\13\2\0\37\13\1\0\1\13\1\0\4\13"+
-    "\2\0\7\13\1\0\1\13\1\0\4\13\2\0\7\13\1\0\7\13"+
-    "\1\0\27\13\1\0\37\13\1\0\1\13\1\0\4\13\2\0\7\13"+
-    "\1\0\47\13\1\0\23\13\16\0\11\15\56\0\125\13\14\0\u026c\13"+
-    "\2\0\10\13\12\0\32\13\5\0\113\13\25\0\15\13\1\0\4\13"+
-    "\16\0\22\13\16\0\22\13\16\0\15\13\1\0\3\13\17\0\64\13"+
-    "\43\0\1\13\4\0\1\13\3\0\12\15\46\0\12\15\6\0\130\13"+
-    "\10\0\51\13\127\0\35\13\51\0\12\15\36\13\2\0\5\13\u038b\0"+
-    "\154\13\224\0\234\13\4\0\132\13\6\0\26\13\2\0\6\13\2\0"+
-    "\46\13\2\0\6\13\2\0\10\13\1\0\1\13\1\0\1\13\1\0"+
-    "\1\13\1\0\37\13\2\0\65\13\1\0\7\13\1\0\1\13\3\0"+
-    "\3\13\1\0\7\13\3\0\4\13\2\0\6\13\4\0\15\13\5\0"+
-    "\3\13\1\0\7\13\164\0\1\13\15\0\1\13\202\0\1\13\4\0"+
-    "\1\13\2\0\12\13\1\0\1\13\3\0\5\13\6\0\1\13\1\0"+
-    "\1\13\1\0\1\13\1\0\4\13\1\0\3\13\1\0\7\13\3\0"+
-    "\3\13\5\0\5\13\u0ebb\0\2\13\52\0\5\13\5\0\2\13\4\0"+
-    "\126\13\6\0\3\13\1\0\132\13\1\0\4\13\5\0\50\13\4\0"+
-    "\136\13\21\0\30\13\70\0\20\13\u0200\0\u19b6\13\112\0\u51a6\13\132\0"+
-    "\u048d\13\u0773\0\u2ba4\13\u215c\0\u012e\13\2\0\73\13\225\0\7\13\14\0"+
-    "\5\13\5\0\1\13\1\0\12\13\1\0\15\13\1\0\5\13\1\0"+
-    "\1\13\1\0\2\13\1\0\2\13\1\0\154\13\41\0\u016b\13\22\0"+
-    "\100\13\2\0\66\13\50\0\14\13\164\0\5\13\1\0\207\13\23\0"+
-    "\12\15\7\0\32\13\6\0\32\13\13\0\131\13\3\0\6\13\2\0"+
-    "\6\13\2\0\6\13\2\0\3\13\43\0";
+    "\10\0\2\65\1\16\1\20\1\21\1\17\22\0\1\60\1\70\1\0"+
+    "\1\71\1\23\1\0\1\64\1\57\1\4\1\5\1\25\1\26\1\62"+
+    "\1\53\1\3\1\0\1\2\7\52\2\1\1\63\1\0\1\56\1\67"+
+    "\1\66\1\24\1\0\1\32\1\32\1\40\1\37\1\47\1\45\1\33"+
+    "\1\54\1\42\2\13\1\61\1\61\1\61\1\13\1\44\1\46\1\13"+
+    "\1\36\2\13\1\35\1\35\1\35\1\13\1\34\1\10\1\12\1\11"+
+    "\1\22\1\14\1\0\1\31\1\32\1\41\1\37\1\31\1\31\1\13"+
+    "\1\54\1\42\1\13\1\55\2\13\1\30\1\13\1\43\1\13\1\30"+
+    "\1\35\1\30\1\51\1\35\1\35\1\50\1\13\1\33\1\6\1\27"+
+    "\1\7\7\0\1\20\44\0\1\13\12\0\1\13\4\0\1\13\5\0"+
+    "\27\13\1\0\37\13\1\0\u01ca\13\4\0\14\13\16\0\5\13\7\0"+
+    "\1\13\1\0\1\13\201\0\5\13\1\0\2\13\2\0\4\13\1\0"+
+    "\1\13\6\0\1\13\1\0\3\13\1\0\1\13\1\0\24\13\1\0"+
+    "\123\13\1\0\213\13\10\0\246\13\1\0\46\13\2\0\1\13\7\0"+
+    "\47\13\110\0\33\13\5\0\3\13\55\0\53\13\25\0\12\15\4\0"+
+    "\2\13\1\0\143\13\1\0\1\13\17\0\2\13\7\0\2\13\12\15"+
+    "\3\13\2\0\1\13\20\0\1\13\1\0\36\13\35\0\131\13\13\0"+
+    "\1\13\16\0\12\15\41\13\11\0\2\13\4\0\1\13\5\0\26\13"+
+    "\4\0\1\13\11\0\1\13\3\0\1\13\27\0\31\13\107\0\25\13"+
+    "\117\0\66\13\3\0\1\13\22\0\1\13\7\0\12\13\4\0\12\15"+
+    "\1\0\20\13\4\0\10\13\2\0\2\13\2\0\26\13\1\0\7\13"+
+    "\1\0\1\13\3\0\4\13\3\0\1\13\20\0\1\13\15\0\2\13"+
+    "\1\0\3\13\4\0\12\15\2\13\23\0\6\13\4\0\2\13\2\0"+
+    "\26\13\1\0\7\13\1\0\2\13\1\0\2\13\1\0\2\13\37\0"+
+    "\4\13\1\0\1\13\7\0\12\15\2\0\3\13\20\0\11\13\1\0"+
+    "\3\13\1\0\26\13\1\0\7\13\1\0\2\13\1\0\5\13\3\0"+
+    "\1\13\22\0\1\13\17\0\2\13\4\0\12\15\11\0\1\13\13\0"+
+    "\10\13\2\0\2\13\2\0\26\13\1\0\7\13\1\0\2\13\1\0"+
+    "\5\13\3\0\1\13\36\0\2\13\1\0\3\13\4\0\12\15\1\0"+
+    "\1\13\21\0\1\13\1\0\6\13\3\0\3\13\1\0\4\13\3\0"+
+    "\2\13\1\0\1\13\1\0\2\13\3\0\2\13\3\0\3\13\3\0"+
+    "\14\13\26\0\1\13\25\0\12\15\25\0\10\13\1\0\3\13\1\0"+
+    "\27\13\1\0\20\13\3\0\1\13\32\0\3\13\5\0\2\13\4\0"+
+    "\12\15\25\0\10\13\1\0\3\13\1\0\27\13\1\0\12\13\1\0"+
+    "\5\13\3\0\1\13\40\0\1\13\1\0\2\13\4\0\12\15\1\0"+
+    "\2\13\22\0\10\13\1\0\3\13\1\0\51\13\2\0\1\13\20\0"+
+    "\1\13\20\0\3\13\4\0\12\15\12\0\6\13\5\0\22\13\3\0"+
+    "\30\13\1\0\11\13\1\0\1\13\2\0\7\13\37\0\12\15\21\0"+
+    "\60\13\1\0\2\13\14\0\7\13\11\0\12\15\47\0\2\13\1\0"+
+    "\1\13\2\0\2\13\1\0\1\13\2\0\1\13\6\0\4\13\1\0"+
+    "\7\13\1\0\3\13\1\0\1\13\1\0\1\13\2\0\2\13\1\0"+
+    "\4\13\1\0\2\13\11\0\1\13\2\0\5\13\1\0\1\13\11\0"+
+    "\12\15\2\0\4\13\40\0\1\13\37\0\12\15\26\0\10\13\1\0"+
+    "\44\13\33\0\5\13\163\0\53\13\24\0\1\13\12\15\6\0\6\13"+
+    "\4\0\4\13\3\0\1\13\3\0\2\13\7\0\3\13\4\0\15\13"+
+    "\14\0\1\13\1\0\12\15\6\0\46\13\1\0\1\13\5\0\1\13"+
+    "\2\0\53\13\1\0\u014d\13\1\0\4\13\2\0\7\13\1\0\1\13"+
+    "\1\0\4\13\2\0\51\13\1\0\4\13\2\0\41\13\1\0\4\13"+
+    "\2\0\7\13\1\0\1\13\1\0\4\13\2\0\17\13\1\0\71\13"+
+    "\1\0\4\13\2\0\103\13\45\0\20\13\20\0\126\13\2\0\6\13"+
+    "\3\0\u026c\13\2\0\21\13\1\0\32\13\5\0\113\13\6\0\10\13"+
+    "\7\0\15\13\1\0\4\13\16\0\22\13\16\0\22\13\16\0\15\13"+
+    "\1\0\3\13\17\0\64\13\43\0\1\13\4\0\1\13\3\0\12\15"+
+    "\46\0\12\15\6\0\130\13\10\0\51\13\1\0\1\13\5\0\106\13"+
+    "\12\0\37\13\47\0\12\15\36\13\2\0\5\13\13\0\54\13\4\0"+
+    "\32\13\6\0\12\15\46\0\27\13\11\0\65\13\53\0\12\15\6\0"+
+    "\12\15\15\0\1\13\135\0\57\13\21\0\7\13\4\0\12\15\51\0"+
+    "\36\13\15\0\2\13\12\15\54\13\32\0\44\13\34\0\12\15\3\0"+
+    "\3\13\12\15\44\13\153\0\4\13\1\0\4\13\3\0\2\13\11\0"+
+    "\300\13\100\0\u0116\13\2\0\6\13\2\0\46\13\2\0\6\13\2\0"+
+    "\10\13\1\0\1\13\1\0\1\13\1\0\1\13\1\0\37\13\2\0"+
+    "\65\13\1\0\7\13\1\0\1\13\3\0\3\13\1\0\7\13\3\0"+
+    "\4\13\2\0\6\13\4\0\15\13\5\0\3\13\1\0\7\13\53\0"+
+    "\1\20\1\20\107\0\1\13\15\0\1\13\20\0\15\13\145\0\1\13"+
+    "\4\0\1\13\2\0\12\13\1\0\1\13\3\0\5\13\6\0\1\13"+
+    "\1\0\1\13\1\0\1\13\1\0\4\13\1\0\13\13\2\0\4\13"+
+    "\5\0\5\13\4\0\1\13\64\0\2\13\u0a7b\0\57\13\1\0\57\13"+
+    "\1\0\205\13\6\0\4\13\3\0\2\13\14\0\46\13\1\0\1\13"+
+    "\5\0\1\13\2\0\70\13\7\0\1\13\20\0\27\13\11\0\7\13"+
+    "\1\0\7\13\1\0\7\13\1\0\7\13\1\0\7\13\1\0\7\13"+
+    "\1\0\7\13\1\0\7\13\120\0\1\13\u01d5\0\2\13\52\0\5\13"+
+    "\5\0\2\13\4\0\126\13\6\0\3\13\1\0\132\13\1\0\4\13"+
+    "\5\0\51\13\3\0\136\13\21\0\33\13\65\0\20\13\u0200\0\u19b6\13"+
+    "\112\0\u51d6\13\52\0\u048d\13\103\0\56\13\2\0\u010d\13\3\0\20\13"+
+    "\12\15\2\13\24\0\57\13\20\0\37\13\2\0\106\13\61\0\11\13"+
+    "\2\0\147\13\2\0\43\13\2\0\10\13\77\0\13\13\1\0\3\13"+
+    "\1\0\4\13\1\0\27\13\35\0\64\13\16\0\62\13\34\0\12\15"+
+    "\30\0\6\13\3\0\1\13\1\0\1\13\2\0\12\15\34\13\12\0"+
+    "\27\13\31\0\35\13\7\0\57\13\34\0\1\13\12\15\6\0\5\13"+
+    "\1\0\12\13\12\15\5\13\1\0\51\13\27\0\3\13\1\0\10\13"+
+    "\4\0\12\15\6\0\27\13\3\0\1\13\3\0\62\13\1\0\1\13"+
+    "\3\0\2\13\2\0\5\13\2\0\1\13\1\0\1\13\30\0\3\13"+
+    "\2\0\13\13\7\0\3\13\14\0\6\13\2\0\6\13\2\0\6\13"+
+    "\11\0\7\13\1\0\7\13\1\0\53\13\1\0\12\13\12\0\163\13"+
+    "\15\0\12\15\6\0\u2ba4\13\14\0\27\13\4\0\61\13\u2104\0\u016e\13"+
+    "\2\0\152\13\46\0\7\13\14\0\5\13\5\0\1\13\1\0\12\13"+
+    "\1\0\15\13\1\0\5\13\1\0\1\13\1\0\2\13\1\0\2\13"+
+    "\1\0\154\13\41\0\u016b\13\22\0\100\13\2\0\66\13\50\0\14\13"+
+    "\164\0\5\13\1\0\207\13\23\0\12\15\7\0\32\13\6\0\32\13"+
+    "\13\0\131\13\3\0\6\13\2\0\6\13\2\0\6\13\2\0\3\13"+
+    "\43\0\14\13\1\0\32\13\1\0\23\13\1\0\2\13\1\0\17\13"+
+    "\2\0\16\13\42\0\173\13\u0185\0\35\13\3\0\61\13\57\0\40\13"+
+    "\20\0\21\13\1\0\10\13\6\0\46\13\12\0\36\13\2\0\44\13"+
+    "\4\0\10\13\60\0\236\13\2\0\12\15\126\0\50\13\10\0\64\13"+
+    "\234\0\u0137\13\11\0\26\13\12\0\10\13\230\0\6\13\2\0\1\13"+
+    "\1\0\54\13\1\0\2\13\3\0\1\13\2\0\27\13\12\0\27\13"+
+    "\11\0\37\13\101\0\23\13\1\0\2\13\12\0\26\13\12\0\32\13"+
+    "\106\0\70\13\6\0\2\13\100\0\1\13\17\0\4\13\1\0\3\13"+
+    "\1\0\33\13\54\0\35\13\3\0\35\13\43\0\10\13\1\0\34\13"+
+    "\33\0\66\13\12\0\26\13\12\0\23\13\15\0\22\13\156\0\111\13"+
+    "\67\0\63\13\15\0\63\13\u0310\0\65\13\56\0\12\15\23\0\55\13"+
+    "\40\0\31\13\7\0\12\15\11\0\44\13\17\0\12\15\20\0\43\13"+
+    "\3\0\1\13\14\0\60\13\16\0\4\13\13\0\12\15\1\13\1\0"+
+    "\1\13\43\0\22\13\1\0\31\13\124\0\7\13\1\0\1\13\1\0"+
+    "\4\13\1\0\17\13\1\0\12\13\7\0\57\13\21\0\12\15\13\0"+
+    "\10\13\2\0\2\13\2\0\26\13\1\0\7\13\1\0\2\13\1\0"+
+    "\5\13\3\0\1\13\22\0\1\13\14\0\5\13\u011e\0\60\13\24\0"+
+    "\2\13\1\0\1\13\10\0\12\15\246\0\57\13\51\0\4\13\44\0"+
+    "\60\13\24\0\1\13\13\0\12\15\46\0\53\13\25\0\12\15\66\0"+
+    "\32\13\26\0\12\15\u0166\0\100\13\12\15\25\0\1\13\u01c0\0\71\13"+
+    "\u0507\0\u039a\13\346\0\304\13\u0abc\0\u042f\13\u0fd1\0\u0247\13\u21b9\0\u0239\13"+
+    "\7\0\37\13\1\0\12\15\146\0\36\13\22\0\60\13\20\0\4\13"+
+    "\14\0\12\15\11\0\25\13\5\0\23\13\u0370\0\105\13\13\0\1\13"+
+    "\102\0\15\13\u4060\0\2\13\u0bfe\0\153\13\5\0\15\13\3\0\11\13"+
+    "\7\0\12\13\u1766\0\125\13\1\0\107\13\1\0\2\13\2\0\1\13"+
+    "\2\0\2\13\2\0\4\13\1\0\14\13\1\0\1\13\1\0\7\13"+
+    "\1\0\101\13\1\0\4\13\2\0\10\13\1\0\7\13\1\0\34\13"+
+    "\1\0\4\13\1\0\5\13\1\0\1\13\3\0\7\13\1\0\u0154\13"+
+    "\2\0\31\13\1\0\31\13\1\0\37\13\1\0\31\13\1\0\37\13"+
+    "\1\0\31\13\1\0\37\13\1\0\31\13\1\0\37\13\1\0\31\13"+
+    "\1\0\10\13\2\0\62\15\u1000\0\305\13\u053b\0\4\13\1\0\33\13"+
+    "\1\0\2\13\1\0\1\13\2\0\1\13\1\0\12\13\1\0\4\13"+
+    "\1\0\1\13\1\0\1\13\6\0\1\13\4\0\1\13\1\0\1\13"+
+    "\1\0\1\13\1\0\3\13\1\0\2\13\1\0\1\13\2\0\1\13"+
+    "\1\0\1\13\1\0\1\13\1\0\1\13\1\0\1\13\1\0\2\13"+
+    "\1\0\1\13\2\0\4\13\1\0\7\13\1\0\4\13\1\0\4\13"+
+    "\1\0\1\13\1\0\12\13\1\0\21\13\5\0\3\13\1\0\5\13"+
+    "\1\0\21\13\u1144\0\ua6d7\13\51\0\u1035\13\13\0\336\13\2\0\u1682\13"+
+    "\u295e\0\u021e\13\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u05f0\0";
 
   /** 
    * Translates characters to character classes
@@ -174,22 +238,22 @@ class _RegExLexer implements FlexLexer {
   private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
 
   private static final String ZZ_ROWMAP_PACKED_0 =
-    "\0\0\0\70\0\160\0\250\0\340\0\u0118\0\u0150\0\u0188"+
-    "\0\u01c0\0\u01f8\0\u0230\0\u0268\0\u02a0\0\u02d8\0\u0310\0\u0310"+
-    "\0\u0348\0\u0310\0\u0310\0\u0380\0\u03b8\0\u0310\0\u0310\0\u0310"+
-    "\0\u0310\0\u0310\0\u0310\0\u0310\0\u0310\0\u0310\0\u0310\0\u03f0"+
-    "\0\u0310\0\u0428\0\u0310\0\u0460\0\u0310\0\u0310\0\u0310\0\u0310"+
-    "\0\u0498\0\u0310\0\u04d0\0\u0310\0\u0508\0\u0310\0\u0310\0\u0380"+
-    "\0\u0310\0\u0310\0\u0310\0\u0540\0\u0578\0\u0310\0\u0310\0\u0310"+
-    "\0\u0310\0\u0310\0\u05b0\0\u05e8\0\u0310\0\u0620\0\u0310\0\u0658"+
-    "\0\u0690\0\u0310\0\u0310\0\u0310\0\u0310\0\u0310\0\u0310\0\u0310"+
-    "\0\u06c8\0\u0310\0\u0310\0\u0700\0\u0738\0\u0770\0\u0310\0\u07a8"+
-    "\0\u0310\0\u0310\0\u0310\0\u0310\0\u0310\0\u0310\0\u0310\0\u07e0"+
-    "\0\u0818\0\u0310\0\u0310\0\u0310\0\u0310\0\u0850\0\u0310\0\u0888"+
-    "\0\u0310\0\u08c0\0\u08f8\0\u0930\0\u0968\0\u0310\0\u0310\0\u0310"+
-    "\0\u0310\0\u0310\0\u0310\0\u09a0\0\u09d8\0\u0310\0\u0a10\0\u0310"+
-    "\0\u0a48\0\u0658\0\u0310\0\u0310\0\u0a80\0\u0ab8\0\u0af0\0\u0310"+
-    "\0\u0b28\0\u0b60\0\u0b98\0\u0bd0";
+    "\0\0\0\72\0\164\0\256\0\350\0\u0122\0\u015c\0\u0196"+
+    "\0\u01d0\0\u020a\0\u0244\0\u027e\0\u02b8\0\u02f2\0\u032c\0\u032c"+
+    "\0\u0366\0\u032c\0\u032c\0\u03a0\0\u03da\0\u032c\0\u032c\0\u032c"+
+    "\0\u032c\0\u032c\0\u032c\0\u032c\0\u032c\0\u032c\0\u032c\0\u0414"+
+    "\0\u032c\0\u044e\0\u032c\0\u0488\0\u032c\0\u032c\0\u032c\0\u032c"+
+    "\0\u04c2\0\u032c\0\u04fc\0\u032c\0\u0536\0\u032c\0\u032c\0\u03a0"+
+    "\0\u032c\0\u032c\0\u032c\0\u0570\0\u05aa\0\u032c\0\u032c\0\u032c"+
+    "\0\u032c\0\u032c\0\u05e4\0\u061e\0\u032c\0\u0658\0\u032c\0\u0692"+
+    "\0\u06cc\0\u032c\0\u032c\0\u032c\0\u032c\0\u032c\0\u032c\0\u032c"+
+    "\0\u0706\0\u032c\0\u032c\0\u0740\0\u077a\0\u07b4\0\u032c\0\u07ee"+
+    "\0\u032c\0\u032c\0\u032c\0\u032c\0\u032c\0\u032c\0\u032c\0\u0828"+
+    "\0\u0862\0\u032c\0\u032c\0\u032c\0\u032c\0\u089c\0\u032c\0\u08d6"+
+    "\0\u032c\0\u0910\0\u094a\0\u0984\0\u09be\0\u032c\0\u032c\0\u032c"+
+    "\0\u032c\0\u032c\0\u032c\0\u09f8\0\u0a32\0\u032c\0\u0a6c\0\u032c"+
+    "\0\u0aa6\0\u0692\0\u032c\0\u032c\0\u0ae0\0\u0b1a\0\u0b54\0\u032c"+
+    "\0\u0b8e\0\u0bc8\0\u0c02\0\u0c3c";
 
   private static int [] zzUnpackRowMap() {
     int [] result = new int[124];
@@ -216,75 +280,78 @@ class _RegExLexer implements FlexLexer {
 
   private static final String ZZ_TRANS_PACKED_0 =
     "\3\17\1\20\1\21\1\22\1\23\1\17\1\24\1\17"+
-    "\1\25\3\17\1\26\1\27\1\30\1\31\1\32\1\33"+
-    "\1\34\23\17\1\35\4\17\1\36\4\17\1\26\3\17"+
-    "\1\37\1\26\12\17\1\40\55\17\1\41\2\42\4\41"+
-    "\1\43\3\41\1\44\1\41\1\42\7\41\22\44\1\42"+
-    "\1\41\2\44\3\41\1\44\1\45\10\41\11\46\1\47"+
-    "\4\46\1\0\67\46\1\0\1\50\50\46\6\17\1\23"+
-    "\1\17\1\51\1\52\1\53\3\17\1\54\1\27\30\17"+
-    "\1\35\10\17\1\55\1\54\4\17\1\54\6\56\1\57"+
-    "\1\56\1\60\1\56\1\25\16\56\1\61\1\56\1\61"+
-    "\1\56\1\61\3\56\1\61\14\56\1\61\11\56\5\62"+
-    "\1\63\5\62\1\64\11\62\22\64\1\62\1\65\2\64"+
-    "\3\62\1\64\1\62\1\66\7\62\16\11\1\67\50\11"+
-    "\1\67\13\62\1\44\11\62\22\44\2\62\2\44\3\62"+
-    "\1\44\4\62\1\70\17\62\1\44\11\62\22\44\2\62"+
-    "\2\44\1\62\1\71\1\62\1\44\16\62\1\63\5\62"+
-    "\1\44\11\62\22\44\2\62\2\44\3\62\1\44\12\62"+
-    "\2\42\2\62\1\63\5\62\1\44\1\62\1\42\7\62"+
-    "\22\44\1\42\1\62\2\44\3\62\1\44\11\62\13\72"+
-    "\1\44\11\72\22\44\2\72\2\44\3\72\1\44\1\72"+
-    "\1\73\7\72\111\0\1\74\57\0\1\75\5\0\1\76"+
-    "\50\0\1\77\1\100\1\101\4\102\1\77\1\102\1\77"+
-    "\1\102\1\103\2\77\1\104\6\102\2\105\3\106\3\107"+
-    "\1\110\1\111\1\110\2\112\1\103\1\113\1\103\1\114"+
-    "\1\115\1\116\1\102\1\117\1\120\2\77\1\104\1\103"+
-    "\3\77\1\104\4\77\1\104\44\0\1\121\24\0\2\42"+
-    "\12\0\1\42\31\0\1\42\21\0\2\44\10\0\3\44"+
-    "\7\0\23\44\1\0\2\44\3\0\1\44\22\0\1\122"+
-    "\5\0\1\76\40\0\1\123\7\0\1\77\1\100\1\101"+
-    "\4\102\1\77\1\102\1\124\1\102\1\103\2\77\1\104"+
+    "\1\25\3\17\2\26\1\0\1\26\1\27\1\30\1\31"+
+    "\1\32\1\33\1\34\23\17\1\35\4\17\1\36\4\17"+
+    "\1\26\3\17\1\37\12\17\1\40\4\17\3\0\50\17"+
+    "\1\41\2\42\4\41\1\43\3\41\1\44\1\41\1\42"+
+    "\1\41\3\0\6\41\22\44\1\42\1\41\2\44\3\41"+
+    "\1\44\1\45\7\41\11\46\1\47\4\46\4\0\66\46"+
+    "\4\0\1\50\47\46\6\17\1\23\1\17\1\51\1\52"+
+    "\1\53\3\17\2\54\1\0\1\54\1\27\30\17\1\35"+
+    "\10\17\1\55\1\54\4\17\6\56\1\57\1\56\1\60"+
+    "\1\56\1\25\4\56\1\26\1\0\1\26\12\56\1\61"+
+    "\1\56\1\61\1\56\1\61\3\56\1\61\14\56\1\61"+
+    "\10\56\5\62\1\63\5\62\1\64\3\62\3\0\6\62"+
+    "\22\64\1\62\1\65\2\64\3\62\1\64\1\62\1\66"+
+    "\6\62\16\11\2\67\52\11\13\62\1\44\3\62\3\0"+
+    "\6\62\22\44\2\62\2\44\3\62\1\44\4\62\1\70"+
+    "\16\62\1\44\3\62\3\0\6\62\22\44\2\62\2\44"+
+    "\1\62\1\71\1\62\1\44\15\62\1\63\5\62\1\44"+
+    "\3\62\3\0\6\62\22\44\2\62\2\44\3\62\1\44"+
+    "\11\62\2\42\2\62\1\63\5\62\1\44\1\62\1\42"+
+    "\1\62\3\0\6\62\22\44\1\42\1\62\2\44\3\62"+
+    "\1\44\10\62\13\72\1\44\3\72\3\0\6\72\22\44"+
+    "\2\72\2\44\3\72\1\44\1\72\1\73\6\72\116\0"+
+    "\1\74\56\0\1\75\10\0\1\76\47\0\1\77\1\100"+
+    "\1\101\4\102\1\77\1\102\1\77\1\102\1\103\2\77"+
+    "\2\104\1\0\1\104\6\102\2\105\3\106\3\107\1\110"+
+    "\1\111\1\110\2\112\1\103\1\113\1\103\1\114\1\115"+
+    "\1\116\1\102\1\117\1\120\2\77\1\104\1\103\3\77"+
+    "\1\104\4\77\47\0\1\121\23\0\2\42\12\0\1\42"+
+    "\34\0\1\42\20\0\2\44\10\0\3\44\12\0\23\44"+
+    "\1\0\2\44\3\0\1\44\21\0\1\122\10\0\1\76"+
+    "\40\0\1\123\6\0\1\77\1\100\1\101\4\102\1\77"+
+    "\1\102\1\124\1\102\1\103\2\77\2\104\1\0\1\104"+
     "\6\102\2\105\3\106\3\107\1\110\1\111\1\110\2\112"+
     "\1\103\1\113\1\103\1\114\1\115\1\116\1\102\1\117"+
-    "\1\120\2\77\1\104\1\103\3\77\1\104\4\77\1\104"+
-    "\61\0\1\125\21\0\1\64\11\0\22\64\2\0\2\64"+
-    "\3\0\1\64\24\0\1\65\11\0\22\65\2\0\2\65"+
-    "\3\0\1\65\22\0\1\126\62\0\1\127\34\0\1\130"+
-    "\11\0\1\131\1\132\3\0\1\133\2\0\1\133\1\134"+
-    "\1\135\1\136\12\0\1\137\57\0\2\100\44\0\1\100"+
-    "\22\0\1\140\44\0\1\140\20\0\70\141\1\0\2\142"+
-    "\3\0\1\143\17\0\2\142\4\0\3\142\3\0\1\142"+
-    "\1\0\1\142\2\0\1\142\21\0\2\144\23\0\2\144"+
-    "\4\0\3\144\3\0\1\144\1\0\1\144\2\0\1\144"+
-    "\21\0\1\100\1\145\44\0\1\145\73\0\1\146\1\147"+
-    "\66\0\1\150\10\0\1\151\67\0\1\152\1\153\2\0"+
-    "\5\154\1\0\62\154\2\0\1\155\44\0\1\155\21\0"+
-    "\2\156\23\0\2\156\4\0\3\156\3\0\1\156\1\0"+
-    "\1\156\2\0\1\156\21\0\2\157\4\0\1\160\16\0"+
-    "\2\157\4\0\3\157\3\0\1\157\1\0\1\157\2\0"+
-    "\1\157\21\0\2\161\23\0\2\161\4\0\3\161\3\0"+
-    "\1\161\1\0\1\161\2\0\1\161\21\0\1\100\1\162"+
-    "\44\0\1\162\20\0\5\154\1\163\62\154\2\0\1\164"+
-    "\44\0\1\164\21\0\2\165\4\0\1\156\16\0\2\165"+
-    "\4\0\3\165\3\0\1\165\1\0\1\165\2\0\1\165"+
-    "\21\0\2\166\23\0\2\166\4\0\3\166\3\0\1\166"+
-    "\1\0\1\166\2\0\1\166\21\0\2\167\4\0\1\156"+
-    "\16\0\2\167\4\0\3\167\3\0\1\167\1\0\1\167"+
-    "\2\0\1\167\21\0\2\170\23\0\2\170\4\0\3\170"+
-    "\3\0\1\170\1\0\1\170\2\0\1\170\21\0\2\171"+
-    "\4\0\1\156\16\0\2\171\4\0\3\171\3\0\1\171"+
-    "\1\0\1\171\2\0\1\171\21\0\2\172\4\0\1\156"+
-    "\16\0\2\172\4\0\3\172\3\0\1\172\1\0\1\172"+
-    "\2\0\1\172\21\0\2\173\4\0\1\156\16\0\2\173"+
-    "\4\0\3\173\3\0\1\173\1\0\1\173\2\0\1\173"+
-    "\21\0\2\174\4\0\1\156\16\0\2\174\4\0\3\174"+
-    "\3\0\1\174\1\0\1\174\2\0\1\174\21\0\2\174"+
-    "\4\0\1\160\16\0\2\174\4\0\3\174\3\0\1\174"+
-    "\1\0\1\174\2\0\1\174\20\0";
+    "\1\120\2\77\1\104\1\103\3\77\1\104\4\77\64\0"+
+    "\1\125\20\0\1\64\14\0\22\64\2\0\2\64\3\0"+
+    "\1\64\23\0\1\65\14\0\22\65\2\0\2\65\3\0"+
+    "\1\65\21\0\1\126\64\0\1\127\37\0\1\130\11\0"+
+    "\1\131\1\132\3\0\1\133\2\0\1\133\1\134\1\135"+
+    "\1\136\11\0\1\137\61\0\2\100\47\0\1\100\21\0"+
+    "\1\140\47\0\1\140\17\0\17\141\3\0\50\141\1\0"+
+    "\2\142\3\0\1\143\22\0\2\142\4\0\3\142\3\0"+
+    "\1\142\1\0\1\142\2\0\1\142\20\0\2\144\26\0"+
+    "\2\144\4\0\3\144\3\0\1\144\1\0\1\144\2\0"+
+    "\1\144\20\0\1\100\1\145\47\0\1\145\75\0\1\146"+
+    "\1\147\70\0\1\150\10\0\1\151\71\0\1\152\1\153"+
+    "\1\0\5\154\1\0\64\154\2\0\1\155\47\0\1\155"+
+    "\20\0\2\156\26\0\2\156\4\0\3\156\3\0\1\156"+
+    "\1\0\1\156\2\0\1\156\20\0\2\157\4\0\1\160"+
+    "\21\0\2\157\4\0\3\157\3\0\1\157\1\0\1\157"+
+    "\2\0\1\157\20\0\2\161\26\0\2\161\4\0\3\161"+
+    "\3\0\1\161\1\0\1\161\2\0\1\161\20\0\1\100"+
+    "\1\162\47\0\1\162\17\0\5\154\1\163\64\154\2\0"+
+    "\1\164\47\0\1\164\20\0\2\165\4\0\1\156\21\0"+
+    "\2\165\4\0\3\165\3\0\1\165\1\0\1\165\2\0"+
+    "\1\165\20\0\2\166\26\0\2\166\4\0\3\166\3\0"+
+    "\1\166\1\0\1\166\2\0\1\166\20\0\2\167\4\0"+
+    "\1\156\21\0\2\167\4\0\3\167\3\0\1\167\1\0"+
+    "\1\167\2\0\1\167\20\0\2\170\26\0\2\170\4\0"+
+    "\3\170\3\0\1\170\1\0\1\170\2\0\1\170\20\0"+
+    "\2\171\4\0\1\156\21\0\2\171\4\0\3\171\3\0"+
+    "\1\171\1\0\1\171\2\0\1\171\20\0\2\172\4\0"+
+    "\1\156\21\0\2\172\4\0\3\172\3\0\1\172\1\0"+
+    "\1\172\2\0\1\172\20\0\2\173\4\0\1\156\21\0"+
+    "\2\173\4\0\3\173\3\0\1\173\1\0\1\173\2\0"+
+    "\1\173\20\0\2\174\4\0\1\156\21\0\2\174\4\0"+
+    "\3\174\3\0\1\174\1\0\1\174\2\0\1\174\20\0"+
+    "\2\174\4\0\1\160\21\0\2\174\4\0\3\174\3\0"+
+    "\1\174\1\0\1\174\2\0\1\174\17\0";
 
   private static int [] zzUnpackTrans() {
-    int [] result = new int[3080];
+    int [] result = new int[3190];
     int offset = 0;
     offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
     return result;
@@ -308,13 +375,10 @@ class _RegExLexer implements FlexLexer {
   private static final int ZZ_UNKNOWN_ERROR = 0;
   private static final int ZZ_NO_MATCH = 1;
   private static final int ZZ_PUSHBACK_2BIG = 2;
-  private static final char[] EMPTY_BUFFER = new char[0];
-  private static final int YYEOF = -1;
-  private static java.io.Reader zzReader = null; // Fake
 
   /* error messages for the codes above */
-  private static final String ZZ_ERROR_MSG[] = {
-    "Unkown internal scanner error",
+  private static final String[] ZZ_ERROR_MSG = {
+    "Unknown internal scanner error",
     "Error: could not match input",
     "Error: pushback value was too large"
   };
@@ -352,6 +416,9 @@ class _RegExLexer implements FlexLexer {
     return j;
   }
 
+  /** the input device */
+  private java.io.Reader zzReader;
+
   /** the current state of the DFA */
   private int zzState;
 
@@ -447,20 +514,16 @@ class _RegExLexer implements FlexLexer {
     boolean commentMode = false;
 
 
-  _RegExLexer(java.io.Reader in) {
-    this.zzReader = in;
-  }
-
   /**
-   * Creates a new scanner.
-   * There is also java.io.Reader version of this constructor.
+   * Creates a new scanner
    *
-   * @param   in  the java.io.Inputstream to read input from.
+   * @param   in  the java.io.Reader to read input from.
    */
-  _RegExLexer(java.io.InputStream in) {
-    this(new java.io.InputStreamReader(in));
+  _RegExLexer(java.io.Reader in) {
+    this.zzReader = in;
   }
 
+
   /** 
    * Unpacks the compressed character translation table.
    *
@@ -468,10 +531,10 @@ class _RegExLexer implements FlexLexer {
    * @return         the unpacked character translation table
    */
   private static char [] zzUnpackCMap(String packed) {
-    char [] map = new char[0x10000];
+    char [] map = new char[0x110000];
     int i = 0;  /* index in packed string  */
     int j = 0;  /* index in unpacked array */
-    while (i < 1352) {
+    while (i < 2594) {
       int  count = packed.charAt(i++);
       char value = packed.charAt(i++);
       do map[j++] = value; while (--count > 0);
@@ -647,12 +710,20 @@ class _RegExLexer implements FlexLexer {
 
       zzState = ZZ_LEXSTATE[zzLexicalState];
 
+      // set up zzAction for empty match case:
+      int zzAttributes = zzAttrL[zzState];
+      if ( (zzAttributes & 1) == 1 ) {
+        zzAction = zzState;
+      }
+
 
       zzForAction: {
         while (true) {
 
-          if (zzCurrentPosL < zzEndReadL)
-            zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+          if (zzCurrentPosL < zzEndReadL) {
+            zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+            zzCurrentPosL += Character.charCount(zzInput);
+          }
           else if (zzAtEOF) {
             zzInput = YYEOF;
             break zzForAction;
@@ -672,14 +743,15 @@ class _RegExLexer implements FlexLexer {
               break zzForAction;
             }
             else {
-              zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+              zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+              zzCurrentPosL += Character.charCount(zzInput);
             }
           }
           int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
           if (zzNext == -1) break zzForAction;
           zzState = zzNext;
 
-          int zzAttributes = zzAttrL[zzState];
+          zzAttributes = zzAttrL[zzState];
           if ( (zzAttributes & 1) == 1 ) {
             zzAction = zzState;
             zzMarkedPosL = zzCurrentPosL;
@@ -692,375 +764,378 @@ class _RegExLexer implements FlexLexer {
       // store back cached position
       zzMarkedPos = zzMarkedPosL;
 
-      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
-        case 81: 
-          { return RegExpTT.UNICODE_CHAR;
-          }
-        case 82: break;
-        case 7: 
-          { if (yystate() != CLASS2) yypushstate(EMBRACED); return RegExpTT.LBRACE;
-          }
-        case 83: break;
-        case 24: 
-          { return RegExpTT.COMMA;
-          }
-        case 84: break;
-        case 67: 
-          { return RegExpTT.POS_LOOKAHEAD;
-          }
-        case 85: break;
-        case 65: 
-          { yybegin(QUOTED_NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_QUOTED_NAMED_GROUP;
-          }
-        case 86: break;
-        case 80: 
-          { return RegExpTT.COMMENT;
-          }
-        case 87: break;
-        case 14: 
-          { return RegExpTT.STAR;
-          }
-        case 88: break;
-        case 63: 
-          { yybegin(PY_COND_REF); return RegExpTT.PYTHON_COND_REF;
-          }
-        case 89: break;
-        case 50: 
-          { return RegExpTT.CHAR_CLASS;
-          }
-        case 90: break;
-        case 36: 
-          { handleOptions(); return RegExpTT.OPTIONS_OFF;
-          }
-        case 91: break;
-        case 57: 
-          { yypopstate(); return RegExpTT.QUOTE_END;
-          }
-        case 92: break;
-        case 35: 
-          { yybegin(YYINITIAL); return RegExpTT.GROUP_END;
-          }
-        case 93: break;
-        case 42: 
-          // lookahead expression with fixed base length
-          zzMarkedPos = zzStartRead + 1;
-          { if (allowEmptyCharacterClass) yypushstate(CLASS2); else yypushstate(CLASS1);
+      if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+        zzAtEOF = true;
+        zzDoEOF();
+        return null;
+      }
+      else {
+        switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+          case 1: 
+            { handleOptions(); return RegExpTT.OPTIONS_ON;
+            }
+          case 82: break;
+          case 2: 
+            { yypopstate(); return RegExpTT.COMMENT;
+            }
+          case 83: break;
+          case 3: 
+            { return RegExpTT.CHARACTER;
+            }
+          case 84: break;
+          case 4: 
+            { return RegExpTT.DOT;
+            }
+          case 85: break;
+          case 5: 
+            { capturingGroupCount++; return RegExpTT.GROUP_BEGIN;
+            }
+          case 86: break;
+          case 6: 
+            { return RegExpTT.GROUP_END;
+            }
+          case 87: break;
+          case 7: 
+            { if (yystate() != CLASS2) yypushstate(EMBRACED); return RegExpTT.LBRACE;
+            }
+          case 88: break;
+          case 8: 
+            { yypushstate(CLASS2);
                             return RegExpTT.CLASS_BEGIN;
-          }
-        case 94: break;
-        case 37
-          { yybegin(YYINITIAL); return RegExpTT.COLON;
-          }
-        case 95: break;
-        case 6
-          { return RegExpTT.GROUP_END;
-          }
-        case 96: break;
-        case 25
-          { assert false : yytext();
-          }
-        case 97: break;
-        case 18
-          { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CHARACTER;
-          }
-        case 98: break;
-        case 47
-          { return commentMode ? RegExpTT.CHARACTER : RegExpTT.REDUNDANT_ESCAPE;
-          }
-        case 99: break;
-        case 23
-          { return RegExpTT.NAME;
-          }
-        case 100: break;
-        case 29
-          { yypopstate(); return RegExpTT.CLASS_END;
-          }
-        case 101: break;
-        case 72
-          { yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP_REF;
-          }
-        case 102: break;
-        case 34
-          { yybegin(YYINITIAL); return RegExpTT.BAD_CHARACTER;
-          }
-        case 103: break;
-        case 53
-          { yypushstate(QUOTED); return RegExpTT.QUOTE_BEGIN;
-          }
-        case 104: break;
-        case 40
-          { return RegExpTT.BAD_CHARACTER;
-          }
-        case 105: break;
-        case 21
-          { return RegExpTT.NUMBER;
-          }
-        case 106: break;
-        case 4: 
-          { return RegExpTT.DOT;
-          }
-        case 107: break;
-        case 77
-          { return RegExpTT.NEG_LOOKBEHIND;
-          }
-        case 108: break;
-        case 33
-          { yypopstate(); if (allowCategoryShorthand) return RegExpTT.CATEGORY_SHORT_HAND; else yypushback(1);
-          }
-        case 109: break;
-        case 45
-          { return (allowOctalNoLeadingZero ? RegExpTT.OCT_CHAR : RegExpTT.BAD_OCT_VALUE);
-          }
-        case 110: break;
-        case 68
-          { return RegExpTT.NEG_LOOKAHEAD;
-          }
-        case 111: break;
-        case 10
-          { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CTRL_CHARACTER;
-          }
-        case 112: break;
-        case 66: 
-          { return RegExpTT.NON_CAPT_GROUP;
-          }
-        case 113: break;
-        case 73
-          { yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP_REF;
-          }
-        case 114: break;
-        case 28: 
-          { if (allowNestedCharacterClasses) {
+            }
+          case 89: break;
+          case 9
+            { return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN;
+            }
+          case 90: break;
+          case 10
+            { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CTRL_CHARACTER;
+            }
+          case 91: break;
+          case 11
+            { return RegExpTT.CARET;
+            }
+          case 92: break;
+          case 12
+            { return RegExpTT.DOLLAR;
+            }
+          case 93: break;
+          case 13
+            { return RegExpTT.QUEST;
+            }
+          case 94: break;
+          case 14
+            { return RegExpTT.STAR;
+            }
+          case 95: break;
+          case 15
+            { return RegExpTT.PLUS;
+            }
+          case 96: break;
+          case 16
+            { return RegExpTT.UNION;
+            }
+          case 97: break;
+          case 17
+            { return RegExpTT.MINUS;
+            }
+          case 98: break;
+          case 18
+            { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CHARACTER;
+            }
+          case 99: break;
+          case 19
+            { if (commentMode) { yypushstate(COMMENT); return RegExpTT.COMMENT; } else return RegExpTT.CHARACTER;
+            }
+          case 100: break;
+          case 20
+            { if (allowDanglingMetacharacters) {
+                          yypopstate(); yypushback(1);
+                        } else {
+                          return RegExpTT.BAD_CHARACTER;
+                        }
+            }
+          case 101: break;
+          case 21
+            { return RegExpTT.NUMBER;
+            }
+          case 102: break;
+          case 22
+            { yypopstate(); return RegExpTT.RBRACE;
+            }
+          case 103: break;
+          case 23
+            { return RegExpTT.NAME;
+            }
+          case 104: break;
+          case 24
+            { return RegExpTT.COMMA;
+            }
+          case 105: break;
+          case 25
+            { assert false : yytext();
+            }
+          case 106: break;
+          case 26: 
+            { yybegin(CLASS2); return RegExpTT.CHARACTER;
+            }
+          case 107: break;
+          case 27
+            { yybegin(CLASS1); return RegExpTT.CARET;
+            }
+          case 108: break;
+          case 28: 
+            { if (allowNestedCharacterClasses) {
                            yypushstate(CLASS2);
                            return RegExpTT.CLASS_BEGIN;
                         }
                         return RegExpTT.CHARACTER;
-          }
-        case 115: break;
-        case 19: 
-          { if (commentMode) { yypushstate(COMMENT); return RegExpTT.COMMENT; } else return RegExpTT.CHARACTER;
-          }
-        case 116: break;
-        case 52: 
-          { yypushstate(PROP); return RegExpTT.PROPERTY;
-          }
-        case 117: break;
-        case 8: 
-          { yypushstate(CLASS2);
+            }
+          case 109: break;
+          case 29: 
+            { yypopstate(); return RegExpTT.CLASS_END;
+            }
+          case 110: break;
+          case 30: 
+            { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.ESC_CHARACTER;
+            }
+          case 111: break;
+          case 31: 
+            { yypopstate(); yypushback(1);
+            }
+          case 112: break;
+          case 32: 
+            { yypopstate(); yypushstate(EMBRACED); return RegExpTT.LBRACE;
+            }
+          case 113: break;
+          case 33: 
+            { yypopstate(); if (allowCategoryShorthand) return RegExpTT.CATEGORY_SHORT_HAND; else yypushback(1);
+            }
+          case 114: break;
+          case 34: 
+            { yybegin(YYINITIAL); return RegExpTT.BAD_CHARACTER;
+            }
+          case 115: break;
+          case 35: 
+            { yybegin(YYINITIAL); return RegExpTT.GROUP_END;
+            }
+          case 116: break;
+          case 36: 
+            { handleOptions(); return RegExpTT.OPTIONS_OFF;
+            }
+          case 117: break;
+          case 37: 
+            { yybegin(YYINITIAL); return RegExpTT.COLON;
+            }
+          case 118: break;
+          case 38: 
+            { yybegin(YYINITIAL); return RegExpTT.GT;
+            }
+          case 119: break;
+          case 39: 
+            { yybegin(YYINITIAL); return RegExpTT.QUOTE;
+            }
+          case 120: break;
+          case 40: 
+            { return RegExpTT.BAD_CHARACTER;
+            }
+          case 121: break;
+          case 41: 
+            { yybegin(OPTIONS); return RegExpTT.SET_OPTIONS;
+            }
+          case 122: break;
+          case 42: 
+            // lookahead expression with fixed base length
+            zzMarkedPos = Character.offsetByCodePoints
+                (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
+            { if (allowEmptyCharacterClass) yypushstate(CLASS2); else yypushstate(CLASS1);
                             return RegExpTT.CLASS_BEGIN;
-          }
-        case 118: break;
-        case 76: 
-          { return RegExpTT.POS_LOOKBEHIND;
-          }
-        case 119: break;
-        case 20: 
-          { if (allowDanglingMetacharacters) {
-                          yypopstate(); yypushback(1);
-                        } else {
-                          return RegExpTT.BAD_CHARACTER;
-                        }
-          }
-        case 120: break;
-        case 78: 
-          { return RegExpTT.HEX_CHAR;
-          }
-        case 121: break;
-        case 1: 
-          { handleOptions(); return RegExpTT.OPTIONS_ON;
-          }
-        case 122: break;
-        case 44: 
-          { if (yystate() == CLASS2) return RegExpTT.ESC_CHARACTER;
+            }
+          case 123: break;
+          case 43: 
+            { return RegExpTT.REDUNDANT_ESCAPE;
+            }
+          case 124: break;
+          case 44: 
+            { if (yystate() == CLASS2) return RegExpTT.ESC_CHARACTER;
                                 while (yylength() > 2 && Integer.parseInt(yytext().toString().substring(1)) > capturingGroupCount) {
                                   yypushback(1);
                                 }
                                 return RegExpTT.BACKREF;
-          }
-        case 123: break;
-        case 62: 
-          { yybegin(CLASS2); return RegExpTT.BRACKET_EXPRESSION_END;
-          }
-        case 124: break;
-        case 2: 
-          { yypopstate(); return RegExpTT.COMMENT;
-          }
-        case 125: break;
-        case 17: 
-          { return RegExpTT.MINUS;
-          }
-        case 126: break;
-        case 48: 
-          { return RegExpTT.ESC_CTRL_CHARACTER;
-          }
-        case 127: break;
-        case 32: 
-          { yypopstate(); yypushstate(EMBRACED); return RegExpTT.LBRACE;
-          }
-        case 128: break;
-        case 13: 
-          { return RegExpTT.QUEST;
-          }
-        case 129: break;
-        case 74: 
-          { yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.PYTHON_NAMED_GROUP;
-          }
-        case 130: break;
-        case 5: 
-          { capturingGroupCount++; return RegExpTT.GROUP_BEGIN;
-          }
-        case 131: break;
-        case 15: 
-          { return RegExpTT.PLUS;
-          }
-        case 132: break;
-        case 70: 
-          { return RegExpTT.OCT_CHAR;
-          }
-        case 133: break;
-        case 39: 
-          { yybegin(YYINITIAL); return RegExpTT.QUOTE;
-          }
-        case 134: break;
-        case 31: 
-          { yypopstate(); yypushback(1);
-          }
-        case 135: break;
-        case 27: 
-          { yybegin(CLASS1); return RegExpTT.CARET;
-          }
-        case 136: break;
-        case 58: 
-          // lookahead expression with fixed base length
-          zzMarkedPos = zzStartRead + 1;
-          { if (allowNestedCharacterClasses) {
+            }
+          case 125: break;
+          case 45: 
+            { return (allowOctalNoLeadingZero ? RegExpTT.OCT_CHAR : RegExpTT.BAD_OCT_VALUE);
+            }
+          case 126: break;
+          case 46: 
+            { return RegExpTT.ESC_CHARACTER;
+            }
+          case 127: break;
+          case 47: 
+            { return commentMode ? RegExpTT.CHARACTER : RegExpTT.REDUNDANT_ESCAPE;
+            }
+          case 128: break;
+          case 48: 
+            { return RegExpTT.ESC_CTRL_CHARACTER;
+            }
+          case 129: break;
+          case 49: 
+            { return yystate() != CLASS2 ? RegExpTT.BOUNDARY : RegExpTT.ESC_CHARACTER;
+            }
+          case 130: break;
+          case 50: 
+            { return RegExpTT.CHAR_CLASS;
+            }
+          case 131: break;
+          case 51: 
+            { if (xmlSchemaMode) return RegExpTT.CHAR_CLASS; else return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN;
+            }
+          case 132: break;
+          case 52: 
+            { yypushstate(PROP); return RegExpTT.PROPERTY;
+            }
+          case 133: break;
+          case 53: 
+            { yypushstate(QUOTED); return RegExpTT.QUOTE_BEGIN;
+            }
+          case 134: break;
+          case 54: 
+            { return RegExpTT.BAD_HEX_VALUE;
+            }
+          case 135: break;
+          case 55: 
+            { return StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN;
+            }
+          case 136: break;
+          case 56: 
+            { return (allowHexDigitClass || allowHorizontalWhitespaceClass ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN);
+            }
+          case 137: break;
+          case 57: 
+            { yypopstate(); return RegExpTT.QUOTE_END;
+            }
+          case 138: break;
+          case 58: 
+            // lookahead expression with fixed base length
+            zzMarkedPos = Character.offsetByCodePoints
+                (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
+            { if (allowNestedCharacterClasses) {
                               yypushstate(CLASS1);
                               return RegExpTT.CLASS_BEGIN;
                             }
                             return RegExpTT.CHARACTER;
-          }
-        case 137: break;
-        case 59: 
-          { if (allowPosixBracketExpressions) {
+            }
+          case 139: break;
+          case 59: 
+            { if (allowPosixBracketExpressions) {
                             yybegin(BRACKET_EXPRESSION);
                             return RegExpTT.BRACKET_EXPRESSION_BEGIN;
                           } else {
                             yypushback(1);
                             return RegExpTT.CHARACTER;
                           }
-          }
-        case 138: break;
-        case 60: 
-          { if (!allowNestedCharacterClasses) return RegExpTT.CHARACTER;
+            }
+          case 140: break;
+          case 60: 
+            { if (!allowNestedCharacterClasses) return RegExpTT.CHARACTER;
                                 return RegExpTT.REDUNDANT_ESCAPE;
-          }
-        case 139: break;
-        case 38: 
-          { yybegin(YYINITIAL); return RegExpTT.GT;
-          }
-        case 140: break;
-        case 75: 
-          { yybegin(PY_NAMED_GROUP_REF); return RegExpTT.PYTHON_NAMED_GROUP_REF;
-          }
-        case 141: break;
-        case 16: 
-          { return RegExpTT.UNION;
-          }
-        case 142: break;
-        case 3: 
-          { return RegExpTT.CHARACTER;
-          }
-        case 143: break;
-        case 41: 
-          { yybegin(OPTIONS); return RegExpTT.SET_OPTIONS;
-          }
-        case 144: break;
-        case 26: 
-          { yybegin(CLASS2); return RegExpTT.CHARACTER;
-          }
-        case 145: break;
-        case 71: 
-          { if (xmlSchemaMode) { yypushback(1); return RegExpTT.CHAR_CLASS; } else return RegExpTT.CTRL;
-          }
-        case 146: break;
-        case 30: 
-          { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.ESC_CHARACTER;
-          }
-        case 147: break;
-        case 12: 
-          { return RegExpTT.DOLLAR;
-          }
-        case 148: break;
-        case 61: 
-          { if (allowNestedCharacterClasses) return RegExpTT.ANDAND; else yypushback(1); return RegExpTT.CHARACTER;
-          }
-        case 149: break;
-        case 51: 
-          { if (xmlSchemaMode) return RegExpTT.CHAR_CLASS; else return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN;
-          }
-        case 150: break;
-        case 43: 
-          { return RegExpTT.REDUNDANT_ESCAPE;
-          }
-        case 151: break;
-        case 56: 
-          { return (allowHexDigitClass || allowHorizontalWhitespaceClass ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN);
-          }
-        case 152: break;
-        case 49: 
-          { return yystate() != CLASS2 ? RegExpTT.BOUNDARY : RegExpTT.ESC_CHARACTER;
-          }
-        case 153: break;
-        case 22: 
-          { yypopstate(); return RegExpTT.RBRACE;
-          }
-        case 154: break;
-        case 69: 
-          // lookahead expression with fixed base length
-          zzMarkedPos = zzStartRead + 1;
-          { if (allowEmptyCharacterClass) yypushstate(CLASS2); else yypushstate(NEGATE_CLASS1);
+            }
+          case 141: break;
+          case 61: 
+            { if (allowNestedCharacterClasses) return RegExpTT.ANDAND; else yypushback(1); return RegExpTT.CHARACTER;
+            }
+          case 142: break;
+          case 62: 
+            { yybegin(CLASS2); return RegExpTT.BRACKET_EXPRESSION_END;
+            }
+          case 143: break;
+          case 63: 
+            { yybegin(PY_COND_REF); return RegExpTT.PYTHON_COND_REF;
+            }
+          case 144: break;
+          case 64: 
+            { yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_NAMED_GROUP;
+            }
+          case 145: break;
+          case 65: 
+            { yybegin(QUOTED_NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_QUOTED_NAMED_GROUP;
+            }
+          case 146: break;
+          case 66: 
+            { return RegExpTT.NON_CAPT_GROUP;
+            }
+          case 147: break;
+          case 67: 
+            { return RegExpTT.POS_LOOKAHEAD;
+            }
+          case 148: break;
+          case 68: 
+            { return RegExpTT.NEG_LOOKAHEAD;
+            }
+          case 149: break;
+          case 69: 
+            // lookahead expression with fixed base length
+            zzMarkedPos = Character.offsetByCodePoints
+                (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
+            { if (allowEmptyCharacterClass) yypushstate(CLASS2); else yypushstate(NEGATE_CLASS1);
                               return RegExpTT.CLASS_BEGIN;
-          }
-        case 155: break;
-        case 64: 
-          { yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_NAMED_GROUP;
-          }
-        case 156: break;
-        case 55: 
-          { return StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN;
-          }
-        case 157: break;
-        case 54: 
-          { return RegExpTT.BAD_HEX_VALUE;
-          }
-        case 158: break;
-        case 9: 
-          { return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN;
-          }
-        case 159: break;
-        case 11: 
-          { return RegExpTT.CARET;
-          }
-        case 160: break;
-        case 46: 
-          { return RegExpTT.ESC_CHARACTER;
-          }
-        case 161: break;
-        case 79: 
-          { if (allowOctalNoLeadingZero) return RegExpTT.OCT_CHAR;
+            }
+          case 150: break;
+          case 70: 
+            { return RegExpTT.OCT_CHAR;
+            }
+          case 151: break;
+          case 71: 
+            { if (xmlSchemaMode) { yypushback(1); return RegExpTT.CHAR_CLASS; } else return RegExpTT.CTRL;
+            }
+          case 152: break;
+          case 72: 
+            { yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP_REF;
+            }
+          case 153: break;
+          case 73: 
+            { yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP_REF;
+            }
+          case 154: break;
+          case 74: 
+            { yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.PYTHON_NAMED_GROUP;
+            }
+          case 155: break;
+          case 75: 
+            { yybegin(PY_NAMED_GROUP_REF); return RegExpTT.PYTHON_NAMED_GROUP_REF;
+            }
+          case 156: break;
+          case 76: 
+            { return RegExpTT.POS_LOOKBEHIND;
+            }
+          case 157: break;
+          case 77: 
+            { return RegExpTT.NEG_LOOKBEHIND;
+            }
+          case 158: break;
+          case 78: 
+            { return RegExpTT.HEX_CHAR;
+            }
+          case 159: break;
+          case 79: 
+            { if (allowOctalNoLeadingZero) return RegExpTT.OCT_CHAR;
                                 if (yystate() == CLASS2) return RegExpTT.ESC_CHARACTER;
                                 while (yylength() > 2 && Integer.parseInt(yytext().toString().substring(1)) > capturingGroupCount) {
                                   yypushback(1);
                                 }
                                 return RegExpTT.BACKREF;
-          }
-        case 162: break;
-        default:
-          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
-            zzAtEOF = true;
-            zzDoEOF();
-            return null;
-          }
-          else {
+            }
+          case 160: break;
+          case 80: 
+            { return RegExpTT.COMMENT;
+            }
+          case 161: break;
+          case 81: 
+            { return RegExpTT.UNICODE_CHAR;
+            }
+          case 162: break;
+          default:
             zzScanError(ZZ_NO_MATCH);
           }
       }
diff --git a/build/scripts/download_jre.gant b/build/scripts/download_jre.gant
new file mode 100644 (file)
index 0000000..ed196fc
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.regex.Pattern
+
+target('default': 'Downloads custom JRE build from Teamcity server') {
+  def buildId = new URL("$jreTeamcityUrl/buildTypes/id:$jreBuildTypeId/builds/tags:$jreBuildTag/id").text
+  def buildNumber = new URL("$jreTeamcityUrl/builds/id:$buildId/number").text
+  java(jvm: "$workIdeaHome/jre/jre/bin/java", fork: "true", classname: "dummy", outputproperty: "jvmVersionOutput") {
+    jvmarg(value: "-version")
+  }
+  if (hasProperty("jvmVersionOutput") &&
+      jvmVersionOutput =~ /\(build .*release-b${Pattern.quote(buildNumber)}\)/ &&
+      jvmVersionOutput =~ (jreArchitecture == "64" ? /OpenJDK 64-Bit Server VM/ : /OpenJDK Server VM/)) {
+    echo "Latest version of custom JRE is installed, no update is required"
+    return
+  }
+  def files = new XmlSlurper().parse("$jreTeamcityUrl/builds/id:$buildId/artifacts/children/$jreArtifactPlatform")
+  def artifact = files.children().collect { it.@name.text() }.find {
+    it.startsWith(jreArtifactPrefix) && it.endsWith(jreArchitecture == "64" ? "_x64.tar.gz" : "_x86.tar.gz")
+  }
+  get src: "$jreTeamcityUrl/builds/id:$buildId/artifacts/content/$jreArtifactPlatform/$artifact", dest: deployDir
+  mkdir dir: "$deployDir/jre"
+  untar src: "$deployDir/$artifact", dest: "$deployDir/jre", compression: "gzip"
+  delete file: "$deployDir/$artifact"
+}
\ No newline at end of file
index d776410599f156b4e8cbc9e6753e3abac8644066..0266101ca0a86420d7288b7e7b36fc40019b5080 100644 (file)
@@ -69,8 +69,11 @@ public class LibraryPackagingElement extends ComplexPackagingElement<LibraryPack
       final VirtualFile[] files = library.getFiles(OrderRootType.CLASSES);
       final List<PackagingElement<?>> elements = new ArrayList<PackagingElement<?>>();
       for (VirtualFile file : files) {
-        final String path = FileUtil.toSystemIndependentName(PathUtil.getLocalPath(file));
-        elements.add(file.isDirectory() && file.isInLocalFileSystem() ? new DirectoryCopyPackagingElement(path) : new FileCopyPackagingElement(path));
+        String localPath = PathUtil.getLocalPath(file);
+        if (localPath != null) {
+          final String path = FileUtil.toSystemIndependentName(localPath);
+          elements.add(file.isDirectory() && file.isInLocalFileSystem() ? new DirectoryCopyPackagingElement(path) : new FileCopyPackagingElement(path));
+        }
       }
       return elements;
     }
index 05286725aac12aac9942b1122c7cff05ebe67640..d5047d5005abd8d16c72e48b2fdea0f7de9ca6e9 100644 (file)
@@ -274,7 +274,9 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
       LOG.error("State is invalid " + myState.get());
     }
     DebuggerManagerThreadImpl.assertIsManagerThread();
-    myPositionManager = createPositionManager();
+    if (myPositionManager == null) { // no need to reset on reattach
+      myPositionManager = createPositionManager();
+    }
     LOG.debug("*******************VM attached******************");
     checkVirtualMachineVersion(vm);
 
index 9af60ae015d8d232bb2e58d1a4b3ca4137b5709c..b2c45b4319871c3166c88300ae4b3ef6b3da21e8 100644 (file)
@@ -1552,7 +1552,11 @@ public class HighlightMethodUtil {
           
           HighlightInfo info = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(infoElement).description(description).escapedToolTip(toolTip).navigationShift(+1).create();
           if (info != null) {
-            registerFixesOnInvalidConstructorCall(constructorCall, classReference, list, aClass, constructors, results, infoElement, info);
+            JavaResolveResult[] methodCandidates = results;
+            if (constructorCall instanceof PsiNewExpression) {
+              methodCandidates = resolveHelper.getReferencedMethodCandidates((PsiCallExpression)constructorCall, true);
+            }
+            registerFixesOnInvalidConstructorCall(constructorCall, classReference, list, aClass, constructors, methodCandidates, infoElement, info);
             registerMethodReturnFixAction(info, result, constructorCall);
             holder.add(info);
           }
index a31c7587e0b0a5d6201d2deed8d1c7b17d996657..e10885900658cedd55929dd74fa1fa72b40da284 100644 (file)
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.3 on 4/26/14 2:08 PM */
+/* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */
 
 /*
  * Copyright 2000-2013 JetBrains s.r.o.
@@ -26,11 +26,14 @@ import com.intellij.lexer.FlexLexer;
 
 /**
  * This class is a scanner generated by 
- * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
- * on 4/26/14 2:08 PM from the specification file
- * <tt>/Users/ignatov/src/ultimate/tools/lexer/../../community/java/java-impl/src/com/intellij/spi/parsing/_SPILexer.flex</tt>
+ * <a href="http://www.jflex.de/">JFlex</a> 1.7.0-SNAPSHOT
+ * from the specification file <tt>/ideadev/tools/lexer/../../community/java/java-impl/src/com/intellij/spi/parsing/_SPILexer.flex</tt>
  */
 class _SPILexer implements FlexLexer {
+
+  /** This character denotes the end of file */
+  public static final int YYEOF = -1;
+
   /** initial size of the lookahead buffer */
   private static final int ZZ_BUFFERSIZE = 16384;
 
@@ -51,67 +54,128 @@ class _SPILexer implements FlexLexer {
    * Translates characters to character classes
    */
   private static final String ZZ_CMAP_PACKED = 
-    "\11\0\1\1\1\5\1\0\1\1\1\5\22\0\1\1\2\0\1\4"+
+    "\11\0\1\1\1\5\1\10\1\1\1\5\22\0\1\1\2\0\1\4"+
     "\1\6\11\0\1\7\1\0\12\3\7\0\32\2\4\0\1\2\1\0"+
-    "\32\2\57\0\1\2\12\0\1\2\4\0\1\2\5\0\27\2\1\0"+
-    "\37\2\1\0\u013f\2\31\0\162\2\4\0\14\2\16\0\5\2\11\0"+
-    "\1\2\213\0\1\2\13\0\1\2\1\0\3\2\1\0\1\2\1\0"+
-    "\24\2\1\0\54\2\1\0\46\2\1\0\5\2\4\0\202\2\10\0"+
-    "\105\2\1\0\46\2\2\0\2\2\6\0\20\2\41\0\46\2\2\0"+
-    "\1\2\7\0\47\2\110\0\33\2\5\0\3\2\56\0\32\2\5\0"+
-    "\13\2\25\0\12\3\4\0\2\2\1\0\143\2\1\0\1\2\17\0"+
-    "\2\2\7\0\2\2\12\3\3\2\2\0\1\2\20\0\1\2\1\0"+
-    "\36\2\35\0\3\2\60\0\46\2\13\0\1\2\u0152\0\66\2\3\0"+
-    "\1\2\22\0\1\2\7\0\12\2\4\0\12\3\25\0\10\2\2\0"+
-    "\2\2\2\0\26\2\1\0\7\2\1\0\1\2\3\0\4\2\3\0"+
-    "\1\2\36\0\2\2\1\0\3\2\4\0\12\3\2\2\23\0\6\2"+
-    "\4\0\2\2\2\0\26\2\1\0\7\2\1\0\2\2\1\0\2\2"+
-    "\1\0\2\2\37\0\4\2\1\0\1\2\7\0\12\3\2\0\3\2"+
-    "\20\0\11\2\1\0\3\2\1\0\26\2\1\0\7\2\1\0\2\2"+
-    "\1\0\5\2\3\0\1\2\22\0\1\2\17\0\2\2\4\0\12\3"+
-    "\25\0\10\2\2\0\2\2\2\0\26\2\1\0\7\2\1\0\2\2"+
-    "\1\0\5\2\3\0\1\2\36\0\2\2\1\0\3\2\4\0\12\3"+
-    "\1\0\1\2\21\0\1\2\1\0\6\2\3\0\3\2\1\0\4\2"+
-    "\3\0\2\2\1\0\1\2\1\0\2\2\3\0\2\2\3\0\3\2"+
-    "\3\0\10\2\1\0\3\2\55\0\11\3\25\0\10\2\1\0\3\2"+
-    "\1\0\27\2\1\0\12\2\1\0\5\2\46\0\2\2\4\0\12\3"+
-    "\25\0\10\2\1\0\3\2\1\0\27\2\1\0\12\2\1\0\5\2"+
-    "\3\0\1\2\40\0\1\2\1\0\2\2\4\0\12\3\25\0\10\2"+
-    "\1\0\3\2\1\0\27\2\1\0\20\2\46\0\2\2\4\0\12\3"+
-    "\25\0\22\2\3\0\30\2\1\0\11\2\1\0\1\2\2\0\7\2"+
-    "\72\0\60\2\1\0\2\2\14\0\7\2\11\0\12\3\47\0\2\2"+
-    "\1\0\1\2\2\0\2\2\1\0\1\2\2\0\1\2\6\0\4\2"+
-    "\1\0\7\2\1\0\3\2\1\0\1\2\1\0\1\2\2\0\2\2"+
-    "\1\0\4\2\1\0\2\2\11\0\1\2\2\0\5\2\1\0\1\2"+
-    "\11\0\12\3\2\0\2\2\42\0\1\2\37\0\12\3\26\0\10\2"+
-    "\1\0\42\2\35\0\4\2\164\0\42\2\1\0\5\2\1\0\2\2"+
-    "\25\0\12\3\6\0\6\2\112\0\46\2\12\0\51\2\7\0\132\2"+
-    "\5\0\104\2\5\0\122\2\6\0\7\2\1\0\77\2\1\0\1\2"+
-    "\1\0\4\2\2\0\7\2\1\0\1\2\1\0\4\2\2\0\47\2"+
-    "\1\0\1\2\1\0\4\2\2\0\37\2\1\0\1\2\1\0\4\2"+
-    "\2\0\7\2\1\0\1\2\1\0\4\2\2\0\7\2\1\0\7\2"+
-    "\1\0\27\2\1\0\37\2\1\0\1\2\1\0\4\2\2\0\7\2"+
-    "\1\0\47\2\1\0\23\2\16\0\11\3\56\0\125\2\14\0\u026c\2"+
-    "\2\0\10\2\12\0\32\2\5\0\113\2\25\0\15\2\1\0\4\2"+
-    "\16\0\22\2\16\0\22\2\16\0\15\2\1\0\3\2\17\0\64\2"+
-    "\43\0\1\2\4\0\1\2\3\0\12\3\46\0\12\3\6\0\130\2"+
-    "\10\0\51\2\127\0\35\2\51\0\12\3\36\2\2\0\5\2\u038b\0"+
-    "\154\2\224\0\234\2\4\0\132\2\6\0\26\2\2\0\6\2\2\0"+
-    "\46\2\2\0\6\2\2\0\10\2\1\0\1\2\1\0\1\2\1\0"+
-    "\1\2\1\0\37\2\2\0\65\2\1\0\7\2\1\0\1\2\3\0"+
-    "\3\2\1\0\7\2\3\0\4\2\2\0\6\2\4\0\15\2\5\0"+
-    "\3\2\1\0\7\2\164\0\1\2\15\0\1\2\202\0\1\2\4\0"+
-    "\1\2\2\0\12\2\1\0\1\2\3\0\5\2\6\0\1\2\1\0"+
-    "\1\2\1\0\1\2\1\0\4\2\1\0\3\2\1\0\7\2\3\0"+
-    "\3\2\5\0\5\2\u0ebb\0\2\2\52\0\5\2\5\0\2\2\4\0"+
-    "\126\2\6\0\3\2\1\0\132\2\1\0\4\2\5\0\50\2\4\0"+
-    "\136\2\21\0\30\2\70\0\20\2\u0200\0\u19b6\2\112\0\u51a6\2\132\0"+
-    "\u048d\2\u0773\0\u2ba4\2\u215c\0\u012e\2\2\0\73\2\225\0\7\2\14\0"+
-    "\5\2\5\0\1\2\1\0\12\2\1\0\15\2\1\0\5\2\1\0"+
-    "\1\2\1\0\2\2\1\0\2\2\1\0\154\2\41\0\u016b\2\22\0"+
-    "\100\2\2\0\66\2\50\0\14\2\164\0\5\2\1\0\207\2\23\0"+
-    "\12\3\7\0\32\2\6\0\32\2\13\0\131\2\3\0\6\2\2\0"+
-    "\6\2\2\0\6\2\2\0\3\2\43\0";
+    "\32\2\12\0\1\10\44\0\1\2\12\0\1\2\4\0\1\2\5\0"+
+    "\27\2\1\0\37\2\1\0\u01ca\2\4\0\14\2\16\0\5\2\7\0"+
+    "\1\2\1\0\1\2\201\0\5\2\1\0\2\2\2\0\4\2\1\0"+
+    "\1\2\6\0\1\2\1\0\3\2\1\0\1\2\1\0\24\2\1\0"+
+    "\123\2\1\0\213\2\10\0\246\2\1\0\46\2\2\0\1\2\7\0"+
+    "\47\2\110\0\33\2\5\0\3\2\55\0\53\2\25\0\12\3\4\0"+
+    "\2\2\1\0\143\2\1\0\1\2\17\0\2\2\7\0\2\2\12\3"+
+    "\3\2\2\0\1\2\20\0\1\2\1\0\36\2\35\0\131\2\13\0"+
+    "\1\2\16\0\12\3\41\2\11\0\2\2\4\0\1\2\5\0\26\2"+
+    "\4\0\1\2\11\0\1\2\3\0\1\2\27\0\31\2\107\0\25\2"+
+    "\117\0\66\2\3\0\1\2\22\0\1\2\7\0\12\2\4\0\12\3"+
+    "\1\0\20\2\4\0\10\2\2\0\2\2\2\0\26\2\1\0\7\2"+
+    "\1\0\1\2\3\0\4\2\3\0\1\2\20\0\1\2\15\0\2\2"+
+    "\1\0\3\2\4\0\12\3\2\2\23\0\6\2\4\0\2\2\2\0"+
+    "\26\2\1\0\7\2\1\0\2\2\1\0\2\2\1\0\2\2\37\0"+
+    "\4\2\1\0\1\2\7\0\12\3\2\0\3\2\20\0\11\2\1\0"+
+    "\3\2\1\0\26\2\1\0\7\2\1\0\2\2\1\0\5\2\3\0"+
+    "\1\2\22\0\1\2\17\0\2\2\4\0\12\3\11\0\1\2\13\0"+
+    "\10\2\2\0\2\2\2\0\26\2\1\0\7\2\1\0\2\2\1\0"+
+    "\5\2\3\0\1\2\36\0\2\2\1\0\3\2\4\0\12\3\1\0"+
+    "\1\2\21\0\1\2\1\0\6\2\3\0\3\2\1\0\4\2\3\0"+
+    "\2\2\1\0\1\2\1\0\2\2\3\0\2\2\3\0\3\2\3\0"+
+    "\14\2\26\0\1\2\25\0\12\3\25\0\10\2\1\0\3\2\1\0"+
+    "\27\2\1\0\20\2\3\0\1\2\32\0\3\2\5\0\2\2\4\0"+
+    "\12\3\25\0\10\2\1\0\3\2\1\0\27\2\1\0\12\2\1\0"+
+    "\5\2\3\0\1\2\40\0\1\2\1\0\2\2\4\0\12\3\1\0"+
+    "\2\2\22\0\10\2\1\0\3\2\1\0\51\2\2\0\1\2\20\0"+
+    "\1\2\20\0\3\2\4\0\12\3\12\0\6\2\5\0\22\2\3\0"+
+    "\30\2\1\0\11\2\1\0\1\2\2\0\7\2\37\0\12\3\21\0"+
+    "\60\2\1\0\2\2\14\0\7\2\11\0\12\3\47\0\2\2\1\0"+
+    "\1\2\2\0\2\2\1\0\1\2\2\0\1\2\6\0\4\2\1\0"+
+    "\7\2\1\0\3\2\1\0\1\2\1\0\1\2\2\0\2\2\1\0"+
+    "\4\2\1\0\2\2\11\0\1\2\2\0\5\2\1\0\1\2\11\0"+
+    "\12\3\2\0\4\2\40\0\1\2\37\0\12\3\26\0\10\2\1\0"+
+    "\44\2\33\0\5\2\163\0\53\2\24\0\1\2\12\3\6\0\6\2"+
+    "\4\0\4\2\3\0\1\2\3\0\2\2\7\0\3\2\4\0\15\2"+
+    "\14\0\1\2\1\0\12\3\6\0\46\2\1\0\1\2\5\0\1\2"+
+    "\2\0\53\2\1\0\u014d\2\1\0\4\2\2\0\7\2\1\0\1\2"+
+    "\1\0\4\2\2\0\51\2\1\0\4\2\2\0\41\2\1\0\4\2"+
+    "\2\0\7\2\1\0\1\2\1\0\4\2\2\0\17\2\1\0\71\2"+
+    "\1\0\4\2\2\0\103\2\45\0\20\2\20\0\126\2\2\0\6\2"+
+    "\3\0\u026c\2\2\0\21\2\1\0\32\2\5\0\113\2\6\0\10\2"+
+    "\7\0\15\2\1\0\4\2\16\0\22\2\16\0\22\2\16\0\15\2"+
+    "\1\0\3\2\17\0\64\2\43\0\1\2\4\0\1\2\3\0\12\3"+
+    "\46\0\12\3\6\0\130\2\10\0\51\2\1\0\1\2\5\0\106\2"+
+    "\12\0\37\2\47\0\12\3\36\2\2\0\5\2\13\0\54\2\4\0"+
+    "\32\2\6\0\12\3\46\0\27\2\11\0\65\2\53\0\12\3\6\0"+
+    "\12\3\15\0\1\2\135\0\57\2\21\0\7\2\4\0\12\3\51\0"+
+    "\36\2\15\0\2\2\12\3\54\2\32\0\44\2\34\0\12\3\3\0"+
+    "\3\2\12\3\44\2\153\0\4\2\1\0\4\2\3\0\2\2\11\0"+
+    "\300\2\100\0\u0116\2\2\0\6\2\2\0\46\2\2\0\6\2\2\0"+
+    "\10\2\1\0\1\2\1\0\1\2\1\0\1\2\1\0\37\2\2\0"+
+    "\65\2\1\0\7\2\1\0\1\2\3\0\3\2\1\0\7\2\3\0"+
+    "\4\2\2\0\6\2\4\0\15\2\5\0\3\2\1\0\7\2\53\0"+
+    "\1\10\1\10\107\0\1\2\15\0\1\2\20\0\15\2\145\0\1\2"+
+    "\4\0\1\2\2\0\12\2\1\0\1\2\3\0\5\2\6\0\1\2"+
+    "\1\0\1\2\1\0\1\2\1\0\4\2\1\0\13\2\2\0\4\2"+
+    "\5\0\5\2\4\0\1\2\64\0\2\2\u0a7b\0\57\2\1\0\57\2"+
+    "\1\0\205\2\6\0\4\2\3\0\2\2\14\0\46\2\1\0\1\2"+
+    "\5\0\1\2\2\0\70\2\7\0\1\2\20\0\27\2\11\0\7\2"+
+    "\1\0\7\2\1\0\7\2\1\0\7\2\1\0\7\2\1\0\7\2"+
+    "\1\0\7\2\1\0\7\2\120\0\1\2\u01d5\0\2\2\52\0\5\2"+
+    "\5\0\2\2\4\0\126\2\6\0\3\2\1\0\132\2\1\0\4\2"+
+    "\5\0\51\2\3\0\136\2\21\0\33\2\65\0\20\2\u0200\0\u19b6\2"+
+    "\112\0\u51d6\2\52\0\u048d\2\103\0\56\2\2\0\u010d\2\3\0\20\2"+
+    "\12\3\2\2\24\0\57\2\20\0\37\2\2\0\106\2\61\0\11\2"+
+    "\2\0\147\2\2\0\43\2\2\0\10\2\77\0\13\2\1\0\3\2"+
+    "\1\0\4\2\1\0\27\2\35\0\64\2\16\0\62\2\34\0\12\3"+
+    "\30\0\6\2\3\0\1\2\1\0\1\2\2\0\12\3\34\2\12\0"+
+    "\27\2\31\0\35\2\7\0\57\2\34\0\1\2\12\3\6\0\5\2"+
+    "\1\0\12\2\12\3\5\2\1\0\51\2\27\0\3\2\1\0\10\2"+
+    "\4\0\12\3\6\0\27\2\3\0\1\2\3\0\62\2\1\0\1\2"+
+    "\3\0\2\2\2\0\5\2\2\0\1\2\1\0\1\2\30\0\3\2"+
+    "\2\0\13\2\7\0\3\2\14\0\6\2\2\0\6\2\2\0\6\2"+
+    "\11\0\7\2\1\0\7\2\1\0\53\2\1\0\12\2\12\0\163\2"+
+    "\15\0\12\3\6\0\u2ba4\2\14\0\27\2\4\0\61\2\u2104\0\u016e\2"+
+    "\2\0\152\2\46\0\7\2\14\0\5\2\5\0\1\2\1\0\12\2"+
+    "\1\0\15\2\1\0\5\2\1\0\1\2\1\0\2\2\1\0\2\2"+
+    "\1\0\154\2\41\0\u016b\2\22\0\100\2\2\0\66\2\50\0\14\2"+
+    "\164\0\5\2\1\0\207\2\23\0\12\3\7\0\32\2\6\0\32\2"+
+    "\13\0\131\2\3\0\6\2\2\0\6\2\2\0\6\2\2\0\3\2"+
+    "\43\0\14\2\1\0\32\2\1\0\23\2\1\0\2\2\1\0\17\2"+
+    "\2\0\16\2\42\0\173\2\u0185\0\35\2\3\0\61\2\57\0\40\2"+
+    "\20\0\21\2\1\0\10\2\6\0\46\2\12\0\36\2\2\0\44\2"+
+    "\4\0\10\2\60\0\236\2\2\0\12\3\126\0\50\2\10\0\64\2"+
+    "\234\0\u0137\2\11\0\26\2\12\0\10\2\230\0\6\2\2\0\1\2"+
+    "\1\0\54\2\1\0\2\2\3\0\1\2\2\0\27\2\12\0\27\2"+
+    "\11\0\37\2\101\0\23\2\1\0\2\2\12\0\26\2\12\0\32\2"+
+    "\106\0\70\2\6\0\2\2\100\0\1\2\17\0\4\2\1\0\3\2"+
+    "\1\0\33\2\54\0\35\2\3\0\35\2\43\0\10\2\1\0\34\2"+
+    "\33\0\66\2\12\0\26\2\12\0\23\2\15\0\22\2\156\0\111\2"+
+    "\67\0\63\2\15\0\63\2\u0310\0\65\2\56\0\12\3\23\0\55\2"+
+    "\40\0\31\2\7\0\12\3\11\0\44\2\17\0\12\3\20\0\43\2"+
+    "\3\0\1\2\14\0\60\2\16\0\4\2\13\0\12\3\1\2\1\0"+
+    "\1\2\43\0\22\2\1\0\31\2\124\0\7\2\1\0\1\2\1\0"+
+    "\4\2\1\0\17\2\1\0\12\2\7\0\57\2\21\0\12\3\13\0"+
+    "\10\2\2\0\2\2\2\0\26\2\1\0\7\2\1\0\2\2\1\0"+
+    "\5\2\3\0\1\2\22\0\1\2\14\0\5\2\u011e\0\60\2\24\0"+
+    "\2\2\1\0\1\2\10\0\12\3\246\0\57\2\51\0\4\2\44\0"+
+    "\60\2\24\0\1\2\13\0\12\3\46\0\53\2\25\0\12\3\66\0"+
+    "\32\2\26\0\12\3\u0166\0\100\2\12\3\25\0\1\2\u01c0\0\71\2"+
+    "\u0507\0\u039a\2\346\0\304\2\u0abc\0\u042f\2\u0fd1\0\u0247\2\u21b9\0\u0239\2"+
+    "\7\0\37\2\1\0\12\3\146\0\36\2\22\0\60\2\20\0\4\2"+
+    "\14\0\12\3\11\0\25\2\5\0\23\2\u0370\0\105\2\13\0\1\2"+
+    "\102\0\15\2\u4060\0\2\2\u0bfe\0\153\2\5\0\15\2\3\0\11\2"+
+    "\7\0\12\2\u1766\0\125\2\1\0\107\2\1\0\2\2\2\0\1\2"+
+    "\2\0\2\2\2\0\4\2\1\0\14\2\1\0\1\2\1\0\7\2"+
+    "\1\0\101\2\1\0\4\2\2\0\10\2\1\0\7\2\1\0\34\2"+
+    "\1\0\4\2\1\0\5\2\1\0\1\2\3\0\7\2\1\0\u0154\2"+
+    "\2\0\31\2\1\0\31\2\1\0\37\2\1\0\31\2\1\0\37\2"+
+    "\1\0\31\2\1\0\37\2\1\0\31\2\1\0\37\2\1\0\31\2"+
+    "\1\0\10\2\2\0\62\3\u1000\0\305\2\u053b\0\4\2\1\0\33\2"+
+    "\1\0\2\2\1\0\1\2\2\0\1\2\1\0\12\2\1\0\4\2"+
+    "\1\0\1\2\1\0\1\2\6\0\1\2\4\0\1\2\1\0\1\2"+
+    "\1\0\1\2\1\0\3\2\1\0\2\2\1\0\1\2\2\0\1\2"+
+    "\1\0\1\2\1\0\1\2\1\0\1\2\1\0\1\2\1\0\2\2"+
+    "\1\0\1\2\2\0\4\2\1\0\7\2\1\0\4\2\1\0\4\2"+
+    "\1\0\1\2\1\0\12\2\1\0\21\2\5\0\3\2\1\0\5\2"+
+    "\1\0\21\2\u1144\0\ua6d7\2\51\0\u1035\2\13\0\336\2\2\0\u1682\2"+
+    "\u295e\0\u021e\2\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u05f0\0";
 
   /** 
    * Translates characters to character classes
@@ -152,7 +216,7 @@ class _SPILexer implements FlexLexer {
   private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
 
   private static final String ZZ_ROWMAP_PACKED_0 =
-    "\0\0\0\10\0\20\0\30\0\40\0\10\0\10";
+    "\0\0\0\11\0\22\0\33\0\44\0\11\0\11";
 
   private static int [] zzUnpackRowMap() {
     int [] result = new int[7];
@@ -179,11 +243,11 @@ class _SPILexer implements FlexLexer {
 
   private static final String ZZ_TRANS_PACKED_0 =
     "\1\2\1\3\1\4\1\2\1\5\1\3\1\6\1\7"+
-    "\11\0\1\3\3\0\1\3\4\0\2\4\4\0\5\5"+
-    "\1\0\2\5";
+    "\13\0\1\3\3\0\1\3\5\0\2\4\5\0\5\5"+
+    "\1\0\3\5";
 
   private static int [] zzUnpackTrans() {
-    int [] result = new int[40];
+    int [] result = new int[45];
     int offset = 0;
     offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
     return result;
@@ -207,13 +271,10 @@ class _SPILexer implements FlexLexer {
   private static final int ZZ_UNKNOWN_ERROR = 0;
   private static final int ZZ_NO_MATCH = 1;
   private static final int ZZ_PUSHBACK_2BIG = 2;
-  private static final char[] EMPTY_BUFFER = new char[0];
-  private static final int YYEOF = -1;
-  private static java.io.Reader zzReader = null; // Fake
 
   /* error messages for the codes above */
-  private static final String ZZ_ERROR_MSG[] = {
-    "Unkown internal scanner error",
+  private static final String[] ZZ_ERROR_MSG = {
+    "Unknown internal scanner error",
     "Error: could not match input",
     "Error: pushback value was too large"
   };
@@ -245,6 +306,9 @@ class _SPILexer implements FlexLexer {
     return j;
   }
 
+  /** the input device */
+  private java.io.Reader zzReader;
+
   /** the current state of the DFA */
   private int zzState;
 
@@ -290,27 +354,17 @@ class _SPILexer implements FlexLexer {
     this((java.io.Reader)null);
   }
 
-  public void goTo(int offset) {
-    zzCurrentPos = zzMarkedPos = zzStartRead = offset;
-    zzPushbackPos = 0;
-    zzAtEOF = offset < zzEndRead;
-  }
-
-
-  _SPILexer(java.io.Reader in) {
-    this.zzReader = in;
-  }
 
   /**
-   * Creates a new scanner.
-   * There is also java.io.Reader version of this constructor.
+   * Creates a new scanner
    *
-   * @param   in  the java.io.Inputstream to read input from.
+   * @param   in  the java.io.Reader to read input from.
    */
-  _SPILexer(java.io.InputStream in) {
-    this(new java.io.InputStreamReader(in));
+  _SPILexer(java.io.Reader in) {
+    this.zzReader = in;
   }
 
+
   /** 
    * Unpacks the compressed character translation table.
    *
@@ -318,10 +372,10 @@ class _SPILexer implements FlexLexer {
    * @return         the unpacked character translation table
    */
   private static char [] zzUnpackCMap(String packed) {
-    char [] map = new char[0x10000];
+    char [] map = new char[0x110000];
     int i = 0;  /* index in packed string  */
     int j = 0;  /* index in unpacked array */
-    while (i < 1212) {
+    while (i < 2454) {
       int  count = packed.charAt(i++);
       char value = packed.charAt(i++);
       do map[j++] = value; while (--count > 0);
@@ -497,12 +551,20 @@ class _SPILexer implements FlexLexer {
 
       zzState = ZZ_LEXSTATE[zzLexicalState];
 
+      // set up zzAction for empty match case:
+      int zzAttributes = zzAttrL[zzState];
+      if ( (zzAttributes & 1) == 1 ) {
+        zzAction = zzState;
+      }
+
 
       zzForAction: {
         while (true) {
 
-          if (zzCurrentPosL < zzEndReadL)
-            zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+          if (zzCurrentPosL < zzEndReadL) {
+            zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+            zzCurrentPosL += Character.charCount(zzInput);
+          }
           else if (zzAtEOF) {
             zzInput = YYEOF;
             break zzForAction;
@@ -522,14 +584,15 @@ class _SPILexer implements FlexLexer {
               break zzForAction;
             }
             else {
-              zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+              zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+              zzCurrentPosL += Character.charCount(zzInput);
             }
           }
           int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
           if (zzNext == -1) break zzForAction;
           zzState = zzNext;
 
-          int zzAttributes = zzAttrL[zzState];
+          zzAttributes = zzAttrL[zzState];
           if ( (zzAttributes & 1) == 1 ) {
             zzAction = zzState;
             zzMarkedPosL = zzCurrentPosL;
@@ -542,38 +605,38 @@ class _SPILexer implements FlexLexer {
       // store back cached position
       zzMarkedPos = zzMarkedPosL;
 
-      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
-        case 2: 
-          { return JavaTokenType.WHITE_SPACE;
-          }
-        case 7: break;
-        case 3: 
-          { return SPITokenType.IDENTIFIER;
-          }
-        case 8: break;
-        case 6: 
-          { return JavaTokenType.DOT;
-          }
-        case 9: break;
-        case 5: 
-          { return SPITokenType.DOLLAR;
-          }
-        case 10: break;
-        case 4: 
-          { return JavaTokenType.END_OF_LINE_COMMENT;
-          }
-        case 11: break;
-        case 1: 
-          { return JavaTokenType.BAD_CHARACTER;
-          }
-        case 12: break;
-        default:
-          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
-            zzAtEOF = true;
-            zzDoEOF();
-            return null;
-          }
-          else {
+      if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+        zzAtEOF = true;
+        zzDoEOF();
+        return null;
+      }
+      else {
+        switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+          case 1: 
+            { return JavaTokenType.BAD_CHARACTER;
+            }
+          case 7: break;
+          case 2: 
+            { return JavaTokenType.WHITE_SPACE;
+            }
+          case 8: break;
+          case 3: 
+            { return SPITokenType.IDENTIFIER;
+            }
+          case 9: break;
+          case 4: 
+            { return JavaTokenType.END_OF_LINE_COMMENT;
+            }
+          case 10: break;
+          case 5: 
+            { return SPITokenType.DOLLAR;
+            }
+          case 11: break;
+          case 6: 
+            { return JavaTokenType.DOT;
+            }
+          case 12: break;
+          default:
             zzScanError(ZZ_NO_MATCH);
           }
       }
index 9a407038660dc257113370578a80d88b5a06593a..18ce275ed5e8ed02c1a854e41bc2aa5554e3cd7b 100644 (file)
@@ -27,12 +27,6 @@ import com.intellij.lexer.FlexLexer;
   public _SPILexer() {
     this((java.io.Reader)null);
   }
-
-  public void goTo(int offset) {
-    zzCurrentPos = zzMarkedPos = zzStartRead = offset;
-    zzPushbackPos = 0;
-    zzAtEOF = offset < zzEndRead;
-  }
 %}
 
 %unicode
index bc914f1a8cdd73d9401ceb598246c0e2bcbc470c..af56ac71214368da605f72974fc9bc18088feb06 100644 (file)
@@ -1,20 +1,4 @@
-/*
- * Copyright 2000-2015 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* The following code was generated by JFlex 1.4.3 on 5/15/15 11:22 AM */
+/* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */
 
   /* It's an automatically generated code. Do not modify it. */
 package com.intellij.lang.java.lexer;
@@ -27,26 +11,29 @@ import com.intellij.psi.tree.IElementType;
 
 /**
  * This class is a scanner generated by 
- * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
- * on 5/15/15 11:22 AM from the specification file
- * <tt>C:/ws/IDEA/tools/lexer/../../community/java/java-psi-impl/src/com/intellij/lang/java/lexer/_JavaDocLexer.flex</tt>
+ * <a href="http://www.jflex.de/">JFlex</a> 1.7.0-SNAPSHOT
+ * from the specification file <tt>/ideadev/tools/lexer/../../community/java/java-psi-impl/src/com/intellij/lang/java/lexer/_JavaDocLexer.flex</tt>
  */
 class _JavaDocLexer implements FlexLexer {
+
+  /** This character denotes the end of file */
+  public static final int YYEOF = -1;
+
   /** initial size of the lookahead buffer */
   private static final int ZZ_BUFFERSIZE = 16384;
 
   /** lexical states */
-  public static final int CODE_TAG = 18;
-  public static final int INLINE_TAG_NAME = 16;
-  public static final int PARAM_TAG_SPACE = 8;
-  public static final int COMMENT_DATA = 4;
-  public static final int DOC_TAG_VALUE = 10;
-  public static final int CODE_TAG_SPACE = 20;
+  public static final int YYINITIAL = 0;
   public static final int COMMENT_DATA_START = 2;
+  public static final int COMMENT_DATA = 4;
   public static final int TAG_DOC_SPACE = 6;
-  public static final int YYINITIAL = 0;
+  public static final int PARAM_TAG_SPACE = 8;
+  public static final int DOC_TAG_VALUE = 10;
   public static final int DOC_TAG_VALUE_IN_PAREN = 12;
   public static final int DOC_TAG_VALUE_IN_LTGT = 14;
+  public static final int INLINE_TAG_NAME = 16;
+  public static final int CODE_TAG = 18;
+  public static final int CODE_TAG_SPACE = 20;
 
   /**
    * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
@@ -63,90 +50,114 @@ class _JavaDocLexer implements FlexLexer {
    * Translates characters to character classes
    */
   private static final String ZZ_CMAP_PACKED = 
-    "\11\0\1\2\1\35\1\0\1\2\1\1\22\0\1\2\2\0\1\14"+
+    "\11\0\1\2\1\1\1\35\1\36\1\1\22\0\1\2\2\0\1\14"+
     "\1\4\3\0\1\12\1\13\1\10\1\0\1\15\1\5\1\3\1\7"+
     "\12\3\1\5\1\0\1\23\1\0\1\24\1\0\1\16\32\4\1\11"+
     "\1\0\1\11\1\0\1\4\1\0\1\20\1\4\1\26\1\30\1\31"+
     "\3\4\1\33\2\4\1\32\1\22\1\4\1\27\1\17\1\4\1\21"+
-    "\1\4\1\34\6\4\1\25\1\0\1\6\44\0\4\4\4\0\1\4"+
-    "\12\0\1\4\4\0\1\4\5\0\27\4\1\0\37\4\1\0\u01ca\4"+
-    "\4\0\14\4\16\0\5\4\7\0\1\4\1\0\1\4\201\0\5\4"+
-    "\1\0\2\4\2\0\4\4\10\0\1\4\1\0\3\4\1\0\1\4"+
-    "\1\0\24\4\1\0\123\4\1\0\213\4\10\0\236\4\11\0\46\4"+
-    "\2\0\1\4\7\0\47\4\7\0\1\4\100\0\33\4\5\0\3\4"+
-    "\30\0\1\4\24\0\53\4\43\0\2\4\1\0\143\4\1\0\1\4"+
-    "\17\0\2\4\7\0\2\4\12\0\3\4\2\0\1\4\20\0\1\4"+
-    "\1\0\36\4\35\0\131\4\13\0\1\4\30\0\41\4\11\0\2\4"+
-    "\4\0\1\4\5\0\26\4\4\0\1\4\11\0\1\4\3\0\1\4"+
-    "\27\0\31\4\107\0\1\4\1\0\13\4\127\0\66\4\3\0\1\4"+
-    "\22\0\1\4\7\0\12\4\17\0\7\4\1\0\7\4\5\0\10\4"+
-    "\2\0\2\4\2\0\26\4\1\0\7\4\1\0\1\4\3\0\4\4"+
-    "\3\0\1\4\20\0\1\4\15\0\2\4\1\0\3\4\16\0\4\4"+
-    "\7\0\1\4\11\0\6\4\4\0\2\4\2\0\26\4\1\0\7\4"+
-    "\1\0\2\4\1\0\2\4\1\0\2\4\37\0\4\4\1\0\1\4"+
-    "\23\0\3\4\20\0\11\4\1\0\3\4\1\0\26\4\1\0\7\4"+
-    "\1\0\2\4\1\0\5\4\3\0\1\4\22\0\1\4\17\0\2\4"+
-    "\17\0\1\4\23\0\10\4\2\0\2\4\2\0\26\4\1\0\7\4"+
-    "\1\0\2\4\1\0\5\4\3\0\1\4\36\0\2\4\1\0\3\4"+
-    "\17\0\1\4\21\0\1\4\1\0\6\4\3\0\3\4\1\0\4\4"+
-    "\3\0\2\4\1\0\1\4\1\0\2\4\3\0\2\4\3\0\3\4"+
-    "\3\0\14\4\26\0\1\4\50\0\1\4\13\0\10\4\1\0\3\4"+
-    "\1\0\27\4\1\0\12\4\1\0\5\4\3\0\1\4\32\0\2\4"+
-    "\6\0\2\4\43\0\10\4\1\0\3\4\1\0\27\4\1\0\12\4"+
-    "\1\0\5\4\3\0\1\4\40\0\1\4\1\0\2\4\17\0\2\4"+
-    "\22\0\10\4\1\0\3\4\1\0\51\4\2\0\1\4\20\0\1\4"+
-    "\21\0\2\4\30\0\6\4\5\0\22\4\3\0\30\4\1\0\11\4"+
-    "\1\0\1\4\2\0\7\4\72\0\60\4\1\0\2\4\13\0\10\4"+
-    "\72\0\2\4\1\0\1\4\2\0\2\4\1\0\1\4\2\0\1\4"+
-    "\6\0\4\4\1\0\7\4\1\0\3\4\1\0\1\4\1\0\1\4"+
-    "\2\0\2\4\1\0\4\4\1\0\2\4\11\0\1\4\2\0\5\4"+
-    "\1\0\1\4\25\0\4\4\40\0\1\4\77\0\10\4\1\0\44\4"+
-    "\33\0\5\4\163\0\53\4\24\0\1\4\20\0\6\4\4\0\4\4"+
-    "\3\0\1\4\3\0\2\4\7\0\3\4\4\0\15\4\14\0\1\4"+
-    "\21\0\46\4\1\0\1\4\5\0\1\4\2\0\53\4\1\0\u014d\4"+
-    "\1\0\4\4\2\0\7\4\1\0\1\4\1\0\4\4\2\0\51\4"+
-    "\1\0\4\4\2\0\41\4\1\0\4\4\2\0\7\4\1\0\1\4"+
-    "\1\0\4\4\2\0\17\4\1\0\71\4\1\0\4\4\2\0\103\4"+
-    "\45\0\20\4\20\0\125\4\14\0\u026c\4\2\0\21\4\1\0\32\4"+
-    "\5\0\113\4\3\0\3\4\17\0\15\4\1\0\4\4\16\0\22\4"+
-    "\16\0\22\4\16\0\15\4\1\0\3\4\17\0\64\4\43\0\1\4"+
-    "\3\0\2\4\103\0\130\4\10\0\51\4\1\0\1\4\5\0\106\4"+
-    "\12\0\35\4\63\0\36\4\2\0\5\4\13\0\54\4\25\0\7\4"+
-    "\70\0\27\4\11\0\65\4\122\0\1\4\135\0\57\4\21\0\7\4"+
-    "\67\0\36\4\15\0\2\4\12\0\54\4\32\0\44\4\51\0\3\4"+
-    "\12\0\44\4\153\0\4\4\1\0\4\4\3\0\2\4\11\0\300\4"+
-    "\100\0\u0116\4\2\0\6\4\2\0\46\4\2\0\6\4\2\0\10\4"+
-    "\1\0\1\4\1\0\1\4\1\0\1\4\1\0\37\4\2\0\65\4"+
-    "\1\0\7\4\1\0\1\4\3\0\3\4\1\0\7\4\3\0\4\4"+
-    "\2\0\6\4\4\0\15\4\5\0\3\4\1\0\7\4\102\0\2\4"+
-    "\23\0\1\4\34\0\1\4\15\0\1\4\20\0\15\4\3\0\33\4"+
-    "\107\0\1\4\4\0\1\4\2\0\12\4\1\0\1\4\3\0\5\4"+
-    "\6\0\1\4\1\0\1\4\1\0\1\4\1\0\4\4\1\0\13\4"+
-    "\2\0\4\4\5\0\5\4\4\0\1\4\21\0\51\4\u0a77\0\57\4"+
-    "\1\0\57\4\1\0\205\4\6\0\4\4\3\0\2\4\14\0\46\4"+
-    "\1\0\1\4\5\0\1\4\2\0\70\4\7\0\1\4\20\0\27\4"+
-    "\11\0\7\4\1\0\7\4\1\0\7\4\1\0\7\4\1\0\7\4"+
-    "\1\0\7\4\1\0\7\4\1\0\7\4\120\0\1\4\u01d5\0\3\4"+
-    "\31\0\11\4\7\0\5\4\2\0\5\4\4\0\126\4\6\0\3\4"+
-    "\1\0\132\4\1\0\4\4\5\0\51\4\3\0\136\4\21\0\33\4"+
-    "\65\0\20\4\u0200\0\u19b6\4\112\0\u51cd\4\63\0\u048d\4\103\0\56\4"+
-    "\2\0\u010d\4\3\0\20\4\12\0\2\4\24\0\57\4\20\0\31\4"+
-    "\10\0\120\4\47\0\11\4\2\0\147\4\2\0\4\4\1\0\4\4"+
-    "\14\0\13\4\115\0\12\4\1\0\3\4\1\0\4\4\1\0\27\4"+
-    "\25\0\1\4\7\0\64\4\16\0\62\4\76\0\6\4\3\0\1\4"+
-    "\16\0\34\4\12\0\27\4\31\0\35\4\7\0\57\4\34\0\1\4"+
-    "\60\0\51\4\27\0\3\4\1\0\10\4\24\0\27\4\3\0\1\4"+
-    "\5\0\60\4\1\0\1\4\3\0\2\4\2\0\5\4\2\0\1\4"+
-    "\1\0\1\4\30\0\3\4\2\0\13\4\7\0\3\4\14\0\6\4"+
-    "\2\0\6\4\2\0\6\4\11\0\7\4\1\0\7\4\221\0\43\4"+
-    "\35\0\u2ba4\4\14\0\27\4\4\0\61\4\u2104\0\u016e\4\2\0\152\4"+
-    "\46\0\7\4\14\0\5\4\5\0\1\4\1\0\12\4\1\0\15\4"+
-    "\1\0\5\4\1\0\1\4\1\0\2\4\1\0\2\4\1\0\154\4"+
-    "\41\0\u016b\4\22\0\100\4\2\0\66\4\50\0\15\4\66\0\2\4"+
-    "\30\0\3\4\31\0\1\4\6\0\5\4\1\0\207\4\7\0\1\4"+
-    "\34\0\32\4\4\0\1\4\1\0\32\4\13\0\131\4\3\0\6\4"+
-    "\2\0\6\4\2\0\6\4\2\0\3\4\3\0\2\4\3\0\2\4"+
-    "\31\0";
+    "\1\4\1\34\6\4\1\25\1\0\1\6\7\0\1\35\34\0\4\4"+
+    "\4\0\1\4\12\0\1\4\4\0\1\4\5\0\27\4\1\0\37\4"+
+    "\1\0\u01ca\4\4\0\14\4\16\0\5\4\7\0\1\4\1\0\1\4"+
+    "\201\0\5\4\1\0\2\4\2\0\4\4\10\0\1\4\1\0\3\4"+
+    "\1\0\1\4\1\0\24\4\1\0\123\4\1\0\213\4\10\0\236\4"+
+    "\11\0\46\4\2\0\1\4\7\0\47\4\7\0\1\4\100\0\33\4"+
+    "\5\0\3\4\30\0\1\4\24\0\53\4\43\0\2\4\1\0\143\4"+
+    "\1\0\1\4\17\0\2\4\7\0\2\4\12\0\3\4\2\0\1\4"+
+    "\20\0\1\4\1\0\36\4\35\0\131\4\13\0\1\4\30\0\41\4"+
+    "\11\0\2\4\4\0\1\4\5\0\26\4\4\0\1\4\11\0\1\4"+
+    "\3\0\1\4\27\0\31\4\107\0\1\4\1\0\13\4\127\0\66\4"+
+    "\3\0\1\4\22\0\1\4\7\0\12\4\17\0\7\4\1\0\7\4"+
+    "\5\0\10\4\2\0\2\4\2\0\26\4\1\0\7\4\1\0\1\4"+
+    "\3\0\4\4\3\0\1\4\20\0\1\4\15\0\2\4\1\0\3\4"+
+    "\16\0\4\4\7\0\1\4\11\0\6\4\4\0\2\4\2\0\26\4"+
+    "\1\0\7\4\1\0\2\4\1\0\2\4\1\0\2\4\37\0\4\4"+
+    "\1\0\1\4\23\0\3\4\20\0\11\4\1\0\3\4\1\0\26\4"+
+    "\1\0\7\4\1\0\2\4\1\0\5\4\3\0\1\4\22\0\1\4"+
+    "\17\0\2\4\17\0\1\4\23\0\10\4\2\0\2\4\2\0\26\4"+
+    "\1\0\7\4\1\0\2\4\1\0\5\4\3\0\1\4\36\0\2\4"+
+    "\1\0\3\4\17\0\1\4\21\0\1\4\1\0\6\4\3\0\3\4"+
+    "\1\0\4\4\3\0\2\4\1\0\1\4\1\0\2\4\3\0\2\4"+
+    "\3\0\3\4\3\0\14\4\26\0\1\4\50\0\1\4\13\0\10\4"+
+    "\1\0\3\4\1\0\27\4\1\0\12\4\1\0\5\4\3\0\1\4"+
+    "\32\0\2\4\6\0\2\4\43\0\10\4\1\0\3\4\1\0\27\4"+
+    "\1\0\12\4\1\0\5\4\3\0\1\4\40\0\1\4\1\0\2\4"+
+    "\17\0\2\4\22\0\10\4\1\0\3\4\1\0\51\4\2\0\1\4"+
+    "\20\0\1\4\21\0\2\4\30\0\6\4\5\0\22\4\3\0\30\4"+
+    "\1\0\11\4\1\0\1\4\2\0\7\4\72\0\60\4\1\0\2\4"+
+    "\13\0\10\4\72\0\2\4\1\0\1\4\2\0\2\4\1\0\1\4"+
+    "\2\0\1\4\6\0\4\4\1\0\7\4\1\0\3\4\1\0\1\4"+
+    "\1\0\1\4\2\0\2\4\1\0\4\4\1\0\2\4\11\0\1\4"+
+    "\2\0\5\4\1\0\1\4\25\0\4\4\40\0\1\4\77\0\10\4"+
+    "\1\0\44\4\33\0\5\4\163\0\53\4\24\0\1\4\20\0\6\4"+
+    "\4\0\4\4\3\0\1\4\3\0\2\4\7\0\3\4\4\0\15\4"+
+    "\14\0\1\4\21\0\46\4\1\0\1\4\5\0\1\4\2\0\53\4"+
+    "\1\0\u014d\4\1\0\4\4\2\0\7\4\1\0\1\4\1\0\4\4"+
+    "\2\0\51\4\1\0\4\4\2\0\41\4\1\0\4\4\2\0\7\4"+
+    "\1\0\1\4\1\0\4\4\2\0\17\4\1\0\71\4\1\0\4\4"+
+    "\2\0\103\4\45\0\20\4\20\0\125\4\14\0\u026c\4\2\0\21\4"+
+    "\1\0\32\4\5\0\113\4\3\0\3\4\17\0\15\4\1\0\4\4"+
+    "\16\0\22\4\16\0\22\4\16\0\15\4\1\0\3\4\17\0\64\4"+
+    "\43\0\1\4\3\0\2\4\103\0\130\4\10\0\51\4\1\0\1\4"+
+    "\5\0\106\4\12\0\35\4\63\0\36\4\2\0\5\4\13\0\54\4"+
+    "\25\0\7\4\70\0\27\4\11\0\65\4\122\0\1\4\135\0\57\4"+
+    "\21\0\7\4\67\0\36\4\15\0\2\4\12\0\54\4\32\0\44\4"+
+    "\51\0\3\4\12\0\44\4\153\0\4\4\1\0\4\4\3\0\2\4"+
+    "\11\0\300\4\100\0\u0116\4\2\0\6\4\2\0\46\4\2\0\6\4"+
+    "\2\0\10\4\1\0\1\4\1\0\1\4\1\0\1\4\1\0\37\4"+
+    "\2\0\65\4\1\0\7\4\1\0\1\4\3\0\3\4\1\0\7\4"+
+    "\3\0\4\4\2\0\6\4\4\0\15\4\5\0\3\4\1\0\7\4"+
+    "\53\0\1\35\1\35\25\0\2\4\23\0\1\4\34\0\1\4\15\0"+
+    "\1\4\20\0\15\4\3\0\33\4\107\0\1\4\4\0\1\4\2\0"+
+    "\12\4\1\0\1\4\3\0\5\4\6\0\1\4\1\0\1\4\1\0"+
+    "\1\4\1\0\4\4\1\0\13\4\2\0\4\4\5\0\5\4\4\0"+
+    "\1\4\21\0\51\4\u0a77\0\57\4\1\0\57\4\1\0\205\4\6\0"+
+    "\4\4\3\0\2\4\14\0\46\4\1\0\1\4\5\0\1\4\2\0"+
+    "\70\4\7\0\1\4\20\0\27\4\11\0\7\4\1\0\7\4\1\0"+
+    "\7\4\1\0\7\4\1\0\7\4\1\0\7\4\1\0\7\4\1\0"+
+    "\7\4\120\0\1\4\u01d5\0\3\4\31\0\11\4\7\0\5\4\2\0"+
+    "\5\4\4\0\126\4\6\0\3\4\1\0\132\4\1\0\4\4\5\0"+
+    "\51\4\3\0\136\4\21\0\33\4\65\0\20\4\u0200\0\u19b6\4\112\0"+
+    "\u51cd\4\63\0\u048d\4\103\0\56\4\2\0\u010d\4\3\0\20\4\12\0"+
+    "\2\4\24\0\57\4\20\0\31\4\10\0\120\4\47\0\11\4\2\0"+
+    "\147\4\2\0\4\4\1\0\4\4\14\0\13\4\115\0\12\4\1\0"+
+    "\3\4\1\0\4\4\1\0\27\4\25\0\1\4\7\0\64\4\16\0"+
+    "\62\4\76\0\6\4\3\0\1\4\16\0\34\4\12\0\27\4\31\0"+
+    "\35\4\7\0\57\4\34\0\1\4\60\0\51\4\27\0\3\4\1\0"+
+    "\10\4\24\0\27\4\3\0\1\4\5\0\60\4\1\0\1\4\3\0"+
+    "\2\4\2\0\5\4\2\0\1\4\1\0\1\4\30\0\3\4\2\0"+
+    "\13\4\7\0\3\4\14\0\6\4\2\0\6\4\2\0\6\4\11\0"+
+    "\7\4\1\0\7\4\221\0\43\4\35\0\u2ba4\4\14\0\27\4\4\0"+
+    "\61\4\u2104\0\u016e\4\2\0\152\4\46\0\7\4\14\0\5\4\5\0"+
+    "\1\4\1\0\12\4\1\0\15\4\1\0\5\4\1\0\1\4\1\0"+
+    "\2\4\1\0\2\4\1\0\154\4\41\0\u016b\4\22\0\100\4\2\0"+
+    "\66\4\50\0\15\4\66\0\2\4\30\0\3\4\31\0\1\4\6\0"+
+    "\5\4\1\0\207\4\7\0\1\4\34\0\32\4\4\0\1\4\1\0"+
+    "\32\4\13\0\131\4\3\0\6\4\2\0\6\4\2\0\6\4\2\0"+
+    "\3\4\3\0\2\4\3\0\2\4\31\0\14\4\1\0\32\4\1\0"+
+    "\23\4\1\0\2\4\1\0\17\4\2\0\16\4\42\0\173\4\105\0"+
+    "\65\4\u010b\0\35\4\3\0\61\4\57\0\37\4\21\0\33\4\65\0"+
+    "\36\4\2\0\44\4\4\0\10\4\1\0\5\4\52\0\236\4\u0362\0"+
+    "\6\4\2\0\1\4\1\0\54\4\1\0\2\4\3\0\1\4\2\0"+
+    "\27\4\252\0\26\4\12\0\32\4\106\0\70\4\6\0\2\4\100\0"+
+    "\1\4\17\0\4\4\1\0\3\4\1\0\33\4\54\0\35\4\203\0"+
+    "\66\4\12\0\26\4\12\0\23\4\215\0\111\4\u03ba\0\65\4\113\0"+
+    "\55\4\40\0\31\4\32\0\44\4\134\0\60\4\16\0\4\4\u04bb\0"+
+    "\53\4\u0955\0\u036f\4\221\0\143\4\u0b9d\0\u042f\4\u33d1\0\u0239\4\u04c7\0"+
+    "\105\4\13\0\1\4\102\0\15\4\u4060\0\2\4\u23fe\0\125\4\1\0"+
+    "\107\4\1\0\2\4\2\0\1\4\2\0\2\4\2\0\4\4\1\0"+
+    "\14\4\1\0\1\4\1\0\7\4\1\0\101\4\1\0\4\4\2\0"+
+    "\10\4\1\0\7\4\1\0\34\4\1\0\4\4\1\0\5\4\1\0"+
+    "\1\4\3\0\7\4\1\0\u0154\4\2\0\31\4\1\0\31\4\1\0"+
+    "\37\4\1\0\31\4\1\0\37\4\1\0\31\4\1\0\37\4\1\0"+
+    "\31\4\1\0\37\4\1\0\31\4\1\0\10\4\u1634\0\4\4\1\0"+
+    "\33\4\1\0\2\4\1\0\1\4\2\0\1\4\1\0\12\4\1\0"+
+    "\4\4\1\0\1\4\1\0\1\4\6\0\1\4\4\0\1\4\1\0"+
+    "\1\4\1\0\1\4\1\0\3\4\1\0\2\4\1\0\1\4\2\0"+
+    "\1\4\1\0\1\4\1\0\1\4\1\0\1\4\1\0\1\4\1\0"+
+    "\2\4\1\0\1\4\2\0\4\4\1\0\7\4\1\0\4\4\1\0"+
+    "\4\4\1\0\1\4\1\0\12\4\1\0\21\4\5\0\3\4\1\0"+
+    "\5\4\1\0\21\4\u1144\0\ua6d7\4\51\0\u1035\4\13\0\336\4\u3fe2\0"+
+    "\u021e\4\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u05f0\0";
 
   /** 
    * Translates characters to character classes
@@ -161,8 +172,9 @@ class _JavaDocLexer implements FlexLexer {
   private static final String ZZ_ACTION_PACKED_0 =
     "\13\0\3\1\1\2\1\3\1\4\2\2\1\5\1\6"+
     "\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16"+
-    "\1\17\1\12\1\20\1\1\3\21\1\22\1\0\1\23"+
-    "\1\0\6\24\1\25\12\24\1\26\1\24\2\27\2\24";
+    "\1\17\1\12\1\20\1\1\1\21\1\22\2\21\1\0"+
+    "\1\23\1\0\6\24\1\25\12\24\1\26\1\24\2\27"+
+    "\2\24";
 
   private static int [] zzUnpackAction() {
     int [] result = new int[63];
@@ -190,14 +202,14 @@ class _JavaDocLexer implements FlexLexer {
   private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
 
   private static final String ZZ_ROWMAP_PACKED_0 =
-    "\0\0\0\36\0\74\0\132\0\170\0\226\0\264\0\322"+
-    "\0\360\0\u010e\0\u012c\0\u014a\0\u0168\0\u0186\0\u014a\0\u01a4"+
-    "\0\u014a\0\u0186\0\u01c2\0\u014a\0\u01e0\0\u01fe\0\u021c\0\u023a"+
-    "\0\u0258\0\u014a\0\u014a\0\u014a\0\u014a\0\u014a\0\u0276\0\u014a"+
-    "\0\u0294\0\u014a\0\u02b2\0\u0186\0\u02b2\0\u02d0\0\u014a\0\u0186"+
-    "\0\u02ee\0\u030c\0\u032a\0\u0348\0\u0366\0\u0384\0\u014a\0\u03a2"+
-    "\0\u03c0\0\u03de\0\u03fc\0\u041a\0\u0438\0\u0456\0\u0474\0\u0492"+
-    "\0\u04b0\0\u032a\0\u04ce\0\u02ee\0\u032a\0\u04ec\0\u050a";
+    "\0\0\0\37\0\76\0\135\0\174\0\233\0\272\0\331"+
+    "\0\370\0\u0117\0\u0136\0\u0155\0\u0174\0\u0193\0\u0155\0\u01b2"+
+    "\0\u0155\0\u0193\0\u01d1\0\u0155\0\u01f0\0\u020f\0\u022e\0\u024d"+
+    "\0\u026c\0\u0155\0\u0155\0\u0155\0\u0155\0\u0155\0\u028b\0\u0155"+
+    "\0\u02aa\0\u0155\0\u02c9\0\u02c9\0\u0193\0\u02e8\0\u0155\0\u0193"+
+    "\0\u0307\0\u0326\0\u0345\0\u0364\0\u0383\0\u03a2\0\u0155\0\u03c1"+
+    "\0\u03e0\0\u03ff\0\u041e\0\u043d\0\u045c\0\u047b\0\u049a\0\u04b9"+
+    "\0\u04d8\0\u0345\0\u04f7\0\u0307\0\u0345\0\u0516\0\u0535";
 
   private static int [] zzUnpackRowMap() {
     int [] result = new int[63];
@@ -223,48 +235,49 @@ class _JavaDocLexer implements FlexLexer {
   private static final int [] ZZ_TRANS = zzUnpackTrans();
 
   private static final String ZZ_TRANS_PACKED_0 =
-    "\7\14\1\15\1\16\25\14\1\17\2\20\3\17\1\21"+
-    "\1\17\1\22\5\17\1\23\6\17\1\24\7\17\1\20"+
-    "\1\17\1\20\1\25\3\17\1\21\1\17\1\22\14\17"+
-    "\1\24\7\17\1\20\1\14\2\26\3\14\1\21\1\14"+
-    "\1\16\24\14\1\26\1\14\2\27\5\14\1\16\24\14"+
-    "\1\27\1\17\2\30\2\31\1\17\1\21\1\17\1\22"+
-    "\1\31\1\32\1\17\1\33\1\34\1\17\4\31\1\35"+
-    "\2\17\7\31\1\30\1\14\2\20\2\31\3\14\1\16"+
-    "\1\31\1\14\1\36\1\14\1\34\1\14\4\31\3\14"+
-    "\7\31\1\20\4\14\1\37\3\14\1\16\6\14\4\37"+
-    "\1\14\1\40\1\14\7\37\11\14\1\16\5\14\1\41"+
-    "\17\14\1\42\2\43\3\42\1\21\1\42\1\44\14\42"+
-    "\1\24\7\42\1\45\1\42\2\43\3\42\1\21\1\42"+
-    "\1\44\24\42\1\45\46\0\1\46\34\0\1\47\1\50"+
-    "\26\0\2\20\32\0\1\20\1\51\2\0\14\51\1\52"+
-    "\15\51\3\0\1\25\34\0\2\26\32\0\1\26\1\0"+
-    "\2\27\32\0\1\27\1\0\2\30\32\0\1\30\3\0"+
-    "\2\31\4\0\1\31\5\0\4\31\3\0\7\31\4\0"+
-    "\3\37\11\0\4\37\3\0\7\37\1\0\1\53\2\0"+
-    "\3\53\1\0\10\53\1\54\6\53\1\55\3\53\1\56"+
-    "\2\53\2\0\2\45\32\0\1\45\10\0\1\57\25\0"+
-    "\1\51\2\0\32\51\1\0\1\51\2\0\15\51\1\60"+
-    "\14\51\1\0\1\53\2\0\3\53\1\0\26\53\1\0"+
-    "\1\53\2\0\3\53\1\0\11\53\1\61\14\53\1\0"+
-    "\1\53\2\0\3\53\1\0\20\53\1\62\5\53\1\0"+
-    "\1\53\2\0\3\53\1\0\24\53\1\63\1\53\1\0"+
-    "\1\51\2\0\16\51\1\64\13\51\1\0\1\53\2\0"+
-    "\3\53\1\0\12\53\1\65\13\53\1\0\1\53\2\0"+
-    "\3\53\1\0\21\53\1\66\4\53\1\0\1\53\2\0"+
-    "\3\53\1\0\25\53\1\67\1\0\1\51\2\0\15\51"+
-    "\1\70\14\51\1\0\1\53\2\0\3\53\1\0\11\53"+
-    "\1\71\14\53\1\0\1\53\2\0\3\53\1\0\22\53"+
-    "\1\72\3\53\1\0\1\53\2\0\3\53\1\0\22\53"+
-    "\1\73\3\53\1\0\1\51\2\0\17\51\1\74\12\51"+
-    "\1\0\1\53\2\0\3\53\1\0\13\53\1\75\12\53"+
-    "\1\0\1\53\2\0\3\53\1\0\12\53\1\76\13\53"+
-    "\1\0\1\53\2\0\3\53\1\0\11\53\1\77\14\53"+
-    "\1\0\1\53\2\0\3\53\1\0\23\53\1\72\2\53"+
-    "\1\0";
+    "\7\14\1\15\1\16\26\14\1\17\2\20\3\17\1\21"+
+    "\1\17\1\22\5\17\1\23\6\17\1\24\7\17\1\14"+
+    "\1\20\1\17\1\20\1\25\3\17\1\21\1\17\1\22"+
+    "\14\17\1\24\7\17\1\14\1\25\1\14\2\26\3\14"+
+    "\1\21\1\14\1\16\25\14\1\26\1\14\2\27\5\14"+
+    "\1\16\25\14\1\27\1\17\2\30\2\31\1\17\1\21"+
+    "\1\17\1\22\1\31\1\32\1\17\1\33\1\34\1\17"+
+    "\4\31\1\35\2\17\7\31\1\14\1\30\1\14\2\20"+
+    "\2\31\3\14\1\16\1\31\1\14\1\36\1\14\1\34"+
+    "\1\14\4\31\3\14\7\31\1\14\1\20\4\14\1\37"+
+    "\3\14\1\16\6\14\4\37\1\14\1\40\1\14\7\37"+
+    "\12\14\1\16\5\14\1\41\20\14\1\42\1\43\1\44"+
+    "\3\42\1\21\1\42\1\45\14\42\1\24\7\42\1\14"+
+    "\1\43\1\42\1\43\1\44\3\42\1\21\1\42\1\45"+
+    "\24\42\1\14\1\43\47\0\1\46\35\0\1\47\1\50"+
+    "\27\0\2\20\33\0\1\20\1\51\2\0\14\51\1\52"+
+    "\16\51\3\0\1\25\33\0\1\25\1\0\2\26\33\0"+
+    "\1\26\1\0\2\27\33\0\1\27\1\0\2\30\33\0"+
+    "\1\30\3\0\2\31\4\0\1\31\5\0\4\31\3\0"+
+    "\7\31\5\0\3\37\11\0\4\37\3\0\7\37\2\0"+
+    "\1\53\2\0\3\53\1\0\10\53\1\54\6\53\1\55"+
+    "\3\53\1\56\3\53\2\0\2\43\33\0\1\43\10\0"+
+    "\1\57\26\0\1\51\2\0\33\51\1\0\1\51\2\0"+
+    "\15\51\1\60\15\51\1\0\1\53\2\0\3\53\1\0"+
+    "\27\53\1\0\1\53\2\0\3\53\1\0\11\53\1\61"+
+    "\15\53\1\0\1\53\2\0\3\53\1\0\20\53\1\62"+
+    "\6\53\1\0\1\53\2\0\3\53\1\0\24\53\1\63"+
+    "\2\53\1\0\1\51\2\0\16\51\1\64\14\51\1\0"+
+    "\1\53\2\0\3\53\1\0\12\53\1\65\14\53\1\0"+
+    "\1\53\2\0\3\53\1\0\21\53\1\66\5\53\1\0"+
+    "\1\53\2\0\3\53\1\0\25\53\1\67\1\53\1\0"+
+    "\1\51\2\0\15\51\1\70\15\51\1\0\1\53\2\0"+
+    "\3\53\1\0\11\53\1\71\15\53\1\0\1\53\2\0"+
+    "\3\53\1\0\22\53\1\72\4\53\1\0\1\53\2\0"+
+    "\3\53\1\0\22\53\1\73\4\53\1\0\1\51\2\0"+
+    "\17\51\1\74\13\51\1\0\1\53\2\0\3\53\1\0"+
+    "\13\53\1\75\13\53\1\0\1\53\2\0\3\53\1\0"+
+    "\12\53\1\76\14\53\1\0\1\53\2\0\3\53\1\0"+
+    "\11\53\1\77\15\53\1\0\1\53\2\0\3\53\1\0"+
+    "\23\53\1\72\3\53\1\0";
 
   private static int [] zzUnpackTrans() {
-    int [] result = new int[1320];
+    int [] result = new int[1364];
     int offset = 0;
     offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
     return result;
@@ -288,13 +301,10 @@ class _JavaDocLexer implements FlexLexer {
   private static final int ZZ_UNKNOWN_ERROR = 0;
   private static final int ZZ_NO_MATCH = 1;
   private static final int ZZ_PUSHBACK_2BIG = 2;
-  private static final char[] EMPTY_BUFFER = new char[0];
-  private static final int YYEOF = -1;
-  private static java.io.Reader zzReader = null; // Fake
 
   /* error messages for the codes above */
-  private static final String ZZ_ERROR_MSG[] = {
-    "Unkown internal scanner error",
+  private static final String[] ZZ_ERROR_MSG = {
+    "Unknown internal scanner error",
     "Error: could not match input",
     "Error: pushback value was too large"
   };
@@ -328,6 +338,9 @@ class _JavaDocLexer implements FlexLexer {
     return j;
   }
 
+  /** the input device */
+  private java.io.Reader zzReader;
+
   /** the current state of the DFA */
   private int zzState;
 
@@ -386,7 +399,7 @@ class _JavaDocLexer implements FlexLexer {
   public void goTo(int offset) {
     zzCurrentPos = zzMarkedPos = zzStartRead = offset;
     zzPushbackPos = 0;
-    zzAtEOF = offset < zzEndRead;
+    zzAtEOF = false;
   }
 
 
@@ -407,10 +420,10 @@ class _JavaDocLexer implements FlexLexer {
    * @return         the unpacked character translation table
    */
   private static char [] zzUnpackCMap(String packed) {
-    char [] map = new char[0x10000];
+    char [] map = new char[0x110000];
     int i = 0;  /* index in packed string  */
     int j = 0;  /* index in unpacked array */
-    while (i < 1662) {
+    while (i < 2172) {
       int  count = packed.charAt(i++);
       char value = packed.charAt(i++);
       do map[j++] = value; while (--count > 0);
@@ -586,12 +599,20 @@ class _JavaDocLexer implements FlexLexer {
 
       zzState = ZZ_LEXSTATE[zzLexicalState];
 
+      // set up zzAction for empty match case:
+      int zzAttributes = zzAttrL[zzState];
+      if ( (zzAttributes & 1) == 1 ) {
+        zzAction = zzState;
+      }
+
 
       zzForAction: {
         while (true) {
 
-          if (zzCurrentPosL < zzEndReadL)
-            zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+          if (zzCurrentPosL < zzEndReadL) {
+            zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+            zzCurrentPosL += Character.charCount(zzInput);
+          }
           else if (zzAtEOF) {
             zzInput = YYEOF;
             break zzForAction;
@@ -611,14 +632,15 @@ class _JavaDocLexer implements FlexLexer {
               break zzForAction;
             }
             else {
-              zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+              zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+              zzCurrentPosL += Character.charCount(zzInput);
             }
           }
           int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
           if (zzNext == -1) break zzForAction;
           zzState = zzNext;
 
-          int zzAttributes = zzAttrL[zzState];
+          zzAttributes = zzAttrL[zzState];
           if ( (zzAttributes & 1) == 1 ) {
             zzAction = zzState;
             zzMarkedPosL = zzCurrentPosL;
@@ -631,89 +653,77 @@ class _JavaDocLexer implements FlexLexer {
       // store back cached position
       zzMarkedPos = zzMarkedPosL;
 
-      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
-        case 12: 
-          { return myTokenTypes.tagValueSharp();
-          }
-        case 24: break;
-        case 17: 
-          { yybegin(CODE_TAG); return myTokenTypes.commentData();
-          }
-        case 25: break;
-        case 16: 
-          { yybegin(COMMENT_DATA); return myTokenTypes.tagValueGT();
-          }
-        case 26: break;
-        case 3: 
-          { return myTokenTypes.space();
-          }
-        case 27: break;
-        case 6: 
-          { return myTokenTypes.commentData();
-          }
-        case 28: break;
-        case 4: 
-          { yybegin(COMMENT_DATA); return myTokenTypes.inlineTagEnd();
-          }
-        case 29: break;
-        case 21: 
-          { yybegin(COMMENT_DATA_START); return myTokenTypes.commentStart();
-          }
-        case 30: break;
-        case 7: 
-          { if (checkAhead('<') || checkAhead('\"')) yybegin(COMMENT_DATA);
+      if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+        zzAtEOF = true;
+        zzDoEOF();
+        return null;
+      }
+      else {
+        switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+          case 1: 
+            { return myTokenTypes.badCharacter();
+            }
+          case 24: break;
+          case 2: 
+            { yybegin(COMMENT_DATA); return myTokenTypes.commentData();
+            }
+          case 25: break;
+          case 3: 
+            { return myTokenTypes.space();
+            }
+          case 26: break;
+          case 4: 
+            { yybegin(COMMENT_DATA); return myTokenTypes.inlineTagEnd();
+            }
+          case 27: break;
+          case 5: 
+            { if (checkAhead('@')) {
+    yybegin(INLINE_TAG_NAME);
+    return myTokenTypes.inlineTagStart();
+  }
+  else{
+    yybegin(COMMENT_DATA);
+    return myTokenTypes.inlineTagStart();
+  }
+            }
+          case 28: break;
+          case 6: 
+            { return myTokenTypes.commentData();
+            }
+          case 29: break;
+          case 7: 
+            { if (checkAhead('<') || checkAhead('\"')) yybegin(COMMENT_DATA);
   else if (checkAhead('\u007b') ) yybegin(COMMENT_DATA);  // lbrace - there's a error in JLex when typing lbrace directly
   else yybegin(DOC_TAG_VALUE);
   return myTokenTypes.space();
-          }
-        case 31: break;
-        case 8: 
-          { yybegin(DOC_TAG_VALUE); return myTokenTypes.space();
-          }
-        case 32: break;
-        case 10: 
-          { return myTokenTypes.tagValueToken();
-          }
-        case 33: break;
-        case 20: 
-          { yybegin(TAG_DOC_SPACE); return myTokenTypes.tagName();
-          }
-        case 34: break;
-        case 18: 
-          { yybegin(CODE_TAG);
-  return myTokenTypes.space();
-          }
-        case 35: break;
-        case 9: 
-          { yybegin(COMMENT_DATA); return myTokenTypes.space();
-          }
-        case 36: break;
-        case 23: 
-          { yybegin(PARAM_TAG_SPACE); return myTokenTypes.tagName();
-          }
-        case 37: break;
-        case 22: 
-          { yybegin(CODE_TAG_SPACE); return myTokenTypes.tagName();
-          }
-        case 38: break;
-        case 1: 
-          { return myTokenTypes.badCharacter();
-          }
-        case 39: break;
-        case 15: 
-          { yybegin(DOC_TAG_VALUE); return myTokenTypes.tagValueRParen();
-          }
-        case 40: break;
-        case 11: 
-          { yybegin(DOC_TAG_VALUE_IN_PAREN); return myTokenTypes.tagValueLParen();
-          }
-        case 41: break;
-        case 13: 
-          { return myTokenTypes.tagValueComma();
-          }
-        case 42: break;
-        case 14: 
-          { if (myJdk15Enabled) {
+            }
+          case 30: break;
+          case 8: 
+            { yybegin(DOC_TAG_VALUE); return myTokenTypes.space();
+            }
+          case 31: break;
+          case 9: 
+            { yybegin(COMMENT_DATA); return myTokenTypes.space();
+            }
+          case 32: break;
+          case 10: 
+            { return myTokenTypes.tagValueToken();
+            }
+          case 33: break;
+          case 11: 
+            { yybegin(DOC_TAG_VALUE_IN_PAREN); return myTokenTypes.tagValueLParen();
+            }
+          case 34: break;
+          case 12: 
+            { return myTokenTypes.tagValueSharp();
+            }
+          case 35: break;
+          case 13: 
+            { return myTokenTypes.tagValueComma();
+            }
+          case 36: break;
+          case 14: 
+            { if (myJdk15Enabled) {
     yybegin(DOC_TAG_VALUE_IN_LTGT);
     return myTokenTypes.tagValueLT();
   }
@@ -721,34 +731,46 @@ class _JavaDocLexer implements FlexLexer {
     yybegin(COMMENT_DATA);
     return myTokenTypes.commentData();
   }
-          }
-        case 43: break;
-        case 5: 
-          { if (checkAhead('@')) {
-    yybegin(INLINE_TAG_NAME);
-    return myTokenTypes.inlineTagStart();
-  }
-  else{
-    yybegin(COMMENT_DATA);
-    return myTokenTypes.inlineTagStart();
-  }
-          }
-        case 44: break;
-        case 2: 
-          { yybegin(COMMENT_DATA); return myTokenTypes.commentData();
-          }
-        case 45: break;
-        case 19: 
-          { return myTokenTypes.commentEnd();
-          }
-        case 46: break;
-        default:
-          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
-            zzAtEOF = true;
-            zzDoEOF();
-            return null;
-          }
-          else {
+            }
+          case 37: break;
+          case 15: 
+            { yybegin(DOC_TAG_VALUE); return myTokenTypes.tagValueRParen();
+            }
+          case 38: break;
+          case 16: 
+            { yybegin(COMMENT_DATA); return myTokenTypes.tagValueGT();
+            }
+          case 39: break;
+          case 17: 
+            { yybegin(CODE_TAG); return myTokenTypes.commentData();
+            }
+          case 40: break;
+          case 18: 
+            { yybegin(CODE_TAG);
+  return myTokenTypes.space();
+            }
+          case 41: break;
+          case 19: 
+            { return myTokenTypes.commentEnd();
+            }
+          case 42: break;
+          case 20: 
+            { yybegin(TAG_DOC_SPACE); return myTokenTypes.tagName();
+            }
+          case 43: break;
+          case 21: 
+            { yybegin(COMMENT_DATA_START); return myTokenTypes.commentStart();
+            }
+          case 44: break;
+          case 22: 
+            { yybegin(CODE_TAG_SPACE); return myTokenTypes.tagName();
+            }
+          case 45: break;
+          case 23: 
+            { yybegin(PARAM_TAG_SPACE); return myTokenTypes.tagName();
+            }
+          case 46: break;
+          default:
             zzScanError(ZZ_NO_MATCH);
           }
       }
index 96964d61faaafa96fb31038ced787ad63eb0fdae..c5bd2fd5c7b131c592de8ab52078500ff3b8b110 100644 (file)
@@ -1,5 +1,7 @@
+/* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */
+
 /*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -13,8 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/* The following code was generated by JFlex 1.4.3 on 4/28/15 5:41 PM */
 package com.intellij.lang.java.lexer;
 
 import com.intellij.pom.java.LanguageLevel;
@@ -27,11 +27,14 @@ import com.intellij.lexer.FlexLexer;
 
 /**
  * This class is a scanner generated by 
- * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
- * on 28.04.2015 17:41 from the specification file
- * <tt>[community/]java/java-psi-impl/src/com/intellij/lang/java/lexer/_JavaLexer.flex</tt>
+ * <a href="http://www.jflex.de/">JFlex</a> 1.7.0-SNAPSHOT
+ * from the specification file <tt>/ideadev/tools/lexer/../../community/java/java-psi-impl/src/com/intellij/lang/java/lexer/_JavaLexer.flex</tt>
  */
 class _JavaLexer implements FlexLexer {
+
+  /** This character denotes the end of file */
+  public static final int YYEOF = -1;
+
   /** initial size of the lookahead buffer */
   private static final int ZZ_BUFFERSIZE = 16384;
 
@@ -52,7 +55,7 @@ class _JavaLexer implements FlexLexer {
    * Translates characters to character classes
    */
   private static final String ZZ_CMAP_PACKED = 
-    "\11\3\1\1\1\6\1\0\1\1\1\6\16\3\4\0\1\1\1\60"+
+    "\11\3\1\1\1\6\1\104\1\1\1\6\16\3\4\0\1\1\1\60"+
     "\1\26\1\0\1\2\1\67\1\65\1\25\1\70\1\71\1\5\1\62"+
     "\1\77\1\22\1\20\1\4\1\13\11\7\1\102\1\76\1\63\1\57"+
     "\1\64\1\101\1\103\1\11\1\15\1\11\1\17\1\21\1\16\5\2"+
@@ -60,112 +63,142 @@ class _JavaLexer implements FlexLexer {
     "\1\10\1\0\1\34\1\40\1\41\1\47\1\32\1\33\1\52\1\45"+
     "\1\46\1\2\1\43\1\35\1\50\1\37\1\42\1\53\1\2\1\30"+
     "\1\36\1\27\1\31\1\54\1\55\1\51\1\44\1\56\1\72\1\61"+
-    "\1\73\1\100\41\3\2\0\4\2\4\0\1\2\2\0\1\3\7\0"+
-    "\1\2\4\0\1\2\5\0\27\2\1\0\37\2\1\0\u01ca\2\4\0"+
-    "\14\2\16\0\5\2\7\0\1\2\1\0\1\2\21\0\160\3\5\2"+
-    "\1\0\2\2\2\0\4\2\10\0\1\2\1\0\3\2\1\0\1\2"+
-    "\1\0\24\2\1\0\123\2\1\0\213\2\1\0\5\3\2\0\236\2"+
-    "\11\0\46\2\2\0\1\2\7\0\47\2\7\0\1\2\1\0\55\3"+
-    "\1\0\1\3\1\0\2\3\1\0\2\3\1\0\1\3\10\0\33\2"+
-    "\5\0\3\2\15\0\5\3\6\0\1\2\4\0\13\3\5\0\53\2"+
-    "\37\3\4\0\2\2\1\3\143\2\1\0\1\2\10\3\1\0\6\3"+
-    "\2\2\2\3\1\0\4\3\2\2\12\3\3\2\2\0\1\2\17\0"+
-    "\1\3\1\2\1\3\36\2\33\3\2\0\131\2\13\3\1\2\16\0"+
-    "\12\3\41\2\11\3\2\2\4\0\1\2\5\0\26\2\4\3\1\2"+
-    "\11\3\1\2\3\3\1\2\5\3\22\0\31\2\3\3\104\0\1\2"+
-    "\1\0\13\2\67\0\33\3\1\0\4\3\66\2\3\3\1\2\22\3"+
-    "\1\2\7\3\12\2\2\3\2\0\12\3\1\0\7\2\1\0\7\2"+
-    "\1\0\3\3\1\0\10\2\2\0\2\2\2\0\26\2\1\0\7\2"+
-    "\1\0\1\2\3\0\4\2\2\0\1\3\1\2\7\3\2\0\2\3"+
-    "\2\0\3\3\1\2\10\0\1\3\4\0\2\2\1\0\3\2\2\3"+
-    "\2\0\12\3\4\2\7\0\1\2\5\0\3\3\1\0\6\2\4\0"+
-    "\2\2\2\0\26\2\1\0\7\2\1\0\2\2\1\0\2\2\1\0"+
-    "\2\2\2\0\1\3\1\0\5\3\4\0\2\3\2\0\3\3\3\0"+
-    "\1\3\7\0\4\2\1\0\1\2\7\0\14\3\3\2\1\3\13\0"+
-    "\3\3\1\0\11\2\1\0\3\2\1\0\26\2\1\0\7\2\1\0"+
-    "\2\2\1\0\5\2\2\0\1\3\1\2\10\3\1\0\3\3\1\0"+
-    "\3\3\2\0\1\2\17\0\2\2\2\3\2\0\12\3\1\0\1\2"+
-    "\17\0\3\3\1\0\10\2\2\0\2\2\2\0\26\2\1\0\7\2"+
-    "\1\0\2\2\1\0\5\2\2\0\1\3\1\2\7\3\2\0\2\3"+
-    "\2\0\3\3\10\0\2\3\4\0\2\2\1\0\3\2\2\3\2\0"+
-    "\12\3\1\0\1\2\20\0\1\3\1\2\1\0\6\2\3\0\3\2"+
-    "\1\0\4\2\3\0\2\2\1\0\1\2\1\0\2\2\3\0\2\2"+
-    "\3\0\3\2\3\0\14\2\4\0\5\3\3\0\3\3\1\0\4\3"+
-    "\2\0\1\2\6\0\1\3\16\0\12\3\11\0\1\2\7\0\3\3"+
+    "\1\73\1\100\6\3\1\105\32\3\2\0\4\2\4\0\1\2\2\0"+
+    "\1\3\7\0\1\2\4\0\1\2\5\0\27\2\1\0\37\2\1\0"+
+    "\u01ca\2\4\0\14\2\16\0\5\2\7\0\1\2\1\0\1\2\21\0"+
+    "\160\3\5\2\1\0\2\2\2\0\4\2\10\0\1\2\1\0\3\2"+
+    "\1\0\1\2\1\0\24\2\1\0\123\2\1\0\213\2\1\0\5\3"+
+    "\2\0\236\2\11\0\46\2\2\0\1\2\7\0\47\2\7\0\1\2"+
+    "\1\0\55\3\1\0\1\3\1\0\2\3\1\0\2\3\1\0\1\3"+
+    "\10\0\33\2\5\0\3\2\15\0\5\3\6\0\1\2\4\0\13\3"+
+    "\5\0\53\2\37\3\4\0\2\2\1\3\143\2\1\0\1\2\10\3"+
+    "\1\0\6\3\2\2\2\3\1\0\4\3\2\2\12\3\3\2\2\0"+
+    "\1\2\17\0\1\3\1\2\1\3\36\2\33\3\2\0\131\2\13\3"+
+    "\1\2\16\0\12\3\41\2\11\3\2\2\4\0\1\2\5\0\26\2"+
+    "\4\3\1\2\11\3\1\2\3\3\1\2\5\3\22\0\31\2\3\3"+
+    "\104\0\1\2\1\0\13\2\67\0\33\3\1\0\4\3\66\2\3\3"+
+    "\1\2\22\3\1\2\7\3\12\2\2\3\2\0\12\3\1\0\7\2"+
+    "\1\0\7\2\1\0\3\3\1\0\10\2\2\0\2\2\2\0\26\2"+
+    "\1\0\7\2\1\0\1\2\3\0\4\2\2\0\1\3\1\2\7\3"+
+    "\2\0\2\3\2\0\3\3\1\2\10\0\1\3\4\0\2\2\1\0"+
+    "\3\2\2\3\2\0\12\3\4\2\7\0\1\2\5\0\3\3\1\0"+
+    "\6\2\4\0\2\2\2\0\26\2\1\0\7\2\1\0\2\2\1\0"+
+    "\2\2\1\0\2\2\2\0\1\3\1\0\5\3\4\0\2\3\2\0"+
+    "\3\3\3\0\1\3\7\0\4\2\1\0\1\2\7\0\14\3\3\2"+
+    "\1\3\13\0\3\3\1\0\11\2\1\0\3\2\1\0\26\2\1\0"+
+    "\7\2\1\0\2\2\1\0\5\2\2\0\1\3\1\2\10\3\1\0"+
+    "\3\3\1\0\3\3\2\0\1\2\17\0\2\2\2\3\2\0\12\3"+
+    "\1\0\1\2\17\0\3\3\1\0\10\2\2\0\2\2\2\0\26\2"+
+    "\1\0\7\2\1\0\2\2\1\0\5\2\2\0\1\3\1\2\7\3"+
+    "\2\0\2\3\2\0\3\3\10\0\2\3\4\0\2\2\1\0\3\2"+
+    "\2\3\2\0\12\3\1\0\1\2\20\0\1\3\1\2\1\0\6\2"+
+    "\3\0\3\2\1\0\4\2\3\0\2\2\1\0\1\2\1\0\2\2"+
+    "\3\0\2\2\3\0\3\2\3\0\14\2\4\0\5\3\3\0\3\3"+
+    "\1\0\4\3\2\0\1\2\6\0\1\3\16\0\12\3\11\0\1\2"+
+    "\7\0\3\3\1\0\10\2\1\0\3\2\1\0\27\2\1\0\12\2"+
+    "\1\0\5\2\3\0\1\2\7\3\1\0\3\3\1\0\4\3\7\0"+
+    "\2\3\1\0\2\2\6\0\2\2\2\3\2\0\12\3\22\0\2\3"+
     "\1\0\10\2\1\0\3\2\1\0\27\2\1\0\12\2\1\0\5\2"+
-    "\3\0\1\2\7\3\1\0\3\3\1\0\4\3\7\0\2\3\1\0"+
-    "\2\2\6\0\2\2\2\3\2\0\12\3\22\0\2\3\1\0\10\2"+
-    "\1\0\3\2\1\0\27\2\1\0\12\2\1\0\5\2\2\0\1\3"+
-    "\1\2\7\3\1\0\3\3\1\0\4\3\7\0\2\3\7\0\1\2"+
-    "\1\0\2\2\2\3\2\0\12\3\1\0\2\2\17\0\2\3\1\0"+
-    "\10\2\1\0\3\2\1\0\51\2\2\0\1\2\7\3\1\0\3\3"+
-    "\1\0\4\3\1\2\10\0\1\3\10\0\2\2\2\3\2\0\12\3"+
-    "\12\0\6\2\2\0\2\3\1\0\22\2\3\0\30\2\1\0\11\2"+
-    "\1\0\1\2\2\0\7\2\3\0\1\3\4\0\6\3\1\0\1\3"+
-    "\1\0\10\3\22\0\2\3\15\0\60\2\1\3\2\2\7\3\4\0"+
-    "\10\2\10\3\1\0\12\3\47\0\2\2\1\0\1\2\2\0\2\2"+
-    "\1\0\1\2\2\0\1\2\6\0\4\2\1\0\7\2\1\0\3\2"+
-    "\1\0\1\2\1\0\1\2\2\0\2\2\1\0\4\2\1\3\2\2"+
-    "\6\3\1\0\2\3\1\2\2\0\5\2\1\0\1\2\1\0\6\3"+
-    "\2\0\12\3\2\0\4\2\40\0\1\2\27\0\2\3\6\0\12\3"+
-    "\13\0\1\3\1\0\1\3\1\0\1\3\4\0\2\3\10\2\1\0"+
-    "\44\2\4\0\24\3\1\0\2\3\5\2\13\3\1\0\44\3\11\0"+
-    "\1\3\71\0\53\2\24\3\1\2\12\3\6\0\6\2\4\3\4\2"+
-    "\3\3\1\2\3\3\2\2\7\3\3\2\4\3\15\2\14\3\1\2"+
-    "\17\3\2\0\46\2\1\0\1\2\5\0\1\2\2\0\53\2\1\0"+
-    "\u014d\2\1\0\4\2\2\0\7\2\1\0\1\2\1\0\4\2\2\0"+
-    "\51\2\1\0\4\2\2\0\41\2\1\0\4\2\2\0\7\2\1\0"+
-    "\1\2\1\0\4\2\2\0\17\2\1\0\71\2\1\0\4\2\2\0"+
-    "\103\2\2\0\3\3\40\0\20\2\20\0\125\2\14\0\u026c\2\2\0"+
-    "\21\2\1\0\32\2\5\0\113\2\3\0\3\2\17\0\15\2\1\0"+
-    "\4\2\3\3\13\0\22\2\3\3\13\0\22\2\2\3\14\0\15\2"+
-    "\1\0\3\2\1\0\2\3\14\0\64\2\40\3\3\0\1\2\3\0"+
-    "\2\2\1\3\2\0\12\3\41\0\3\3\2\0\12\3\6\0\130\2"+
-    "\10\0\51\2\1\3\1\2\5\0\106\2\12\0\35\2\3\0\14\3"+
-    "\4\0\14\3\12\0\12\3\36\2\2\0\5\2\13\0\54\2\4\0"+
-    "\21\3\7\2\2\3\6\0\12\3\46\0\27\2\5\3\4\0\65\2"+
-    "\12\3\1\0\35\3\2\0\13\3\6\0\12\3\15\0\1\2\130\0"+
-    "\5\3\57\2\21\3\7\2\4\0\12\3\21\0\11\3\14\0\3\3"+
-    "\36\2\15\3\2\2\12\3\54\2\16\3\14\0\44\2\24\3\10\0"+
-    "\12\3\3\0\3\2\12\3\44\2\122\0\3\3\1\0\25\3\4\2"+
-    "\1\3\4\2\3\3\2\2\11\0\300\2\47\3\25\0\4\3\u0116\2"+
-    "\2\0\6\2\2\0\46\2\2\0\6\2\2\0\10\2\1\0\1\2"+
-    "\1\0\1\2\1\0\1\2\1\0\37\2\2\0\65\2\1\0\7\2"+
-    "\1\0\1\2\3\0\3\2\1\0\7\2\3\0\4\2\2\0\6\2"+
-    "\4\0\15\2\5\0\3\2\1\0\7\2\16\0\5\3\32\0\5\3"+
-    "\20\0\2\2\23\0\1\2\13\0\5\3\5\0\6\3\1\0\1\2"+
-    "\15\0\1\2\20\0\15\2\3\0\33\2\25\0\15\3\4\0\1\3"+
-    "\3\0\14\3\21\0\1\2\4\0\1\2\2\0\12\2\1\0\1\2"+
-    "\3\0\5\2\6\0\1\2\1\0\1\2\1\0\1\2\1\0\4\2"+
-    "\1\0\13\2\2\0\4\2\5\0\5\2\4\0\1\2\21\0\51\2"+
-    "\u0a77\0\57\2\1\0\57\2\1\0\205\2\6\0\4\2\3\3\2\2"+
-    "\14\0\46\2\1\0\1\2\5\0\1\2\2\0\70\2\7\0\1\2"+
-    "\17\0\1\3\27\2\11\0\7\2\1\0\7\2\1\0\7\2\1\0"+
+    "\2\0\1\3\1\2\7\3\1\0\3\3\1\0\4\3\7\0\2\3"+
+    "\7\0\1\2\1\0\2\2\2\3\2\0\12\3\1\0\2\2\17\0"+
+    "\2\3\1\0\10\2\1\0\3\2\1\0\51\2\2\0\1\2\7\3"+
+    "\1\0\3\3\1\0\4\3\1\2\10\0\1\3\10\0\2\2\2\3"+
+    "\2\0\12\3\12\0\6\2\2\0\2\3\1\0\22\2\3\0\30\2"+
+    "\1\0\11\2\1\0\1\2\2\0\7\2\3\0\1\3\4\0\6\3"+
+    "\1\0\1\3\1\0\10\3\22\0\2\3\15\0\60\2\1\3\2\2"+
+    "\7\3\4\0\10\2\10\3\1\0\12\3\47\0\2\2\1\0\1\2"+
+    "\2\0\2\2\1\0\1\2\2\0\1\2\6\0\4\2\1\0\7\2"+
+    "\1\0\3\2\1\0\1\2\1\0\1\2\2\0\2\2\1\0\4\2"+
+    "\1\3\2\2\6\3\1\0\2\3\1\2\2\0\5\2\1\0\1\2"+
+    "\1\0\6\3\2\0\12\3\2\0\4\2\40\0\1\2\27\0\2\3"+
+    "\6\0\12\3\13\0\1\3\1\0\1\3\1\0\1\3\4\0\2\3"+
+    "\10\2\1\0\44\2\4\0\24\3\1\0\2\3\5\2\13\3\1\0"+
+    "\44\3\11\0\1\3\71\0\53\2\24\3\1\2\12\3\6\0\6\2"+
+    "\4\3\4\2\3\3\1\2\3\3\2\2\7\3\3\2\4\3\15\2"+
+    "\14\3\1\2\17\3\2\0\46\2\1\0\1\2\5\0\1\2\2\0"+
+    "\53\2\1\0\u014d\2\1\0\4\2\2\0\7\2\1\0\1\2\1\0"+
+    "\4\2\2\0\51\2\1\0\4\2\2\0\41\2\1\0\4\2\2\0"+
+    "\7\2\1\0\1\2\1\0\4\2\2\0\17\2\1\0\71\2\1\0"+
+    "\4\2\2\0\103\2\2\0\3\3\40\0\20\2\20\0\125\2\14\0"+
+    "\u026c\2\2\0\21\2\1\0\32\2\5\0\113\2\3\0\3\2\17\0"+
+    "\15\2\1\0\4\2\3\3\13\0\22\2\3\3\13\0\22\2\2\3"+
+    "\14\0\15\2\1\0\3\2\1\0\2\3\14\0\64\2\40\3\3\0"+
+    "\1\2\3\0\2\2\1\3\2\0\12\3\41\0\3\3\2\0\12\3"+
+    "\6\0\130\2\10\0\51\2\1\3\1\2\5\0\106\2\12\0\35\2"+
+    "\3\0\14\3\4\0\14\3\12\0\12\3\36\2\2\0\5\2\13\0"+
+    "\54\2\4\0\21\3\7\2\2\3\6\0\12\3\46\0\27\2\5\3"+
+    "\4\0\65\2\12\3\1\0\35\3\2\0\13\3\6\0\12\3\15\0"+
+    "\1\2\130\0\5\3\57\2\21\3\7\2\4\0\12\3\21\0\11\3"+
+    "\14\0\3\3\36\2\15\3\2\2\12\3\54\2\16\3\14\0\44\2"+
+    "\24\3\10\0\12\3\3\0\3\2\12\3\44\2\122\0\3\3\1\0"+
+    "\25\3\4\2\1\3\4\2\3\3\2\2\11\0\300\2\47\3\25\0"+
+    "\4\3\u0116\2\2\0\6\2\2\0\46\2\2\0\6\2\2\0\10\2"+
+    "\1\0\1\2\1\0\1\2\1\0\1\2\1\0\37\2\2\0\65\2"+
+    "\1\0\7\2\1\0\1\2\3\0\3\2\1\0\7\2\3\0\4\2"+
+    "\2\0\6\2\4\0\15\2\5\0\3\2\1\0\7\2\16\0\5\3"+
+    "\30\0\1\104\1\104\5\3\20\0\2\2\23\0\1\2\13\0\5\3"+
+    "\5\0\6\3\1\0\1\2\15\0\1\2\20\0\15\2\3\0\33\2"+
+    "\25\0\15\3\4\0\1\3\3\0\14\3\21\0\1\2\4\0\1\2"+
+    "\2\0\12\2\1\0\1\2\3\0\5\2\6\0\1\2\1\0\1\2"+
+    "\1\0\1\2\1\0\4\2\1\0\13\2\2\0\4\2\5\0\5\2"+
+    "\4\0\1\2\21\0\51\2\u0a77\0\57\2\1\0\57\2\1\0\205\2"+
+    "\6\0\4\2\3\3\2\2\14\0\46\2\1\0\1\2\5\0\1\2"+
+    "\2\0\70\2\7\0\1\2\17\0\1\3\27\2\11\0\7\2\1\0"+
     "\7\2\1\0\7\2\1\0\7\2\1\0\7\2\1\0\7\2\1\0"+
-    "\40\3\57\0\1\2\u01d5\0\3\2\31\0\11\2\6\3\1\0\5\2"+
-    "\2\0\5\2\4\0\126\2\2\0\2\3\2\0\3\2\1\0\132\2"+
-    "\1\0\4\2\5\0\51\2\3\0\136\2\21\0\33\2\65\0\20\2"+
-    "\u0200\0\u19b6\2\112\0\u51cd\2\63\0\u048d\2\103\0\56\2\2\0\u010d\2"+
-    "\3\0\20\2\12\3\2\2\24\0\57\2\1\3\4\0\12\3\1\0"+
-    "\31\2\7\0\1\3\120\2\2\3\45\0\11\2\2\0\147\2\2\0"+
-    "\4\2\1\0\4\2\14\0\13\2\115\0\12\2\1\3\3\2\1\3"+
-    "\4\2\1\3\27\2\5\3\20\0\1\2\7\0\64\2\14\0\2\3"+
-    "\62\2\21\3\13\0\12\3\6\0\22\3\6\2\3\0\1\2\4\0"+
-    "\12\3\34\2\10\3\2\0\27\2\15\3\14\0\35\2\3\0\4\3"+
-    "\57\2\16\3\16\0\1\2\12\3\46\0\51\2\16\3\11\0\3\2"+
-    "\1\3\10\2\2\3\2\0\12\3\6\0\27\2\3\0\1\2\1\3"+
-    "\4\0\60\2\1\3\1\2\3\3\2\2\2\3\5\2\2\3\1\2"+
-    "\1\3\1\2\30\0\3\2\2\0\13\2\5\3\2\0\3\2\2\3"+
-    "\12\0\6\2\2\0\6\2\2\0\6\2\11\0\7\2\1\0\7\2"+
-    "\221\0\43\2\10\3\1\0\2\3\2\0\12\3\6\0\u2ba4\2\14\0"+
-    "\27\2\4\0\61\2\u2104\0\u016e\2\2\0\152\2\46\0\7\2\14\0"+
-    "\5\2\5\0\1\2\1\3\12\2\1\0\15\2\1\0\5\2\1\0"+
-    "\1\2\1\0\2\2\1\0\2\2\1\0\154\2\41\0\u016b\2\22\0"+
-    "\100\2\2\0\66\2\50\0\15\2\3\0\20\3\20\0\7\3\14\0"+
-    "\2\2\30\0\3\2\31\0\1\2\6\0\5\2\1\0\207\2\2\0"+
-    "\1\3\4\0\1\2\13\0\12\3\7\0\32\2\4\0\1\2\1\0"+
-    "\32\2\13\0\131\2\3\0\6\2\2\0\6\2\2\0\6\2\2\0"+
-    "\3\2\3\0\2\2\3\0\2\2\22\0\3\3\4\0";
+    "\7\2\1\0\7\2\1\0\40\3\57\0\1\2\u01d5\0\3\2\31\0"+
+    "\11\2\6\3\1\0\5\2\2\0\5\2\4\0\126\2\2\0\2\3"+
+    "\2\0\3\2\1\0\132\2\1\0\4\2\5\0\51\2\3\0\136\2"+
+    "\21\0\33\2\65\0\20\2\u0200\0\u19b6\2\112\0\u51cd\2\63\0\u048d\2"+
+    "\103\0\56\2\2\0\u010d\2\3\0\20\2\12\3\2\2\24\0\57\2"+
+    "\1\3\4\0\12\3\1\0\31\2\7\0\1\3\120\2\2\3\45\0"+
+    "\11\2\2\0\147\2\2\0\4\2\1\0\4\2\14\0\13\2\115\0"+
+    "\12\2\1\3\3\2\1\3\4\2\1\3\27\2\5\3\20\0\1\2"+
+    "\7\0\64\2\14\0\2\3\62\2\21\3\13\0\12\3\6\0\22\3"+
+    "\6\2\3\0\1\2\4\0\12\3\34\2\10\3\2\0\27\2\15\3"+
+    "\14\0\35\2\3\0\4\3\57\2\16\3\16\0\1\2\12\3\46\0"+
+    "\51\2\16\3\11\0\3\2\1\3\10\2\2\3\2\0\12\3\6\0"+
+    "\27\2\3\0\1\2\1\3\4\0\60\2\1\3\1\2\3\3\2\2"+
+    "\2\3\5\2\2\3\1\2\1\3\1\2\30\0\3\2\2\0\13\2"+
+    "\5\3\2\0\3\2\2\3\12\0\6\2\2\0\6\2\2\0\6\2"+
+    "\11\0\7\2\1\0\7\2\221\0\43\2\10\3\1\0\2\3\2\0"+
+    "\12\3\6\0\u2ba4\2\14\0\27\2\4\0\61\2\u2104\0\u016e\2\2\0"+
+    "\152\2\46\0\7\2\14\0\5\2\5\0\1\2\1\3\12\2\1\0"+
+    "\15\2\1\0\5\2\1\0\1\2\1\0\2\2\1\0\2\2\1\0"+
+    "\154\2\41\0\u016b\2\22\0\100\2\2\0\66\2\50\0\15\2\3\0"+
+    "\20\3\20\0\7\3\14\0\2\2\30\0\3\2\31\0\1\2\6\0"+
+    "\5\2\1\0\207\2\2\0\1\3\4\0\1\2\13\0\12\3\7\0"+
+    "\32\2\4\0\1\2\1\0\32\2\13\0\131\2\3\0\6\2\2\0"+
+    "\6\2\2\0\6\2\2\0\3\2\3\0\2\2\3\0\2\2\22\0"+
+    "\3\3\4\0\14\2\1\0\32\2\1\0\23\2\1\0\2\2\1\0"+
+    "\17\2\2\0\16\2\42\0\173\2\105\0\65\2\210\0\1\3\202\0"+
+    "\35\2\3\0\61\2\57\0\37\2\21\0\33\2\65\0\36\2\2\0"+
+    "\44\2\4\0\10\2\1\0\5\2\52\0\236\2\2\0\12\3\u0356\0"+
+    "\6\2\2\0\1\2\1\0\54\2\1\0\2\2\3\0\1\2\2\0"+
+    "\27\2\252\0\26\2\12\0\32\2\106\0\70\2\6\0\2\2\100\0"+
+    "\1\2\3\3\1\0\2\3\5\0\4\3\4\2\1\0\3\2\1\0"+
+    "\33\2\4\0\3\3\4\0\1\3\40\0\35\2\203\0\66\2\12\0"+
+    "\26\2\12\0\23\2\215\0\111\2\u03b7\0\3\3\65\2\17\3\37\0"+
+    "\12\3\20\0\3\3\55\2\13\3\2\0\1\3\22\0\31\2\7\0"+
+    "\12\3\6\0\3\3\44\2\16\3\1\0\12\3\100\0\3\3\60\2"+
+    "\16\3\4\2\13\0\12\3\u04a6\0\53\2\15\3\10\0\12\3\u0936\0"+
+    "\u036f\2\221\0\143\2\u0b9d\0\u042f\2\u33d1\0\u0239\2\u04c7\0\105\2\13\0"+
+    "\1\2\56\3\20\0\4\3\15\2\u4060\0\2\2\u2163\0\5\3\3\0"+
+    "\26\3\2\0\7\3\36\0\4\3\224\0\3\3\u01bb\0\125\2\1\0"+
+    "\107\2\1\0\2\2\2\0\1\2\2\0\2\2\2\0\4\2\1\0"+
+    "\14\2\1\0\1\2\1\0\7\2\1\0\101\2\1\0\4\2\2\0"+
+    "\10\2\1\0\7\2\1\0\34\2\1\0\4\2\1\0\5\2\1\0"+
+    "\1\2\3\0\7\2\1\0\u0154\2\2\0\31\2\1\0\31\2\1\0"+
+    "\37\2\1\0\31\2\1\0\37\2\1\0\31\2\1\0\37\2\1\0"+
+    "\31\2\1\0\37\2\1\0\31\2\1\0\10\2\2\0\62\3\u1600\0"+
+    "\4\2\1\0\33\2\1\0\2\2\1\0\1\2\2\0\1\2\1\0"+
+    "\12\2\1\0\4\2\1\0\1\2\1\0\1\2\6\0\1\2\4\0"+
+    "\1\2\1\0\1\2\1\0\1\2\1\0\3\2\1\0\2\2\1\0"+
+    "\1\2\2\0\1\2\1\0\1\2\1\0\1\2\1\0\1\2\1\0"+
+    "\1\2\1\0\2\2\1\0\1\2\2\0\4\2\1\0\7\2\1\0"+
+    "\4\2\1\0\4\2\1\0\1\2\1\0\12\2\1\0\21\2\5\0"+
+    "\3\2\1\0\5\2\1\0\21\2\u1144\0\ua6d7\2\51\0\u1035\2\13\0"+
+    "\336\2\u3fe2\0\u021e\2\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u05ee\0"+
+    "\1\3\36\0\140\3\200\0\360\3\uffff\0\uffff\0\ufe12\0";
 
   /** 
    * Translates characters to character classes
@@ -227,46 +260,46 @@ class _JavaLexer implements FlexLexer {
   private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
 
   private static final String ZZ_ROWMAP_PACKED_0 =
-    "\0\0\0\104\0\210\0\314\0\u0110\0\u0154\0\u0198\0\u01dc"+
-    "\0\u0220\0\u0264\0\u02a8\0\u02ec\0\u0330\0\u0374\0\u03b8\0\u03fc"+
-    "\0\u0440\0\u0484\0\u04c8\0\u050c\0\u0550\0\u0594\0\u05d8\0\u061c"+
-    "\0\u0660\0\u06a4\0\u06e8\0\u072c\0\u0770\0\u07b4\0\u07f8\0\u083c"+
-    "\0\u0880\0\104\0\u08c4\0\u0908\0\u094c\0\104\0\104\0\104"+
-    "\0\104\0\104\0\104\0\104\0\104\0\104\0\104\0\u0990"+
-    "\0\104\0\u09d4\0\u0a18\0\104\0\104\0\104\0\104\0\104"+
-    "\0\u0a5c\0\u0aa0\0\u0ae4\0\u0b28\0\u0b6c\0\104\0\104\0\104"+
-    "\0\u0bb0\0\104\0\u0bf4\0\104\0\u0c38\0\u0c7c\0\u0cc0\0\u0d04"+
-    "\0\u0d48\0\u0d8c\0\u0dd0\0\u0e14\0\u0e58\0\u0e9c\0\u0ee0\0\u0f24"+
-    "\0\u0f68\0\u0fac\0\u0ff0\0\u1034\0\u1078\0\u10bc\0\u1100\0\u1144"+
-    "\0\u1188\0\u11cc\0\u1210\0\u1254\0\u1298\0\u12dc\0\u1320\0\u1364"+
-    "\0\314\0\u13a8\0\u13ec\0\u1430\0\u1474\0\u14b8\0\u14fc\0\u1540"+
-    "\0\u1584\0\u15c8\0\u160c\0\104\0\104\0\104\0\104\0\104"+
-    "\0\104\0\104\0\u1650\0\104\0\104\0\104\0\104\0\104"+
-    "\0\u1694\0\u16d8\0\u171c\0\u1760\0\u17a4\0\104\0\u17e8\0\u182c"+
-    "\0\314\0\u1870\0\u18b4\0\u18f8\0\u193c\0\u1980\0\u19c4\0\u1a08"+
-    "\0\u1a4c\0\314\0\u1a90\0\u1ad4\0\u1b18\0\u1b5c\0\u1ba0\0\u1be4"+
-    "\0\u1c28\0\u1c6c\0\u1cb0\0\u1cf4\0\u1d38\0\314\0\u1d7c\0\u1dc0"+
-    "\0\u1e04\0\u1e48\0\u1e8c\0\u1ed0\0\u1f14\0\u1f58\0\u1f9c\0\u1fe0"+
-    "\0\u2024\0\u2068\0\u20ac\0\u20f0\0\u2134\0\u2178\0\u21bc\0\u2200"+
-    "\0\u2244\0\u2288\0\u22cc\0\u2310\0\104\0\u2354\0\u2398\0\104"+
-    "\0\u23dc\0\314\0\u2420\0\u2464\0\314\0\u24a8\0\314\0\314"+
-    "\0\u24ec\0\u2530\0\u2574\0\u25b8\0\u25fc\0\u2640\0\314\0\u2684"+
-    "\0\u26c8\0\u270c\0\u2750\0\u2794\0\u27d8\0\314\0\u281c\0\u2860"+
-    "\0\u28a4\0\314\0\u28e8\0\314\0\u292c\0\u2970\0\u29b4\0\314"+
-    "\0\u29f8\0\u2a3c\0\u2a80\0\u2ac4\0\u2b08\0\u2b4c\0\314\0\u2b90"+
-    "\0\u2bd4\0\u2c18\0\u2c5c\0\u2ca0\0\314\0\u2ce4\0\104\0\u2d28"+
-    "\0\u2d6c\0\u2db0\0\u2df4\0\u2e38\0\314\0\314\0\u2e7c\0\u2ec0"+
-    "\0\u2f04\0\u2f48\0\u2f8c\0\314\0\u2fd0\0\314\0\u3014\0\u3058"+
-    "\0\314\0\u309c\0\314\0\314\0\u30e0\0\314\0\u3124\0\u3168"+
-    "\0\u31ac\0\u31f0\0\u3234\0\u3278\0\u32bc\0\u3300\0\u3344\0\u3388"+
-    "\0\u33cc\0\314\0\u3410\0\314\0\314\0\u3454\0\u3498\0\314"+
-    "\0\u34dc\0\u3520\0\314\0\u3564\0\314\0\314\0\u35a8\0\u35ec"+
-    "\0\u3630\0\u3674\0\u36b8\0\314\0\u36fc\0\314\0\u3740\0\u3784"+
-    "\0\314\0\u37c8\0\u380c\0\u3850\0\314\0\314\0\u3894\0\u38d8"+
-    "\0\u391c\0\314\0\u3960\0\u39a4\0\u39e8\0\u3a2c\0\314\0\u3a70"+
-    "\0\314\0\314\0\u3ab4\0\u3af8\0\314\0\314\0\u3b3c\0\314"+
-    "\0\u3b80\0\u3bc4\0\u3c08\0\u3c4c\0\314\0\314\0\u3c90\0\314"+
-    "\0\u3cd4\0\u3d18\0\314\0\u3d5c\0\314\0\314\0\u3da0\0\314";
+    "\0\0\0\106\0\214\0\322\0\u0118\0\u015e\0\u01a4\0\u01ea"+
+    "\0\u0230\0\u0276\0\u02bc\0\u0302\0\u0348\0\u038e\0\u03d4\0\u041a"+
+    "\0\u0460\0\u04a6\0\u04ec\0\u0532\0\u0578\0\u05be\0\u0604\0\u064a"+
+    "\0\u0690\0\u06d6\0\u071c\0\u0762\0\u07a8\0\u07ee\0\u0834\0\u087a"+
+    "\0\u08c0\0\106\0\u0906\0\u094c\0\u0992\0\106\0\106\0\106"+
+    "\0\106\0\106\0\106\0\106\0\106\0\106\0\106\0\u09d8"+
+    "\0\106\0\u0a1e\0\u0a64\0\106\0\106\0\106\0\106\0\106"+
+    "\0\u0aaa\0\u0af0\0\u0b36\0\u0b7c\0\u0bc2\0\106\0\106\0\106"+
+    "\0\u0c08\0\106\0\u0c4e\0\106\0\u0c94\0\u0cda\0\u0d20\0\u0d66"+
+    "\0\u0dac\0\u0df2\0\u0e38\0\u0e7e\0\u0ec4\0\u0f0a\0\u0f50\0\u0f96"+
+    "\0\u0fdc\0\u1022\0\u1068\0\u10ae\0\u10f4\0\u113a\0\u1180\0\u11c6"+
+    "\0\u120c\0\u1252\0\u1298\0\u12de\0\u1324\0\u136a\0\u13b0\0\u13f6"+
+    "\0\322\0\u143c\0\u1482\0\u14c8\0\u150e\0\u1554\0\u159a\0\u15e0"+
+    "\0\u1626\0\u166c\0\u16b2\0\106\0\106\0\106\0\106\0\106"+
+    "\0\106\0\106\0\u16f8\0\106\0\106\0\106\0\106\0\106"+
+    "\0\u173e\0\u1784\0\u17ca\0\u1810\0\u1856\0\106\0\u189c\0\u18e2"+
+    "\0\322\0\u1928\0\u196e\0\u19b4\0\u19fa\0\u1a40\0\u1a86\0\u1acc"+
+    "\0\u1b12\0\322\0\u1b58\0\u1b9e\0\u1be4\0\u1c2a\0\u1c70\0\u1cb6"+
+    "\0\u1cfc\0\u1d42\0\u1d88\0\u1dce\0\u1e14\0\322\0\u1e5a\0\u1ea0"+
+    "\0\u1ee6\0\u1f2c\0\u1f72\0\u1fb8\0\u1ffe\0\u2044\0\u208a\0\u20d0"+
+    "\0\u2116\0\u215c\0\u21a2\0\u21e8\0\u222e\0\u2274\0\u22ba\0\u2300"+
+    "\0\u2346\0\u238c\0\u23d2\0\u2418\0\106\0\u245e\0\u24a4\0\106"+
+    "\0\u24ea\0\322\0\u2530\0\u2576\0\322\0\u25bc\0\322\0\322"+
+    "\0\u2602\0\u2648\0\u268e\0\u26d4\0\u271a\0\u2760\0\322\0\u27a6"+
+    "\0\u27ec\0\u2832\0\u2878\0\u28be\0\u2904\0\322\0\u294a\0\u2990"+
+    "\0\u29d6\0\322\0\u2a1c\0\322\0\u2a62\0\u2aa8\0\u2aee\0\322"+
+    "\0\u2b34\0\u2b7a\0\u2bc0\0\u2c06\0\u2c4c\0\u2c92\0\322\0\u2cd8"+
+    "\0\u2d1e\0\u2d64\0\u2daa\0\u2df0\0\322\0\u2e36\0\106\0\u2e7c"+
+    "\0\u2ec2\0\u2f08\0\u2f4e\0\u2f94\0\322\0\322\0\u2fda\0\u3020"+
+    "\0\u3066\0\u30ac\0\u30f2\0\322\0\u3138\0\322\0\u317e\0\u31c4"+
+    "\0\322\0\u320a\0\322\0\322\0\u3250\0\322\0\u3296\0\u32dc"+
+    "\0\u3322\0\u3368\0\u33ae\0\u33f4\0\u343a\0\u3480\0\u34c6\0\u350c"+
+    "\0\u3552\0\322\0\u3598\0\322\0\322\0\u35de\0\u3624\0\322"+
+    "\0\u366a\0\u36b0\0\322\0\u36f6\0\322\0\322\0\u373c\0\u3782"+
+    "\0\u37c8\0\u380e\0\u3854\0\322\0\u389a\0\322\0\u38e0\0\u3926"+
+    "\0\322\0\u396c\0\u39b2\0\u39f8\0\322\0\322\0\u3a3e\0\u3a84"+
+    "\0\u3aca\0\322\0\u3b10\0\u3b56\0\u3b9c\0\u3be2\0\322\0\u3c28"+
+    "\0\322\0\322\0\u3c6e\0\u3cb4\0\322\0\322\0\u3cfa\0\322"+
+    "\0\u3d40\0\u3d86\0\u3dcc\0\u3e12\0\322\0\322\0\u3e58\0\322"+
+    "\0\u3e9e\0\u3ee4\0\322\0\u3f2a\0\322\0\322\0\u3f70\0\322";
 
   private static int [] zzUnpackRowMap() {
     int [] result = new int[320];
@@ -299,337 +332,385 @@ class _JavaLexer implements FlexLexer {
     "\2\4\1\31\1\32\1\33\1\34\1\4\1\35\1\36"+
     "\1\37\1\40\1\41\1\42\1\43\1\44\1\45\1\46"+
     "\1\47\1\50\1\51\1\52\1\53\1\54\1\55\1\56"+
-    "\1\57\1\60\1\61\105\0\1\3\4\0\1\3\77\0"+
+    "\1\57\1\60\1\61\111\0\1\3\4\0\1\3\101\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\30\4\31\0\1\62\1\63\51\0\1\64\103\0\1\65"+
-    "\33\0\2\7\1\0\1\66\1\7\2\0\1\67\1\70"+
-    "\1\71\1\72\10\0\1\72\1\67\1\0\1\66\11\0"+
-    "\1\70\43\0\2\7\1\0\1\66\1\7\1\73\1\74"+
+    "\30\4\26\0\1\4\4\0\1\62\1\63\51\0\1\64"+
+    "\105\0\1\65\35\0\2\7\1\0\1\66\1\7\2\0"+
     "\1\67\1\70\1\71\1\72\10\0\1\72\1\67\1\0"+
-    "\1\66\2\0\1\74\6\0\1\70\1\0\1\73\41\0"+
-    "\1\71\3\0\1\71\4\0\1\75\105\0\1\76\34\0"+
-    "\1\77\4\0\1\100\17\0\6\13\1\0\15\13\1\101"+
-    "\1\102\56\13\6\14\1\0\15\14\1\103\1\14\1\104"+
-    "\55\14\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\1\4\1\105\14\4\1\106\11\4\27\0"+
-    "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\3\4\1\107\24\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\6\4\1\110\1\4\1\111"+
-    "\11\4\1\112\5\4\27\0\2\4\3\0\11\4\1\0"+
+    "\1\66\11\0\1\70\45\0\2\7\1\0\1\66\1\7"+
+    "\1\73\1\74\1\67\1\70\1\71\1\72\10\0\1\72"+
+    "\1\67\1\0\1\66\2\0\1\74\6\0\1\70\1\0"+
+    "\1\73\43\0\1\71\3\0\1\71\4\0\1\75\107\0"+
+    "\1\76\34\0\1\77\4\0\1\100\21\0\6\13\1\0"+
+    "\15\13\1\101\1\102\60\13\6\14\1\0\15\14\1\103"+
+    "\1\14\1\104\57\14\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\1\4\1\105\14\4\1\106"+
+    "\11\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\3\4\1\107\24\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\6\4\1\110\1\4\1\111\11\4\1\112"+
+    "\5\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
     "\1\4\1\0\1\4\3\0\5\4\1\113\1\114\4\4"+
-    "\1\115\3\4\1\116\10\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\7\4\1\117\1\4"+
-    "\1\120\16\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\13\4\1\121\14\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\1\122"+
-    "\1\4\1\123\12\4\1\124\1\125\7\4\1\126\1\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\2\4\1\127\1\130\1\4\1\131\22\4\27\0"+
-    "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\1\4\1\132\11\4\1\133\1\4\1\134\12\4\27\0"+
-    "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\5\4\1\135\1\136\4\4\1\137\2\4\1\140\11\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\4\4\1\141\3\4\1\142\10\4\1\143\6\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\3\4\1\144\7\4\1\145\14\4\27\0\2\4"+
+    "\1\115\3\4\1\116\10\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\7\4"+
+    "\1\117\1\4\1\120\16\4\26\0\1\4\2\0\2\4"+
     "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\13\4"+
-    "\1\146\14\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\1\4\1\147\1\150\2\4\1\151"+
-    "\22\4\27\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\13\4\1\152\14\4\27\0\2\4\3\0"+
-    "\11\4\1\0\1\4\1\0\1\4\3\0\16\4\1\153"+
-    "\11\4\104\0\1\154\103\0\1\155\103\0\1\156\1\0"+
-    "\1\157\101\0\1\160\2\0\1\161\100\0\1\162\3\0"+
-    "\1\163\77\0\1\164\5\0\1\165\75\0\1\166\103\0"+
-    "\1\167\126\0\1\170\1\0\6\62\1\0\75\62\5\171"+
-    "\1\172\76\171\7\0\2\71\2\0\1\71\2\0\1\67"+
-    "\1\70\1\0\1\72\10\0\1\72\1\67\13\0\1\70"+
-    "\43\0\2\173\2\0\1\173\2\0\1\67\1\70\2\0"+
-    "\1\173\10\0\1\67\13\0\1\70\12\0\1\173\30\0"+
-    "\3\174\1\66\1\174\1\0\3\174\1\175\1\174\10\0"+
-    "\3\174\1\66\2\0\2\174\5\0\1\174\43\0\2\74"+
-    "\1\0\1\66\1\74\21\0\1\66\66\0\1\176\63\0"+
-    "\6\13\1\0\75\13\6\14\1\0\75\14\2\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\2\4"+
-    "\1\177\2\4\1\200\7\4\1\201\12\4\27\0\2\4"+
+    "\1\121\14\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\1\122\1\4\1\123"+
+    "\12\4\1\124\1\125\7\4\1\126\1\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\2\4\1\127\1\130\1\4\1\131\22\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\1\4\1\132\11\4\1\133\1\4\1\134"+
+    "\12\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\5\4\1\135\1\136\4\4"+
+    "\1\137\2\4\1\140\11\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\4\4"+
+    "\1\141\3\4\1\142\10\4\1\143\6\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\3\4\1\144\7\4\1\145\14\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\13\4\1\146\14\4\26\0\1\4\2\0\2\4"+
     "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\1\4"+
-    "\1\202\15\4\1\203\10\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\1\204\27\4\27\0"+
+    "\1\147\1\150\2\4\1\151\22\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\7\4\1\205\20\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\2\4\1\206\25\4\27\0"+
+    "\13\4\1\152\14\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\16\4\1\153"+
+    "\11\4\26\0\1\4\57\0\1\154\105\0\1\155\105\0"+
+    "\1\156\1\0\1\157\103\0\1\160\2\0\1\161\102\0"+
+    "\1\162\3\0\1\163\101\0\1\164\5\0\1\165\77\0"+
+    "\1\166\105\0\1\167\130\0\1\170\3\0\6\62\1\0"+
+    "\77\62\5\171\1\172\100\171\7\0\2\71\2\0\1\71"+
+    "\2\0\1\67\1\70\1\0\1\72\10\0\1\72\1\67"+
+    "\13\0\1\70\45\0\2\173\2\0\1\173\2\0\1\67"+
+    "\1\70\2\0\1\173\10\0\1\67\13\0\1\70\12\0"+
+    "\1\173\32\0\3\174\1\66\1\174\1\0\3\174\1\175"+
+    "\1\174\10\0\3\174\1\66\2\0\2\174\5\0\1\174"+
+    "\45\0\2\74\1\0\1\66\1\74\21\0\1\66\70\0"+
+    "\1\176\65\0\6\13\1\0\77\13\6\14\1\0\77\14"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\2\4\1\177\2\4\1\200\7\4\1\201\12\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\1\4\1\202\15\4\1\203\10\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\1\204\27\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\1\207\27\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\6\4\1\210\21\4\27\0\2\4"+
+    "\7\4\1\205\20\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\2\4\1\206"+
+    "\25\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\1\207\27\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\6\4\1\210\21\4\26\0\1\4\2\0\2\4"+
     "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\13\4"+
-    "\1\211\14\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\1\4\1\212\26\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\10\4"+
-    "\1\213\17\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\7\4\1\214\20\4\27\0\2\4"+
+    "\1\211\14\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\1\4\1\212\26\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\10\4\1\213\17\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\7\4\1\214\20\4\26\0\1\4\2\0\2\4"+
     "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\7\4"+
-    "\1\215\20\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\10\4\1\216\17\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\1\4"+
-    "\1\217\3\4\1\220\22\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\24\4\1\221\3\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\10\4\1\222\17\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\13\4\1\223\14\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\17\4\1\224\10\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\6\4\1\225\21\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\26\4\1\226\1\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\1\227\27\4\27\0"+
+    "\1\215\20\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\10\4\1\216\17\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\1\4\1\217\3\4\1\220\22\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\24\4\1\221\3\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\10\4\1\222\17\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\13\4"+
+    "\1\223\14\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\17\4\1\224\10\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\6\4\1\225\21\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\26\4\1\226\1\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\1\227"+
+    "\27\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\3\4\1\230\24\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\13\4\1\231\14\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\3\4\1\230\24\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\13\4\1\231\14\4\27\0"+
+    "\1\232\27\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\1\233\6\4\1\234"+
+    "\20\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\5\4\1\235\22\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\10\4\1\236\17\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\1\232\27\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\1\233\6\4\1\234\20\4\27\0"+
+    "\5\4\1\237\22\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\1\240\6\4"+
+    "\1\241\20\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\24\4\1\242\3\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\4\4\1\243\23\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\2\4\1\244\25\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\1\245"+
+    "\27\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\13\4\1\246\3\4\1\247"+
+    "\10\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\11\4\1\250\16\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\12\4\1\251\15\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\5\4\1\235\22\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\10\4\1\236\17\4\27\0"+
+    "\6\4\1\252\10\4\1\253\10\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\5\4\1\237\22\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\1\240\6\4\1\241\20\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\24\4\1\242\3\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\4\4\1\243\23\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\2\4\1\244\25\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\1\245\27\4\27\0"+
+    "\17\4\1\254\10\4\26\0\1\4\57\0\1\255\26\0"+
+    "\5\171\1\256\100\171\4\257\1\260\1\172\100\257\7\0"+
+    "\2\173\2\0\1\173\2\0\1\67\1\70\13\0\1\67"+
+    "\13\0\1\70\45\0\3\174\1\66\1\174\1\0\3\174"+
+    "\1\261\1\174\1\0\1\72\6\0\3\174\1\66\2\0"+
+    "\2\174\5\0\1\174\3\0\1\72\41\0\3\261\1\0"+
+    "\1\261\1\0\3\261\1\0\1\261\10\0\3\261\3\0"+
+    "\2\261\5\0\1\261\40\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\3\4\1\262\24\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\10\4\1\263\17\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\13\4\1\246\3\4\1\247\10\4\27\0\2\4\3\0"+
-    "\11\4\1\0\1\4\1\0\1\4\3\0\11\4\1\250"+
-    "\16\4\27\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\12\4\1\251\15\4\27\0\2\4\3\0"+
-    "\11\4\1\0\1\4\1\0\1\4\3\0\6\4\1\252"+
-    "\10\4\1\253\10\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\17\4\1\254\10\4\104\0"+
-    "\1\255\24\0\5\171\1\256\76\171\4\257\1\260\1\172"+
-    "\76\257\7\0\2\173\2\0\1\173\2\0\1\67\1\70"+
-    "\13\0\1\67\13\0\1\70\43\0\3\174\1\66\1\174"+
-    "\1\0\3\174\1\261\1\174\1\0\1\72\6\0\3\174"+
-    "\1\66\2\0\2\174\5\0\1\174\3\0\1\72\37\0"+
-    "\3\261\1\0\1\261\1\0\3\261\1\0\1\261\10\0"+
-    "\3\261\3\0\2\261\5\0\1\261\36\0\2\4\3\0"+
-    "\11\4\1\0\1\4\1\0\1\4\3\0\3\4\1\262"+
-    "\24\4\27\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\10\4\1\263\17\4\27\0\2\4\3\0"+
-    "\11\4\1\0\1\4\1\0\1\4\3\0\13\4\1\264"+
-    "\14\4\27\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\7\4\1\265\20\4\27\0\2\4\3\0"+
-    "\11\4\1\0\1\4\1\0\1\4\3\0\2\4\1\266"+
-    "\25\4\27\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\3\4\1\267\24\4\27\0\2\4\3\0"+
-    "\11\4\1\0\1\4\1\0\1\4\3\0\21\4\1\270"+
-    "\6\4\27\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\3\4\1\271\24\4\27\0\2\4\3\0"+
-    "\11\4\1\0\1\4\1\0\1\4\3\0\7\4\1\272"+
-    "\20\4\27\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\5\4\1\273\22\4\27\0\2\4\3\0"+
-    "\11\4\1\0\1\4\1\0\1\4\3\0\5\4\1\274"+
-    "\22\4\27\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\3\4\1\275\24\4\27\0\2\4\3\0"+
-    "\11\4\1\0\1\4\1\0\1\4\3\0\1\276\27\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\23\4\1\277\4\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\17\4\1\300\10\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\1\301\27\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\3\4\1\302\24\4\27\0"+
+    "\13\4\1\264\14\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\7\4\1\265"+
+    "\20\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\2\4\1\266\25\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\3\4\1\267\24\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\12\4\1\303\15\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\1\4\1\304\26\4\27\0"+
+    "\21\4\1\270\6\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\3\4\1\271"+
+    "\24\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\7\4\1\272\20\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\5\4\1\273\22\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\1\305\27\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\6\4\1\306\21\4\27\0\2\4"+
+    "\5\4\1\274\22\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\3\4\1\275"+
+    "\24\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\1\276\27\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\23\4\1\277\4\4\26\0\1\4\2\0\2\4"+
     "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\17\4"+
-    "\1\307\10\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\5\4\1\310\22\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\6\4"+
-    "\1\311\21\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\3\4\1\312\24\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\12\4"+
-    "\1\313\15\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\3\4\1\314\24\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\7\4"+
-    "\1\315\20\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\1\316\6\4\1\317\20\4\27\0"+
+    "\1\300\10\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\1\301\27\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\3\4\1\302\24\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\1\4\1\320\26\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\3\4\1\321\24\4\27\0"+
-    "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\1\322\27\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\6\4\1\323\4\4\1\324\14\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\5\4\1\325\22\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\11\4\1\326\16\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\13\4\1\327\14\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\1\330\27\4\27\0"+
+    "\12\4\1\303\15\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\1\4\1\304"+
+    "\26\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\1\305\27\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\6\4\1\306\21\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\17\4"+
+    "\1\307\10\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\5\4\1\310\22\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\6\4\1\311\21\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\3\4\1\312\24\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\12\4"+
+    "\1\313\15\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\3\4\1\314\24\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\7\4\1\315\20\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\1\316\6\4\1\317\20\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\25\4\1\331\2\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\6\4\1\332\21\4\27\0"+
+    "\1\4\1\320\26\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\3\4\1\321"+
+    "\24\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\1\322\27\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\6\4\1\323\4\4\1\324\14\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\5\4\1\325\22\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\11\4"+
+    "\1\326\16\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\13\4\1\327\14\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\1\330\27\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\14\4\1\333\13\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\5\4\1\334\22\4\27\0"+
+    "\25\4\1\331\2\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\6\4\1\332"+
+    "\21\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\14\4\1\333\13\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\5\4\1\334\22\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\20\4\1\335\7\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\6\4\1\336\21\4\25\0"+
-    "\4\171\1\337\1\256\76\171\5\257\1\340\76\257\7\0"+
-    "\3\261\1\0\1\261\1\0\3\261\1\0\1\261\1\0"+
-    "\1\72\6\0\3\261\3\0\2\261\5\0\1\261\3\0"+
-    "\1\72\32\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\7\4\1\341\20\4\27\0\2\4\3\0"+
-    "\11\4\1\0\1\4\1\0\1\4\3\0\26\4\1\342"+
-    "\1\4\27\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\1\4\1\343\26\4\27\0\2\4\3\0"+
-    "\11\4\1\0\1\4\1\0\1\4\3\0\10\4\1\344"+
-    "\17\4\27\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\3\4\1\345\24\4\27\0\2\4\3\0"+
-    "\11\4\1\0\1\4\1\0\1\4\3\0\1\346\27\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\6\4\1\347\21\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\1\4\1\350\26\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\1\4\1\351\26\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\12\4\1\352\15\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\17\4\1\353\10\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\1\4\1\354\26\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\16\4\1\355\11\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\1\356\27\4\27\0"+
+    "\20\4\1\335\7\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\6\4\1\336"+
+    "\21\4\26\0\1\4\4\171\1\337\1\256\100\171\5\257"+
+    "\1\340\100\257\7\0\3\261\1\0\1\261\1\0\3\261"+
+    "\1\0\1\261\1\0\1\72\6\0\3\261\3\0\2\261"+
+    "\5\0\1\261\3\0\1\72\34\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\7\4\1\341\20\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\26\4\1\342\1\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\1\4\1\343\26\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\10\4"+
+    "\1\344\17\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\3\4\1\345\24\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\1\346\27\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\12\4\1\357\15\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\25\4\1\360\2\4\27\0"+
+    "\6\4\1\347\21\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\1\4\1\350"+
+    "\26\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\1\4\1\351\26\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\12\4\1\352\15\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\14\4\1\361\13\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\3\4\1\362\24\4\27\0"+
+    "\17\4\1\353\10\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\1\4\1\354"+
+    "\26\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\16\4\1\355\11\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\1\356\27\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\12\4"+
+    "\1\357\15\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\25\4\1\360\2\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\14\4\1\361\13\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\3\4\1\362\24\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\16\4"+
+    "\1\363\11\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\7\4\1\364\20\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\17\4\1\365\10\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\1\366\27\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\1\4\1\367"+
+    "\26\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\5\4\1\370\22\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\3\4\1\371\24\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\16\4\1\363\11\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\7\4\1\364\20\4\27\0"+
+    "\1\4\1\372\26\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\2\4\1\373"+
+    "\25\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\6\4\1\374\21\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\3\4\1\375\24\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\17\4\1\365\10\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\1\366\27\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\1\4"+
-    "\1\367\26\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\5\4\1\370\22\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\3\4"+
-    "\1\371\24\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\1\4\1\372\26\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\2\4"+
-    "\1\373\25\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\6\4\1\374\21\4\27\0\2\4"+
+    "\5\4\1\376\22\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\17\4\1\377"+
+    "\10\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\5\4\1\u0100\22\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\1\u0101\27\4\26\0\1\4\2\0\2\4"+
     "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\3\4"+
-    "\1\375\24\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\5\4\1\376\22\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\17\4"+
-    "\1\377\10\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\5\4\1\u0100\22\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\1\u0101"+
-    "\27\4\27\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\3\4\1\u0102\24\4\25\0\4\257\1\260"+
-    "\1\340\76\257\2\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\17\4\1\u0103\10\4\27\0\2\4"+
+    "\1\u0102\24\4\26\0\1\4\4\257\1\260\1\340\100\257"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\17\4\1\u0103\10\4\26\0\1\4\2\0\2\4"+
     "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\7\4"+
-    "\1\u0104\20\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\10\4\1\u0105\17\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\20\4"+
-    "\1\u0106\7\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\6\4\1\u0107\21\4\27\0\2\4"+
+    "\1\u0104\20\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\10\4\1\u0105\17\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\20\4\1\u0106\7\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\6\4\1\u0107\21\4\26\0\1\4\2\0\2\4"+
     "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\1\u0108"+
-    "\27\4\27\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\5\4\1\u0109\22\4\27\0\2\4\3\0"+
-    "\11\4\1\0\1\4\1\0\1\4\3\0\1\u010a\27\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\12\4\1\u010b\15\4\27\0\2\4\3\0\11\4"+
+    "\27\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\5\4\1\u0109\22\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\1\u010a\27\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\12\4"+
+    "\1\u010b\15\4\26\0\1\4\2\0\2\4\3\0\11\4"+
     "\1\0\1\4\1\0\1\4\3\0\1\4\1\u010c\26\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\16\4\1\u010d\11\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\3\4\1\u010e\24\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\5\4\1\u010f\22\4\27\0\2\4\3\0\11\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\16\4\1\u010d\11\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\3\4\1\u010e\24\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\5\4"+
+    "\1\u010f\22\4\26\0\1\4\2\0\2\4\3\0\11\4"+
     "\1\0\1\4\1\0\1\4\3\0\10\4\1\u0110\17\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\4\4\1\u0111\23\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\10\4\1\u0112\17\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\21\4\1\u0113\6\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\1\u0114\27\4\27\0"+
-    "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\6\4\1\u0115\21\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\3\4\1\u0116\24\4\27\0"+
-    "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\12\4\1\u0117\15\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\1\u0118\27\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\12\4"+
-    "\1\u0119\15\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\23\4\1\u011a\4\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\17\4"+
-    "\1\u011b\10\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\3\4\1\u011c\24\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\7\4"+
-    "\1\u011d\20\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\15\4\1\u011e\12\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\12\4"+
-    "\1\u011f\15\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\4\4\1\u0120\23\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\13\4"+
-    "\1\u0121\14\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\10\4\1\u0122\17\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\2\4"+
-    "\1\u0123\25\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\5\4\1\u0124\22\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\12\4"+
-    "\1\u0125\15\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\3\4\1\u0126\24\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\1\u0127"+
-    "\27\4\27\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\1\u0128\27\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\3\4\1\u0129\24\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\3\4\1\u012a\24\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\6\4\1\u012b\21\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\10\4\1\u012c\17\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\1\u012d\27\4\27\0"+
-    "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\24\4\1\u012e\3\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\10\4\1\u012f\17\4\27\0"+
-    "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\3\4\1\u0130\24\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\12\4\1\u0131\15\4\27\0"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\4\4\1\u0111\23\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\10\4\1\u0112\17\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\21\4"+
+    "\1\u0113\6\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\1\u0114\27\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\6\4\1\u0115\21\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\3\4\1\u0132\24\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\10\4\1\u0133\17\4\27\0"+
+    "\3\4\1\u0116\24\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\12\4\1\u0117"+
+    "\15\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\1\u0118\27\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\12\4\1\u0119\15\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\23\4"+
+    "\1\u011a\4\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\17\4\1\u011b\10\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\3\4\1\u011c\24\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\7\4\1\u011d\20\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\15\4"+
+    "\1\u011e\12\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\12\4\1\u011f\15\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\4\4\1\u0120\23\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\13\4\1\u0121\14\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\10\4"+
+    "\1\u0122\17\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\2\4\1\u0123\25\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\5\4\1\u0124\22\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\12\4\1\u0125\15\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\3\4"+
+    "\1\u0126\24\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\1\u0127\27\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\1\u0128\27\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\3\4"+
+    "\1\u0129\24\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\3\4\1\u012a\24\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\6\4\1\u012b\21\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\10\4\1\u012c\17\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\1\u012d"+
+    "\27\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\24\4\1\u012e\3\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\10\4\1\u012f\17\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\3\4\1\u0134\24\4\27\0\2\4\3\0\11\4\1\0"+
-    "\1\4\1\0\1\4\3\0\3\4\1\u0135\24\4\27\0"+
+    "\3\4\1\u0130\24\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\12\4\1\u0131"+
+    "\15\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\3\4\1\u0132\24\4\26\0"+
+    "\1\4\2\0\2\4\3\0\11\4\1\0\1\4\1\0"+
+    "\1\4\3\0\10\4\1\u0133\17\4\26\0\1\4\2\0"+
     "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
-    "\1\u0136\27\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\17\4\1\u0137\10\4\27\0\2\4"+
+    "\3\4\1\u0134\24\4\26\0\1\4\2\0\2\4\3\0"+
+    "\11\4\1\0\1\4\1\0\1\4\3\0\3\4\1\u0135"+
+    "\24\4\26\0\1\4\2\0\2\4\3\0\11\4\1\0"+
+    "\1\4\1\0\1\4\3\0\1\u0136\27\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\17\4\1\u0137\10\4\26\0\1\4\2\0\2\4"+
     "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\3\4"+
-    "\1\u0138\24\4\27\0\2\4\3\0\11\4\1\0\1\4"+
-    "\1\0\1\4\3\0\13\4\1\u0139\14\4\27\0\2\4"+
-    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\1\u013a"+
-    "\27\4\27\0\2\4\3\0\11\4\1\0\1\4\1\0"+
-    "\1\4\3\0\20\4\1\u013b\7\4\27\0\2\4\3\0"+
+    "\1\u0138\24\4\26\0\1\4\2\0\2\4\3\0\11\4"+
+    "\1\0\1\4\1\0\1\4\3\0\13\4\1\u0139\14\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\1\u013a\27\4\26\0\1\4\2\0"+
+    "\2\4\3\0\11\4\1\0\1\4\1\0\1\4\3\0"+
+    "\20\4\1\u013b\7\4\26\0\1\4\2\0\2\4\3\0"+
     "\11\4\1\0\1\4\1\0\1\4\3\0\27\4\1\u013c"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\4\4\1\u013d\23\4\27\0\2\4\3\0\11\4"+
-    "\1\0\1\4\1\0\1\4\3\0\7\4\1\u013e\20\4"+
-    "\27\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
-    "\3\0\3\4\1\u013f\24\4\27\0\2\4\3\0\11\4"+
+    "\26\0\1\4\2\0\2\4\3\0\11\4\1\0\1\4"+
+    "\1\0\1\4\3\0\4\4\1\u013d\23\4\26\0\1\4"+
+    "\2\0\2\4\3\0\11\4\1\0\1\4\1\0\1\4"+
+    "\3\0\7\4\1\u013e\20\4\26\0\1\4\2\0\2\4"+
+    "\3\0\11\4\1\0\1\4\1\0\1\4\3\0\3\4"+
+    "\1\u013f\24\4\26\0\1\4\2\0\2\4\3\0\11\4"+
     "\1\0\1\4\1\0\1\4\3\0\20\4\1\u0140\7\4"+
-    "\25\0";
+    "\26\0\1\4";
 
   private static int [] zzUnpackTrans() {
-    int [] result = new int[15844];
+    int [] result = new int[16310];
     int offset = 0;
     offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
     return result;
@@ -653,13 +734,10 @@ class _JavaLexer implements FlexLexer {
   private static final int ZZ_UNKNOWN_ERROR = 0;
   private static final int ZZ_NO_MATCH = 1;
   private static final int ZZ_PUSHBACK_2BIG = 2;
-  private static final char[] EMPTY_BUFFER = new char[0];
-  private static final int YYEOF = -1;
-  private static java.io.Reader zzReader = null; // Fake
 
   /* error messages for the codes above */
-  private static final String ZZ_ERROR_MSG[] = {
-    "Unkown internal scanner error",
+  private static final String[] ZZ_ERROR_MSG = {
+    "Unknown internal scanner error",
     "Error: could not match input",
     "Error: pushback value was too large"
   };
@@ -695,6 +773,9 @@ class _JavaLexer implements FlexLexer {
     return j;
   }
 
+  /** the input device */
+  private java.io.Reader zzReader;
+
   /** the current state of the DFA */
   private int zzState;
 
@@ -748,7 +829,7 @@ class _JavaLexer implements FlexLexer {
   public void goTo(int offset) {
     zzCurrentPos = zzMarkedPos = zzStartRead = offset;
     zzPushbackPos = 0;
-    zzAtEOF = offset < zzEndRead;
+    zzAtEOF = false;
   }
 
 
@@ -769,10 +850,10 @@ class _JavaLexer implements FlexLexer {
    * @return         the unpacked character translation table
    */
   private static char [] zzUnpackCMap(String packed) {
-    char [] map = new char[0x10000];
+    char [] map = new char[0x110000];
     int i = 0;  /* index in packed string  */
     int j = 0;  /* index in unpacked array */
-    while (i < 2276) {
+    while (i < 2886) {
       int  count = packed.charAt(i++);
       char value = packed.charAt(i++);
       do map[j++] = value; while (--count > 0);
@@ -949,12 +1030,20 @@ class _JavaLexer implements FlexLexer {
 
       zzState = ZZ_LEXSTATE[zzLexicalState];
 
+      // set up zzAction for empty match case:
+      int zzAttributes = zzAttrL[zzState];
+      if ( (zzAttributes & 1) == 1 ) {
+        zzAction = zzState;
+      }
+
 
       zzForAction: {
         while (true) {
 
-          if (zzCurrentPosL < zzEndReadL)
-            zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+          if (zzCurrentPosL < zzEndReadL) {
+            zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+            zzCurrentPosL += Character.charCount(zzInput);
+          }
           else if (zzAtEOF) {
             zzInput = YYEOF;
             break zzForAction;
@@ -974,14 +1063,15 @@ class _JavaLexer implements FlexLexer {
               break zzForAction;
             }
             else {
-              zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+              zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+              zzCurrentPosL += Character.charCount(zzInput);
             }
           }
           int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
           if (zzNext == -1) break zzForAction;
           zzState = zzNext;
 
-          int zzAttributes = zzAttrL[zzState];
+          zzAttributes = zzAttrL[zzState];
           if ( (zzAttributes & 1) == 1 ) {
             zzAction = zzState;
             zzMarkedPosL = zzCurrentPosL;
@@ -994,454 +1084,454 @@ class _JavaLexer implements FlexLexer {
       // store back cached position
       zzMarkedPos = zzMarkedPosL;
 
-      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
-        case 68: 
-          { return JavaTokenType.LONG_KEYWORD;
-          }
-        case 111: break;
-        case 99: 
-          { return JavaTokenType.PRIVATE_KEYWORD;
-          }
-        case 112: break;
-        case 27: 
-          { return JavaTokenType.COMMA;
-          }
-        case 113: break;
-        case 23: 
-          { return JavaTokenType.RBRACE;
-          }
-        case 114: break;
-        case 22: 
-          { return JavaTokenType.LBRACE;
-          }
-        case 115: break;
-        case 65: 
-          { return JavaTokenType.THIS_KEYWORD;
-          }
-        case 116: break;
-        case 83: 
-          { return JavaTokenType.CLASS_KEYWORD;
-          }
-        case 117: break;
-        case 14: 
-          { return JavaTokenType.PLUS;
-          }
-        case 118: break;
-        case 54: 
-          { return JavaTokenType.XOREQ;
-          }
-        case 119: break;
-        case 62: 
-          { return JavaTokenType.INT_KEYWORD;
-          }
-        case 120: break;
-        case 80: 
-          { return JavaTokenType.SHORT_KEYWORD;
-          }
-        case 121: break;
-        case 44: 
-          { return JavaTokenType.EQEQ;
-          }
-        case 122: break;
-        case 67: 
-          { return myEnumKeyword ? JavaTokenType.ENUM_KEYWORD : JavaTokenType.IDENTIFIER;
-          }
-        case 123: break;
-        case 101: 
-          { return JavaTokenType.ABSTRACT_KEYWORD;
-          }
-        case 124: break;
-        case 69: 
-          { return JavaTokenType.NULL_KEYWORD;
-          }
-        case 125: break;
-        case 95: 
-          { return JavaTokenType.EXTENDS_KEYWORD;
-          }
-        case 126: break;
-        case 51: 
-          { return JavaTokenType.LTLT;
-          }
-        case 127: break;
-        case 20: 
-          { return JavaTokenType.LPARENTH;
-          }
-        case 128: break;
-        case 12: 
-          { return JavaTokenType.EXCL;
-          }
-        case 129: break;
-        case 102: 
-          { return JavaTokenType.STRICTFP_KEYWORD;
-          }
-        case 130: break;
-        case 34: 
-          { return JavaTokenType.DIVEQ;
-          }
-        case 131: break;
-        case 89: 
-          { return JavaTokenType.STATIC_KEYWORD;
-          }
-        case 132: break;
-        case 39: 
-          { return JavaTokenType.MINUSMINUS;
-          }
-        case 133: break;
-        case 76: 
-          { return JavaTokenType.FALSE_KEYWORD;
-          }
-        case 134: break;
-        case 1: 
-          { return JavaTokenType.BAD_CHARACTER;
-          }
-        case 135: break;
-        case 90: 
-          { return JavaTokenType.SWITCH_KEYWORD;
-          }
-        case 136: break;
-        case 26: 
-          { return JavaTokenType.SEMICOLON;
-          }
-        case 137: break;
-        case 18: 
-          { return JavaTokenType.XOR;
-          }
-        case 138: break;
-        case 38: 
-          { return JavaTokenType.DOUBLE_LITERAL;
-          }
-        case 139: break;
-        case 46: 
-          { return JavaTokenType.OREQ;
-          }
-        case 140: break;
-        case 11: 
-          { return JavaTokenType.EQ;
-          }
-        case 141: break;
-        case 4: 
-          { return JavaTokenType.DIV;
-          }
-        case 142: break;
-        case 66: 
-          { return JavaTokenType.ELSE_KEYWORD;
-          }
-        case 143: break;
-        case 61: 
-          { return JavaTokenType.NEW_KEYWORD;
-          }
-        case 144: break;
-        case 58: 
-          { return JavaTokenType.ELLIPSIS;
-          }
-        case 145: break;
-        case 53: 
-          { return JavaTokenType.ANDAND;
-          }
-        case 146: break;
-        case 81: 
-          { return JavaTokenType.BREAK_KEYWORD;
-          }
-        case 147: break;
-        case 9: 
-          { return JavaTokenType.CHARACTER_LITERAL;
-          }
-        case 148: break;
-        case 52: 
-          { return JavaTokenType.ANDEQ;
-          }
-        case 149: break;
-        case 6: 
-          { return JavaTokenType.INTEGER_LITERAL;
-          }
-        case 150: break;
-        case 77: 
-          { return JavaTokenType.FLOAT_KEYWORD;
-          }
-        case 151: break;
-        case 10: 
-          { return JavaTokenType.STRING_LITERAL;
-          }
-        case 152: break;
-        case 72: 
-          { return JavaTokenType.CHAR_KEYWORD;
-          }
-        case 153: break;
-        case 91: 
-          { return JavaTokenType.NATIVE_KEYWORD;
-          }
-        case 154: break;
-        case 43: 
-          { return JavaTokenType.DO_KEYWORD;
-          }
-        case 155: break;
-        case 7: 
-          { return JavaTokenType.DOT;
-          }
-        case 156: break;
-        case 28: 
-          { return JavaTokenType.TILDE;
-          }
-        case 157: break;
-        case 110: 
-          { return JavaTokenType.SYNCHRONIZED_KEYWORD;
-          }
-        case 158: break;
-        case 32: 
-          { return JavaTokenType.END_OF_LINE_COMMENT;
-          }
-        case 159: break;
-        case 35: 
-          { return JavaTokenType.ASTERISKEQ;
-          }
-        case 160: break;
-        case 79: 
-          { return JavaTokenType.SUPER_KEYWORD;
-          }
-        case 161: break;
-        case 40: 
-          { return JavaTokenType.MINUSEQ;
-          }
-        case 162: break;
-        case 63: 
-          { return JavaTokenType.LTLTEQ;
-          }
-        case 163: break;
-        case 73: 
-          { return JavaTokenType.GOTO_KEYWORD;
-          }
-        case 164: break;
-        case 25: 
-          { return JavaTokenType.RBRACKET;
-          }
-        case 165: break;
-        case 33: 
-          { return JavaTokenType.C_STYLE_COMMENT;
-          }
-        case 166: break;
-        case 15: 
-          { return JavaTokenType.LT;
-          }
-        case 167: break;
-        case 42: 
-          { return JavaTokenType.IF_KEYWORD;
-          }
-        case 168: break;
-        case 8: 
-          { return JavaTokenType.MINUS;
-          }
-        case 169: break;
-        case 85: 
-          { return JavaTokenType.WHILE_KEYWORD;
-          }
-        case 170: break;
-        case 70: 
-          { return JavaTokenType.BYTE_KEYWORD;
-          }
-        case 171: break;
-        case 96: 
-          { return JavaTokenType.FINALLY_KEYWORD;
-          }
-        case 172: break;
-        case 74: 
-          { return JavaTokenType.VOID_KEYWORD;
-          }
-        case 173: break;
-        case 29: 
-          { return JavaTokenType.QUEST;
-          }
-        case 174: break;
-        case 19: 
-          { return JavaTokenType.PERC;
-          }
-        case 175: break;
-        case 109: 
-          { return JavaTokenType.IMPLEMENTS_KEYWORD;
-          }
-        case 176: break;
-        case 86: 
-          { return JavaTokenType.THROWS_KEYWORD;
-          }
-        case 177: break;
-        case 41: 
-          { return JavaTokenType.ARROW;
-          }
-        case 178: break;
-        case 78: 
-          { return JavaTokenType.FINAL_KEYWORD;
-          }
-        case 179: break;
-        case 93: 
-          { return JavaTokenType.DOUBLE_KEYWORD;
-          }
-        case 180: break;
-        case 88: 
-          { return myAssertKeyword ? JavaTokenType.ASSERT_KEYWORD : JavaTokenType.IDENTIFIER;
-          }
-        case 181: break;
-        case 107: 
-          { return JavaTokenType.PROTECTED_KEYWORD;
-          }
-        case 182: break;
-        case 103: 
-          { return JavaTokenType.CONTINUE_KEYWORD;
-          }
-        case 183: break;
-        case 100: 
-          { return JavaTokenType.PACKAGE_KEYWORD;
-          }
-        case 184: break;
-        case 16: 
-          { return JavaTokenType.GT;
-          }
-        case 185: break;
-        case 24: 
-          { return JavaTokenType.LBRACKET;
-          }
-        case 186: break;
-        case 36: 
-          { return JavaTokenType.LONG_LITERAL;
-          }
-        case 187: break;
-        case 60: 
-          { return JavaTokenType.FOR_KEYWORD;
-          }
-        case 188: break;
-        case 98: 
-          { return JavaTokenType.DEFAULT_KEYWORD;
-          }
-        case 189: break;
-        case 48: 
-          { return JavaTokenType.PLUSEQ;
-          }
-        case 190: break;
-        case 87: 
-          { return JavaTokenType.RETURN_KEYWORD;
-          }
-        case 191: break;
-        case 64: 
-          { return JavaTokenType.TRUE_KEYWORD;
-          }
-        case 192: break;
-        case 49: 
-          { return JavaTokenType.PLUSPLUS;
-          }
-        case 193: break;
-        case 47: 
-          { return JavaTokenType.OROR;
-          }
-        case 194: break;
-        case 13: 
-          { return JavaTokenType.OR;
-          }
-        case 195: break;
-        case 3: 
-          { return JavaTokenType.IDENTIFIER;
-          }
-        case 196: break;
-        case 55: 
-          { return JavaTokenType.PERCEQ;
-          }
-        case 197: break;
-        case 30: 
-          { return JavaTokenType.COLON;
-          }
-        case 198: break;
-        case 104: 
-          { return JavaTokenType.VOLATILE_KEYWORD;
-          }
-        case 199: break;
-        case 106: 
-          { return JavaTokenType.INTERFACE_KEYWORD;
-          }
-        case 200: break;
-        case 108: 
-          { return JavaTokenType.INSTANCEOF_KEYWORD;
-          }
-        case 201: break;
-        case 105: 
-          { return JavaTokenType.TRANSIENT_KEYWORD;
-          }
-        case 202: break;
-        case 97: 
-          { return JavaTokenType.BOOLEAN_KEYWORD;
-          }
-        case 203: break;
-        case 71: 
-          { return JavaTokenType.CASE_KEYWORD;
-          }
-        case 204: break;
-        case 5: 
-          { return JavaTokenType.ASTERISK;
-          }
-        case 205: break;
-        case 92: 
-          { return JavaTokenType.IMPORT_KEYWORD;
-          }
-        case 206: break;
-        case 31: 
-          { return JavaTokenType.AT;
-          }
-        case 207: break;
-        case 45: 
-          { return JavaTokenType.NE;
-          }
-        case 208: break;
-        case 59: 
-          { return JavaTokenType.TRY_KEYWORD;
-          }
-        case 209: break;
-        case 82: 
-          { return JavaTokenType.CATCH_KEYWORD;
-          }
-        case 210: break;
-        case 37: 
-          { return JavaTokenType.FLOAT_LITERAL;
-          }
-        case 211: break;
-        case 17: 
-          { return JavaTokenType.AND;
-          }
-        case 212: break;
-        case 75: 
-          { return JavaTokenType.THROW_KEYWORD;
-          }
-        case 213: break;
-        case 57: 
-          { return JavaDocElementType.DOC_COMMENT;
-          }
-        case 214: break;
-        case 56: 
-          { return JavaTokenType.DOUBLE_COLON;
-          }
-        case 215: break;
-        case 21: 
-          { return JavaTokenType.RPARENTH;
-          }
-        case 216: break;
-        case 2: 
-          { return JavaTokenType.WHITE_SPACE;
-          }
-        case 217: break;
-        case 94: 
-          { return JavaTokenType.PUBLIC_KEYWORD;
-          }
-        case 218: break;
-        case 50: 
-          { return JavaTokenType.LE;
-          }
-        case 219: break;
-        case 84: 
-          { return JavaTokenType.CONST_KEYWORD;
-          }
-        case 220: break;
-        default:
-          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
-            zzAtEOF = true;
-            zzDoEOF();
-            return null;
-          }
-          else {
+      if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+        zzAtEOF = true;
+        zzDoEOF();
+        return null;
+      }
+      else {
+        switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+          case 1: 
+            { return JavaTokenType.BAD_CHARACTER;
+            }
+          case 111: break;
+          case 2: 
+            { return JavaTokenType.WHITE_SPACE;
+            }
+          case 112: break;
+          case 3: 
+            { return JavaTokenType.IDENTIFIER;
+            }
+          case 113: break;
+          case 4: 
+            { return JavaTokenType.DIV;
+            }
+          case 114: break;
+          case 5: 
+            { return JavaTokenType.ASTERISK;
+            }
+          case 115: break;
+          case 6: 
+            { return JavaTokenType.INTEGER_LITERAL;
+            }
+          case 116: break;
+          case 7: 
+            { return JavaTokenType.DOT;
+            }
+          case 117: break;
+          case 8: 
+            { return JavaTokenType.MINUS;
+            }
+          case 118: break;
+          case 9: 
+            { return JavaTokenType.CHARACTER_LITERAL;
+            }
+          case 119: break;
+          case 10: 
+            { return JavaTokenType.STRING_LITERAL;
+            }
+          case 120: break;
+          case 11: 
+            { return JavaTokenType.EQ;
+            }
+          case 121: break;
+          case 12: 
+            { return JavaTokenType.EXCL;
+            }
+          case 122: break;
+          case 13: 
+            { return JavaTokenType.OR;
+            }
+          case 123: break;
+          case 14: 
+            { return JavaTokenType.PLUS;
+            }
+          case 124: break;
+          case 15: 
+            { return JavaTokenType.LT;
+            }
+          case 125: break;
+          case 16: 
+            { return JavaTokenType.GT;
+            }
+          case 126: break;
+          case 17: 
+            { return JavaTokenType.AND;
+            }
+          case 127: break;
+          case 18: 
+            { return JavaTokenType.XOR;
+            }
+          case 128: break;
+          case 19: 
+            { return JavaTokenType.PERC;
+            }
+          case 129: break;
+          case 20: 
+            { return JavaTokenType.LPARENTH;
+            }
+          case 130: break;
+          case 21: 
+            { return JavaTokenType.RPARENTH;
+            }
+          case 131: break;
+          case 22: 
+            { return JavaTokenType.LBRACE;
+            }
+          case 132: break;
+          case 23: 
+            { return JavaTokenType.RBRACE;
+            }
+          case 133: break;
+          case 24: 
+            { return JavaTokenType.LBRACKET;
+            }
+          case 134: break;
+          case 25: 
+            { return JavaTokenType.RBRACKET;
+            }
+          case 135: break;
+          case 26: 
+            { return JavaTokenType.SEMICOLON;
+            }
+          case 136: break;
+          case 27: 
+            { return JavaTokenType.COMMA;
+            }
+          case 137: break;
+          case 28: 
+            { return JavaTokenType.TILDE;
+            }
+          case 138: break;
+          case 29: 
+            { return JavaTokenType.QUEST;
+            }
+          case 139: break;
+          case 30: 
+            { return JavaTokenType.COLON;
+            }
+          case 140: break;
+          case 31: 
+            { return JavaTokenType.AT;
+            }
+          case 141: break;
+          case 32: 
+            { return JavaTokenType.END_OF_LINE_COMMENT;
+            }
+          case 142: break;
+          case 33: 
+            { return JavaTokenType.C_STYLE_COMMENT;
+            }
+          case 143: break;
+          case 34: 
+            { return JavaTokenType.DIVEQ;
+            }
+          case 144: break;
+          case 35: 
+            { return JavaTokenType.ASTERISKEQ;
+            }
+          case 145: break;
+          case 36: 
+            { return JavaTokenType.LONG_LITERAL;
+            }
+          case 146: break;
+          case 37: 
+            { return JavaTokenType.FLOAT_LITERAL;
+            }
+          case 147: break;
+          case 38: 
+            { return JavaTokenType.DOUBLE_LITERAL;
+            }
+          case 148: break;
+          case 39: 
+            { return JavaTokenType.MINUSMINUS;
+            }
+          case 149: break;
+          case 40: 
+            { return JavaTokenType.MINUSEQ;
+            }
+          case 150: break;
+          case 41: 
+            { return JavaTokenType.ARROW;
+            }
+          case 151: break;
+          case 42: 
+            { return JavaTokenType.IF_KEYWORD;
+            }
+          case 152: break;
+          case 43: 
+            { return JavaTokenType.DO_KEYWORD;
+            }
+          case 153: break;
+          case 44: 
+            { return JavaTokenType.EQEQ;
+            }
+          case 154: break;
+          case 45: 
+            { return JavaTokenType.NE;
+            }
+          case 155: break;
+          case 46: 
+            { return JavaTokenType.OREQ;
+            }
+          case 156: break;
+          case 47: 
+            { return JavaTokenType.OROR;
+            }
+          case 157: break;
+          case 48: 
+            { return JavaTokenType.PLUSEQ;
+            }
+          case 158: break;
+          case 49: 
+            { return JavaTokenType.PLUSPLUS;
+            }
+          case 159: break;
+          case 50: 
+            { return JavaTokenType.LE;
+            }
+          case 160: break;
+          case 51: 
+            { return JavaTokenType.LTLT;
+            }
+          case 161: break;
+          case 52: 
+            { return JavaTokenType.ANDEQ;
+            }
+          case 162: break;
+          case 53: 
+            { return JavaTokenType.ANDAND;
+            }
+          case 163: break;
+          case 54: 
+            { return JavaTokenType.XOREQ;
+            }
+          case 164: break;
+          case 55: 
+            { return JavaTokenType.PERCEQ;
+            }
+          case 165: break;
+          case 56: 
+            { return JavaTokenType.DOUBLE_COLON;
+            }
+          case 166: break;
+          case 57: 
+            { return JavaDocElementType.DOC_COMMENT;
+            }
+          case 167: break;
+          case 58: 
+            { return JavaTokenType.ELLIPSIS;
+            }
+          case 168: break;
+          case 59: 
+            { return JavaTokenType.TRY_KEYWORD;
+            }
+          case 169: break;
+          case 60: 
+            { return JavaTokenType.FOR_KEYWORD;
+            }
+          case 170: break;
+          case 61: 
+            { return JavaTokenType.NEW_KEYWORD;
+            }
+          case 171: break;
+          case 62: 
+            { return JavaTokenType.INT_KEYWORD;
+            }
+          case 172: break;
+          case 63: 
+            { return JavaTokenType.LTLTEQ;
+            }
+          case 173: break;
+          case 64: 
+            { return JavaTokenType.TRUE_KEYWORD;
+            }
+          case 174: break;
+          case 65: 
+            { return JavaTokenType.THIS_KEYWORD;
+            }
+          case 175: break;
+          case 66: 
+            { return JavaTokenType.ELSE_KEYWORD;
+            }
+          case 176: break;
+          case 67: 
+            { return myEnumKeyword ? JavaTokenType.ENUM_KEYWORD : JavaTokenType.IDENTIFIER;
+            }
+          case 177: break;
+          case 68: 
+            { return JavaTokenType.LONG_KEYWORD;
+            }
+          case 178: break;
+          case 69: 
+            { return JavaTokenType.NULL_KEYWORD;
+            }
+          case 179: break;
+          case 70: 
+            { return JavaTokenType.BYTE_KEYWORD;
+            }
+          case 180: break;
+          case 71: 
+            { return JavaTokenType.CASE_KEYWORD;
+            }
+          case 181: break;
+          case 72: 
+            { return JavaTokenType.CHAR_KEYWORD;
+            }
+          case 182: break;
+          case 73: 
+            { return JavaTokenType.GOTO_KEYWORD;
+            }
+          case 183: break;
+          case 74: 
+            { return JavaTokenType.VOID_KEYWORD;
+            }
+          case 184: break;
+          case 75: 
+            { return JavaTokenType.THROW_KEYWORD;
+            }
+          case 185: break;
+          case 76: 
+            { return JavaTokenType.FALSE_KEYWORD;
+            }
+          case 186: break;
+          case 77: 
+            { return JavaTokenType.FLOAT_KEYWORD;
+            }
+          case 187: break;
+          case 78: 
+            { return JavaTokenType.FINAL_KEYWORD;
+            }
+          case 188: break;
+          case 79: 
+            { return JavaTokenType.SUPER_KEYWORD;
+            }
+          case 189: break;
+          case 80: 
+            { return JavaTokenType.SHORT_KEYWORD;
+            }
+          case 190: break;
+          case 81: 
+            { return JavaTokenType.BREAK_KEYWORD;
+            }
+          case 191: break;
+          case 82: 
+            { return JavaTokenType.CATCH_KEYWORD;
+            }
+          case 192: break;
+          case 83: 
+            { return JavaTokenType.CLASS_KEYWORD;
+            }
+          case 193: break;
+          case 84: 
+            { return JavaTokenType.CONST_KEYWORD;
+            }
+          case 194: break;
+          case 85: 
+            { return JavaTokenType.WHILE_KEYWORD;
+            }
+          case 195: break;
+          case 86: 
+            { return JavaTokenType.THROWS_KEYWORD;
+            }
+          case 196: break;
+          case 87: 
+            { return JavaTokenType.RETURN_KEYWORD;
+            }
+          case 197: break;
+          case 88: 
+            { return myAssertKeyword ? JavaTokenType.ASSERT_KEYWORD : JavaTokenType.IDENTIFIER;
+            }
+          case 198: break;
+          case 89: 
+            { return JavaTokenType.STATIC_KEYWORD;
+            }
+          case 199: break;
+          case 90: 
+            { return JavaTokenType.SWITCH_KEYWORD;
+            }
+          case 200: break;
+          case 91: 
+            { return JavaTokenType.NATIVE_KEYWORD;
+            }
+          case 201: break;
+          case 92: 
+            { return JavaTokenType.IMPORT_KEYWORD;
+            }
+          case 202: break;
+          case 93: 
+            { return JavaTokenType.DOUBLE_KEYWORD;
+            }
+          case 203: break;
+          case 94: 
+            { return JavaTokenType.PUBLIC_KEYWORD;
+            }
+          case 204: break;
+          case 95: 
+            { return JavaTokenType.EXTENDS_KEYWORD;
+            }
+          case 205: break;
+          case 96: 
+            { return JavaTokenType.FINALLY_KEYWORD;
+            }
+          case 206: break;
+          case 97: 
+            { return JavaTokenType.BOOLEAN_KEYWORD;
+            }
+          case 207: break;
+          case 98: 
+            { return JavaTokenType.DEFAULT_KEYWORD;
+            }
+          case 208: break;
+          case 99: 
+            { return JavaTokenType.PRIVATE_KEYWORD;
+            }
+          case 209: break;
+          case 100: 
+            { return JavaTokenType.PACKAGE_KEYWORD;
+            }
+          case 210: break;
+          case 101: 
+            { return JavaTokenType.ABSTRACT_KEYWORD;
+            }
+          case 211: break;
+          case 102: 
+            { return JavaTokenType.STRICTFP_KEYWORD;
+            }
+          case 212: break;
+          case 103: 
+            { return JavaTokenType.CONTINUE_KEYWORD;
+            }
+          case 213: break;
+          case 104: 
+            { return JavaTokenType.VOLATILE_KEYWORD;
+            }
+          case 214: break;
+          case 105: 
+            { return JavaTokenType.TRANSIENT_KEYWORD;
+            }
+          case 215: break;
+          case 106: 
+            { return JavaTokenType.INTERFACE_KEYWORD;
+            }
+          case 216: break;
+          case 107: 
+            { return JavaTokenType.PROTECTED_KEYWORD;
+            }
+          case 217: break;
+          case 108: 
+            { return JavaTokenType.INSTANCEOF_KEYWORD;
+            }
+          case 218: break;
+          case 109: 
+            { return JavaTokenType.IMPLEMENTS_KEYWORD;
+            }
+          case 219: break;
+          case 110: 
+            { return JavaTokenType.SYNCHRONIZED_KEYWORD;
+            }
+          case 220: break;
+          default:
             zzScanError(ZZ_NO_MATCH);
           }
       }
index 437cb8e506e3fa31c3e10949d176a8c7d49ccdb3..d69efd67cc30027463447a8c0cb09071b018d4ab 100644 (file)
@@ -25,8 +25,7 @@ import com.intellij.psi.tree.IElementType;
 
   public void goTo(int offset) {
     zzCurrentPos = zzMarkedPos = zzStartRead = offset;
-    zzPushbackPos = 0;
-    zzAtEOF = offset < zzEndRead;
+    zzAtEOF = false;
   }
 %}
 
index c3c03407aa98b5ea2bcb39a9941e14f566338414..4329534a2b1704a2d12abc3eb01be1812011837a 100644 (file)
@@ -36,8 +36,7 @@ import com.intellij.lexer.FlexLexer;
 
   public void goTo(int offset) {
     zzCurrentPos = zzMarkedPos = zzStartRead = offset;
-    zzPushbackPos = 0;
-    zzAtEOF = offset < zzEndRead;
+    zzAtEOF = false;
   }
 %}
 
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterMultipleConstructorsWithOneCandidateWithCorrectParamNumber.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterMultipleConstructorsWithOneCandidateWithCorrectParamNumber.java
new file mode 100644 (file)
index 0000000..fd8855b
--- /dev/null
@@ -0,0 +1,9 @@
+// "<html> Change signature of X(<b>String</b>)</html>" "true"
+class X {
+  X(Integer i) {}
+  X(String s) {}
+
+  public static void main(String[] args) {
+    new X("");
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeMultipleConstructorsWithOneCandidateWithCorrectParamNumber.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeMultipleConstructorsWithOneCandidateWithCorrectParamNumber.java
new file mode 100644 (file)
index 0000000..e1a616e
--- /dev/null
@@ -0,0 +1,9 @@
+// "<html> Change signature of X(<b>String</b>)</html>" "true"
+class X {
+  X(Integer i) {}
+  X() {}
+
+  public static void main(String[] args) {
+    new X("<caret>");
+  }
+}
\ No newline at end of file
index 26ed13e116357e9168d4be0df9fb605652be080d..319e3173ea8343cede8157e0c84f9d8c50a477c2 100644 (file)
@@ -70,7 +70,7 @@ class StateGetter<S : Any, T : Any>(private val component: PersistentStateCompon
     if (ApplicationManager.getApplication().isUnitTestMode &&
       serializedState != serializedStateAfterLoad &&
       (serializedStateAfterLoad == null || !JDOMUtil.areElementsEqual(serializedState, serializedStateAfterLoad))) {
-      LOG.warn("$componentName state changed after load. \nOld: ${JDOMUtil.writeElement(serializedState!!)}\n\nNew: ${serializedStateAfterLoad?.let { JDOMUtil.writeElement(it) } ?: "null"}\n")
+      LOG.warn("$componentName (from ${component.javaClass.name}) state changed after load. \nOld: ${JDOMUtil.writeElement(serializedState!!)}\n\nNew: ${serializedStateAfterLoad?.let { JDOMUtil.writeElement(it) } ?: "null"}\n")
     }
 
     storage.archiveState(storageData, componentName, serializedStateAfterLoad)
index 4908841292438acb68df75c430b63320df8c54e0..d5180cd4a178a0c2c6dc927b22fc156b0e9b4556 100644 (file)
@@ -223,4 +223,9 @@ public abstract class PsiReferenceBase<T extends PsiElement> implements PsiRefer
       return EMPTY_ARRAY;
     }
   }
+
+  @Override
+  public String toString() {
+    return myElement + ":" + myRangeInElement;
+  }
 }
index afc8892d017a855d1e6006b8a90a5ec9d4e19d38..2e84e4af01162885dad4538141046655ca9fbbaa 100644 (file)
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.3 on 4/26/14 1:30 PM */
+/* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */
 
 /* It's an automatically generated code. Do not modify it. */
 package com.intellij.codeInsight.template.impl;
@@ -10,11 +10,14 @@ import com.intellij.lexer.FlexLexer;
 
 /**
  * This class is a scanner generated by 
- * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
- * on 4/26/14 1:30 PM from the specification file
- * <tt>/Users/ignatov/src/ultimate/tools/lexer/../../community/platform/lang-impl/src/com/intellij/codeInsight/template/impl/_MacroLexer.flex</tt>
+ * <a href="http://www.jflex.de/">JFlex</a> 1.7.0-SNAPSHOT
+ * from the specification file <tt>/ideadev/tools/lexer/../../community/platform/lang-impl/src/com/intellij/codeInsight/template/impl/_MacroLexer.flex</tt>
  */
 class _MacroLexer implements FlexLexer {
+
+  /** This character denotes the end of file */
+  public static final int YYEOF = -1;
+
   /** initial size of the lookahead buffer */
   private static final int ZZ_BUFFERSIZE = 16384;
 
@@ -35,91 +38,145 @@ class _MacroLexer implements FlexLexer {
    * Translates characters to character classes
    */
   private static final String ZZ_CMAP_PACKED = 
-    "\11\2\1\3\1\6\1\0\1\3\1\6\16\2\4\0\1\3\1\0"+
+    "\11\2\1\3\1\6\1\13\1\3\1\6\16\2\4\0\1\3\1\0"+
     "\1\4\1\0\1\1\3\0\1\7\1\10\2\0\1\11\3\0\12\2"+
     "\3\0\1\12\3\0\32\1\1\0\1\5\2\0\1\1\1\0\32\1"+
-    "\4\0\41\2\2\0\4\1\4\0\1\1\2\0\1\2\7\0\1\1"+
-    "\4\0\1\1\5\0\27\1\1\0\37\1\1\0\u013f\1\31\0\162\1"+
-    "\4\0\14\1\16\0\5\1\11\0\1\1\21\0\130\2\5\0\23\2"+
-    "\12\0\1\1\13\0\1\1\1\0\3\1\1\0\1\1\1\0\24\1"+
-    "\1\0\54\1\1\0\46\1\1\0\5\1\4\0\202\1\1\0\4\2"+
-    "\3\0\105\1\1\0\46\1\2\0\2\1\6\0\20\1\41\0\46\1"+
-    "\2\0\1\1\7\0\47\1\11\0\21\2\1\0\27\2\1\0\3\2"+
-    "\1\0\1\2\1\0\2\2\1\0\1\2\13\0\33\1\5\0\3\1"+
-    "\15\0\4\2\14\0\6\2\13\0\32\1\5\0\13\1\16\2\7\0"+
-    "\12\2\4\0\2\1\1\2\143\1\1\0\1\1\10\2\1\0\6\2"+
-    "\2\1\2\2\1\0\4\2\2\1\12\2\3\1\2\0\1\1\17\0"+
-    "\1\2\1\1\1\2\36\1\33\2\2\0\3\1\60\0\46\1\13\2"+
-    "\1\1\u014f\0\3\2\66\1\2\0\1\2\1\1\20\2\2\0\1\1"+
-    "\4\2\3\0\12\1\2\2\2\0\12\2\21\0\3\2\1\0\10\1"+
-    "\2\0\2\1\2\0\26\1\1\0\7\1\1\0\1\1\3\0\4\1"+
-    "\2\0\1\2\1\1\7\2\2\0\2\2\2\0\3\2\11\0\1\2"+
-    "\4\0\2\1\1\0\3\1\2\2\2\0\12\2\4\1\15\0\3\2"+
-    "\1\0\6\1\4\0\2\1\2\0\26\1\1\0\7\1\1\0\2\1"+
-    "\1\0\2\1\1\0\2\1\2\0\1\2\1\0\5\2\4\0\2\2"+
-    "\2\0\3\2\13\0\4\1\1\0\1\1\7\0\14\2\3\1\14\0"+
-    "\3\2\1\0\11\1\1\0\3\1\1\0\26\1\1\0\7\1\1\0"+
-    "\2\1\1\0\5\1\2\0\1\2\1\1\10\2\1\0\3\2\1\0"+
-    "\3\2\2\0\1\1\17\0\2\1\2\2\2\0\12\2\1\0\1\1"+
-    "\17\0\3\2\1\0\10\1\2\0\2\1\2\0\26\1\1\0\7\1"+
-    "\1\0\2\1\1\0\5\1\2\0\1\2\1\1\6\2\3\0\2\2"+
-    "\2\0\3\2\10\0\2\2\4\0\2\1\1\0\3\1\4\0\12\2"+
-    "\1\0\1\1\20\0\1\2\1\1\1\0\6\1\3\0\3\1\1\0"+
-    "\4\1\3\0\2\1\1\0\1\1\1\0\2\1\3\0\2\1\3\0"+
-    "\3\1\3\0\10\1\1\0\3\1\4\0\5\2\3\0\3\2\1\0"+
-    "\4\2\11\0\1\2\17\0\11\2\11\0\1\1\7\0\3\2\1\0"+
-    "\10\1\1\0\3\1\1\0\27\1\1\0\12\1\1\0\5\1\4\0"+
-    "\7\2\1\0\3\2\1\0\4\2\7\0\2\2\11\0\2\1\4\0"+
-    "\12\2\22\0\2\2\1\0\10\1\1\0\3\1\1\0\27\1\1\0"+
-    "\12\1\1\0\5\1\2\0\1\2\1\1\7\2\1\0\3\2\1\0"+
-    "\4\2\7\0\2\2\7\0\1\1\1\0\2\1\4\0\12\2\22\0"+
-    "\2\2\1\0\10\1\1\0\3\1\1\0\27\1\1\0\20\1\4\0"+
-    "\6\2\2\0\3\2\1\0\4\2\11\0\1\2\10\0\2\1\4\0"+
-    "\12\2\22\0\2\2\1\0\22\1\3\0\30\1\1\0\11\1\1\0"+
-    "\1\1\2\0\7\1\3\0\1\2\4\0\6\2\1\0\1\2\1\0"+
-    "\10\2\22\0\2\2\15\0\60\1\1\2\2\1\7\2\4\0\10\1"+
-    "\10\2\1\0\12\2\47\0\2\1\1\0\1\1\2\0\2\1\1\0"+
-    "\1\1\2\0\1\1\6\0\4\1\1\0\7\1\1\0\3\1\1\0"+
-    "\1\1\1\0\1\1\2\0\2\1\1\0\4\1\1\2\2\1\6\2"+
-    "\1\0\2\2\1\1\2\0\5\1\1\0\1\1\1\0\6\2\2\0"+
-    "\12\2\2\0\2\1\42\0\1\1\27\0\2\2\6\0\12\2\13\0"+
-    "\1\2\1\0\1\2\1\0\1\2\4\0\2\2\10\1\1\0\42\1"+
-    "\6\0\24\2\1\0\2\2\4\1\4\0\10\2\1\0\44\2\11\0"+
-    "\1\2\71\0\42\1\1\0\5\1\1\0\2\1\1\0\7\2\3\0"+
-    "\4\2\6\0\12\2\6\0\6\1\4\2\106\0\46\1\12\0\51\1"+
-    "\7\0\132\1\5\0\104\1\5\0\122\1\6\0\7\1\1\0\77\1"+
-    "\1\0\1\1\1\0\4\1\2\0\7\1\1\0\1\1\1\0\4\1"+
-    "\2\0\47\1\1\0\1\1\1\0\4\1\2\0\37\1\1\0\1\1"+
-    "\1\0\4\1\2\0\7\1\1\0\1\1\1\0\4\1\2\0\7\1"+
-    "\1\0\7\1\1\0\27\1\1\0\37\1\1\0\1\1\1\0\4\1"+
-    "\2\0\7\1\1\0\47\1\1\0\23\1\16\0\11\2\56\0\125\1"+
-    "\14\0\u026c\1\2\0\10\1\12\0\32\1\5\0\113\1\3\0\3\1"+
-    "\17\0\15\1\1\0\4\1\3\2\13\0\22\1\3\2\13\0\22\1"+
-    "\2\2\14\0\15\1\1\0\3\1\1\0\2\2\14\0\64\1\40\2"+
-    "\3\0\1\1\3\0\2\1\1\2\2\0\12\2\41\0\3\2\2\0"+
-    "\12\2\6\0\130\1\10\0\51\1\1\2\126\0\35\1\3\0\14\2"+
-    "\4\0\14\2\12\0\12\2\36\1\2\0\5\1\u038b\0\154\1\224\0"+
-    "\234\1\4\0\132\1\6\0\26\1\2\0\6\1\2\0\46\1\2\0"+
-    "\6\1\2\0\10\1\1\0\1\1\1\0\1\1\1\0\1\1\1\0"+
-    "\37\1\2\0\65\1\1\0\7\1\1\0\1\1\3\0\3\1\1\0"+
-    "\7\1\3\0\4\1\2\0\6\1\4\0\15\1\5\0\3\1\1\0"+
-    "\7\1\17\0\4\2\32\0\5\2\20\0\2\1\23\0\1\1\13\0"+
-    "\4\2\6\0\6\2\1\0\1\1\15\0\1\1\40\0\22\1\36\0"+
-    "\15\2\4\0\1\2\3\0\6\2\27\0\1\1\4\0\1\1\2\0"+
+    "\4\0\6\2\1\14\32\2\2\0\4\1\4\0\1\1\2\0\1\2"+
+    "\7\0\1\1\4\0\1\1\5\0\27\1\1\0\37\1\1\0\u01ca\1"+
+    "\4\0\14\1\16\0\5\1\7\0\1\1\1\0\1\1\21\0\160\2"+
+    "\5\1\1\0\2\1\2\0\4\1\10\0\1\1\1\0\3\1\1\0"+
+    "\1\1\1\0\24\1\1\0\123\1\1\0\213\1\1\0\5\2\2\0"+
+    "\236\1\11\0\46\1\2\0\1\1\7\0\47\1\7\0\1\1\1\0"+
+    "\55\2\1\0\1\2\1\0\2\2\1\0\2\2\1\0\1\2\10\0"+
+    "\33\1\5\0\3\1\15\0\5\2\6\0\1\1\4\0\13\2\5\0"+
+    "\53\1\37\2\4\0\2\1\1\2\143\1\1\0\1\1\10\2\1\0"+
+    "\6\2\2\1\2\2\1\0\4\2\2\1\12\2\3\1\2\0\1\1"+
+    "\17\0\1\2\1\1\1\2\36\1\33\2\2\0\131\1\13\2\1\1"+
+    "\16\0\12\2\41\1\11\2\2\1\4\0\1\1\5\0\26\1\4\2"+
+    "\1\1\11\2\1\1\3\2\1\1\5\2\22\0\31\1\3\2\104\0"+
+    "\1\1\1\0\13\1\67\0\33\2\1\0\4\2\66\1\3\2\1\1"+
+    "\22\2\1\1\7\2\12\1\2\2\2\0\12\2\1\0\7\1\1\0"+
+    "\7\1\1\0\3\2\1\0\10\1\2\0\2\1\2\0\26\1\1\0"+
+    "\7\1\1\0\1\1\3\0\4\1\2\0\1\2\1\1\7\2\2\0"+
+    "\2\2\2\0\3\2\1\1\10\0\1\2\4\0\2\1\1\0\3\1"+
+    "\2\2\2\0\12\2\4\1\7\0\1\1\5\0\3\2\1\0\6\1"+
+    "\4\0\2\1\2\0\26\1\1\0\7\1\1\0\2\1\1\0\2\1"+
+    "\1\0\2\1\2\0\1\2\1\0\5\2\4\0\2\2\2\0\3\2"+
+    "\3\0\1\2\7\0\4\1\1\0\1\1\7\0\14\2\3\1\1\2"+
+    "\13\0\3\2\1\0\11\1\1\0\3\1\1\0\26\1\1\0\7\1"+
+    "\1\0\2\1\1\0\5\1\2\0\1\2\1\1\10\2\1\0\3\2"+
+    "\1\0\3\2\2\0\1\1\17\0\2\1\2\2\2\0\12\2\1\0"+
+    "\1\1\17\0\3\2\1\0\10\1\2\0\2\1\2\0\26\1\1\0"+
+    "\7\1\1\0\2\1\1\0\5\1\2\0\1\2\1\1\7\2\2\0"+
+    "\2\2\2\0\3\2\10\0\2\2\4\0\2\1\1\0\3\1\2\2"+
+    "\2\0\12\2\1\0\1\1\20\0\1\2\1\1\1\0\6\1\3\0"+
+    "\3\1\1\0\4\1\3\0\2\1\1\0\1\1\1\0\2\1\3\0"+
+    "\2\1\3\0\3\1\3\0\14\1\4\0\5\2\3\0\3\2\1\0"+
+    "\4\2\2\0\1\1\6\0\1\2\16\0\12\2\11\0\1\1\7\0"+
+    "\3\2\1\0\10\1\1\0\3\1\1\0\27\1\1\0\12\1\1\0"+
+    "\5\1\3\0\1\1\7\2\1\0\3\2\1\0\4\2\7\0\2\2"+
+    "\1\0\2\1\6\0\2\1\2\2\2\0\12\2\22\0\2\2\1\0"+
+    "\10\1\1\0\3\1\1\0\27\1\1\0\12\1\1\0\5\1\2\0"+
+    "\1\2\1\1\7\2\1\0\3\2\1\0\4\2\7\0\2\2\7\0"+
+    "\1\1\1\0\2\1\2\2\2\0\12\2\1\0\2\1\17\0\2\2"+
+    "\1\0\10\1\1\0\3\1\1\0\51\1\2\0\1\1\7\2\1\0"+
+    "\3\2\1\0\4\2\1\1\10\0\1\2\10\0\2\1\2\2\2\0"+
+    "\12\2\12\0\6\1\2\0\2\2\1\0\22\1\3\0\30\1\1\0"+
+    "\11\1\1\0\1\1\2\0\7\1\3\0\1\2\4\0\6\2\1\0"+
+    "\1\2\1\0\10\2\22\0\2\2\15\0\60\1\1\2\2\1\7\2"+
+    "\4\0\10\1\10\2\1\0\12\2\47\0\2\1\1\0\1\1\2\0"+
+    "\2\1\1\0\1\1\2\0\1\1\6\0\4\1\1\0\7\1\1\0"+
+    "\3\1\1\0\1\1\1\0\1\1\2\0\2\1\1\0\4\1\1\2"+
+    "\2\1\6\2\1\0\2\2\1\1\2\0\5\1\1\0\1\1\1\0"+
+    "\6\2\2\0\12\2\2\0\4\1\40\0\1\1\27\0\2\2\6\0"+
+    "\12\2\13\0\1\2\1\0\1\2\1\0\1\2\4\0\2\2\10\1"+
+    "\1\0\44\1\4\0\24\2\1\0\2\2\5\1\13\2\1\0\44\2"+
+    "\11\0\1\2\71\0\53\1\24\2\1\1\12\2\6\0\6\1\4\2"+
+    "\4\1\3\2\1\1\3\2\2\1\7\2\3\1\4\2\15\1\14\2"+
+    "\1\1\17\2\2\0\46\1\1\0\1\1\5\0\1\1\2\0\53\1"+
+    "\1\0\u014d\1\1\0\4\1\2\0\7\1\1\0\1\1\1\0\4\1"+
+    "\2\0\51\1\1\0\4\1\2\0\41\1\1\0\4\1\2\0\7\1"+
+    "\1\0\1\1\1\0\4\1\2\0\17\1\1\0\71\1\1\0\4\1"+
+    "\2\0\103\1\2\0\3\2\40\0\20\1\20\0\125\1\14\0\u026c\1"+
+    "\2\0\21\1\1\0\32\1\5\0\113\1\3\0\3\1\17\0\15\1"+
+    "\1\0\4\1\3\2\13\0\22\1\3\2\13\0\22\1\2\2\14\0"+
+    "\15\1\1\0\3\1\1\0\2\2\14\0\64\1\40\2\3\0\1\1"+
+    "\3\0\2\1\1\2\2\0\12\2\41\0\3\2\2\0\12\2\6\0"+
+    "\130\1\10\0\51\1\1\2\1\1\5\0\106\1\12\0\35\1\3\0"+
+    "\14\2\4\0\14\2\12\0\12\2\36\1\2\0\5\1\13\0\54\1"+
+    "\4\0\21\2\7\1\2\2\6\0\12\2\46\0\27\1\5\2\4\0"+
+    "\65\1\12\2\1\0\35\2\2\0\13\2\6\0\12\2\15\0\1\1"+
+    "\130\0\5\2\57\1\21\2\7\1\4\0\12\2\21\0\11\2\14\0"+
+    "\3\2\36\1\15\2\2\1\12\2\54\1\16\2\14\0\44\1\24\2"+
+    "\10\0\12\2\3\0\3\1\12\2\44\1\122\0\3\2\1\0\25\2"+
+    "\4\1\1\2\4\1\3\2\2\1\11\0\300\1\47\2\25\0\4\2"+
+    "\u0116\1\2\0\6\1\2\0\46\1\2\0\6\1\2\0\10\1\1\0"+
+    "\1\1\1\0\1\1\1\0\1\1\1\0\37\1\2\0\65\1\1\0"+
+    "\7\1\1\0\1\1\3\0\3\1\1\0\7\1\3\0\4\1\2\0"+
+    "\6\1\4\0\15\1\5\0\3\1\1\0\7\1\16\0\5\2\30\0"+
+    "\1\13\1\13\5\2\20\0\2\1\23\0\1\1\13\0\5\2\5\0"+
+    "\6\2\1\0\1\1\15\0\1\1\20\0\15\1\3\0\33\1\25\0"+
+    "\15\2\4\0\1\2\3\0\14\2\21\0\1\1\4\0\1\1\2\0"+
     "\12\1\1\0\1\1\3\0\5\1\6\0\1\1\1\0\1\1\1\0"+
-    "\1\1\1\0\4\1\1\0\3\1\1\0\7\1\3\0\3\1\5\0"+
-    "\5\1\26\0\44\1\u0e81\0\3\1\31\0\11\1\6\2\1\0\5\1"+
-    "\2\0\5\1\4\0\126\1\2\0\2\2\2\0\3\1\1\0\137\1"+
-    "\5\0\50\1\4\0\136\1\21\0\30\1\70\0\20\1\u0200\0\u19b6\1"+
-    "\112\0\u51a6\1\132\0\u048d\1\u0773\0\u2ba4\1\u215c\0\u012e\1\2\0\73\1"+
-    "\225\0\7\1\14\0\5\1\5\0\1\1\1\2\12\1\1\0\15\1"+
+    "\1\1\1\0\4\1\1\0\13\1\2\0\4\1\5\0\5\1\4\0"+
+    "\1\1\21\0\51\1\u0a77\0\57\1\1\0\57\1\1\0\205\1\6\0"+
+    "\4\1\3\2\2\1\14\0\46\1\1\0\1\1\5\0\1\1\2\0"+
+    "\70\1\7\0\1\1\17\0\1\2\27\1\11\0\7\1\1\0\7\1"+
+    "\1\0\7\1\1\0\7\1\1\0\7\1\1\0\7\1\1\0\7\1"+
+    "\1\0\7\1\1\0\40\2\57\0\1\1\u01d5\0\3\1\31\0\11\1"+
+    "\6\2\1\0\5\1\2\0\5\1\4\0\126\1\2\0\2\2\2\0"+
+    "\3\1\1\0\132\1\1\0\4\1\5\0\51\1\3\0\136\1\21\0"+
+    "\33\1\65\0\20\1\u0200\0\u19b6\1\112\0\u51cd\1\63\0\u048d\1\103\0"+
+    "\56\1\2\0\u010d\1\3\0\20\1\12\2\2\1\24\0\57\1\1\2"+
+    "\4\0\12\2\1\0\31\1\7\0\1\2\120\1\2\2\45\0\11\1"+
+    "\2\0\147\1\2\0\4\1\1\0\4\1\14\0\13\1\115\0\12\1"+
+    "\1\2\3\1\1\2\4\1\1\2\27\1\5\2\20\0\1\1\7\0"+
+    "\64\1\14\0\2\2\62\1\21\2\13\0\12\2\6\0\22\2\6\1"+
+    "\3\0\1\1\4\0\12\2\34\1\10\2\2\0\27\1\15\2\14\0"+
+    "\35\1\3\0\4\2\57\1\16\2\16\0\1\1\12\2\46\0\51\1"+
+    "\16\2\11\0\3\1\1\2\10\1\2\2\2\0\12\2\6\0\27\1"+
+    "\3\0\1\1\1\2\4\0\60\1\1\2\1\1\3\2\2\1\2\2"+
+    "\5\1\2\2\1\1\1\2\1\1\30\0\3\1\2\0\13\1\5\2"+
+    "\2\0\3\1\2\2\12\0\6\1\2\0\6\1\2\0\6\1\11\0"+
+    "\7\1\1\0\7\1\221\0\43\1\10\2\1\0\2\2\2\0\12\2"+
+    "\6\0\u2ba4\1\14\0\27\1\4\0\61\1\u2104\0\u016e\1\2\0\152\1"+
+    "\46\0\7\1\14\0\5\1\5\0\1\1\1\2\12\1\1\0\15\1"+
     "\1\0\5\1\1\0\1\1\1\0\2\1\1\0\2\1\1\0\154\1"+
     "\41\0\u016b\1\22\0\100\1\2\0\66\1\50\0\15\1\3\0\20\2"+
-    "\20\0\4\2\17\0\2\1\30\0\3\1\31\0\1\1\6\0\5\1"+
+    "\20\0\7\2\14\0\2\1\30\0\3\1\31\0\1\1\6\0\5\1"+
     "\1\0\207\1\2\0\1\2\4\0\1\1\13\0\12\2\7\0\32\1"+
-    "\4\0\1\1\1\0\32\1\12\0\132\1\3\0\6\1\2\0\6\1"+
+    "\4\0\1\1\1\0\32\1\13\0\131\1\3\0\6\1\2\0\6\1"+
     "\2\0\6\1\2\0\3\1\3\0\2\1\3\0\2\1\22\0\3\2"+
-    "\4\0";
+    "\4\0\14\1\1\0\32\1\1\0\23\1\1\0\2\1\1\0\17\1"+
+    "\2\0\16\1\42\0\173\1\105\0\65\1\210\0\1\2\202\0\35\1"+
+    "\3\0\61\1\57\0\37\1\21\0\33\1\65\0\36\1\2\0\44\1"+
+    "\4\0\10\1\1\0\5\1\52\0\236\1\2\0\12\2\u0356\0\6\1"+
+    "\2\0\1\1\1\0\54\1\1\0\2\1\3\0\1\1\2\0\27\1"+
+    "\252\0\26\1\12\0\32\1\106\0\70\1\6\0\2\1\100\0\1\1"+
+    "\3\2\1\0\2\2\5\0\4\2\4\1\1\0\3\1\1\0\33\1"+
+    "\4\0\3\2\4\0\1\2\40\0\35\1\203\0\66\1\12\0\26\1"+
+    "\12\0\23\1\215\0\111\1\u03b7\0\3\2\65\1\17\2\37\0\12\2"+
+    "\20\0\3\2\55\1\13\2\2\0\1\2\22\0\31\1\7\0\12\2"+
+    "\6\0\3\2\44\1\16\2\1\0\12\2\100\0\3\2\60\1\16\2"+
+    "\4\1\13\0\12\2\u04a6\0\53\1\15\2\10\0\12\2\u0936\0\u036f\1"+
+    "\221\0\143\1\u0b9d\0\u042f\1\u33d1\0\u0239\1\u04c7\0\105\1\13\0\1\1"+
+    "\56\2\20\0\4\2\15\1\u4060\0\2\1\u2163\0\5\2\3\0\26\2"+
+    "\2\0\7\2\36\0\4\2\224\0\3\2\u01bb\0\125\1\1\0\107\1"+
+    "\1\0\2\1\2\0\1\1\2\0\2\1\2\0\4\1\1\0\14\1"+
+    "\1\0\1\1\1\0\7\1\1\0\101\1\1\0\4\1\2\0\10\1"+
+    "\1\0\7\1\1\0\34\1\1\0\4\1\1\0\5\1\1\0\1\1"+
+    "\3\0\7\1\1\0\u0154\1\2\0\31\1\1\0\31\1\1\0\37\1"+
+    "\1\0\31\1\1\0\37\1\1\0\31\1\1\0\37\1\1\0\31\1"+
+    "\1\0\37\1\1\0\31\1\1\0\10\1\2\0\62\2\u1600\0\4\1"+
+    "\1\0\33\1\1\0\2\1\1\0\1\1\2\0\1\1\1\0\12\1"+
+    "\1\0\4\1\1\0\1\1\1\0\1\1\6\0\1\1\4\0\1\1"+
+    "\1\0\1\1\1\0\1\1\1\0\3\1\1\0\2\1\1\0\1\1"+
+    "\2\0\1\1\1\0\1\1\1\0\1\1\1\0\1\1\1\0\1\1"+
+    "\1\0\2\1\1\0\1\1\2\0\4\1\1\0\7\1\1\0\4\1"+
+    "\1\0\4\1\1\0\1\1\1\0\12\1\1\0\21\1\5\0\3\1"+
+    "\1\0\5\1\1\0\21\1\u1144\0\ua6d7\1\51\0\u1035\1\13\0\336\1"+
+    "\u3fe2\0\u021e\1\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u05ee\0"+
+    "\1\2\36\0\140\2\200\0\360\2\uffff\0\uffff\0\ufe12\0";
 
   /** 
    * Translates characters to character classes
@@ -161,8 +218,8 @@ class _MacroLexer implements FlexLexer {
   private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
 
   private static final String ZZ_ROWMAP_PACKED_0 =
-    "\0\0\0\13\0\26\0\41\0\54\0\13\0\13\0\13"+
-    "\0\13\0\13\0\67";
+    "\0\0\0\15\0\32\0\47\0\64\0\15\0\15\0\15"+
+    "\0\15\0\15\0\101";
 
   private static int [] zzUnpackRowMap() {
     int [] result = new int[11];
@@ -189,12 +246,12 @@ class _MacroLexer implements FlexLexer {
 
   private static final String ZZ_TRANS_PACKED_0 =
     "\1\2\1\3\1\2\1\4\1\5\1\2\1\4\1\6"+
-    "\1\7\1\10\1\11\14\0\2\3\13\0\1\4\2\0"+
-    "\1\4\4\0\4\5\1\12\1\13\1\0\12\5\1\0"+
-    "\4\5";
+    "\1\7\1\10\1\11\20\0\2\3\11\0\1\3\3\0"+
+    "\1\4\2\0\1\4\6\0\4\5\1\12\1\13\1\0"+
+    "\14\5\1\0\6\5";
 
   private static int [] zzUnpackTrans() {
-    int [] result = new int[66];
+    int [] result = new int[78];
     int offset = 0;
     offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
     return result;
@@ -218,13 +275,10 @@ class _MacroLexer implements FlexLexer {
   private static final int ZZ_UNKNOWN_ERROR = 0;
   private static final int ZZ_NO_MATCH = 1;
   private static final int ZZ_PUSHBACK_2BIG = 2;
-  private static final char[] EMPTY_BUFFER = new char[0];
-  private static final int YYEOF = -1;
-  private static java.io.Reader zzReader = null; // Fake
 
   /* error messages for the codes above */
-  private static final String ZZ_ERROR_MSG[] = {
-    "Unkown internal scanner error",
+  private static final String[] ZZ_ERROR_MSG = {
+    "Unknown internal scanner error",
     "Error: could not match input",
     "Error: pushback value was too large"
   };
@@ -256,6 +310,9 @@ class _MacroLexer implements FlexLexer {
     return j;
   }
 
+  /** the input device */
+  private java.io.Reader zzReader;
+
   /** the current state of the DFA */
   private int zzState;
 
@@ -302,20 +359,16 @@ class _MacroLexer implements FlexLexer {
    }
 
 
-  _MacroLexer(java.io.Reader in) {
-    this.zzReader = in;
-  }
-
   /**
-   * Creates a new scanner.
-   * There is also java.io.Reader version of this constructor.
+   * Creates a new scanner
    *
-   * @param   in  the java.io.Inputstream to read input from.
+   * @param   in  the java.io.Reader to read input from.
    */
-  _MacroLexer(java.io.InputStream in) {
-    this(new java.io.InputStreamReader(in));
+  _MacroLexer(java.io.Reader in) {
+    this.zzReader = in;
   }
 
+
   /** 
    * Unpacks the compressed character translation table.
    *
@@ -323,10 +376,10 @@ class _MacroLexer implements FlexLexer {
    * @return         the unpacked character translation table
    */
   private static char [] zzUnpackCMap(String packed) {
-    char [] map = new char[0x10000];
+    char [] map = new char[0x110000];
     int i = 0;  /* index in packed string  */
     int j = 0;  /* index in unpacked array */
-    while (i < 1682) {
+    while (i < 2784) {
       int  count = packed.charAt(i++);
       char value = packed.charAt(i++);
       do map[j++] = value; while (--count > 0);
@@ -502,12 +555,20 @@ class _MacroLexer implements FlexLexer {
 
       zzState = ZZ_LEXSTATE[zzLexicalState];
 
+      // set up zzAction for empty match case:
+      int zzAttributes = zzAttrL[zzState];
+      if ( (zzAttributes & 1) == 1 ) {
+        zzAction = zzState;
+      }
+
 
       zzForAction: {
         while (true) {
 
-          if (zzCurrentPosL < zzEndReadL)
-            zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+          if (zzCurrentPosL < zzEndReadL) {
+            zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+            zzCurrentPosL += Character.charCount(zzInput);
+          }
           else if (zzAtEOF) {
             zzInput = YYEOF;
             break zzForAction;
@@ -527,14 +588,15 @@ class _MacroLexer implements FlexLexer {
               break zzForAction;
             }
             else {
-              zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+              zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+              zzCurrentPosL += Character.charCount(zzInput);
             }
           }
           int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
           if (zzNext == -1) break zzForAction;
           zzState = zzNext;
 
-          int zzAttributes = zzAttrL[zzState];
+          zzAttributes = zzAttrL[zzState];
           if ( (zzAttributes & 1) == 1 ) {
             zzAction = zzState;
             zzMarkedPosL = zzCurrentPosL;
@@ -547,46 +609,46 @@ class _MacroLexer implements FlexLexer {
       // store back cached position
       zzMarkedPos = zzMarkedPosL;
 
-      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
-        case 6: 
-          { return MacroTokenType.RPAREN;
-          }
-        case 9: break;
-        case 4: 
-          { return MacroTokenType.STRING_LITERAL;
-          }
-        case 10: break;
-        case 2: 
-          { return MacroTokenType.IDENTIFIER;
-          }
-        case 11: break;
-        case 1: 
-          { return TokenType.BAD_CHARACTER;
-          }
-        case 12: break;
-        case 5: 
-          { return MacroTokenType.LPAREN;
-          }
-        case 13: break;
-        case 8: 
-          { return MacroTokenType.EQ;
-          }
-        case 14: break;
-        case 7: 
-          { return MacroTokenType.COMMA;
-          }
-        case 15: break;
-        case 3: 
-          { return MacroTokenType.WHITE_SPACE;
-          }
-        case 16: break;
-        default:
-          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
-            zzAtEOF = true;
-            zzDoEOF();
-            return null;
-          }
-          else {
+      if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+        zzAtEOF = true;
+        zzDoEOF();
+        return null;
+      }
+      else {
+        switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+          case 1: 
+            { return TokenType.BAD_CHARACTER;
+            }
+          case 9: break;
+          case 2: 
+            { return MacroTokenType.IDENTIFIER;
+            }
+          case 10: break;
+          case 3: 
+            { return MacroTokenType.WHITE_SPACE;
+            }
+          case 11: break;
+          case 4: 
+            { return MacroTokenType.STRING_LITERAL;
+            }
+          case 12: break;
+          case 5: 
+            { return MacroTokenType.LPAREN;
+            }
+          case 13: break;
+          case 6: 
+            { return MacroTokenType.RPAREN;
+            }
+          case 14: break;
+          case 7: 
+            { return MacroTokenType.COMMA;
+            }
+          case 15: break;
+          case 8: 
+            { return MacroTokenType.EQ;
+            }
+          case 16: break;
+          default:
             zzScanError(ZZ_NO_MATCH);
           }
       }
index 5ce2cf93c15188ca4cef43bd7689a5c103f138e0..23fb055824707d88329545b0bb285301a7701f80 100644 (file)
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.3 on 4/26/14 1:30 PM */
+/* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */
 
 /* It's an automatically generated code. Do not modify it. */
 package com.intellij.codeInsight.template.impl;
@@ -9,11 +9,14 @@ import com.intellij.psi.tree.IElementType;
 
 /**
  * This class is a scanner generated by 
- * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
- * on 4/26/14 1:30 PM from the specification file
- * <tt>/Users/ignatov/src/ultimate/tools/lexer/../../community/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateTextLexer.flex</tt>
+ * <a href="http://www.jflex.de/">JFlex</a> 1.7.0-SNAPSHOT
+ * from the specification file <tt>/ideadev/tools/lexer/../../community/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateTextLexer.flex</tt>
  */
 class _TemplateTextLexer implements FlexLexer {
+
+  /** This character denotes the end of file */
+  public static final int YYEOF = -1;
+
   /** initial size of the lookahead buffer */
   private static final int ZZ_BUFFERSIZE = 16384;
 
@@ -35,7 +38,7 @@ class _TemplateTextLexer implements FlexLexer {
    */
   private static final String ZZ_CMAP_PACKED = 
     "\44\0\1\2\13\0\12\1\7\0\32\1\4\0\1\1\1\0\32\1"+
-    "\uff85\0";
+    "\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uff95\0";
 
   /** 
    * Translates characters to character classes
@@ -129,13 +132,10 @@ class _TemplateTextLexer implements FlexLexer {
   private static final int ZZ_UNKNOWN_ERROR = 0;
   private static final int ZZ_NO_MATCH = 1;
   private static final int ZZ_PUSHBACK_2BIG = 2;
-  private static final char[] EMPTY_BUFFER = new char[0];
-  private static final int YYEOF = -1;
-  private static java.io.Reader zzReader = null; // Fake
 
   /* error messages for the codes above */
-  private static final String ZZ_ERROR_MSG[] = {
-    "Unkown internal scanner error",
+  private static final String[] ZZ_ERROR_MSG = {
+    "Unknown internal scanner error",
     "Error: could not match input",
     "Error: pushback value was too large"
   };
@@ -167,6 +167,9 @@ class _TemplateTextLexer implements FlexLexer {
     return j;
   }
 
+  /** the input device */
+  private java.io.Reader zzReader;
+
   /** the current state of the DFA */
   private int zzState;
 
@@ -213,20 +216,16 @@ class _TemplateTextLexer implements FlexLexer {
    }
 
 
-  _TemplateTextLexer(java.io.Reader in) {
-    this.zzReader = in;
-  }
-
   /**
-   * Creates a new scanner.
-   * There is also java.io.Reader version of this constructor.
+   * Creates a new scanner
    *
-   * @param   in  the java.io.Inputstream to read input from.
+   * @param   in  the java.io.Reader to read input from.
    */
-  _TemplateTextLexer(java.io.InputStream in) {
-    this(new java.io.InputStreamReader(in));
+  _TemplateTextLexer(java.io.Reader in) {
+    this.zzReader = in;
   }
 
+
   /** 
    * Unpacks the compressed character translation table.
    *
@@ -234,10 +233,10 @@ class _TemplateTextLexer implements FlexLexer {
    * @return         the unpacked character translation table
    */
   private static char [] zzUnpackCMap(String packed) {
-    char [] map = new char[0x10000];
+    char [] map = new char[0x110000];
     int i = 0;  /* index in packed string  */
     int j = 0;  /* index in unpacked array */
-    while (i < 22) {
+    while (i < 54) {
       int  count = packed.charAt(i++);
       char value = packed.charAt(i++);
       do map[j++] = value; while (--count > 0);
@@ -413,12 +412,20 @@ class _TemplateTextLexer implements FlexLexer {
 
       zzState = ZZ_LEXSTATE[zzLexicalState];
 
+      // set up zzAction for empty match case:
+      int zzAttributes = zzAttrL[zzState];
+      if ( (zzAttributes & 1) == 1 ) {
+        zzAction = zzState;
+      }
+
 
       zzForAction: {
         while (true) {
 
-          if (zzCurrentPosL < zzEndReadL)
-            zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+          if (zzCurrentPosL < zzEndReadL) {
+            zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+            zzCurrentPosL += Character.charCount(zzInput);
+          }
           else if (zzAtEOF) {
             zzInput = YYEOF;
             break zzForAction;
@@ -438,14 +445,15 @@ class _TemplateTextLexer implements FlexLexer {
               break zzForAction;
             }
             else {
-              zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+              zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+              zzCurrentPosL += Character.charCount(zzInput);
             }
           }
           int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
           if (zzNext == -1) break zzForAction;
           zzState = zzNext;
 
-          int zzAttributes = zzAttrL[zzState];
+          zzAttributes = zzAttrL[zzState];
           if ( (zzAttributes & 1) == 1 ) {
             zzAction = zzState;
             zzMarkedPosL = zzCurrentPosL;
@@ -458,26 +466,26 @@ class _TemplateTextLexer implements FlexLexer {
       // store back cached position
       zzMarkedPos = zzMarkedPosL;
 
-      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
-        case 2: 
-          { return TemplateTokenType.ESCAPE_DOLLAR;
-          }
-        case 4: break;
-        case 1: 
-          { return TemplateTokenType.TEXT;
-          }
-        case 5: break;
-        case 3: 
-          { return TemplateTokenType.VARIABLE;
-          }
-        case 6: break;
-        default:
-          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
-            zzAtEOF = true;
-            zzDoEOF();
-            return null;
-          }
-          else {
+      if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+        zzAtEOF = true;
+        zzDoEOF();
+        return null;
+      }
+      else {
+        switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+          case 1: 
+            { return TemplateTokenType.TEXT;
+            }
+          case 4: break;
+          case 2: 
+            { return TemplateTokenType.ESCAPE_DOLLAR;
+            }
+          case 5: break;
+          case 3: 
+            { return TemplateTokenType.VARIABLE;
+            }
+          case 6: break;
+          default:
             zzScanError(ZZ_NO_MATCH);
           }
       }
index c6def9355dbd17b3bd0d0c27ec9c43590904dbe2..767e936134b1846916a64df30fdb170816679e03 100644 (file)
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.3 on 4/26/14 1:28 PM */
+/* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */
 
 /* It's an automatically generated code. Do not modify it. */
 package com.intellij.ide.fileTemplates.impl;
@@ -9,11 +9,14 @@ import com.intellij.psi.tree.IElementType;
 
 /**
  * This class is a scanner generated by 
- * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
- * on 4/26/14 1:28 PM from the specification file
- * <tt>/Users/ignatov/src/ultimate/tools/lexer/../../community/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateTextLexer.flex</tt>
+ * <a href="http://www.jflex.de/">JFlex</a> 1.7.0-SNAPSHOT
+ * from the specification file <tt>/ideadev/tools/lexer/../../community/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateTextLexer.flex</tt>
  */
 class FileTemplateTextLexer implements FlexLexer {
+
+  /** This character denotes the end of file */
+  public static final int YYEOF = -1;
+
   /** initial size of the lookahead buffer */
   private static final int ZZ_BUFFERSIZE = 16384;
 
@@ -35,7 +38,7 @@ class FileTemplateTextLexer implements FlexLexer {
    */
   private static final String ZZ_CMAP_PACKED = 
     "\43\0\1\6\1\3\13\0\12\2\7\0\32\1\4\0\1\1\1\0"+
-    "\32\1\1\4\1\0\1\5\uff82\0";
+    "\32\1\1\4\1\0\1\5\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uff92\0";
 
   /** 
    * Translates characters to character classes
@@ -132,13 +135,10 @@ class FileTemplateTextLexer implements FlexLexer {
   private static final int ZZ_UNKNOWN_ERROR = 0;
   private static final int ZZ_NO_MATCH = 1;
   private static final int ZZ_PUSHBACK_2BIG = 2;
-  private static final char[] EMPTY_BUFFER = new char[0];
-  private static final int YYEOF = -1;
-  private static java.io.Reader zzReader = null; // Fake
 
   /* error messages for the codes above */
-  private static final String ZZ_ERROR_MSG[] = {
-    "Unkown internal scanner error",
+  private static final String[] ZZ_ERROR_MSG = {
+    "Unknown internal scanner error",
     "Error: could not match input",
     "Error: pushback value was too large"
   };
@@ -170,6 +170,9 @@ class FileTemplateTextLexer implements FlexLexer {
     return j;
   }
 
+  /** the input device */
+  private java.io.Reader zzReader;
+
   /** the current state of the DFA */
   private int zzState;
 
@@ -216,20 +219,16 @@ class FileTemplateTextLexer implements FlexLexer {
    }
 
 
-  FileTemplateTextLexer(java.io.Reader in) {
-    this.zzReader = in;
-  }
-
   /**
-   * Creates a new scanner.
-   * There is also java.io.Reader version of this constructor.
+   * Creates a new scanner
    *
-   * @param   in  the java.io.Inputstream to read input from.
+   * @param   in  the java.io.Reader to read input from.
    */
-  FileTemplateTextLexer(java.io.InputStream in) {
-    this(new java.io.InputStreamReader(in));
+  FileTemplateTextLexer(java.io.Reader in) {
+    this.zzReader = in;
   }
 
+
   /** 
    * Unpacks the compressed character translation table.
    *
@@ -237,10 +236,10 @@ class FileTemplateTextLexer implements FlexLexer {
    * @return         the unpacked character translation table
    */
   private static char [] zzUnpackCMap(String packed) {
-    char [] map = new char[0x10000];
+    char [] map = new char[0x110000];
     int i = 0;  /* index in packed string  */
     int j = 0;  /* index in unpacked array */
-    while (i < 30) {
+    while (i < 62) {
       int  count = packed.charAt(i++);
       char value = packed.charAt(i++);
       do map[j++] = value; while (--count > 0);
@@ -416,12 +415,20 @@ class FileTemplateTextLexer implements FlexLexer {
 
       zzState = ZZ_LEXSTATE[zzLexicalState];
 
+      // set up zzAction for empty match case:
+      int zzAttributes = zzAttrL[zzState];
+      if ( (zzAttributes & 1) == 1 ) {
+        zzAction = zzState;
+      }
+
 
       zzForAction: {
         while (true) {
 
-          if (zzCurrentPosL < zzEndReadL)
-            zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+          if (zzCurrentPosL < zzEndReadL) {
+            zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+            zzCurrentPosL += Character.charCount(zzInput);
+          }
           else if (zzAtEOF) {
             zzInput = YYEOF;
             break zzForAction;
@@ -441,14 +448,15 @@ class FileTemplateTextLexer implements FlexLexer {
               break zzForAction;
             }
             else {
-              zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+              zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+              zzCurrentPosL += Character.charCount(zzInput);
             }
           }
           int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
           if (zzNext == -1) break zzForAction;
           zzState = zzNext;
 
-          int zzAttributes = zzAttrL[zzState];
+          zzAttributes = zzAttrL[zzState];
           if ( (zzAttributes & 1) == 1 ) {
             zzAction = zzState;
             zzMarkedPosL = zzCurrentPosL;
@@ -461,26 +469,26 @@ class FileTemplateTextLexer implements FlexLexer {
       // store back cached position
       zzMarkedPos = zzMarkedPosL;
 
-      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
-        case 2: 
-          { return FileTemplateTokenType.MACRO;
-          }
-        case 4: break;
-        case 1: 
-          { return FileTemplateTokenType.TEXT;
-          }
-        case 5: break;
-        case 3: 
-          { return FileTemplateTokenType.DIRECTIVE;
-          }
-        case 6: break;
-        default:
-          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
-            zzAtEOF = true;
-            zzDoEOF();
-            return null;
-          }
-          else {
+      if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+        zzAtEOF = true;
+        zzDoEOF();
+        return null;
+      }
+      else {
+        switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+          case 1: 
+            { return FileTemplateTokenType.TEXT;
+            }
+          case 4: break;
+          case 2: 
+            { return FileTemplateTokenType.MACRO;
+            }
+          case 5: break;
+          case 3: 
+            { return FileTemplateTokenType.DIRECTIVE;
+            }
+          case 6: break;
+          default:
             zzScanError(ZZ_NO_MATCH);
           }
       }
index d6518417f51b8891e201cc191fb3600197f0ed59..6e94cc8df954bad7518bf11e0f2253ed1e1d7824 100644 (file)
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.3 on 4/26/14 1:26 PM */
+/* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */
 
 /* It's an automatically generated code. Do not modify it. */
 package com.intellij.psi.search.scope.packageSet.lexer;
@@ -8,11 +8,14 @@ import com.intellij.lexer.FlexLexer;
 
 /**
  * This class is a scanner generated by 
- * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
- * on 4/26/14 1:26 PM from the specification file
- * <tt>/Users/ignatov/src/ultimate/tools/lexer/../../community/platform/lang-impl/src/com/intellij/psi/search/scope/packageSet/lexer/_ScopesLexer.flex</tt>
+ * <a href="http://www.jflex.de/">JFlex</a> 1.7.0-SNAPSHOT
+ * from the specification file <tt>/ideadev/tools/lexer/../../community/platform/lang-impl/src/com/intellij/psi/search/scope/packageSet/lexer/_ScopesLexer.flex</tt>
  */
 class _ScopesLexer implements FlexLexer {
+
+  /** This character denotes the end of file */
+  public static final int YYEOF = -1;
+
   /** initial size of the lookahead buffer */
   private static final int ZZ_BUFFERSIZE = 16384;
 
@@ -33,91 +36,145 @@ class _ScopesLexer implements FlexLexer {
    * Translates characters to character classes
    */
   private static final String ZZ_CMAP_PACKED = 
-    "\11\2\1\3\1\3\1\0\2\3\16\2\4\0\1\3\1\7\1\0"+
-    "\1\22\1\1\1\0\1\6\1\0\1\14\1\15\1\20\2\0\1\10"+
-    "\1\16\1\21\12\4\1\17\6\0\32\1\1\12\1\0\1\13\1\0"+
-    "\1\1\1\0\32\1\1\0\1\5\1\0\1\11\41\2\2\0\4\1"+
-    "\4\0\1\1\2\0\1\2\7\0\1\1\4\0\1\1\5\0\27\1"+
-    "\1\0\37\1\1\0\u013f\1\31\0\162\1\4\0\14\1\16\0\5\1"+
-    "\11\0\1\1\21\0\130\2\5\0\23\2\12\0\1\1\13\0\1\1"+
-    "\1\0\3\1\1\0\1\1\1\0\24\1\1\0\54\1\1\0\46\1"+
-    "\1\0\5\1\4\0\202\1\1\0\4\2\3\0\105\1\1\0\46\1"+
-    "\2\0\2\1\6\0\20\1\41\0\46\1\2\0\1\1\7\0\47\1"+
-    "\11\0\21\2\1\0\27\2\1\0\3\2\1\0\1\2\1\0\2\2"+
-    "\1\0\1\2\13\0\33\1\5\0\3\1\15\0\4\2\14\0\6\2"+
-    "\13\0\32\1\5\0\13\1\16\2\7\0\12\2\4\0\2\1\1\2"+
-    "\143\1\1\0\1\1\10\2\1\0\6\2\2\1\2\2\1\0\4\2"+
-    "\2\1\12\2\3\1\2\0\1\1\17\0\1\2\1\1\1\2\36\1"+
-    "\33\2\2\0\3\1\60\0\46\1\13\2\1\1\u014f\0\3\2\66\1"+
-    "\2\0\1\2\1\1\20\2\2\0\1\1\4\2\3\0\12\1\2\2"+
-    "\2\0\12\2\21\0\3\2\1\0\10\1\2\0\2\1\2\0\26\1"+
-    "\1\0\7\1\1\0\1\1\3\0\4\1\2\0\1\2\1\1\7\2"+
-    "\2\0\2\2\2\0\3\2\11\0\1\2\4\0\2\1\1\0\3\1"+
-    "\2\2\2\0\12\2\4\1\15\0\3\2\1\0\6\1\4\0\2\1"+
-    "\2\0\26\1\1\0\7\1\1\0\2\1\1\0\2\1\1\0\2\1"+
-    "\2\0\1\2\1\0\5\2\4\0\2\2\2\0\3\2\13\0\4\1"+
-    "\1\0\1\1\7\0\14\2\3\1\14\0\3\2\1\0\11\1\1\0"+
-    "\3\1\1\0\26\1\1\0\7\1\1\0\2\1\1\0\5\1\2\0"+
-    "\1\2\1\1\10\2\1\0\3\2\1\0\3\2\2\0\1\1\17\0"+
-    "\2\1\2\2\2\0\12\2\1\0\1\1\17\0\3\2\1\0\10\1"+
-    "\2\0\2\1\2\0\26\1\1\0\7\1\1\0\2\1\1\0\5\1"+
-    "\2\0\1\2\1\1\6\2\3\0\2\2\2\0\3\2\10\0\2\2"+
-    "\4\0\2\1\1\0\3\1\4\0\12\2\1\0\1\1\20\0\1\2"+
-    "\1\1\1\0\6\1\3\0\3\1\1\0\4\1\3\0\2\1\1\0"+
-    "\1\1\1\0\2\1\3\0\2\1\3\0\3\1\3\0\10\1\1\0"+
-    "\3\1\4\0\5\2\3\0\3\2\1\0\4\2\11\0\1\2\17\0"+
-    "\11\2\11\0\1\1\7\0\3\2\1\0\10\1\1\0\3\1\1\0"+
-    "\27\1\1\0\12\1\1\0\5\1\4\0\7\2\1\0\3\2\1\0"+
-    "\4\2\7\0\2\2\11\0\2\1\4\0\12\2\22\0\2\2\1\0"+
-    "\10\1\1\0\3\1\1\0\27\1\1\0\12\1\1\0\5\1\2\0"+
-    "\1\2\1\1\7\2\1\0\3\2\1\0\4\2\7\0\2\2\7\0"+
-    "\1\1\1\0\2\1\4\0\12\2\22\0\2\2\1\0\10\1\1\0"+
-    "\3\1\1\0\27\1\1\0\20\1\4\0\6\2\2\0\3\2\1\0"+
-    "\4\2\11\0\1\2\10\0\2\1\4\0\12\2\22\0\2\2\1\0"+
-    "\22\1\3\0\30\1\1\0\11\1\1\0\1\1\2\0\7\1\3\0"+
-    "\1\2\4\0\6\2\1\0\1\2\1\0\10\2\22\0\2\2\15\0"+
-    "\60\1\1\2\2\1\7\2\4\0\10\1\10\2\1\0\12\2\47\0"+
-    "\2\1\1\0\1\1\2\0\2\1\1\0\1\1\2\0\1\1\6\0"+
-    "\4\1\1\0\7\1\1\0\3\1\1\0\1\1\1\0\1\1\2\0"+
-    "\2\1\1\0\4\1\1\2\2\1\6\2\1\0\2\2\1\1\2\0"+
-    "\5\1\1\0\1\1\1\0\6\2\2\0\12\2\2\0\2\1\42\0"+
-    "\1\1\27\0\2\2\6\0\12\2\13\0\1\2\1\0\1\2\1\0"+
-    "\1\2\4\0\2\2\10\1\1\0\42\1\6\0\24\2\1\0\2\2"+
-    "\4\1\4\0\10\2\1\0\44\2\11\0\1\2\71\0\42\1\1\0"+
-    "\5\1\1\0\2\1\1\0\7\2\3\0\4\2\6\0\12\2\6\0"+
-    "\6\1\4\2\106\0\46\1\12\0\51\1\7\0\132\1\5\0\104\1"+
-    "\5\0\122\1\6\0\7\1\1\0\77\1\1\0\1\1\1\0\4\1"+
-    "\2\0\7\1\1\0\1\1\1\0\4\1\2\0\47\1\1\0\1\1"+
-    "\1\0\4\1\2\0\37\1\1\0\1\1\1\0\4\1\2\0\7\1"+
-    "\1\0\1\1\1\0\4\1\2\0\7\1\1\0\7\1\1\0\27\1"+
-    "\1\0\37\1\1\0\1\1\1\0\4\1\2\0\7\1\1\0\47\1"+
-    "\1\0\23\1\16\0\11\2\56\0\125\1\14\0\u026c\1\2\0\10\1"+
-    "\12\0\32\1\5\0\113\1\3\0\3\1\17\0\15\1\1\0\4\1"+
-    "\3\2\13\0\22\1\3\2\13\0\22\1\2\2\14\0\15\1\1\0"+
-    "\3\1\1\0\2\2\14\0\64\1\40\2\3\0\1\1\3\0\2\1"+
-    "\1\2\2\0\12\2\41\0\3\2\2\0\12\2\6\0\130\1\10\0"+
-    "\51\1\1\2\126\0\35\1\3\0\14\2\4\0\14\2\12\0\12\2"+
-    "\36\1\2\0\5\1\u038b\0\154\1\224\0\234\1\4\0\132\1\6\0"+
-    "\26\1\2\0\6\1\2\0\46\1\2\0\6\1\2\0\10\1\1\0"+
-    "\1\1\1\0\1\1\1\0\1\1\1\0\37\1\2\0\65\1\1\0"+
-    "\7\1\1\0\1\1\3\0\3\1\1\0\7\1\3\0\4\1\2\0"+
-    "\6\1\4\0\15\1\5\0\3\1\1\0\7\1\17\0\4\2\32\0"+
-    "\5\2\20\0\2\1\23\0\1\1\13\0\4\2\6\0\6\2\1\0"+
-    "\1\1\15\0\1\1\40\0\22\1\36\0\15\2\4\0\1\2\3\0"+
-    "\6\2\27\0\1\1\4\0\1\1\2\0\12\1\1\0\1\1\3\0"+
-    "\5\1\6\0\1\1\1\0\1\1\1\0\1\1\1\0\4\1\1\0"+
-    "\3\1\1\0\7\1\3\0\3\1\5\0\5\1\26\0\44\1\u0e81\0"+
-    "\3\1\31\0\11\1\6\2\1\0\5\1\2\0\5\1\4\0\126\1"+
-    "\2\0\2\2\2\0\3\1\1\0\137\1\5\0\50\1\4\0\136\1"+
-    "\21\0\30\1\70\0\20\1\u0200\0\u19b6\1\112\0\u51a6\1\132\0\u048d\1"+
-    "\u0773\0\u2ba4\1\u215c\0\u012e\1\2\0\73\1\225\0\7\1\14\0\5\1"+
-    "\5\0\1\1\1\2\12\1\1\0\15\1\1\0\5\1\1\0\1\1"+
-    "\1\0\2\1\1\0\2\1\1\0\154\1\41\0\u016b\1\22\0\100\1"+
-    "\2\0\66\1\50\0\15\1\3\0\20\2\20\0\4\2\17\0\2\1"+
-    "\30\0\3\1\31\0\1\1\6\0\5\1\1\0\207\1\2\0\1\2"+
-    "\4\0\1\1\13\0\12\2\7\0\32\1\4\0\1\1\1\0\32\1"+
-    "\12\0\132\1\3\0\6\1\2\0\6\1\2\0\6\1\2\0\3\1"+
-    "\3\0\2\1\3\0\2\1\22\0\3\2\4\0";
+    "\11\2\1\3\1\3\1\23\1\3\1\3\16\2\4\0\1\3\1\7"+
+    "\1\0\1\22\1\1\1\0\1\6\1\0\1\14\1\15\1\20\2\0"+
+    "\1\10\1\16\1\21\12\4\1\17\6\0\32\1\1\12\1\0\1\13"+
+    "\1\0\1\1\1\0\32\1\1\0\1\5\1\0\1\11\6\2\1\24"+
+    "\32\2\2\0\4\1\4\0\1\1\2\0\1\2\7\0\1\1\4\0"+
+    "\1\1\5\0\27\1\1\0\37\1\1\0\u01ca\1\4\0\14\1\16\0"+
+    "\5\1\7\0\1\1\1\0\1\1\21\0\160\2\5\1\1\0\2\1"+
+    "\2\0\4\1\10\0\1\1\1\0\3\1\1\0\1\1\1\0\24\1"+
+    "\1\0\123\1\1\0\213\1\1\0\5\2\2\0\236\1\11\0\46\1"+
+    "\2\0\1\1\7\0\47\1\7\0\1\1\1\0\55\2\1\0\1\2"+
+    "\1\0\2\2\1\0\2\2\1\0\1\2\10\0\33\1\5\0\3\1"+
+    "\15\0\5\2\6\0\1\1\4\0\13\2\5\0\53\1\37\2\4\0"+
+    "\2\1\1\2\143\1\1\0\1\1\10\2\1\0\6\2\2\1\2\2"+
+    "\1\0\4\2\2\1\12\2\3\1\2\0\1\1\17\0\1\2\1\1"+
+    "\1\2\36\1\33\2\2\0\131\1\13\2\1\1\16\0\12\2\41\1"+
+    "\11\2\2\1\4\0\1\1\5\0\26\1\4\2\1\1\11\2\1\1"+
+    "\3\2\1\1\5\2\22\0\31\1\3\2\104\0\1\1\1\0\13\1"+
+    "\67\0\33\2\1\0\4\2\66\1\3\2\1\1\22\2\1\1\7\2"+
+    "\12\1\2\2\2\0\12\2\1\0\7\1\1\0\7\1\1\0\3\2"+
+    "\1\0\10\1\2\0\2\1\2\0\26\1\1\0\7\1\1\0\1\1"+
+    "\3\0\4\1\2\0\1\2\1\1\7\2\2\0\2\2\2\0\3\2"+
+    "\1\1\10\0\1\2\4\0\2\1\1\0\3\1\2\2\2\0\12\2"+
+    "\4\1\7\0\1\1\5\0\3\2\1\0\6\1\4\0\2\1\2\0"+
+    "\26\1\1\0\7\1\1\0\2\1\1\0\2\1\1\0\2\1\2\0"+
+    "\1\2\1\0\5\2\4\0\2\2\2\0\3\2\3\0\1\2\7\0"+
+    "\4\1\1\0\1\1\7\0\14\2\3\1\1\2\13\0\3\2\1\0"+
+    "\11\1\1\0\3\1\1\0\26\1\1\0\7\1\1\0\2\1\1\0"+
+    "\5\1\2\0\1\2\1\1\10\2\1\0\3\2\1\0\3\2\2\0"+
+    "\1\1\17\0\2\1\2\2\2\0\12\2\1\0\1\1\17\0\3\2"+
+    "\1\0\10\1\2\0\2\1\2\0\26\1\1\0\7\1\1\0\2\1"+
+    "\1\0\5\1\2\0\1\2\1\1\7\2\2\0\2\2\2\0\3\2"+
+    "\10\0\2\2\4\0\2\1\1\0\3\1\2\2\2\0\12\2\1\0"+
+    "\1\1\20\0\1\2\1\1\1\0\6\1\3\0\3\1\1\0\4\1"+
+    "\3\0\2\1\1\0\1\1\1\0\2\1\3\0\2\1\3\0\3\1"+
+    "\3\0\14\1\4\0\5\2\3\0\3\2\1\0\4\2\2\0\1\1"+
+    "\6\0\1\2\16\0\12\2\11\0\1\1\7\0\3\2\1\0\10\1"+
+    "\1\0\3\1\1\0\27\1\1\0\12\1\1\0\5\1\3\0\1\1"+
+    "\7\2\1\0\3\2\1\0\4\2\7\0\2\2\1\0\2\1\6\0"+
+    "\2\1\2\2\2\0\12\2\22\0\2\2\1\0\10\1\1\0\3\1"+
+    "\1\0\27\1\1\0\12\1\1\0\5\1\2\0\1\2\1\1\7\2"+
+    "\1\0\3\2\1\0\4\2\7\0\2\2\7\0\1\1\1\0\2\1"+
+    "\2\2\2\0\12\2\1\0\2\1\17\0\2\2\1\0\10\1\1\0"+
+    "\3\1\1\0\51\1\2\0\1\1\7\2\1\0\3\2\1\0\4\2"+
+    "\1\1\10\0\1\2\10\0\2\1\2\2\2\0\12\2\12\0\6\1"+
+    "\2\0\2\2\1\0\22\1\3\0\30\1\1\0\11\1\1\0\1\1"+
+    "\2\0\7\1\3\0\1\2\4\0\6\2\1\0\1\2\1\0\10\2"+
+    "\22\0\2\2\15\0\60\1\1\2\2\1\7\2\4\0\10\1\10\2"+
+    "\1\0\12\2\47\0\2\1\1\0\1\1\2\0\2\1\1\0\1\1"+
+    "\2\0\1\1\6\0\4\1\1\0\7\1\1\0\3\1\1\0\1\1"+
+    "\1\0\1\1\2\0\2\1\1\0\4\1\1\2\2\1\6\2\1\0"+
+    "\2\2\1\1\2\0\5\1\1\0\1\1\1\0\6\2\2\0\12\2"+
+    "\2\0\4\1\40\0\1\1\27\0\2\2\6\0\12\2\13\0\1\2"+
+    "\1\0\1\2\1\0\1\2\4\0\2\2\10\1\1\0\44\1\4\0"+
+    "\24\2\1\0\2\2\5\1\13\2\1\0\44\2\11\0\1\2\71\0"+
+    "\53\1\24\2\1\1\12\2\6\0\6\1\4\2\4\1\3\2\1\1"+
+    "\3\2\2\1\7\2\3\1\4\2\15\1\14\2\1\1\17\2\2\0"+
+    "\46\1\1\0\1\1\5\0\1\1\2\0\53\1\1\0\u014d\1\1\0"+
+    "\4\1\2\0\7\1\1\0\1\1\1\0\4\1\2\0\51\1\1\0"+
+    "\4\1\2\0\41\1\1\0\4\1\2\0\7\1\1\0\1\1\1\0"+
+    "\4\1\2\0\17\1\1\0\71\1\1\0\4\1\2\0\103\1\2\0"+
+    "\3\2\40\0\20\1\20\0\125\1\14\0\u026c\1\2\0\21\1\1\0"+
+    "\32\1\5\0\113\1\3\0\3\1\17\0\15\1\1\0\4\1\3\2"+
+    "\13\0\22\1\3\2\13\0\22\1\2\2\14\0\15\1\1\0\3\1"+
+    "\1\0\2\2\14\0\64\1\40\2\3\0\1\1\3\0\2\1\1\2"+
+    "\2\0\12\2\41\0\3\2\2\0\12\2\6\0\130\1\10\0\51\1"+
+    "\1\2\1\1\5\0\106\1\12\0\35\1\3\0\14\2\4\0\14\2"+
+    "\12\0\12\2\36\1\2\0\5\1\13\0\54\1\4\0\21\2\7\1"+
+    "\2\2\6\0\12\2\46\0\27\1\5\2\4\0\65\1\12\2\1\0"+
+    "\35\2\2\0\13\2\6\0\12\2\15\0\1\1\130\0\5\2\57\1"+
+    "\21\2\7\1\4\0\12\2\21\0\11\2\14\0\3\2\36\1\15\2"+
+    "\2\1\12\2\54\1\16\2\14\0\44\1\24\2\10\0\12\2\3\0"+
+    "\3\1\12\2\44\1\122\0\3\2\1\0\25\2\4\1\1\2\4\1"+
+    "\3\2\2\1\11\0\300\1\47\2\25\0\4\2\u0116\1\2\0\6\1"+
+    "\2\0\46\1\2\0\6\1\2\0\10\1\1\0\1\1\1\0\1\1"+
+    "\1\0\1\1\1\0\37\1\2\0\65\1\1\0\7\1\1\0\1\1"+
+    "\3\0\3\1\1\0\7\1\3\0\4\1\2\0\6\1\4\0\15\1"+
+    "\5\0\3\1\1\0\7\1\16\0\5\2\30\0\1\23\1\23\5\2"+
+    "\20\0\2\1\23\0\1\1\13\0\5\2\5\0\6\2\1\0\1\1"+
+    "\15\0\1\1\20\0\15\1\3\0\33\1\25\0\15\2\4\0\1\2"+
+    "\3\0\14\2\21\0\1\1\4\0\1\1\2\0\12\1\1\0\1\1"+
+    "\3\0\5\1\6\0\1\1\1\0\1\1\1\0\1\1\1\0\4\1"+
+    "\1\0\13\1\2\0\4\1\5\0\5\1\4\0\1\1\21\0\51\1"+
+    "\u0a77\0\57\1\1\0\57\1\1\0\205\1\6\0\4\1\3\2\2\1"+
+    "\14\0\46\1\1\0\1\1\5\0\1\1\2\0\70\1\7\0\1\1"+
+    "\17\0\1\2\27\1\11\0\7\1\1\0\7\1\1\0\7\1\1\0"+
+    "\7\1\1\0\7\1\1\0\7\1\1\0\7\1\1\0\7\1\1\0"+
+    "\40\2\57\0\1\1\u01d5\0\3\1\31\0\11\1\6\2\1\0\5\1"+
+    "\2\0\5\1\4\0\126\1\2\0\2\2\2\0\3\1\1\0\132\1"+
+    "\1\0\4\1\5\0\51\1\3\0\136\1\21\0\33\1\65\0\20\1"+
+    "\u0200\0\u19b6\1\112\0\u51cd\1\63\0\u048d\1\103\0\56\1\2\0\u010d\1"+
+    "\3\0\20\1\12\2\2\1\24\0\57\1\1\2\4\0\12\2\1\0"+
+    "\31\1\7\0\1\2\120\1\2\2\45\0\11\1\2\0\147\1\2\0"+
+    "\4\1\1\0\4\1\14\0\13\1\115\0\12\1\1\2\3\1\1\2"+
+    "\4\1\1\2\27\1\5\2\20\0\1\1\7\0\64\1\14\0\2\2"+
+    "\62\1\21\2\13\0\12\2\6\0\22\2\6\1\3\0\1\1\4\0"+
+    "\12\2\34\1\10\2\2\0\27\1\15\2\14\0\35\1\3\0\4\2"+
+    "\57\1\16\2\16\0\1\1\12\2\46\0\51\1\16\2\11\0\3\1"+
+    "\1\2\10\1\2\2\2\0\12\2\6\0\27\1\3\0\1\1\1\2"+
+    "\4\0\60\1\1\2\1\1\3\2\2\1\2\2\5\1\2\2\1\1"+
+    "\1\2\1\1\30\0\3\1\2\0\13\1\5\2\2\0\3\1\2\2"+
+    "\12\0\6\1\2\0\6\1\2\0\6\1\11\0\7\1\1\0\7\1"+
+    "\221\0\43\1\10\2\1\0\2\2\2\0\12\2\6\0\u2ba4\1\14\0"+
+    "\27\1\4\0\61\1\u2104\0\u016e\1\2\0\152\1\46\0\7\1\14\0"+
+    "\5\1\5\0\1\1\1\2\12\1\1\0\15\1\1\0\5\1\1\0"+
+    "\1\1\1\0\2\1\1\0\2\1\1\0\154\1\41\0\u016b\1\22\0"+
+    "\100\1\2\0\66\1\50\0\15\1\3\0\20\2\20\0\7\2\14\0"+
+    "\2\1\30\0\3\1\31\0\1\1\6\0\5\1\1\0\207\1\2\0"+
+    "\1\2\4\0\1\1\13\0\12\2\7\0\32\1\4\0\1\1\1\0"+
+    "\32\1\13\0\131\1\3\0\6\1\2\0\6\1\2\0\6\1\2\0"+
+    "\3\1\3\0\2\1\3\0\2\1\22\0\3\2\4\0\14\1\1\0"+
+    "\32\1\1\0\23\1\1\0\2\1\1\0\17\1\2\0\16\1\42\0"+
+    "\173\1\105\0\65\1\210\0\1\2\202\0\35\1\3\0\61\1\57\0"+
+    "\37\1\21\0\33\1\65\0\36\1\2\0\44\1\4\0\10\1\1\0"+
+    "\5\1\52\0\236\1\2\0\12\2\u0356\0\6\1\2\0\1\1\1\0"+
+    "\54\1\1\0\2\1\3\0\1\1\2\0\27\1\252\0\26\1\12\0"+
+    "\32\1\106\0\70\1\6\0\2\1\100\0\1\1\3\2\1\0\2\2"+
+    "\5\0\4\2\4\1\1\0\3\1\1\0\33\1\4\0\3\2\4\0"+
+    "\1\2\40\0\35\1\203\0\66\1\12\0\26\1\12\0\23\1\215\0"+
+    "\111\1\u03b7\0\3\2\65\1\17\2\37\0\12\2\20\0\3\2\55\1"+
+    "\13\2\2\0\1\2\22\0\31\1\7\0\12\2\6\0\3\2\44\1"+
+    "\16\2\1\0\12\2\100\0\3\2\60\1\16\2\4\1\13\0\12\2"+
+    "\u04a6\0\53\1\15\2\10\0\12\2\u0936\0\u036f\1\221\0\143\1\u0b9d\0"+
+    "\u042f\1\u33d1\0\u0239\1\u04c7\0\105\1\13\0\1\1\56\2\20\0\4\2"+
+    "\15\1\u4060\0\2\1\u2163\0\5\2\3\0\26\2\2\0\7\2\36\0"+
+    "\4\2\224\0\3\2\u01bb\0\125\1\1\0\107\1\1\0\2\1\2\0"+
+    "\1\1\2\0\2\1\2\0\4\1\1\0\14\1\1\0\1\1\1\0"+
+    "\7\1\1\0\101\1\1\0\4\1\2\0\10\1\1\0\7\1\1\0"+
+    "\34\1\1\0\4\1\1\0\5\1\1\0\1\1\3\0\7\1\1\0"+
+    "\u0154\1\2\0\31\1\1\0\31\1\1\0\37\1\1\0\31\1\1\0"+
+    "\37\1\1\0\31\1\1\0\37\1\1\0\31\1\1\0\37\1\1\0"+
+    "\31\1\1\0\10\1\2\0\62\2\u1600\0\4\1\1\0\33\1\1\0"+
+    "\2\1\1\0\1\1\2\0\1\1\1\0\12\1\1\0\4\1\1\0"+
+    "\1\1\1\0\1\1\6\0\1\1\4\0\1\1\1\0\1\1\1\0"+
+    "\1\1\1\0\3\1\1\0\2\1\1\0\1\1\2\0\1\1\1\0"+
+    "\1\1\1\0\1\1\1\0\1\1\1\0\1\1\1\0\2\1\1\0"+
+    "\1\1\2\0\4\1\1\0\7\1\1\0\4\1\1\0\4\1\1\0"+
+    "\1\1\1\0\12\1\1\0\21\1\5\0\3\1\1\0\5\1\1\0"+
+    "\21\1\u1144\0\ua6d7\1\51\0\u1035\1\13\0\336\1\u3fe2\0\u021e\1\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u05ee\0"+
+    "\1\2\36\0\140\2\200\0\360\2\uffff\0\uffff\0\ufe12\0";
 
   /** 
    * Translates characters to character classes
@@ -160,9 +217,9 @@ class _ScopesLexer implements FlexLexer {
   private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
 
   private static final String ZZ_ROWMAP_PACKED_0 =
-    "\0\0\0\23\0\46\0\71\0\114\0\137\0\162\0\23"+
-    "\0\23\0\23\0\23\0\23\0\23\0\23\0\23\0\23"+
-    "\0\23\0\23\0\23\0\23\0\23";
+    "\0\0\0\25\0\52\0\77\0\124\0\151\0\176\0\25"+
+    "\0\25\0\25\0\25\0\25\0\25\0\25\0\25\0\25"+
+    "\0\25\0\25\0\25\0\25\0\25";
 
   private static int [] zzUnpackRowMap() {
     int [] result = new int[21];
@@ -190,11 +247,12 @@ class _ScopesLexer implements FlexLexer {
   private static final String ZZ_TRANS_PACKED_0 =
     "\1\2\1\3\1\2\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\24\0\2\3\1\0\1\3\21\0"+
-    "\1\4\23\0\1\5\23\0\1\24\23\0\1\25\14\0";
+    "\1\21\1\22\1\23\30\0\2\3\1\0\1\3\17\0"+
+    "\1\3\3\0\1\4\25\0\1\5\25\0\1\24\25\0"+
+    "\1\25\16\0";
 
   private static int [] zzUnpackTrans() {
-    int [] result = new int[133];
+    int [] result = new int[147];
     int offset = 0;
     offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
     return result;
@@ -218,13 +276,10 @@ class _ScopesLexer implements FlexLexer {
   private static final int ZZ_UNKNOWN_ERROR = 0;
   private static final int ZZ_NO_MATCH = 1;
   private static final int ZZ_PUSHBACK_2BIG = 2;
-  private static final char[] EMPTY_BUFFER = new char[0];
-  private static final int YYEOF = -1;
-  private static java.io.Reader zzReader = null; // Fake
 
   /* error messages for the codes above */
-  private static final String ZZ_ERROR_MSG[] = {
-    "Unkown internal scanner error",
+  private static final String[] ZZ_ERROR_MSG = {
+    "Unknown internal scanner error",
     "Error: could not match input",
     "Error: pushback value was too large"
   };
@@ -256,6 +311,9 @@ class _ScopesLexer implements FlexLexer {
     return j;
   }
 
+  /** the input device */
+  private java.io.Reader zzReader;
+
   /** the current state of the DFA */
   private int zzState;
 
@@ -297,31 +355,21 @@ class _ScopesLexer implements FlexLexer {
   private boolean zzEOFDone;
 
   /* user code: */
-  public void goTo(int offset) {
-    zzCurrentPos = zzMarkedPos = zzStartRead = offset;
-    zzPushbackPos = 0;
-    zzAtEOF = offset < zzEndRead;
-  }
-
   public _ScopesLexer() {
     this((java.io.Reader)null);
   }
 
 
-  _ScopesLexer(java.io.Reader in) {
-    this.zzReader = in;
-  }
-
   /**
-   * Creates a new scanner.
-   * There is also java.io.Reader version of this constructor.
+   * Creates a new scanner
    *
-   * @param   in  the java.io.Inputstream to read input from.
+   * @param   in  the java.io.Reader to read input from.
    */
-  _ScopesLexer(java.io.InputStream in) {
-    this(new java.io.InputStreamReader(in));
+  _ScopesLexer(java.io.Reader in) {
+    this.zzReader = in;
   }
 
+
   /** 
    * Unpacks the compressed character translation table.
    *
@@ -329,10 +377,10 @@ class _ScopesLexer implements FlexLexer {
    * @return         the unpacked character translation table
    */
   private static char [] zzUnpackCMap(String packed) {
-    char [] map = new char[0x10000];
+    char [] map = new char[0x110000];
     int i = 0;  /* index in packed string  */
     int j = 0;  /* index in unpacked array */
-    while (i < 1694) {
+    while (i < 2798) {
       int  count = packed.charAt(i++);
       char value = packed.charAt(i++);
       do map[j++] = value; while (--count > 0);
@@ -508,12 +556,20 @@ class _ScopesLexer implements FlexLexer {
 
       zzState = ZZ_LEXSTATE[zzLexicalState];
 
+      // set up zzAction for empty match case:
+      int zzAttributes = zzAttrL[zzState];
+      if ( (zzAttributes & 1) == 1 ) {
+        zzAction = zzState;
+      }
+
 
       zzForAction: {
         while (true) {
 
-          if (zzCurrentPosL < zzEndReadL)
-            zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+          if (zzCurrentPosL < zzEndReadL) {
+            zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+            zzCurrentPosL += Character.charCount(zzInput);
+          }
           else if (zzAtEOF) {
             zzInput = YYEOF;
             break zzForAction;
@@ -533,14 +589,15 @@ class _ScopesLexer implements FlexLexer {
               break zzForAction;
             }
             else {
-              zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
+              zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
+              zzCurrentPosL += Character.charCount(zzInput);
             }
           }
           int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
           if (zzNext == -1) break zzForAction;
           zzState = zzNext;
 
-          int zzAttributes = zzAttrL[zzState];
+          zzAttributes = zzAttrL[zzState];
           if ( (zzAttributes & 1) == 1 ) {
             zzAction = zzState;
             zzMarkedPosL = zzCurrentPosL;
@@ -553,86 +610,86 @@ class _ScopesLexer implements FlexLexer {
       // store back cached position
       zzMarkedPos = zzMarkedPosL;
 
-      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
-        case 16: 
-          { return ScopeTokenTypes.SHARP;
-          }
-        case 19: break;
-        case 6: 
-          { return ScopeTokenTypes.MINUS;
-          }
-        case 20: break;
-        case 18: 
-          { return ScopeTokenTypes.ANDAND;
-          }
-        case 21: break;
-        case 9: 
-          { return ScopeTokenTypes.RBRACKET;
-          }
-        case 22: break;
-        case 3: 
-          { return ScopeTokenTypes.WHITE_SPACE;
-          }
-        case 23: break;
-        case 13: 
-          { return ScopeTokenTypes.COLON;
-          }
-        case 24: break;
-        case 11: 
-          { return ScopeTokenTypes.RPARENTH;
-          }
-        case 25: break;
-        case 1: 
-          { return ScopeTokenTypes.BAD_CHARACTER;
-          }
-        case 26: break;
-        case 12: 
-          { return ScopeTokenTypes.DOT;
-          }
-        case 27: break;
-        case 2: 
-          { return ScopeTokenTypes.IDENTIFIER;
-          }
-        case 28: break;
-        case 8: 
-          { return ScopeTokenTypes.LBRACKET;
-          }
-        case 29: break;
-        case 17: 
-          { return ScopeTokenTypes.OROR;
-          }
-        case 30: break;
-        case 4: 
-          { return ScopeTokenTypes.INTEGER_LITERAL;
-          }
-        case 31: break;
-        case 5: 
-          { return ScopeTokenTypes.EXCL;
-          }
-        case 32: break;
-        case 15: 
-          { return ScopeTokenTypes.DIV;
-          }
-        case 33: break;
-        case 10: 
-          { return ScopeTokenTypes.LPARENTH;
-          }
-        case 34: break;
-        case 14: 
-          { return ScopeTokenTypes.ASTERISK;
-          }
-        case 35: break;
-        case 7: 
-          { return ScopeTokenTypes.TILDE;
-          }
-        case 36: break;
-        default:
-          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
-            zzAtEOF = true;
-            zzDoEOF();
-            return null;
-          }
-          else {
+      if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+        zzAtEOF = true;
+        zzDoEOF();
+        return null;
+      }
+      else {
+        switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+          case 1: 
+            { return ScopeTokenTypes.BAD_CHARACTER;
+            }
+          case 19: break;
+          case 2: 
+            { return ScopeTokenTypes.IDENTIFIER;
+            }
+          case 20: break;
+          case 3: 
+            { return ScopeTokenTypes.WHITE_SPACE;
+            }
+          case 21: break;
+          case 4: 
+            { return ScopeTokenTypes.INTEGER_LITERAL;
+            }
+          case 22: break;
+          case 5: 
+            { return ScopeTokenTypes.EXCL;
+            }
+          case 23: break;
+          case 6: 
+            { return ScopeTokenTypes.MINUS;
+            }
+          case 24: break;
+          case 7: 
+            { return ScopeTokenTypes.TILDE;
+            }
+          case 25: break;
+          case 8: 
+            { return ScopeTokenTypes.LBRACKET;
+            }
+          case 26: break;
+          case 9: 
+            { return ScopeTokenTypes.RBRACKET;
+            }
+          case 27: break;
+          case 10: 
+            { return ScopeTokenTypes.LPARENTH;
+            }
+          case 28: break;
+          case 11: 
+            { return ScopeTokenTypes.RPARENTH;
+            }
+          case 29: break;
+          case 12: 
+            { return ScopeTokenTypes.DOT;
+            }
+          case 30: break;
+          case 13: 
+            { return ScopeTokenTypes.COLON;
+            }
+          case 31: break;
+          case 14: 
+            { return ScopeTokenTypes.ASTERISK;
+            }
+          case 32: break;
+          case 15: 
+            { return ScopeTokenTypes.DIV;
+            }
+          case 33: break;
+          case 16: 
+            { return ScopeTokenTypes.SHARP;
+            }
+          case 34: break;
+          case 17: 
+            { return ScopeTokenTypes.OROR;
+            }
+          case 35: break;
+          case 18: 
+            { return ScopeTokenTypes.ANDAND;
+            }
+          case 36: break;
+          default:
             zzScanError(ZZ_NO_MATCH);
           }
       }
index 38b2c74eb8caaa128fa6791523e1383c83113f21..8f7dcfe73f5437bba78b2436cc50fa0cfaf4ceed 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2014 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,6 +29,7 @@ import com.intellij.codeInsight.template.CustomTemplateCallback;
 import com.intellij.codeInsight.template.TemplateManager;
 import com.intellij.diagnostic.AttachmentFactory;
 import com.intellij.featureStatistics.FeatureUsageTracker;
+import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.application.Result;
 import com.intellij.openapi.command.WriteCommandAction;
 import com.intellij.openapi.diagnostic.Logger;
@@ -75,7 +76,9 @@ public class ListTemplatesHandler implements CodeInsightActionHandler {
     }
 
     if (matchingTemplates.isEmpty() && customTemplatesLookupElements.isEmpty()) {
-      HintManager.getInstance().showErrorHint(editor, CodeInsightBundle.message("templates.no.defined"));
+      if (!ApplicationManager.getApplication().isUnitTestMode()) {
+        HintManager.getInstance().showErrorHint(editor, CodeInsightBundle.message("templates.no.defined"));
+      }
       return;
     }
 
index 6e65ede4e04e39b7fe5553c8dc6b6a095fb92324..03694735818a1e5c30e5eb1003e48151e57bf2f8 100644 (file)
@@ -48,17 +48,13 @@ public abstract class LogConsoleManagerBase implements LogConsoleManager, Dispos
   }
 
   @Override
-  public void addLogConsole(@NotNull String name, @NotNull String path, @NotNull Charset charset, long skippedContent, @NotNull RunConfigurationBase runConfiguration) {
-    addLogConsole(name, path, charset, skippedContent, getDefaultIcon(), runConfiguration);
-  }
-
-  public void addLogConsole(final String name, final String path, @NotNull Charset charset, final long skippedContent, Icon icon, @Nullable RunProfile runProfile) {
+  public void addLogConsole(@NotNull final String name, @NotNull final String path, @NotNull Charset charset, final long skippedContent, @NotNull RunConfigurationBase runConfiguration) {
     doAddLogConsole(new LogConsoleImpl(myProject, new File(path), charset, skippedContent, name, false, mySearchScope) {
       @Override
       public boolean isActive() {
         return isConsoleActive(path);
       }
-    }, path, icon, runProfile);
+    }, path, getDefaultIcon(), runConfiguration);
   }
 
   private void doAddLogConsole(@NotNull final LogConsoleBase log, String id,  Icon icon, @Nullable RunProfile runProfile) {
index 0e17890ada102fc18b698bcf2c7cbb56abb3f8e7..67bc6fe1b0970a3da16e6757ae8f1cadde3efeda 100644 (file)
@@ -6,12 +6,6 @@ import com.intellij.lexer.FlexLexer;
 %%
 
 %{
-  public void goTo(int offset) {
-    zzCurrentPos = zzMarkedPos = zzStartRead = offset;
-    zzPushbackPos = 0;
-    zzAtEOF = offset < zzEndRead;
-  }
-
   public _ScopesLexer() {
     this((java.io.Reader)null);
   }
index c45a6df66e3cc931f016e36b6aeefafc45ba1d38..1c0337379493f145fb11fafc07b536a99e817906 100644 (file)
@@ -63,6 +63,7 @@ public class CapturingProcessHandler extends OSProcessHandler {
     return new CapturingProcessAdapter(processOutput);
   }
 
+  @NotNull
   public ProcessOutput runProcess() {
     startNotify();
     if (waitFor()) {
index 552474500c869d1ff474f832db6ec2b8eb098906..3f7fd092494382afb8f6ea621f586cdaab36086d 100644 (file)
@@ -26,6 +26,8 @@ import java.util.List;
  * @author yole
  */
 public class ProcessOutput {
+  private static final int ERROR_EXIT_CODE = -1;
+  
   private final StringBuilder myStdoutBuilder = new StringBuilder();
   private final StringBuilder myStderrBuilder = new StringBuilder();
   private int myExitCode;
@@ -33,7 +35,7 @@ public class ProcessOutput {
   private boolean myCancelled;
 
   public ProcessOutput() {
-    myExitCode = -1; // until set explicitly, exit code denotes an error.
+    myExitCode = ERROR_EXIT_CODE; // until set explicitly, exit code denotes an error.
   }
 
   public ProcessOutput(final int exitCode) {
@@ -107,6 +109,14 @@ public class ProcessOutput {
     return myExitCode;
   }
 
+  /**
+   * @return true if exit code wasn't set and is still set to default value (this might happen, 
+   * for example, when our CapturingProcessHandler.runProcess() is interrupted)
+   */
+  public boolean hasErrorExitCode() {
+    return getExitCode() == ERROR_EXIT_CODE;
+  }
+
   public void setTimeout() {
     myTimeout = true;
   }
index 31a7f1cd83e40b817ca4ce181c2e3cfb6cce2371..97fd3221e3170db30558c53c2c9b30cd5059c549 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -37,11 +37,6 @@ public class MacIntelliJPasswordFieldUI extends DarculaPasswordFieldUI {
     return new MacIntelliJPasswordFieldUI((JPasswordField)c);
   }
 
-  @Override
-  protected void paintSafely(Graphics g) {
-    super.paintSafely(g);
-  }
-
   @Override
   protected void paintBackground(Graphics graphics) {
     Graphics2D g = (Graphics2D)graphics;
index 364798b5004b066dae0316ba2feac4516f965d17..12ba86b83e86bc94bdb8c1390214dc138ee3da60 100644 (file)
@@ -139,8 +139,8 @@ public class BaseOSProcessHandler extends ProcessHandler implements TaskExecutor
             public void consume(Integer exitCode) {
               try {
                 // tell readers that no more attempts to read process' output should be made
-                if (stdErrReader != null) stdErrReader.stop();
-                stdOutReader.stop();
+                stop(stdErrReader);
+                stop(stdOutReader);
 
                 try {
                   if (stdErrReader != null) stdErrReader.waitFor();
@@ -163,6 +163,17 @@ public class BaseOSProcessHandler extends ProcessHandler implements TaskExecutor
     super.startNotify();
   }
 
+  private static void stop(@Nullable BaseDataReader reader) {
+    if (reader != null) {
+      if (reader instanceof BaseOutputReader) {
+        ((BaseOutputReader)reader).stop(false);
+      }
+      else {
+        reader.stop();
+      }
+    }
+  }
+
   /** @deprecated override {@link #createOutputDataReader()} (to be removed in IDEA 18) */
   protected BaseDataReader createErrorDataReader(@SuppressWarnings("UnusedParameters") BaseDataReader.SleepingPolicy policy) {
     return createErrorDataReader();
index 16b1360a7cfa3533391bc2206733733d9d7a7fa5..0943a0775ae10b06e6752a501bc28c3c1451e2c3 100644 (file)
@@ -77,9 +77,9 @@ public class DefaultLogger extends Logger {
   @Override
   public void setLevel(Level level) { }
 
-  public static String attachmentsToString(Throwable t) {
+  public static String attachmentsToString(@Nullable Throwable t) {
     //noinspection ThrowableResultOfMethodCallIgnored
-    Throwable rootCause = ExceptionUtil.getRootCause(t);
+    Throwable rootCause = t == null ? null : ExceptionUtil.getRootCause(t);
     if (rootCause instanceof ExceptionWithAttachments) {
       return "\nAttachments:" + StringUtil.join(((ExceptionWithAttachments)rootCause).getAttachments(),
                                                 new Function<Attachment, String>() {
index 0f4491b04f3f7827a991bd02fe8362a8096e061c..1fc03c880992d185639427f400d421fd44fb4c1b 100644 (file)
@@ -27,7 +27,8 @@ import java.util.Arrays;
 public class ExceptionUtil {
   private ExceptionUtil() { }
 
-  public static Throwable getRootCause(Throwable e) {
+  @NotNull
+  public static Throwable getRootCause(@NotNull Throwable e) {
     while (true) {
       if (e.getCause() == null) return e;
       e = e.getCause();
index 8ecdc3b40252a1ae8e231fdee4e7aea79f651ee2..34e98b38dcc9a9edbe2350ebd9c1d60f7a045a7c 100644 (file)
@@ -190,8 +190,12 @@ public abstract class BaseOutputReader extends BaseDataReader {
 
   @Override
   public void stop() {
+    stop(true);
+  }
+
+  public void stop(boolean force) {
     super.stop();
-    if (mySleepingPolicy == SleepingPolicy.BLOCKING) {
+    if (force && mySleepingPolicy == SleepingPolicy.BLOCKING) {
       // we can't count on super.stop() since it only sets 'isRunning = false', and blocked Reader.read won't wake up.
       try { close(); }
       catch (IOException ignore) { }
index fa71fdda5208a82cd2d25a491012c3efb983177e..b2e21956b0501caa30179af0210561994d081efd 100644 (file)
@@ -69,7 +69,7 @@ class CallbackData {
     }
     else {
       if (mode.isSynchronous()) {
-        final Waiter waiter = new Waiter(project, afterUpdate, state,
+        final Waiter waiter = new Waiter(project, afterUpdate,
                                          VcsBundle.message("change.list.manager.wait.lists.synchronization", title), mode.isCancellable());
         return new CallbackData(
           new Runnable() {
index 3130dbf9b6999769a276b59b9f5873e8cb0420a0..86c2906e059e82b9b4133f13a41e8db0cab8b1f1 100644 (file)
@@ -32,7 +32,7 @@ class FictiveBackgroundable extends Task.Backgroundable {
                         final ModalityState state) {
     super(project, VcsBundle.message("change.list.manager.wait.lists.synchronization", title), cancellable);
     myState = state;
-    myWaiter = new Waiter(project, runnable, state, VcsBundle.message("change.list.manager.wait.lists.synchronization", title), cancellable);
+    myWaiter = new Waiter(project, runnable, VcsBundle.message("change.list.manager.wait.lists.synchronization", title), cancellable);
   }
 
   public void run(@NotNull final ProgressIndicator indicator) {
index 9a714e33027d9842dc3c56fe9756acbe46811dc7..3a8b491fc54f35e9f22be7b20fe5c869909241b8 100644 (file)
@@ -15,7 +15,6 @@
  */
 package com.intellij.openapi.vcs.changes;
 
-import com.intellij.openapi.application.ModalityState;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.progress.ProgressIndicator;
 import com.intellij.openapi.progress.Task;
@@ -25,16 +24,14 @@ import org.jetbrains.annotations.NotNull;
 
 public class Waiter extends Task.Modal {
   private final Logger LOG = Logger.getInstance("#com.intellij.openapi.vcs.changes.Waiter");
-  private final ModalityState myState;
   private final Runnable myRunnable;
   private boolean myStarted;
   private boolean myDone;
   private final Object myLock = new Object();
 
-  public Waiter(final Project project, final Runnable runnable, final ModalityState state, final String title, final boolean cancellable) {
+  public Waiter(final Project project, final Runnable runnable, final String title, final boolean cancellable) {
     super(project, title, cancellable);
     myRunnable = runnable;
-    myState = state;
     myDone = false;
     myStarted = false;
     setCancelText("Skip");
index 0dccdcb386fa31317da908f016470ce04573fc6b..70384052327f5043d2e8d52f64e2eed9f25b3c25 100644 (file)
@@ -36,8 +36,11 @@ public class ChangesBrowser extends ChangesBrowserBase<Change> {
                         boolean highlightProblems,
                         @Nullable Runnable inclusionListener,
                         MyUseCase useCase, @Nullable VirtualFile toSelect) {
-    super(project, changeLists, changes, initialListSelection, capableOfExcludingChanges, highlightProblems, inclusionListener, useCase,
-          toSelect, Change.class);
+    super(project, changes, capableOfExcludingChanges, highlightProblems, inclusionListener, useCase, toSelect, Change.class);
+
+    init();
+    setInitialSelection(changeLists, changes, initialListSelection);
+    rebuildList();
   }
 
   @NotNull
index 8c83a3fac421501097fef5a016aea247d406bb66..30e1fc58f5a5d2eacac8a09418c1cb06a07ab0e6 100644 (file)
@@ -58,9 +58,6 @@ public abstract class ChangesBrowserBase<T> extends JPanel implements TypeSafeDa
 
   // for backgroundable rollback to mark
   private boolean myDataIsDirty;
-  // this field is used to workaround issues connected to virtual method calls (like rebuildList()) in ChangesBrowserBase constructor
-  // so inheritors are not fully initialized yet when such methods are called from constructor
-  protected final boolean myIsInitialized;
   protected final Class<T> myClass;
   protected final ChangesTreeList<T> myViewer;
   protected ChangeList mySelectedChangeList;
@@ -89,9 +86,7 @@ public abstract class ChangesBrowserBase<T> extends JPanel implements TypeSafeDa
   }
 
   protected ChangesBrowserBase(final Project project,
-                               List<? extends ChangeList> changeLists,
                                @NotNull List<T> changes,
-                               ChangeList initialListSelection,
                                final boolean capableOfExcludingChanges,
                                final boolean highlightProblems,
                                @Nullable final Runnable inclusionListener,
@@ -124,15 +119,12 @@ public abstract class ChangesBrowserBase<T> extends JPanel implements TypeSafeDa
         return ChangesBrowserBase.this.getLeadSelectedObject(node);
       }
     };
+    myHeaderPanel = new JPanel(new BorderLayout());
+  }
 
-    myViewer.setDoubleClickHandler(getDoubleClickHandler());
-
-    setInitialSelection(changeLists, changes, initialListSelection);
-    rebuildList();
-
+  protected void init() {
     add(myViewer, BorderLayout.CENTER);
 
-    myHeaderPanel = new JPanel(new BorderLayout());
     myHeaderPanel.add(createToolbar(), BorderLayout.CENTER);
     add(myHeaderPanel, BorderLayout.NORTH);
 
@@ -140,7 +132,7 @@ public abstract class ChangesBrowserBase<T> extends JPanel implements TypeSafeDa
     add(myBottomPanel, BorderLayout.SOUTH);
 
     myViewer.installPopupHandler(myToolBarGroup);
-    myIsInitialized = true;
+    myViewer.setDoubleClickHandler(getDoubleClickHandler());
   }
 
   @NotNull
@@ -356,7 +348,7 @@ public abstract class ChangesBrowserBase<T> extends JPanel implements TypeSafeDa
       treeActionsGroup.add(action);
     }
 
-    ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, toolbarGroups, true);
+    ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.TOOLBAR, toolbarGroups, true);
     toolbar.setTargetComponent(this);
     return toolbar.getComponent();
   }
index c8f85ae59ac62aa03ba0e5fe2dc8b69109059774..80998f94bbaba09e1a98151243702461040d9831 100644 (file)
@@ -73,17 +73,17 @@ public class MultipleChangeListBrowser extends ChangesBrowserBase<Object> {
                                    @Nullable Runnable rebuildListListener,
                                    @Nullable Runnable inclusionListener,
                                    boolean unversionedFilesEnabled) {
-    super(project, changeLists, changes, initialListSelection, capableOfExcludingChanges, highlightProblems, inclusionListener,
-          ChangesBrowser.MyUseCase.LOCAL_CHANGES, null, Object.class);
+    super(project, changes, capableOfExcludingChanges, highlightProblems, inclusionListener, ChangesBrowser.MyUseCase.LOCAL_CHANGES, null,
+          Object.class);
     myRebuildListListener = rebuildListListener;
     myVcsConfiguration = ObjectUtils.assertNotNull(VcsConfiguration.getInstance(myProject));
     myUnversionedFilesEnabled = unversionedFilesEnabled;
 
+    init();
+    setInitialSelection(changeLists, changes, initialListSelection);
+
     myChangeListChooser = new ChangeListChooser();
     myChangeListChooser.updateLists(changeLists);
-    // rebuild toolbar to ensure "myUnversionedFilesEnabled" is considered
-    myHeaderPanel.removeAll();
-    myHeaderPanel.add(createToolbar(), BorderLayout.CENTER);
     myHeaderPanel.add(myChangeListChooser, BorderLayout.EAST);
     ChangeListManager.getInstance(myProject).addChangeListListener(myChangeListListener);
 
@@ -151,7 +151,7 @@ public class MultipleChangeListBrowser extends ChangesBrowserBase<Object> {
 
   @Override
   public void rebuildList() {
-    if (!myIsInitialized || myInRebuildList) return;
+    if (myInRebuildList) return;
     try {
       myInRebuildList = true;
 
@@ -435,6 +435,13 @@ public class MultipleChangeListBrowser extends ChangesBrowserBase<Object> {
       super("Show Unversioned Files", null, AllIcons.Debugger.Disable_value_calculation);
     }
 
+    @Override
+    public void update(@NotNull AnActionEvent e) {
+      super.update(e);
+
+      e.getPresentation().setEnabledAndVisible(ActionPlaces.isToolbarPlace(e.getPlace()));
+    }
+
     @Override
     public boolean isSelected(@NotNull AnActionEvent e) {
       return myVcsConfiguration.SHOW_UNVERSIONED_FILES_WHILE_COMMIT;
index c6e20b4d034c502f19ae44ba53a221741e53ff3c..488cfc5e19d1397040895ececc0786c3aa364010 100644 (file)
@@ -22,7 +22,6 @@ import com.intellij.openapi.editor.colors.EditorFontType;
 import com.intellij.openapi.progress.util.ProgressWindow;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.ui.OnePixelDivider;
-import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.vcs.changes.issueLinks.IssueLinkHtmlRenderer;
 import com.intellij.openapi.vcs.ui.FontUtil;
@@ -33,8 +32,8 @@ import com.intellij.ui.JBColor;
 import com.intellij.ui.SeparatorComponent;
 import com.intellij.ui.components.JBLabel;
 import com.intellij.ui.components.JBLoadingPanel;
+import com.intellij.ui.components.JBPanel;
 import com.intellij.ui.components.JBScrollPane;
-import com.intellij.util.NotNullProducer;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.text.DateFormatUtil;
 import com.intellij.util.ui.JBUI;
@@ -70,6 +69,7 @@ import java.io.StringWriter;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author Kirill Likhodedov
@@ -88,7 +88,7 @@ class DetailsPanel extends JPanel implements ListSelectionListener {
   @NotNull private final VcsLogColorManager myColorManager;
 
   @NotNull private VisiblePack myDataPack;
-  @Nullable private VcsFullCommitDetails myCurrentCommitDetails;
+  @NotNull private Set<VcsFullCommitDetails> myCurrentCommitDetails = Collections.emptySet();
 
   private final StatusText myEmptyText;
 
@@ -111,7 +111,7 @@ class DetailsPanel extends JPanel implements ListSelectionListener {
         Dimension size = super.getPreferredSize();
         boolean expanded = false;
         for (Component c : getComponents()) {
-          if (c instanceof DataPanel && ((DataPanel)c).isExpanded()) {
+          if (c instanceof CommitPanel && ((CommitPanel)c).isExpanded()) {
             expanded = true;
             break;
           }
@@ -137,7 +137,6 @@ class DetailsPanel extends JPanel implements ListSelectionListener {
           super.paintChildren(g);
         }
       }
-
     };
     myMainContentPanel.setLayout(new BoxLayout(myMainContentPanel, BoxLayout.Y_AXIS));
     myEmptyText = new StatusText(myMainContentPanel) {
@@ -188,7 +187,7 @@ class DetailsPanel extends JPanel implements ListSelectionListener {
   public void valueChanged(@Nullable ListSelectionEvent event) {
     if (event != null && event.getValueIsAdjusting()) return;
 
-    VcsFullCommitDetails newCommitDetails = null;
+    Set<VcsFullCommitDetails> newCommitDetails = ContainerUtil.newHashSet();
 
     int[] rows = myGraphTable.getSelectedRows();
 
@@ -205,48 +204,28 @@ class DetailsPanel extends JPanel implements ListSelectionListener {
     int count = 0;
     for (int i = 0; i < Math.min(rows.length, MAX_ROWS); i++) {
       int row = rows[i];
-      boolean reuseExisting = count + 1 < myMainContentPanel.getComponentCount();
-      ReferencesPanel referencesPanel;
-      DataPanel dataPanel;
+      boolean reuseExisting = count < myMainContentPanel.getComponentCount();
+      CommitPanel commitPanel;
       if (!reuseExisting) {
-        referencesPanel = new ReferencesPanel(myColorManager);
-        dataPanel = new DataPanel(myLogData.getProject(), myLogData.isMultiRoot());
+        commitPanel = new CommitPanel();
         if (i > 0) {
-          myMainContentPanel.add(new SeparatorComponent(8, OnePixelDivider.BACKGROUND, null));
-          count ++;
+          myMainContentPanel.add(new SeparatorComponent(0, OnePixelDivider.BACKGROUND, null));
+          count++;
         }
-        referencesPanel.setAlignmentX(LEFT_ALIGNMENT);
-        myMainContentPanel.add(referencesPanel);
-        count++;
-        dataPanel.setAlignmentX(LEFT_ALIGNMENT);
-        myMainContentPanel.add(dataPanel);
+        commitPanel.setAlignmentX(LEFT_ALIGNMENT);
+        myMainContentPanel.add(commitPanel);
         count++;
       }
       else {
-        if (i > 0) count ++; // separator
-        referencesPanel = (ReferencesPanel)myMainContentPanel.getComponent(count++);
-        dataPanel = (DataPanel)myMainContentPanel.getComponent(count++);
+        if (i > 0) count++; // separator
+        commitPanel = (CommitPanel)myMainContentPanel.getComponent(count++);
       }
 
       VcsFullCommitDetails commitData = tableModel.getFullDetails(row);
-      if (commitData instanceof LoadingDetails) {
-        myLoadingPanel.startLoading();
-        dataPanel.setData(null);
-        referencesPanel.setReferences(Collections.emptyList());
-        updateDetailsBorder(null);
-      }
-      else {
-        dataPanel.setData(commitData);
-        referencesPanel.setReferences(sortRefs(commitData.getId(), commitData.getRoot()));
-        updateDetailsBorder(commitData);
-        newCommitDetails = commitData;
-      }
-      List<String> branches = null;
+      commitPanel.setCommit(commitData);
       if (!(commitData instanceof LoadingDetails)) {
-        branches = myLogData.getContainingBranchesGetter().requestContainingBranches(commitData.getRoot(), commitData.getId());
+        newCommitDetails.add(commitData);
       }
-      dataPanel.setBranches(branches);
-      dataPanel.update();
     }
 
     // clear superfluous items
@@ -255,43 +234,17 @@ class DetailsPanel extends JPanel implements ListSelectionListener {
     }
 
     if (rows.length > MAX_ROWS) {
-      myMainContentPanel.add(new SeparatorComponent(8, OnePixelDivider.BACKGROUND, null));
+      myMainContentPanel.add(new SeparatorComponent(0, OnePixelDivider.BACKGROUND, null));
       JBLabel label = new JBLabel("(showing " + MAX_ROWS + " of " + rows.length + " selected commits)");
       label.setFont(getDataPanelFont());
       label.setAlignmentX(LEFT_ALIGNMENT);
       myMainContentPanel.add(label);
     }
 
-    if (!Comparing.equal(myCurrentCommitDetails, newCommitDetails)) {
-      myCurrentCommitDetails = newCommitDetails;
+    if (!ContainerUtil.intersects(myCurrentCommitDetails, newCommitDetails)) {
       myScrollPane.getVerticalScrollBar().setValue(0);
     }
-  }
-
-  private void updateDetailsBorder(@Nullable VcsFullCommitDetails data) {
-    if (data == null || !myColorManager.isMultipleRoots()) {
-      myMainContentPanel.setBorder(JBUI.Borders.empty(VcsLogGraphTable.ROOT_INDICATOR_WHITE_WIDTH / 2,
-                                                                   VcsLogGraphTable.ROOT_INDICATOR_WHITE_WIDTH / 2, 0, 0));
-    }
-    else {
-      Color color = VcsLogGraphTable.getRootBackgroundColor(data.getRoot(), myColorManager);
-      myMainContentPanel.setBorder(new CompoundBorder(new MatteBorder(0, VcsLogGraphTable.ROOT_INDICATOR_COLORED_WIDTH, 0, 0, color),
-                                                      new MatteBorder(VcsLogGraphTable.ROOT_INDICATOR_WHITE_WIDTH / 2,
-                                                                      VcsLogGraphTable.ROOT_INDICATOR_WHITE_WIDTH, 0, 0,
-                                                                      new JBColor(new NotNullProducer<Color>() {
-                                                                        @NotNull
-                                                                        @Override
-                                                                        public Color produce() {
-                                                                          return getDetailsBackground();
-                                                                        }
-                                                                      }))));
-    }
-  }
-
-  @NotNull
-  private List<VcsRef> sortRefs(@NotNull Hash hash, @NotNull VirtualFile root) {
-    Collection<VcsRef> refs = myDataPack.getRefs().refsToCommit(hash, root);
-    return ContainerUtil.sorted(refs, myLogData.getLogProvider(root).getReferenceManager().getLabelsOrderComparator());
+    myCurrentCommitDetails = newCommitDetails;
   }
 
   @NotNull
@@ -299,6 +252,75 @@ class DetailsPanel extends JPanel implements ListSelectionListener {
     return EditorColorsManager.getInstance().getGlobalScheme().getFont(EditorFontType.PLAIN);
   }
 
+  private class CommitPanel extends JBPanel {
+    private static final int BOTTOM_BORDER = 2;
+    @NotNull private final ReferencesPanel myReferencesPanel;
+    @NotNull private final DataPanel myDataPanel;
+
+    public CommitPanel() {
+      setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+
+      myReferencesPanel = new ReferencesPanel(myColorManager);
+      myDataPanel = new DataPanel(myLogData.getProject(), myLogData.isMultiRoot());
+
+      myReferencesPanel.setAlignmentX(LEFT_ALIGNMENT);
+      myDataPanel.setAlignmentX(LEFT_ALIGNMENT);
+
+      add(myReferencesPanel);
+      add(myDataPanel);
+    }
+
+    public void setCommit(@NotNull VcsFullCommitDetails commitData) {
+      if (commitData instanceof LoadingDetails) {
+        myLoadingPanel.startLoading();
+        myDataPanel.setData(null);
+        myReferencesPanel.setReferences(Collections.emptyList());
+        updateBorder(null);
+      }
+      else {
+        myDataPanel.setData(commitData);
+        myReferencesPanel.setReferences(sortRefs(commitData.getId(), commitData.getRoot()));
+        updateBorder(commitData);
+      }
+      List<String> branches = null;
+      if (!(commitData instanceof LoadingDetails)) {
+        branches = myLogData.getContainingBranchesGetter().requestContainingBranches(commitData.getRoot(), commitData.getId());
+      }
+      myDataPanel.setBranches(branches);
+      myDataPanel.update();
+      revalidate();
+    }
+
+    @NotNull
+    private List<VcsRef> sortRefs(@NotNull Hash hash, @NotNull VirtualFile root) {
+      Collection<VcsRef> refs = myDataPack.getRefs().refsToCommit(hash, root);
+      return ContainerUtil.sorted(refs, myLogData.getLogProvider(root).getReferenceManager().getLabelsOrderComparator());
+    }
+
+    private void updateBorder(@Nullable VcsFullCommitDetails data) {
+      if (data == null || !myColorManager.isMultipleRoots()) {
+        setBorder(JBUI.Borders.empty(VcsLogGraphTable.ROOT_INDICATOR_WHITE_WIDTH / 2,
+                                     VcsLogGraphTable.ROOT_INDICATOR_WHITE_WIDTH / 2, BOTTOM_BORDER, 0));
+      }
+      else {
+        Color color = VcsLogGraphTable.getRootBackgroundColor(data.getRoot(), myColorManager);
+        setBorder(new CompoundBorder(new MatteBorder(0, VcsLogGraphTable.ROOT_INDICATOR_COLORED_WIDTH, 0, 0, color),
+                                     new MatteBorder(VcsLogGraphTable.ROOT_INDICATOR_WHITE_WIDTH / 2,
+                                                     VcsLogGraphTable.ROOT_INDICATOR_WHITE_WIDTH, BOTTOM_BORDER, 0,
+                                                     new JBColor(DetailsPanel::getDetailsBackground))));
+      }
+    }
+
+    @Override
+    public Color getBackground() {
+      return getDetailsBackground();
+    }
+
+    public boolean isExpanded() {
+      return myDataPanel.isExpanded();
+    }
+  }
+
   private static class DataPanel extends JEditorPane {
     public static final int BRANCHES_LIMIT = 6;
     public static final int BRANCHES_TABLE_COLUMN_COUNT = 3;
@@ -474,7 +496,9 @@ class DetailsPanel extends JPanel implements ListSelectionListener {
       int separator = fullMessage.indexOf("\n\n");
       String subject = separator > 0 ? fullMessage.substring(0, separator) : fullMessage;
       String description = fullMessage.substring(subject.length());
-      return "<b>" + getHtmlWithFonts(escapeMultipleSpaces(IssueLinkHtmlRenderer.formatTextWithLinks(myProject, subject)), Font.BOLD) + "</b>" +
+      return "<b>" +
+             getHtmlWithFonts(escapeMultipleSpaces(IssueLinkHtmlRenderer.formatTextWithLinks(myProject, subject)), Font.BOLD) +
+             "</b>" +
              getHtmlWithFonts(escapeMultipleSpaces(IssueLinkHtmlRenderer.formatTextWithLinks(myProject, description)));
     }
 
@@ -605,5 +629,4 @@ class DetailsPanel extends JPanel implements ListSelectionListener {
       return myRefPainter.getSize(myReference, this);
     }
   }
-
 }
index cdea6193235bb1701dc88b3d2ee4a60a7d433415..5cb27c2cd255caa08d0007e59e7a4319bfdb6dda 100644 (file)
                      key="object.allocation.in.loop.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.performance.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.performance.ObjectAllocationInLoopInspection"/>
+    <localInspection groupPath="Java" language="JAVA" shortName="ObjectInstantiationInEqualsHashCode" bundle="com.siyeh.InspectionGadgetsBundle"
+                     key="object.instantiation.inside.equals.or.hashcode.display.name" groupBundle="messages.InspectionsBundle"
+                     groupKey="group.names.performance.issues" enabledByDefault="false" level="WARNING"
+                     implementationClass="com.siyeh.ig.performance.ObjectInstantiationInEqualsHashCodeInspection"/>
     <localInspection groupPath="Java" language="JAVA" suppressId="UsingRandomNextDoubleForRandomInteger" shortName="RandomDoubleForRandomInteger"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="random.double.for.random.integer.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.performance.issues" enabledByDefault="false"
index 4001057468da93e981c6f001d4d26b8e9237d7e9..9b5b23b54a73dff8ea735e8ed93b85a601a7df0d 100644 (file)
@@ -447,9 +447,6 @@ large.array.allocation.no.outofmemoryerror.display.name=Large array allocation w
 large.array.allocation.no.outofmemoryerror.problem.descriptor=Large array allocation which is not checked for out-of-memory condition #loc
 large.array.allocation.no.outofmemoryerror.maximum.number.of.elements.option=Maximum number of elements:
 connection.opened.not.safely.closed.display.name=Connection opened but not safely closed
-field.repeatedly.accessed.in.method.display.name=Field repeatedly accessed in method
-field.repeatedly.accessed.in.method.problem.descriptor=Field ''{0}'' accessed repeatedly in method <code>#ref()</code> #loc
-field.repeatedly.accessed.in.method.ignore.option=Ignore 'final' fields
 interface.one.inheritor.display.name=Interface which has only one direct inheritor
 interface.one.inheritor.problem.descriptor=Interface <code>#ref</code> has only one direct inheritor #loc
 method.call.in.loop.condition.display.name=Method call in loop condition
@@ -736,7 +733,6 @@ octal.literal.display.name=Octal integer
 misordered.assert.equals.arguments.display.name=Misordered 'assertEquals()' arguments
 unnecessary.constructor.display.name=Redundant no-arg constructor
 method.name.same.as.parent.name.display.name=Method name same as parent class name
-java.lang.reflect.display.name=Use of 'java.lang.reflect'
 while.can.be.foreach.display.name='while' loop replaceable with 'foreach'
 big.decimal.equals.display.name='equals()' called on java.math.BigDecimal
 wait.not.in.synchronized.context.display.name='wait()' while not synchronized
@@ -1078,7 +1074,6 @@ string.equals.empty.string.is.empty.problem.descriptor=<code>#ref("")</code> can
 random.double.for.random.integer.problem.descriptor=Using <code>Random.#ref</code> to create random integer #loc
 manual.array.copy.problem.descriptor=Manual array copy #loc
 manual.array.to.collection.copy.problem.descriptor=Manual array to collection copy #loc
-java.lang.reflect.problem.descriptor=Use of type <code>#ref</code> from 'java.lang.reflect' #loc
 call.to.simple.getter.in.class.problem.descriptor=Call to simple getter <code>#ref()</code> from within class #loc
 call.to.simple.setter.in.class.problem.descriptor=Call to simple setter <code>#ref()</code> from within class #loc
 asserts.without.messages.problem.descriptor=JUnit <code>#ref()</code> without message #loc
@@ -2177,4 +2172,7 @@ optional.contains.array.problem.descriptor='Optional' contains array <code>#ref<
 optional.get.without.is.present.display.name='Optional.get()' without 'isPresent()' check
 optional.get.without.is.present.problem.descriptor=<code>{0}.#ref()</code> without ''isPresent()'' check
 synchronization.on.get.class.display.name=Synchronization on 'getClass()'
-synchronization.on.get.class.problem.descriptor=Synchronization on <code>#ref()</code> #loc
\ No newline at end of file
+synchronization.on.get.class.problem.descriptor=Synchronization on <code>#ref()</code> #loc
+object.instantiation.inside.equals.or.hashcode.display.name=Object instantiation inside 'equals()' or 'hashCode()'
+object.instantiation.inside.equals.problem.descriptor=Object instantiation inside 'equals()' #loc
+object.instantiation.inside.hashcode.problem.descriptor=Object instantiation inside 'hashCode()' #loc
\ No newline at end of file
index 23ad190409c80b738a8f8828d9bf2ac39fde01ff..d02bfc5e94c1cffa02d3795443c3ee80a4f28ad6 100644 (file)
@@ -362,7 +362,7 @@ public class ControlFlowUtils {
     return PsiTreeUtil.getParentOfType(expression, PsiReturnStatement.class) != null;
   }
 
-  private static boolean isInThrowStatementArgument(@NotNull PsiExpression expression) {
+  public static boolean isInThrowStatementArgument(@NotNull PsiExpression expression) {
     return PsiTreeUtil.getParentOfType(expression, PsiThrowStatement.class) != null;
   }
 
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/ObjectInstantiationInEqualsHashCodeInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/ObjectInstantiationInEqualsHashCodeInspection.java
new file mode 100644 (file)
index 0000000..ee8aa63
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.siyeh.ig.performance;
+
+import com.intellij.psi.*;
+import com.intellij.psi.util.PsiTreeUtil;
+import com.siyeh.InspectionGadgetsBundle;
+import com.siyeh.ig.BaseInspection;
+import com.siyeh.ig.BaseInspectionVisitor;
+import com.siyeh.ig.psiutils.ControlFlowUtils;
+import com.siyeh.ig.psiutils.ExpressionUtils;
+import com.siyeh.ig.psiutils.MethodUtils;
+import org.jetbrains.annotations.Nls;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * @author Bas Leijdekkers
+ */
+public class ObjectInstantiationInEqualsHashCodeInspection extends BaseInspection {
+
+  @Nls
+  @NotNull
+  @Override
+  public String getDisplayName() {
+    return InspectionGadgetsBundle.message("object.instantiation.inside.equals.or.hashcode.display.name");
+  }
+
+  @NotNull
+  @Override
+  protected String buildErrorString(Object... infos) {
+    final PsiMethod method = PsiTreeUtil.getParentOfType((PsiElement)infos[0], PsiMethod.class);
+    return InspectionGadgetsBundle.message(MethodUtils.isEquals(method)
+                                           ? "object.instantiation.inside.equals.problem.descriptor"
+                                           : "object.instantiation.inside.hashcode.problem.descriptor");
+  }
+
+  @Override
+  public BaseInspectionVisitor buildVisitor() {
+    return new ObjectInstantiationInEqualsHashCodeVisitor();
+  }
+
+  // todo check boxing too
+  private static class ObjectInstantiationInEqualsHashCodeVisitor extends BaseInspectionVisitor {
+
+    @Override
+    public void visitPolyadicExpression(PsiPolyadicExpression expression) {
+      super.visitPolyadicExpression(expression);
+      if (!ExpressionUtils.hasStringType(expression) || ExpressionUtils.isEvaluatedAtCompileTime(expression)) {
+        return;
+      }
+      if (!isInsideEqualsOrHashCode(expression)) {
+        return;
+      }
+      registerError(expression, expression);
+    }
+
+    @Override
+    public void visitNewExpression(PsiNewExpression expression) {
+      super.visitNewExpression(expression);
+      if (!isInsideEqualsOrHashCode(expression)) {
+        return;
+      }
+      registerNewExpressionError(expression, expression);
+    }
+
+    private static boolean isInsideEqualsOrHashCode(PsiElement element) {
+      final PsiMethod method =
+        PsiTreeUtil.getParentOfType(element, PsiMethod.class, true, PsiAssertStatement.class, PsiThrowStatement.class);
+      if (method == null) {
+        return false;
+      }
+      return MethodUtils.isEquals(method) || MethodUtils.isHashCode(method);
+    }
+  }
+}
diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/ObjectInstantiationInEqualsHashCode.html b/plugins/InspectionGadgets/src/inspectionDescriptions/ObjectInstantiationInEqualsHashCode.html
new file mode 100644 (file)
index 0000000..3d48c9f
--- /dev/null
@@ -0,0 +1,11 @@
+<html>
+<body>
+Reports construction of (temporary) new objects inside an <b>equals()</b> or <b>hashCode()</b> method.
+This can cause significant performance problems when for example objects of classes with such constructs are added to a <b>Set</b> or <b>Map</b>,
+where these methods will be called often.
+This inspection will not warn when the objects are created in a <b>throw</b> or <b>assert</b> statement.
+<!-- tooltip end -->
+<p>
+<small>New in 2016.2</small>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/object_instantiation_in_equals_hash_code/ObjectInstantiationInEqualsHashCode.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/object_instantiation_in_equals_hash_code/ObjectInstantiationInEqualsHashCode.java
new file mode 100644 (file)
index 0000000..759ce6e
--- /dev/null
@@ -0,0 +1,30 @@
+import java.util.Arrays;
+
+class ObjectInstantiationInEqualsHashCode {
+
+  Object a;
+  int b;
+
+  public boolean equals(Object o) {
+    ObjectInstantiationInEqualsHashCode other = (ObjectInstantiationInEqualsHashCode)o;
+    return Arrays.equals(new <warning descr="Object instantiation inside 'equals()'">Object</warning>[] {a, b}, new <warning descr="Object instantiation inside 'equals()'">Object</warning>[] {other.a, other.b});
+  }
+
+  public int hashCode() {
+    return (<warning descr="Object instantiation inside 'hashCode()'">a + ", " + b</warning>).hashCode();
+  }
+}
+class X {
+
+  Object a;
+  int b;
+
+  public boolean equals(Object o) {
+    throw new UnsupportedOperationException("asdf" + a);
+  }
+
+  public int hashCode() {
+    assert a != null : "check " + b;
+    return a.hashCode() + b;
+  }
+}
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/ObjectInstantiationInEqualsHashCodeInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/ObjectInstantiationInEqualsHashCodeInspectionTest.java
new file mode 100644 (file)
index 0000000..c1b6c1a
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.siyeh.ig.performance;
+
+import com.intellij.codeInspection.InspectionProfileEntry;
+import com.siyeh.ig.LightInspectionTestCase;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author Bas Leijdekkers
+ */
+public class ObjectInstantiationInEqualsHashCodeInspectionTest extends LightInspectionTestCase {
+
+  public void testObjectInstantiationInEqualsHashCode() {
+    doTest();
+  }
+
+  @Nullable
+  @Override
+  protected InspectionProfileEntry getInspection() {
+    return new ObjectInstantiationInEqualsHashCodeInspection();
+  }
+}
\ No newline at end of file
index f32da22cda6f2a74018dee262aef94211f2d5060..397c4782ad164d56993199f2df7bc371789f0799 100644 (file)
@@ -153,10 +153,13 @@ class GitHttpGuiAuthenticator implements GitHttpAuthenticator {
   @Nullable
   private AuthDialog showAuthDialog(final String url, final String login) {
     final Ref<AuthDialog> dialog = Ref.create();
-    ApplicationManager.getApplication().invokeAndWait(() -> {
-      dialog.set(new AuthDialog(myProject, myTitle, "Enter credentials for " + url, login, null, true));
-      dialog.get().show();
-    }, ModalityState.defaultModalityState());
+    ApplicationManager.getApplication().invokeAndWait(new Runnable() {
+      @Override
+      public void run() {
+        dialog.set(new AuthDialog(myProject, myTitle, "Enter credentials for " + url, login, null, true));
+        dialog.get().show();
+      }
+    }, ModalityState.any());
     return dialog.get();
   }
 
index 90865d0aeadbc1aa947c2ef76baaf362c8784c48..7ace1cf80f01a1873858ecd5339c6473f497654c 100644 (file)
@@ -1,6 +1,7 @@
+/* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */
+
 /*
- * Copyright 2000-2014 JetBrains s.r.o.
- *
+ * Copyright 2000-2008 JetBrains s.r.o.
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
@@ -14,8 +15,6 @@
  * limitations under the License.
  */
 
-/* The following code was generated by JFlex 1.4.3 on 21.05.14 20:33 */
-
 package org.jetbrains.plugins.groovy.lang.groovydoc.lexer;
 
 import com.intellij.lexer.FlexLexer;
@@ -25,24 +24,27 @@ import com.intellij.psi.tree.IElementType;
 
 /**
  * This class is a scanner generated by 
- * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
- * on 21.05.14 20:33 from the specification file
- * <tt>C:/Work/Idea/tools/lexer/../../community/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/groovydoc/lexer/gdoc.flex</tt>
+ * <a href="http://www.jflex.de/">JFlex</a> 1.7.0-SNAPSHOT
+ * from the specification file <tt>/ideadev/tools/lexer/../../community/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/groovydoc/lexer/gdoc.flex</tt>
  */
 public class _GroovyDocLexer implements FlexLexer {
+
+  /** This character denotes the end of file */
+  public static final int YYEOF = -1;
+
   /** initial size of the lookahead buffer */
   private static final int ZZ_BUFFERSIZE = 16384;
 
   /** lexical states */
-  public static final int INLINE_TAG_NAME = 16;
-  public static final int PARAM_TAG_SPACE = 8;
-  public static final int COMMENT_DATA = 4;
-  public static final int DOC_TAG_VALUE = 10;
+  public static final int YYINITIAL = 0;
   public static final int COMMENT_DATA_START = 2;
+  public static final int COMMENT_DATA = 4;
   public static final int TAG_DOC_SPACE = 6;
-  public static final int YYINITIAL = 0;
+  public static final int PARAM_TAG_SPACE = 8;
+  public static final int DOC_TAG_VALUE = 10;
   public static final int DOC_TAG_VALUE_IN_PAREN = 12;
   public static final int DOC_TAG_VALUE_IN_LTGT = 14;
+  public static final int INLINE_TAG_NAME = 16;
 
   /**
    * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
@@ -59,89 +61,113 @@ public class _GroovyDocLexer implements FlexLexer {
    * Translates characters to character classes
    */
   private static final String ZZ_CMAP_PACKED = 
-    "\11\0\1\2\1\1\1\0\1\2\1\1\22\0\1\2\2\0\1\13"+
+    "\11\0\1\2\1\1\1\26\1\2\1\1\22\0\1\2\2\0\1\13"+
     "\1\4\3\0\1\11\1\12\1\7\1\0\1\14\1\5\1\3\1\6"+
     "\12\3\1\5\1\0\1\22\1\0\1\23\1\0\1\15\32\4\1\10"+
     "\1\0\1\10\1\0\1\4\1\0\1\17\13\4\1\21\2\4\1\16"+
-    "\1\4\1\20\10\4\1\24\1\0\1\25\44\0\4\4\4\0\1\4"+
-    "\12\0\1\4\4\0\1\4\5\0\27\4\1\0\37\4\1\0\u01ca\4"+
-    "\4\0\14\4\16\0\5\4\7\0\1\4\1\0\1\4\201\0\5\4"+
-    "\1\0\2\4\2\0\4\4\10\0\1\4\1\0\3\4\1\0\1\4"+
-    "\1\0\24\4\1\0\123\4\1\0\213\4\10\0\236\4\11\0\46\4"+
-    "\2\0\1\4\7\0\47\4\7\0\1\4\100\0\33\4\5\0\3\4"+
-    "\30\0\1\4\24\0\53\4\43\0\2\4\1\0\143\4\1\0\1\4"+
-    "\17\0\2\4\7\0\2\4\12\0\3\4\2\0\1\4\20\0\1\4"+
-    "\1\0\36\4\35\0\131\4\13\0\1\4\30\0\41\4\11\0\2\4"+
-    "\4\0\1\4\5\0\26\4\4\0\1\4\11\0\1\4\3\0\1\4"+
-    "\27\0\31\4\107\0\1\4\1\0\13\4\127\0\66\4\3\0\1\4"+
-    "\22\0\1\4\7\0\12\4\17\0\7\4\1\0\7\4\5\0\10\4"+
-    "\2\0\2\4\2\0\26\4\1\0\7\4\1\0\1\4\3\0\4\4"+
-    "\3\0\1\4\20\0\1\4\15\0\2\4\1\0\3\4\16\0\4\4"+
-    "\7\0\1\4\11\0\6\4\4\0\2\4\2\0\26\4\1\0\7\4"+
-    "\1\0\2\4\1\0\2\4\1\0\2\4\37\0\4\4\1\0\1\4"+
-    "\23\0\3\4\20\0\11\4\1\0\3\4\1\0\26\4\1\0\7\4"+
-    "\1\0\2\4\1\0\5\4\3\0\1\4\22\0\1\4\17\0\2\4"+
-    "\17\0\1\4\23\0\10\4\2\0\2\4\2\0\26\4\1\0\7\4"+
-    "\1\0\2\4\1\0\5\4\3\0\1\4\36\0\2\4\1\0\3\4"+
-    "\17\0\1\4\21\0\1\4\1\0\6\4\3\0\3\4\1\0\4\4"+
-    "\3\0\2\4\1\0\1\4\1\0\2\4\3\0\2\4\3\0\3\4"+
-    "\3\0\14\4\26\0\1\4\50\0\1\4\13\0\10\4\1\0\3\4"+
-    "\1\0\27\4\1\0\12\4\1\0\5\4\3\0\1\4\32\0\2\4"+
-    "\6\0\2\4\43\0\10\4\1\0\3\4\1\0\27\4\1\0\12\4"+
-    "\1\0\5\4\3\0\1\4\40\0\1\4\1\0\2\4\17\0\2\4"+
-    "\22\0\10\4\1\0\3\4\1\0\51\4\2\0\1\4\20\0\1\4"+
-    "\21\0\2\4\30\0\6\4\5\0\22\4\3\0\30\4\1\0\11\4"+
-    "\1\0\1\4\2\0\7\4\72\0\60\4\1\0\2\4\13\0\10\4"+
-    "\72\0\2\4\1\0\1\4\2\0\2\4\1\0\1\4\2\0\1\4"+
-    "\6\0\4\4\1\0\7\4\1\0\3\4\1\0\1\4\1\0\1\4"+
-    "\2\0\2\4\1\0\4\4\1\0\2\4\11\0\1\4\2\0\5\4"+
-    "\1\0\1\4\25\0\4\4\40\0\1\4\77\0\10\4\1\0\44\4"+
-    "\33\0\5\4\163\0\53\4\24\0\1\4\20\0\6\4\4\0\4\4"+
-    "\3\0\1\4\3\0\2\4\7\0\3\4\4\0\15\4\14\0\1\4"+
-    "\21\0\46\4\1\0\1\4\5\0\1\4\2\0\53\4\1\0\u014d\4"+
-    "\1\0\4\4\2\0\7\4\1\0\1\4\1\0\4\4\2\0\51\4"+
-    "\1\0\4\4\2\0\41\4\1\0\4\4\2\0\7\4\1\0\1\4"+
-    "\1\0\4\4\2\0\17\4\1\0\71\4\1\0\4\4\2\0\103\4"+
-    "\45\0\20\4\20\0\125\4\14\0\u026c\4\2\0\21\4\1\0\32\4"+
-    "\5\0\113\4\3\0\3\4\17\0\15\4\1\0\4\4\16\0\22\4"+
-    "\16\0\22\4\16\0\15\4\1\0\3\4\17\0\64\4\43\0\1\4"+
-    "\3\0\2\4\103\0\130\4\10\0\51\4\1\0\1\4\5\0\106\4"+
-    "\12\0\35\4\63\0\36\4\2\0\5\4\13\0\54\4\25\0\7\4"+
-    "\70\0\27\4\11\0\65\4\122\0\1\4\135\0\57\4\21\0\7\4"+
-    "\67\0\36\4\15\0\2\4\12\0\54\4\32\0\44\4\51\0\3\4"+
-    "\12\0\44\4\153\0\4\4\1\0\4\4\3\0\2\4\11\0\300\4"+
-    "\100\0\u0116\4\2\0\6\4\2\0\46\4\2\0\6\4\2\0\10\4"+
-    "\1\0\1\4\1\0\1\4\1\0\1\4\1\0\37\4\2\0\65\4"+
-    "\1\0\7\4\1\0\1\4\3\0\3\4\1\0\7\4\3\0\4\4"+
-    "\2\0\6\4\4\0\15\4\5\0\3\4\1\0\7\4\102\0\2\4"+
-    "\23\0\1\4\34\0\1\4\15\0\1\4\20\0\15\4\3\0\33\4"+
-    "\107\0\1\4\4\0\1\4\2\0\12\4\1\0\1\4\3\0\5\4"+
-    "\6\0\1\4\1\0\1\4\1\0\1\4\1\0\4\4\1\0\13\4"+
-    "\2\0\4\4\5\0\5\4\4\0\1\4\21\0\51\4\u0a77\0\57\4"+
-    "\1\0\57\4\1\0\205\4\6\0\4\4\3\0\2\4\14\0\46\4"+
-    "\1\0\1\4\5\0\1\4\2\0\70\4\7\0\1\4\20\0\27\4"+
-    "\11\0\7\4\1\0\7\4\1\0\7\4\1\0\7\4\1\0\7\4"+
-    "\1\0\7\4\1\0\7\4\1\0\7\4\120\0\1\4\u01d5\0\3\4"+
-    "\31\0\11\4\7\0\5\4\2\0\5\4\4\0\126\4\6\0\3\4"+
-    "\1\0\132\4\1\0\4\4\5\0\51\4\3\0\136\4\21\0\33\4"+
-    "\65\0\20\4\u0200\0\u19b6\4\112\0\u51cd\4\63\0\u048d\4\103\0\56\4"+
-    "\2\0\u010d\4\3\0\20\4\12\0\2\4\24\0\57\4\20\0\31\4"+
-    "\10\0\120\4\47\0\11\4\2\0\147\4\2\0\4\4\1\0\4\4"+
-    "\14\0\13\4\115\0\12\4\1\0\3\4\1\0\4\4\1\0\27\4"+
-    "\25\0\1\4\7\0\64\4\16\0\62\4\76\0\6\4\3\0\1\4"+
-    "\16\0\34\4\12\0\27\4\31\0\35\4\7\0\57\4\34\0\1\4"+
-    "\60\0\51\4\27\0\3\4\1\0\10\4\24\0\27\4\3\0\1\4"+
-    "\5\0\60\4\1\0\1\4\3\0\2\4\2\0\5\4\2\0\1\4"+
-    "\1\0\1\4\30\0\3\4\2\0\13\4\7\0\3\4\14\0\6\4"+
-    "\2\0\6\4\2\0\6\4\11\0\7\4\1\0\7\4\221\0\43\4"+
-    "\35\0\u2ba4\4\14\0\27\4\4\0\61\4\u2104\0\u016e\4\2\0\152\4"+
-    "\46\0\7\4\14\0\5\4\5\0\1\4\1\0\12\4\1\0\15\4"+
-    "\1\0\5\4\1\0\1\4\1\0\2\4\1\0\2\4\1\0\154\4"+
-    "\41\0\u016b\4\22\0\100\4\2\0\66\4\50\0\15\4\66\0\2\4"+
-    "\30\0\3\4\31\0\1\4\6\0\5\4\1\0\207\4\7\0\1\4"+
-    "\34\0\32\4\4\0\1\4\1\0\32\4\13\0\131\4\3\0\6\4"+
-    "\2\0\6\4\2\0\6\4\2\0\3\4\3\0\2\4\3\0\2\4"+
-    "\31\0";
+    "\1\4\1\20\10\4\1\24\1\0\1\25\7\0\1\26\34\0\4\4"+
+    "\4\0\1\4\12\0\1\4\4\0\1\4\5\0\27\4\1\0\37\4"+
+    "\1\0\u01ca\4\4\0\14\4\16\0\5\4\7\0\1\4\1\0\1\4"+
+    "\201\0\5\4\1\0\2\4\2\0\4\4\10\0\1\4\1\0\3\4"+
+    "\1\0\1\4\1\0\24\4\1\0\123\4\1\0\213\4\10\0\236\4"+
+    "\11\0\46\4\2\0\1\4\7\0\47\4\7\0\1\4\100\0\33\4"+
+    "\5\0\3\4\30\0\1\4\24\0\53\4\43\0\2\4\1\0\143\4"+
+    "\1\0\1\4\17\0\2\4\7\0\2\4\12\0\3\4\2\0\1\4"+
+    "\20\0\1\4\1\0\36\4\35\0\131\4\13\0\1\4\30\0\41\4"+
+    "\11\0\2\4\4\0\1\4\5\0\26\4\4\0\1\4\11\0\1\4"+
+    "\3\0\1\4\27\0\31\4\107\0\1\4\1\0\13\4\127\0\66\4"+
+    "\3\0\1\4\22\0\1\4\7\0\12\4\17\0\7\4\1\0\7\4"+
+    "\5\0\10\4\2\0\2\4\2\0\26\4\1\0\7\4\1\0\1\4"+
+    "\3\0\4\4\3\0\1\4\20\0\1\4\15\0\2\4\1\0\3\4"+
+    "\16\0\4\4\7\0\1\4\11\0\6\4\4\0\2\4\2\0\26\4"+
+    "\1\0\7\4\1\0\2\4\1\0\2\4\1\0\2\4\37\0\4\4"+
+    "\1\0\1\4\23\0\3\4\20\0\11\4\1\0\3\4\1\0\26\4"+
+    "\1\0\7\4\1\0\2\4\1\0\5\4\3\0\1\4\22\0\1\4"+
+    "\17\0\2\4\17\0\1\4\23\0\10\4\2\0\2\4\2\0\26\4"+
+    "\1\0