- Bundled JFlex: apply fix for http://sourceforge.net/p/jflex/bugs/118/ (IDEA-138062)
authorMaxim.Mossienko <Maxim.Mossienko@jetbrains.com>
Wed, 25 Mar 2015 00:26:55 +0000 (01:26 +0100)
committerMaxim.Mossienko <Maxim.Mossienko@jetbrains.com>
Wed, 25 Mar 2015 00:26:55 +0000 (01:26 +0100)
- Disable constructor generation with InputStream parameter by default

tools/lexer/jflex-1.4/lib/JFlex.jar
tools/lexer/jflex-1.4/src/JFlex/Emitter.java
tools/lexer/jflex-1.4/src/JFlex/LexScan.flex
tools/lexer/jflex-1.4/src/JFlex/LexScan.java
tools/lexer/jflex-1.4/src/JFlex/Options.java

index 8bef2fdbade41dad89b438eb73f7d8343cb8a4e2..2387c2c00ec664bd1762e0221c6ae5e219055686 100644 (file)
Binary files a/tools/lexer/jflex-1.4/lib/JFlex.jar and b/tools/lexer/jflex-1.4/lib/JFlex.jar differ
index 7ca5bab577455642ce6d75d0c9a9128cdc2f093c..c1904253367bd5b4b9b610a0334aebe9a70b59d4 100644 (file)
@@ -804,7 +804,14 @@ final public class Emitter {
   }
   
   private void emitConstructorDecl(boolean printCtorArgs) {
+    println("  /**");
+    println("   * Creates a new scanner");
+    if (scanner.emitInputStreamCtor) {
+      println("   * There is also a java.io.InputStream version of this constructor.");
+    }
+    println("   *");
+    println("   * @param   in  the java.io.Reader to read input from.");
+    println("   */");
     String warn = 
         "// WARNING: this is a default constructor for " +
         "debug/standalone only. Has no custom parameters or init code.";
@@ -836,38 +843,40 @@ final public class Emitter {
     println("  }");
     println();
 
-    
-    println("  /**");
-    println("   * Creates a new scanner.");
-    println("   * There is also java.io.Reader version of this constructor.");
-    println("   *");
-    println("   * @param   in  the java.io.Inputstream to read input from.");
-    println("   */");
-    if (!printCtorArgs) println(warn);
-    
-    print("  ");
-    if ( scanner.isPublic ) print("public ");    
-    print( getBaseName(scanner.className) );      
-    print("(java.io.InputStream in");
-    if (printCtorArgs) emitCtorArgs();
-    print(")");
-    
-    if ( scanner.initThrow != null && printCtorArgs ) {
-      print(" throws ");
-      print( scanner.initThrow );
-    }
-    
-    println(" {");    
 
-    print("    this(new java.io.InputStreamReader(in)");
-    if (printCtorArgs) {
-      for (int i=0; i < scanner.ctorArgs.size(); i++) {
-        print(", "+scanner.ctorArgs.elementAt(i));
-      }      
+    if (scanner.emitInputStreamCtor) {
+      println("  /**");
+      println("   * Creates a new scanner.");
+      println("   * There is also java.io.Reader version of this constructor.");
+      println("   *");
+      println("   * @param   in  the java.io.Inputstream to read input from.");
+      println("   */");
+      if (!printCtorArgs) println(warn);
+
+      print("  ");
+      if (scanner.isPublic) print("public ");
+      print(getBaseName(scanner.className));
+      print("(java.io.InputStream in");
+      if (printCtorArgs) emitCtorArgs();
+      print(")");
+
+      if (scanner.initThrow != null && printCtorArgs) {
+        print(" throws ");
+        print(scanner.initThrow);
+      }
+
+      println(" {");
+
+      print("    this(new java.io.InputStreamReader(in)");
+      if (printCtorArgs) {
+        for (int i = 0; i < scanner.ctorArgs.size(); i++) {
+          print(", " + scanner.ctorArgs.elementAt(i));
+        }
+      }
+      println(");");
+
+      println("  }");
     }
-    println(");");
-    
-    println("  }");
   }
 
   private void emitCtorArgs() {
@@ -1219,11 +1228,14 @@ final public class Emitter {
         println("            if (zzFin.length <= " + zzBufferLLength() + ") { zzFin = new boolean[" + zzBufferLLength() + "+1]; }");
         println("            boolean zzFinL[] = zzFin;");
         println("            while (zzFState != -1 && zzFPos < zzMarkedPos) {");
-        println("              if ((zzAttrL[zzFState] & 1) == 1) { zzFinL[zzFPos] = true; } ");
+        println("              zzFinL[zzFPos] = ((zzAttrL[zzFState] & 1) == 1);");
         println("              zzInput = " + zzBufferLAccess("zzFPos++") + ";");
         println("              zzFState = zzTransL[ zzRowMapL[zzFState] + zzCMapL[zzInput] ];");
         println("            }");
-        println("            if (zzFState != -1 && (zzAttrL[zzFState] & 1) == 1) { zzFinL[zzFPos] = true; } ");
+        println("            if (zzFState != -1) { zzFinL[zzFPos++] = ((zzAttrL[zzFState] & 1) == 1); } ");
+        println("            while (zzFPos <= zzMarkedPos) {");
+        println("              zzFinL[zzFPos++] = false;");
+        println("            }");
         println();                
         println("            zzFState = "+dfa.entryState[action.getEntryState()+1]+";");
         println("            zzFPos = zzMarkedPos;");
index 5079cb165264b9459719e46d333421dcc4d79100..d8f0e6e251d80a55f7fd29cc237b4ba68c9ee347 100644 (file)
@@ -100,6 +100,7 @@ import java.util.Stack;
   boolean caseless;
   boolean inclusive_states;
   boolean eofclose;
+  boolean emitInputStreamCtor = Options.emitInputStreamCtor;
     
   String isImplementing;
   String isExtending;
index 061ce9a4476822e91456b8ff60ed077bafe22fea..92f7ce38550c322aa48963411a1fc70d007a1d3e 100644 (file)
@@ -1957,7 +1957,8 @@ public final class LexScan implements sym, java_cup.runtime.Scanner {
   boolean caseless;
   boolean inclusive_states;
   boolean eofclose;
-    
+  boolean emitInputStreamCtor = Options.emitInputStreamCtor;
+
   String isImplementing;
   String isExtending;
   String className = "Yylex";
index 83e36a389f6e78f9923437d127126701b259ebb7..88590de49154efcd4bb121d3c507eb761bece696 100644 (file)
@@ -69,6 +69,8 @@ public class Options {
   public static boolean dot;
   /** If true, you will be flooded with information (e.g. dfa tables).  */
   public static boolean dump;
+  /** If true, the generated scanner will include a constructor taking an InputStream. */
+  public static boolean emitInputStreamCtor;
 
        static { setDefaults(); }
 
@@ -123,6 +125,7 @@ public class Options {
     time = false;
     dot = false;
     dump = false;
+    emitInputStreamCtor = false;
     Skeleton.readDefault();
   }