JAL-2252 now buffered read of 3 lines of a time in help files
[jalview.git] / utils / MessageBundleChecker.java
index 15e16cf..4489a93 100644 (file)
@@ -40,7 +40,7 @@ import java.util.regex.Pattern;
  * @author gmcarstairs
  *
  */
-public class MessageBundleChecker
+public class MessageBundleChecker implements BufferedLineReader.LineCleaner
 {
   /*
    * regex ^"[^"]*"$
@@ -212,64 +212,37 @@ public class MessageBundleChecker
       return;
     }
 
-    String[] lines = new String[bufferSize];
     BufferedReader br = new BufferedReader(new FileReader(f));
-    for (int i = 0; i < bufferSize; i++)
-    {
-      String readLine = br.readLine();
-      lines[i] = stripCommentsAndTrim(readLine);
-    }
+    BufferedLineReader blr = new BufferedLineReader(br, bufferSize, this);
 
     int lineNo = 0;
-
-    while (lines[bufferSize - 1] != null)
+    String line = blr.read();
+    while (line != null)
     {
       lineNo++;
-      inspectSourceLines(path, lineNo, lines);
-
-      for (int i = 0; i < bufferSize - 1; i++)
-      {
-        lines[i] = lines[i + 1];
-      }
-      lines[bufferSize - 1] = stripCommentsAndTrim(br.readLine());
+      inspectSourceLines(path, lineNo, line);
+      line = blr.read();
     }
     br.close();
 
   }
 
-  /*
-   * removes anything after (and including) '//'
-   */
-  private String stripCommentsAndTrim(String line)
-  {
-    if (line != null)
-    {
-      int pos = line.indexOf("//");
-      if (pos != -1)
-      {
-        line = line.substring(0, pos);
-      }
-      line = line.replace("\t", " ").trim();
-    }
-    return line;
-  }
-
   /**
    * Look for calls to MessageManager methods, possibly split over two or more
-   * lines
+   * lines that have been concatenated while parsing the file
    * 
    * @param path
    * @param lineNo
-   * @param lines
+   * @param line
    */
-  private void inspectSourceLines(String path, int lineNo, String[] lines)
+  private void inspectSourceLines(String path, int lineNo, String line)
   {
-    String lineNos = String.format("%d-%d", lineNo, lineNo + lines.length
+    String lineNos = String
+            .format("%d-%d", lineNo, lineNo + bufferSize
             - 1);
-    String combined = combineLines(lines);
     for (String method : METHODS)
     {
-      int pos = combined.indexOf(method);
+      int pos = line.indexOf(method);
       if (pos == -1)
       {
         continue;
@@ -278,7 +251,7 @@ public class MessageBundleChecker
       /*
        * extract what follows the opening bracket of the method call
        */
-      String methodArgs = combined.substring(pos + method.length()).trim();
+      String methodArgs = line.substring(pos + method.length()).trim();
       if ("".equals(methodArgs))
       {
         /*
@@ -305,7 +278,7 @@ public class MessageBundleChecker
       if (METHOD3 == method)
       {
         System.out.println(String.format("Dynamic key at %s line %s %s",
-                path.substring(sourcePath.length()), lineNos, combined));
+                path.substring(sourcePath.length()), lineNos, line));
         continue;
       }
 
@@ -313,14 +286,14 @@ public class MessageBundleChecker
       if (messageKey == null)
       {
         System.out.println(String.format("Trouble parsing %s line %s %s",
-                path.substring(sourcePath.length()), lineNos, combined));
+                path.substring(sourcePath.length()), lineNos, line));
         continue;
       }
 
       if (!(STRING_PATTERN.matcher(messageKey).matches()))
       {
         System.out.println(String.format("Dynamic key at %s line %s %s",
-                path.substring(sourcePath.length()), lineNos, combined));
+                path.substring(sourcePath.length()), lineNos, line));
         continue;
       }
 
@@ -384,22 +357,6 @@ public class MessageBundleChecker
     return endPos == -1 ? null : key.substring(0, endPos);
   }
 
-  private String combineLines(String[] lines)
-  {
-    String combined = "";
-    if (lines != null)
-    {
-      for (String line : lines)
-      {
-        if (line != null)
-        {
-          combined += line;
-        }
-      }
-    }
-    return combined;
-  }
-
   /**
    * Loads properties from Message.properties
    * 
@@ -421,4 +378,22 @@ public class MessageBundleChecker
 
   }
 
+  /**
+   * Remove any trailing comments, change tabs to space, and trim
+   */
+  @Override
+  public String cleanLine(String l)
+  {
+    if (l != null)
+    {
+      int pos = l.indexOf("//");
+      if (pos != -1)
+      {
+        l = l.substring(0, pos);
+      }
+      l = l.replace("\t", " ").trim();
+    }
+    return l;
+  }
+
 }