You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@joshua.apache.org by to...@apache.org on 2016/09/26 12:21:40 UTC

[3/3] incubator-joshua git commit: static analysis based code improvements on utils package

static analysis based code improvements on utils package


Project: http://git-wip-us.apache.org/repos/asf/incubator-joshua/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-joshua/commit/e2a1e6a0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-joshua/tree/e2a1e6a0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-joshua/diff/e2a1e6a0

Branch: refs/heads/master
Commit: e2a1e6a03063379bed3574ec3ae8968afdb1d21e
Parents: 8e39692
Author: Tommaso Teofili <to...@apache.org>
Authored: Mon Sep 26 14:18:11 2016 +0200
Committer: Tommaso Teofili <to...@apache.org>
Committed: Mon Sep 26 14:18:11 2016 +0200

----------------------------------------------------------------------
 .../java/org/apache/joshua/util/Algorithms.java |   4 +-
 src/main/java/org/apache/joshua/util/Bits.java  |   8 +-
 src/main/java/org/apache/joshua/util/Cache.java |   2 +-
 .../java/org/apache/joshua/util/ChartSpan.java  |   4 +-
 .../java/org/apache/joshua/util/Counted.java    |   6 +-
 .../java/org/apache/joshua/util/Counts.java     |  18 +--
 .../org/apache/joshua/util/ExtractTopCand.java  |   6 +-
 .../org/apache/joshua/util/FileUtility.java     |   2 +-
 .../java/org/apache/joshua/util/JoshuaEval.java |  38 +++---
 .../apache/joshua/util/NBestListUtility.java    |   4 +-
 src/main/java/org/apache/joshua/util/Ngram.java |   7 +-
 .../apache/joshua/util/PackedGrammarServer.java |   5 +-
 .../java/org/apache/joshua/util/Platform.java   |   2 +-
 .../org/apache/joshua/util/StreamGobbler.java   |   4 +-
 .../joshua/util/UnicodeCharacterName.java       | 132 +++++++++----------
 .../apache/joshua/util/encoding/Analyzer.java   |  22 ++--
 .../joshua/util/encoding/EightBitQuantizer.java |   4 +-
 .../util/encoding/EncoderConfiguration.java     |   4 +-
 .../util/encoding/FeatureTypeAnalyzer.java      |  28 ++--
 .../joshua/util/encoding/FloatEncoder.java      |  12 +-
 .../apache/joshua/util/encoding/IntEncoder.java |  12 +-
 .../util/encoding/PrimitiveFloatEncoder.java    |   2 +-
 .../util/encoding/PrimitiveIntEncoder.java      |   8 +-
 .../org/apache/joshua/util/io/BinaryIn.java     |   4 +-
 .../org/apache/joshua/util/io/BinaryOut.java    |   8 +-
 .../util/io/ExistingUTF8EncodedTextFile.java    |   6 +-
 .../org/apache/joshua/util/io/LineReader.java   |   2 +-
 .../joshua/util/quantization/Quantizer.java     |  16 +--
 .../quantization/QuantizerConfiguration.java    |  15 +--
 .../util/quantization/StatelessQuantizer.java   |   2 +-
 30 files changed, 193 insertions(+), 194 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/Algorithms.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/Algorithms.java b/src/main/java/org/apache/joshua/util/Algorithms.java
index 327c882..270c048 100644
--- a/src/main/java/org/apache/joshua/util/Algorithms.java
+++ b/src/main/java/org/apache/joshua/util/Algorithms.java
@@ -29,7 +29,7 @@ public final class Algorithms {
    * @param source todo
    * @return the minimum edit distance.
    */
-  public static final int levenshtein(String[] candidate, String[] source) {
+  public static int levenshtein(String[] candidate, String[] source) {
     // First check to see whether either of the arrays
     // is empty, in which case the least cost is simply
     // the length of the other array (which would correspond
@@ -74,7 +74,7 @@ public final class Algorithms {
   /**
    * Returns the minimum of the three values.
    */
-  private static final int minimum(int a, int b, int c) {
+  private static int minimum(int a, int b, int c) {
     int minimum;
     minimum = a;
     if (b < minimum) minimum = b;

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/Bits.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/Bits.java b/src/main/java/org/apache/joshua/util/Bits.java
index b5294f6..b3e6482 100644
--- a/src/main/java/org/apache/joshua/util/Bits.java
+++ b/src/main/java/org/apache/joshua/util/Bits.java
@@ -54,7 +54,7 @@ public class Bits {
    */
   public static short decodeHighBits(int i) {
 
-    long key = i & 0xFFFF0000l;
+    long key = i & 0xFFFF0000L;
 
     key >>= 16;
 
@@ -86,11 +86,11 @@ public class Bits {
   public static long encodeAsLong(int high, int low) {
 
     // Store the first int value in the highest 32 bits of the long
-    long key = high | 0x0000000000000000l;
+    long key = high | 0x0000000000000000L;
     key <<= 32;
 
     // Store the second int value in the lowest 32 bits of the long
-    long lowLong = low & 0x00000000FFFFFFFFl;;
+    long lowLong = low & 0x00000000FFFFFFFFL;
     key |= lowLong;
 
     return key;
@@ -105,7 +105,7 @@ public class Bits {
    */
   public static int decodeHighBits(long l) {
 
-    long key = l & 0xFFFFFFFF00000000l;
+    long key = l & 0xFFFFFFFF00000000L;
 
     key >>= 32;
 

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/Cache.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/Cache.java b/src/main/java/org/apache/joshua/util/Cache.java
index 0d72f8a..cacb086 100644
--- a/src/main/java/org/apache/joshua/util/Cache.java
+++ b/src/main/java/org/apache/joshua/util/Cache.java
@@ -69,7 +69,7 @@ public class Cache<K, V> extends LinkedHashMap<K, V> {
   // ===============================================================
 
   /** Maximum number of items that the cache can contain. */
-  int maxCapacity;
+  final int maxCapacity;
 
   // ===============================================================
   // Constructor(s)

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/ChartSpan.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/ChartSpan.java b/src/main/java/org/apache/joshua/util/ChartSpan.java
index b22d2aa..544a967 100644
--- a/src/main/java/org/apache/joshua/util/ChartSpan.java
+++ b/src/main/java/org/apache/joshua/util/ChartSpan.java
@@ -37,8 +37,8 @@ package org.apache.joshua.util;
  * @author Matt Post post@cs.jhu.edu
  */
 public class ChartSpan<Type> {
-  Object[] chart;
-  int max;
+  final Object[] chart;
+  final int max;
 
   public ChartSpan(int w, Type defaultValue) {
     //System.err.println(String.format("ChartSpan::ChartSpan(%d)", w));

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/Counted.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/Counted.java b/src/main/java/org/apache/joshua/util/Counted.java
index 9f719b3..03b5a8a 100644
--- a/src/main/java/org/apache/joshua/util/Counted.java
+++ b/src/main/java/org/apache/joshua/util/Counted.java
@@ -83,10 +83,6 @@ public class Counted<E> implements Comparable<Counted<E>> {
    *         order of the counts associated with each object
    */
   public static <E> Comparator<Counted<E>> getDescendingComparator() {
-    return new Comparator<Counted<E>>() {
-      public int compare(Counted<E> o1, Counted<E> o2) {
-        return (o2.count.compareTo(o1.count));
-      }
-    };
+    return (o1, o2) -> (o2.count.compareTo(o1.count));
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/Counts.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/Counts.java b/src/main/java/org/apache/joshua/util/Counts.java
index 89a9f38..ea30347 100644
--- a/src/main/java/org/apache/joshua/util/Counts.java
+++ b/src/main/java/org/apache/joshua/util/Counts.java
@@ -66,10 +66,10 @@ public class Counts<A, B> implements Iterable<Pair<A, B>> {
    */
   public Counts(float floorProbability) {
     this.floorProbability = floorProbability;
-    this.counts = new HashMap<A, Map<B, Integer>>();
-    this.bTotals = new HashMap<B, Integer>();
-    this.probabilities = new HashMap<A, Map<B, Float>>();
-    this.reverseProbabilities = new HashMap<B, Map<A, Float>>();
+    this.counts = new HashMap<>();
+    this.bTotals = new HashMap<>();
+    this.probabilities = new HashMap<>();
+    this.reverseProbabilities = new HashMap<>();
   }
 
 
@@ -86,7 +86,7 @@ public class Counts<A, B> implements Iterable<Pair<A, B>> {
       if (counts.containsKey(a)) {
         bMap = counts.get(a);
       } else {
-        bMap = new HashMap<B, Integer>();
+        bMap = new HashMap<>();
         counts.put(a, bMap);
       }
 
@@ -145,7 +145,7 @@ public class Counts<A, B> implements Iterable<Pair<A, B>> {
   /**
    * Gets the total number of times the specified element has been seen.
    * 
-   * @param b
+   * @param b the element to count
    * @return the total number of times the specified element has been seen
    */
   int getCount(B b) {
@@ -179,7 +179,7 @@ public class Counts<A, B> implements Iterable<Pair<A, B>> {
       if (probabilities.containsKey(a)) {
         bMap = probabilities.get(a);
       } else {
-        bMap = new HashMap<B, Float>();
+        bMap = new HashMap<>();
       }
 
 
@@ -223,7 +223,7 @@ public class Counts<A, B> implements Iterable<Pair<A, B>> {
         if (reverseProbabilities.containsKey(b)) {
           aMap = reverseProbabilities.get(b);
         } else {
-          aMap = new HashMap<A, Float>();
+          aMap = new HashMap<>();
         }
 
         if (aMap.containsKey(a)) {
@@ -293,7 +293,7 @@ public class Counts<A, B> implements Iterable<Pair<A, B>> {
           bIterator = entry.getValue().keySet().iterator();
         }
 
-        return new Pair<A, B>(entry.getKey(), bIterator.next());
+        return new Pair<>(entry.getKey(), bIterator.next());
       }
 
       public void remove() {

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/ExtractTopCand.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/ExtractTopCand.java b/src/main/java/org/apache/joshua/util/ExtractTopCand.java
index 8f9b575..1578960 100644
--- a/src/main/java/org/apache/joshua/util/ExtractTopCand.java
+++ b/src/main/java/org/apache/joshua/util/ExtractTopCand.java
@@ -76,10 +76,8 @@ public class ExtractTopCand {
     try {
       // TODO: see documentation for extractOneBest
       // regarding using an n-best SegmentFileParser.
-      IndexedReader<String> nbestReader =
-          new IndexedReader<String>("line", "-".equals(inFile)
-              ? new LineReader(System.in)
-              : new LineReader(inFile));
+      IndexedReader<String> nbestReader = new IndexedReader<>("line",
+          "-".equals(inFile) ? new LineReader(System.in) : new LineReader(inFile));
 
       /*
        * TODO: This duplicates FileUtility.getWriteFileStream but with the addition of defaulting to

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/FileUtility.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/FileUtility.java b/src/main/java/org/apache/joshua/util/FileUtility.java
index 0f13e6a..d257af0 100644
--- a/src/main/java/org/apache/joshua/util/FileUtility.java
+++ b/src/main/java/org/apache/joshua/util/FileUtility.java
@@ -55,7 +55,7 @@ public class FileUtility {
    * @return the parent path
    */
   static public String dirname(String fileName) {
-    if (fileName.indexOf(File.separator) != -1)
+    if (fileName.contains(File.separator))
       return fileName.substring(0, fileName.lastIndexOf(File.separator));
 
     return ".";

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/JoshuaEval.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/JoshuaEval.java b/src/main/java/org/apache/joshua/util/JoshuaEval.java
index 79473ee..e7c1848 100644
--- a/src/main/java/org/apache/joshua/util/JoshuaEval.java
+++ b/src/main/java/org/apache/joshua/util/JoshuaEval.java
@@ -230,9 +230,7 @@ public class JoshuaEval {
       for (int i = 0; i < numSentences; ++i) {
         print("Sentence #" + i + ": ");
         int[] stats = new int[suffStatsCount];
-        for (int s = 0; s < suffStatsCount; ++s) {
-          stats[s] = SS[i][s];
-        }
+        System.arraycopy(SS[i], 0, stats, 0, suffStatsCount);
         evalMetric.printDetailedScore_fromStats(stats, true);
         // already prints a \n
       }
@@ -282,31 +280,38 @@ public class JoshuaEval {
 
     while (argno < args.length) {
       String option = args[argno];
-      if (option.equals("-cand")) {
+      switch (option) {
+      case "-cand":
         candFileName = args[argno + 1];
-      } else if (option.equals("-format")) {
+        break;
+      case "-format":
         candFileFormat = args[argno + 1];
         if (!candFileFormat.equals("plain") && !candFileFormat.equals("nbest")) {
           throw new RuntimeException("candFileFormat must be either plain or nbest.");
         }
-      } else if (option.equals("-rank")) {
+        break;
+      case "-rank":
         candRank = Integer.parseInt(args[argno + 1]);
         if (refsPerSen < 1) {
           throw new RuntimeException("Argument for -rank must be positive.");
         }
-      } else if (option.equals("-ref")) {
+        break;
+      case "-ref":
         refFileName = args[argno + 1];
-      } else if (option.equals("-rps")) {
+        break;
+      case "-rps":
         refsPerSen = Integer.parseInt(args[argno + 1]);
         if (refsPerSen < 1) {
           throw new RuntimeException("refsPerSen must be positive.");
         }
-      } else if (option.equals("-txtNrm")) {
+        break;
+      case "-txtNrm":
         textNormMethod = Integer.parseInt(args[argno + 1]);
         if (textNormMethod < 0 || textNormMethod > 4) {
           throw new RuntimeException("textNormMethod should be between 0 and 4");
         }
-      } else if (option.equals("-m")) {
+        break;
+      case "-m":
         metricName = args[argno + 1];
         if (EvaluationMetric.knownMetricName(metricName)) {
           int optionCount = EvaluationMetric.metricOptionCount(metricName);
@@ -318,7 +323,8 @@ public class JoshuaEval {
         } else {
           throw new RuntimeException("Unknown metric name " + metricName + ".");
         }
-      } else if (option.equals("-evr")) {
+        break;
+      case "-evr":
         int evr = Integer.parseInt(args[argno + 1]);
         if (evr == 1) {
           evaluateRefs = true;
@@ -327,7 +333,8 @@ public class JoshuaEval {
         } else {
           throw new RuntimeException("evalRefs must be either 0 or 1.");
         }
-      } else if (option.equals("-v")) {
+        break;
+      case "-v":
         int v = Integer.parseInt(args[argno + 1]);
         if (v == 1) {
           verbose = true;
@@ -336,7 +343,8 @@ public class JoshuaEval {
         } else {
           throw new RuntimeException("verbose must be either 0 or 1.");
         }
-      } else {
+        break;
+      default:
         throw new RuntimeException("Unknown option " + option);
       }
 
@@ -444,7 +452,7 @@ public class JoshuaEval {
     str = " " + str + " ";
     str = str.replaceAll("\\s+", " ");
 
-    TreeSet<Integer> splitIndices = new TreeSet<Integer>();
+    TreeSet<Integer> splitIndices = new TreeSet<>();
 
     for (int i = 0; i < str.length(); ++i) {
       char ch = str.charAt(i);
@@ -495,7 +503,7 @@ public class JoshuaEval {
     // remove spaces around dashes
     if (normMethod == 2 || normMethod == 4) {
 
-      TreeSet<Integer> skipIndices = new TreeSet<Integer>();
+      TreeSet<Integer> skipIndices = new TreeSet<>();
       str = " " + str + " ";
 
       for (int i = 0; i < str.length(); ++i) {

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/NBestListUtility.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/NBestListUtility.java b/src/main/java/org/apache/joshua/util/NBestListUtility.java
index 08c85ba..89c2e4b 100644
--- a/src/main/java/org/apache/joshua/util/NBestListUtility.java
+++ b/src/main/java/org/apache/joshua/util/NBestListUtility.java
@@ -46,7 +46,7 @@ public class NBestListUtility {
   }
 
   public static List<String> findAllMatches(String regularExpression, String contentsString) {
-    List<String> allMatches = new ArrayList<String>();
+    List<String> allMatches = new ArrayList<>();
     Matcher m = Pattern.compile(regularExpression).matcher(contentsString);
     while (m.find()) {
       allMatches.add(m.group());
@@ -62,7 +62,7 @@ public class NBestListUtility {
   }
 
   public static List<Double> getTotalWeightsFromNBestListString(String nBestListAsString) {
-    List<Double> result = new ArrayList<Double>();
+    List<Double> result = new ArrayList<>();
     String[] lines = nBestListAsString.split("\n");
     for (String line : lines) {
       result.add(getTotalWeightFromNBestLine(line));

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/Ngram.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/Ngram.java b/src/main/java/org/apache/joshua/util/Ngram.java
index 73909ce..aa8e9f0 100644
--- a/src/main/java/org/apache/joshua/util/Ngram.java
+++ b/src/main/java/org/apache/joshua/util/Ngram.java
@@ -27,6 +27,7 @@ import org.apache.joshua.corpus.Vocabulary;
  * Provides convenience functions for extracting all ngrams from a sentence, represented as an array
  * of words.
  */
+@SuppressWarnings("ALL")
 public class Ngram {
 
   public static void getNgrams(Map<String, Integer> tbl, int startOrder, int endOrder,
@@ -34,7 +35,7 @@ public class Ngram {
 
     for (int i = 0; i < wrds.length; i++)
       for (int j = startOrder - 1; j < endOrder && j + i < wrds.length; j++) {// ngram: [i,i+j]
-        StringBuffer ngram = new StringBuffer();
+        StringBuilder ngram = new StringBuilder();
         for (int k = i; k <= i + j; k++) {
           int t_wrd = wrds[k];
           ngram.append(Vocabulary.word(t_wrd));
@@ -58,7 +59,7 @@ public class Ngram {
 
     for (int i = 0; i < wrds.size(); i++)
       for (int j = startOrder - 1; j < endOrder && j + i < wrds.size(); j++) {// ngram: [i,i+j]
-        StringBuffer ngram = new StringBuffer();
+        StringBuilder ngram = new StringBuilder();
         for (int k = i; k <= i + j; k++) {
           int t_wrd = wrds.get(k);
           ngram.append(Vocabulary.word(t_wrd));
@@ -82,7 +83,7 @@ public class Ngram {
 
     for (int i = 0; i < wrds.length; i++)
       for (int j = startOrder - 1; j < endOrder && j + i < wrds.length; j++) {// ngram: [i,i+j]
-        StringBuffer ngram = new StringBuffer();
+        StringBuilder ngram = new StringBuilder();
         for (int k = i; k <= i + j; k++) {
           String t_wrd = wrds[k];
           ngram.append(t_wrd);

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/PackedGrammarServer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/PackedGrammarServer.java b/src/main/java/org/apache/joshua/util/PackedGrammarServer.java
index 74c8e4a..5308ff9 100644
--- a/src/main/java/org/apache/joshua/util/PackedGrammarServer.java
+++ b/src/main/java/org/apache/joshua/util/PackedGrammarServer.java
@@ -35,7 +35,8 @@ public class PackedGrammarServer {
 
   private PackedGrammar grammar;
 
-  public PackedGrammarServer(String packed_directory,JoshuaConfiguration joshuaConfiguration) throws FileNotFoundException, IOException {
+  public PackedGrammarServer(String packed_directory,JoshuaConfiguration joshuaConfiguration) throws
+      IOException {
     grammar = new PackedGrammar(packed_directory, -1, "owner", "thrax", joshuaConfiguration);
   }
 
@@ -73,7 +74,7 @@ public class PackedGrammarServer {
   }
   
   
-  public static void main(String[] args) throws FileNotFoundException, IOException {
+  public static void main(String[] args) throws IOException {
     JoshuaConfiguration joshuaConfiguration = new JoshuaConfiguration();
     PackedGrammarServer pgs = new PackedGrammarServer(args[0], joshuaConfiguration);
     

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/Platform.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/Platform.java b/src/main/java/org/apache/joshua/util/Platform.java
index 22089da..ceebc80 100644
--- a/src/main/java/org/apache/joshua/util/Platform.java
+++ b/src/main/java/org/apache/joshua/util/Platform.java
@@ -21,7 +21,7 @@ package org.apache.joshua.util;
 public class Platform {
 
   public static boolean isMac() {
-    return System.getProperties().getProperty("os.name").toLowerCase().indexOf("mac") != -1;
+    return System.getProperties().getProperty("os.name").toLowerCase().contains("mac");
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/StreamGobbler.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/StreamGobbler.java b/src/main/java/org/apache/joshua/util/StreamGobbler.java
index 7bb12ca..4f49976 100644
--- a/src/main/java/org/apache/joshua/util/StreamGobbler.java
+++ b/src/main/java/org/apache/joshua/util/StreamGobbler.java
@@ -27,8 +27,8 @@ import java.io.InputStreamReader;
  * Based on: http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4
  */
 public class StreamGobbler extends Thread {
-  InputStream istream;
-  boolean verbose;
+  final InputStream istream;
+  final boolean verbose;
 
   public StreamGobbler(InputStream is, int p) {
     istream = is;

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/UnicodeCharacterName.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/UnicodeCharacterName.java b/src/main/java/org/apache/joshua/util/UnicodeCharacterName.java
index 93c759e..2539ba4 100644
--- a/src/main/java/org/apache/joshua/util/UnicodeCharacterName.java
+++ b/src/main/java/org/apache/joshua/util/UnicodeCharacterName.java
@@ -29,7 +29,7 @@ public class UnicodeCharacterName {
 
     int expectedSize = 21927;
 
-    map = new HashMap<Character, String>(expectedSize);
+    map = new HashMap<>(expectedSize);
 
     basicLatin(map);
     latin1Supplement(map);
@@ -98,7 +98,7 @@ public class UnicodeCharacterName {
     hangulSyllables(map);
   }
 
-  public static final void basicLatin(Map<Character, String> map) {
+  public static void basicLatin(Map<Character, String> map) {
 
     // C0 Controls
     map.put('\u0000', "NULL");
@@ -246,7 +246,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void latin1Supplement(Map<Character, String> map) {
+  public static void latin1Supplement(Map<Character, String> map) {
 
     // C1 controls
     map.put('\u0080', "<control>");
@@ -392,7 +392,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void latinExtendedA(Map<Character, String> map) {
+  public static void latinExtendedA(Map<Character, String> map) {
 
     // European Latin
     map.put('\u0100', "LATIN CAPITAL LETTER A WITH MACRON");
@@ -530,7 +530,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void latinExtendedB(Map<Character, String> map) {
+  public static void latinExtendedB(Map<Character, String> map) {
 
     // Non-European and historic Latin
     map.put('\u0180', "LATIN SMALL LETTER B WITH STROKE");
@@ -764,7 +764,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void ipaExtensions(Map<Character, String> map) {
+  public static void ipaExtensions(Map<Character, String> map) {
 
     // IPA extensions
     map.put('\u0250', "LATIN SMALL LETTER TURNED A");
@@ -870,7 +870,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void spacingModifierLetters(Map<Character, String> map) {
+  public static void spacingModifierLetters(Map<Character, String> map) {
 
     // Latin superscript modifier letters
     map.put('\u02B0', "MODIFIER LETTER SMALL H");
@@ -972,7 +972,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void combiningDiacriticMarks(Map<Character, String> map) {
+  public static void combiningDiacriticMarks(Map<Character, String> map) {
 
     // Ordinary diacritics
     map.put('\u0300', "COMBINING GRAVE ACCENT");
@@ -1112,7 +1112,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void greekAndCoptic(Map<Character, String> map) {
+  public static void greekAndCoptic(Map<Character, String> map) {
 
     map.put('\u0370', "GREEK CAPITAL LETTER HETA");
     map.put('\u0371', "GREEK SMALL LETTER HETA");
@@ -1251,7 +1251,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void cyrillic(Map<Character, String> map) {
+  public static void cyrillic(Map<Character, String> map) {
 
     map.put('\u0400', "CYRILLIC CAPITAL LETTER IE WITH GRAVE");
     map.put('\u0401', "CYRILLIC CAPITAL LETTER IO");
@@ -1512,7 +1512,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void cyrillicSupplement(Map<Character, String> map) {
+  public static void cyrillicSupplement(Map<Character, String> map) {
 
     map.put('\u0500', "CYRILLIC CAPITAL LETTER KOMI DE");
     map.put('\u0501', "CYRILLIC SMALL LETTER KOMI DE");
@@ -1555,7 +1555,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void armenian(Map<Character, String> map) {
+  public static void armenian(Map<Character, String> map) {
 
     map.put('\u0531', "ARMENIAN CAPITAL LETTER AYB");
     map.put('\u0532', "ARMENIAN CAPITAL LETTER BEN");
@@ -1646,7 +1646,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void hebrew(Map<Character, String> map) {
+  public static void hebrew(Map<Character, String> map) {
 
     map.put('\u0591', "HEBREW ACCENT ETNAHTA");
     map.put('\u0592', "HEBREW ACCENT SEGOL");
@@ -1738,7 +1738,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void arabic(Map<Character, String> map) {
+  public static void arabic(Map<Character, String> map) {
 
     map.put('\u0600', "ARABIC NUMBER SIGN");
     map.put('\u0601', "ARABIC SIGN SANAH");
@@ -1993,7 +1993,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void syriac(Map<Character, String> map) {
+  public static void syriac(Map<Character, String> map) {
 
     map.put('\u0700', "SYRIAC END OF PARAGRAPH");
     map.put('\u0701', "SYRIAC SUPRALINEAR FULL STOP");
@@ -2075,7 +2075,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void arabicSupplement(Map<Character, String> map) {
+  public static void arabicSupplement(Map<Character, String> map) {
 
     map.put('\u0750', "ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW");
     map.put('\u0751', "ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE");
@@ -2128,7 +2128,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void thaana(Map<Character, String> map) {
+  public static void thaana(Map<Character, String> map) {
 
     map.put('\u0780', "THAANA LETTER HAA");
     map.put('\u0781', "THAANA LETTER SHAVIYANI");
@@ -2183,7 +2183,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void nko(Map<Character, String> map) {
+  public static void nko(Map<Character, String> map) {
 
     map.put('\u07C0', "NKO DIGIT ZERO");
     map.put('\u07C1', "NKO DIGIT ONE");
@@ -2247,7 +2247,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void samaritan(Map<Character, String> map) {
+  public static void samaritan(Map<Character, String> map) {
 
     map.put('\u0800', "SAMARITAN LETTER ALAF");
     map.put('\u0801', "SAMARITAN LETTER BIT");
@@ -2313,7 +2313,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void devanagari(Map<Character, String> map) {
+  public static void devanagari(Map<Character, String> map) {
 
     map.put('\u0900', "DEVANAGARI SIGN INVERTED CANDRABINDU");
     map.put('\u0901', "DEVANAGARI SIGN CANDRABINDU");
@@ -2435,7 +2435,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void bengali(Map<Character, String> map) {
+  public static void bengali(Map<Character, String> map) {
 
     map.put('\u0981', "BENGALI SIGN CANDRABINDU");
     map.put('\u0982', "BENGALI SIGN ANUSVARA");
@@ -2534,7 +2534,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void gurmukhi(Map<Character, String> map) {
+  public static void gurmukhi(Map<Character, String> map) {
 
     map.put('\u0A01', "GURMUKHI SIGN ADAK BINDI");
     map.put('\u0A02', "GURMUKHI SIGN BINDI");
@@ -2620,7 +2620,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void gujarati(Map<Character, String> map) {
+  public static void gujarati(Map<Character, String> map) {
 
     map.put('\u0A81', "GUJARATI SIGN CANDRABINDU");
     map.put('\u0A82', "GUJARATI SIGN ANUSVARA");
@@ -2710,7 +2710,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void oriya(Map<Character, String> map) {
+  public static void oriya(Map<Character, String> map) {
 
     map.put('\u0B01', "ORIYA SIGN CANDRABINDU");
     map.put('\u0B02', "ORIYA SIGN ANUSVARA");
@@ -2801,7 +2801,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void tamil(Map<Character, String> map) {
+  public static void tamil(Map<Character, String> map) {
 
     map.put('\u0B82', "TAMIL SIGN ANUSVARA");
     map.put('\u0B83', "TAMIL SIGN VISARGA");
@@ -2880,7 +2880,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void telugu(Map<Character, String> map) {
+  public static void telugu(Map<Character, String> map) {
 
     map.put('\u0C01', "TELUGU SIGN CANDRABINDU");
     map.put('\u0C02', "TELUGU SIGN ANUSVARA");
@@ -2980,7 +2980,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void kannada(Map<Character, String> map) {
+  public static void kannada(Map<Character, String> map) {
 
     map.put('\u0C82', "KANNADA SIGN ANUSVARA");
     map.put('\u0C83', "KANNADA SIGN VISARGA");
@@ -3073,7 +3073,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void malayalam(Map<Character, String> map) {
+  public static void malayalam(Map<Character, String> map) {
 
     map.put('\u0D02', "MALAYALAM SIGN ANUSVARA");
     map.put('\u0D03', "MALAYALAM SIGN VISARGA");
@@ -3175,7 +3175,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void sinhala(Map<Character, String> map) {
+  public static void sinhala(Map<Character, String> map) {
 
     map.put('\u0D82', "SINHALA SIGN ANUSVARAYA");
     map.put('\u0D83', "SINHALA SIGN VISARGAYA");
@@ -3260,7 +3260,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void thai(Map<Character, String> map) {
+  public static void thai(Map<Character, String> map) {
 
     map.put('\u0E01', "THAI CHARACTER KO KAI");
     map.put('\u0E02', "THAI CHARACTER KHO KHAI");
@@ -3352,7 +3352,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void lao(Map<Character, String> map) {
+  public static void lao(Map<Character, String> map) {
 
     map.put('\u0E81', "LAO LETTER KO");
     map.put('\u0E82', "LAO LETTER KHO SUNG");
@@ -3422,7 +3422,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void tibetan(Map<Character, String> map) {
+  public static void tibetan(Map<Character, String> map) {
 
     map.put('\u0F00', "TIBETAN SYLLABLE OM");
     map.put('\u0F01', "TIBETAN MARK GTER YIG MGO TRUNCATED A");
@@ -3632,7 +3632,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void myanmar(Map<Character, String> map) {
+  public static void myanmar(Map<Character, String> map) {
 
     map.put('\u1000', "MYANMAR LETTER KA");
     map.put('\u1001', "MYANMAR LETTER KHA");
@@ -3797,7 +3797,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void georgian(Map<Character, String> map) {
+  public static void georgian(Map<Character, String> map) {
 
     map.put('\u10A0', "GEORGIAN CAPITAL LETTER AN");
     map.put('\u10A1', "GEORGIAN CAPITAL LETTER BAN");
@@ -3885,7 +3885,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void hangulJamo(Map<Character, String> map) {
+  public static void hangulJamo(Map<Character, String> map) {
 
     map.put('\u1100', "HANGUL CHOSEONG KIYEOK");
     map.put('\u1101', "HANGUL CHOSEONG SSANGKIYEOK");
@@ -4146,7 +4146,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void ethiopic(Map<Character, String> map) {
+  public static void ethiopic(Map<Character, String> map) {
 
     map.put('\u1200', "ETHIOPIC SYLLABLE HA");
     map.put('\u1201', "ETHIOPIC SYLLABLE HU");
@@ -4507,7 +4507,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void ethiopicSupplement(Map<Character, String> map) {
+  public static void ethiopicSupplement(Map<Character, String> map) {
 
     map.put('\u1380', "ETHIOPIC SYLLABLE SEBATBEIT MWA");
     map.put('\u1381', "ETHIOPIC SYLLABLE MWI");
@@ -4538,7 +4538,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void cherokee(Map<Character, String> map) {
+  public static void cherokee(Map<Character, String> map) {
 
     map.put('\u13A0', "CHEROKEE LETTER A");
     map.put('\u13A1', "CHEROKEE LETTER E");
@@ -4628,7 +4628,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void canadianAboriginalSyllabics(Map<Character, String> map) {
+  public static void canadianAboriginalSyllabics(Map<Character, String> map) {
 
     map.put('\u1400', "CANADIAN SYLLABICS HYPHEN");
     map.put('\u1401', "CANADIAN SYLLABICS E");
@@ -5273,7 +5273,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void ogham(Map<Character, String> map) {
+  public static void ogham(Map<Character, String> map) {
 
     map.put('\u1680', "OGHAM SPACE MARK");
     map.put('\u1681', "OGHAM LETTER BEITH");
@@ -5307,7 +5307,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void runic(Map<Character, String> map) {
+  public static void runic(Map<Character, String> map) {
 
     map.put('\u16A0', "RUNIC LETTER FEHU FEOH FE F");
     map.put('\u16A1', "RUNIC LETTER V");
@@ -5393,7 +5393,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void tagalog(Map<Character, String> map) {
+  public static void tagalog(Map<Character, String> map) {
 
     map.put('\u1700', "TAGALOG LETTER A");
     map.put('\u1701', "TAGALOG LETTER I");
@@ -5418,7 +5418,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void hanunoo(Map<Character, String> map) {
+  public static void hanunoo(Map<Character, String> map) {
 
     map.put('\u1720', "HANUNOO LETTER A");
     map.put('\u1721', "HANUNOO LETTER I");
@@ -5446,7 +5446,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void buhid(Map<Character, String> map) {
+  public static void buhid(Map<Character, String> map) {
 
     map.put('\u1740', "BUHID LETTER A");
     map.put('\u1741', "BUHID LETTER I");
@@ -5471,7 +5471,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void tagbanwa(Map<Character, String> map) {
+  public static void tagbanwa(Map<Character, String> map) {
 
     map.put('\u1760', "TAGBANWA LETTER A");
     map.put('\u1761', "TAGBANWA LETTER I");
@@ -5494,7 +5494,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void khmer(Map<Character, String> map) {
+  public static void khmer(Map<Character, String> map) {
 
     map.put('\u1780', "KHMER LETTER KA");
     map.put('\u1781', "KHMER LETTER KHA");
@@ -5613,7 +5613,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void mongolian(Map<Character, String> map) {
+  public static void mongolian(Map<Character, String> map) {
 
     map.put('\u1800', "MONGOLIAN BIRGA");
     map.put('\u1801', "MONGOLIAN ELLIPSIS");
@@ -5774,7 +5774,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void canadianSyllabics(Map<Character, String> map) {
+  public static void canadianSyllabics(Map<Character, String> map) {
 
     map.put('\u18B0', "CANADIAN SYLLABICS OY");
     map.put('\u18B1', "CANADIAN SYLLABICS AY");
@@ -5849,7 +5849,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void limbu(Map<Character, String> map) {
+  public static void limbu(Map<Character, String> map) {
 
     map.put('\u1900', "LIMBU VOWEL-CARRIER LETTER");
     map.put('\u1901', "LIMBU LETTER KA");
@@ -5920,7 +5920,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void taiLe(Map<Character, String> map) {
+  public static void taiLe(Map<Character, String> map) {
 
     map.put('\u1950', "TAI LE LETTER KA");
     map.put('\u1951', "TAI LE LETTER XA");
@@ -5960,7 +5960,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void newTaiLue(Map<Character, String> map) {
+  public static void newTaiLue(Map<Character, String> map) {
 
     map.put('\u1980', "NEW TAI LUE LETTER HIGH QA");
     map.put('\u1981', "NEW TAI LUE LETTER LOW QA");
@@ -6048,7 +6048,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void khmerSymbols(Map<Character, String> map) {
+  public static void khmerSymbols(Map<Character, String> map) {
 
     map.put('\u19E0', "KHMER SYMBOL PATHAMASAT");
     map.put('\u19E1', "KHMER SYMBOL MUOY KOET");
@@ -6085,7 +6085,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void buginese(Map<Character, String> map) {
+  public static void buginese(Map<Character, String> map) {
 
     map.put('\u1A00', "BUGINESE LETTER KA");
     map.put('\u1A01', "BUGINESE LETTER GA");
@@ -6247,7 +6247,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void balinese(Map<Character, String> map) {
+  public static void balinese(Map<Character, String> map) {
 
     map.put('\u1B00', "BALINESE SIGN ULU RICEM");
     map.put('\u1B01', "BALINESE SIGN ULU CANDRA");
@@ -6373,7 +6373,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void sudanese(Map<Character, String> map) {
+  public static void sudanese(Map<Character, String> map) {
 
     map.put('\u1B80', "SUNDANESE SIGN PANYECEK");
     map.put('\u1B81', "SUNDANESE SIGN PANGLAYAR");
@@ -6433,7 +6433,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void lepcha(Map<Character, String> map) {
+  public static void lepcha(Map<Character, String> map) {
 
     map.put('\u1C00', "LEPCHA LETTER KA");
     map.put('\u1C01', "LEPCHA LETTER KLA");
@@ -6512,7 +6512,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void olChiki(Map<Character, String> map) {
+  public static void olChiki(Map<Character, String> map) {
 
     map.put('\u1C50', "OL CHIKI DIGIT ZERO");
     map.put('\u1C51', "OL CHIKI DIGIT ONE");
@@ -6565,7 +6565,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void vedic(Map<Character, String> map) {
+  public static void vedic(Map<Character, String> map) {
 
     map.put('\u1CD0', "VEDIC TONE KARSHANA");
     map.put('\u1CD1', "VEDIC TONE SHARA");
@@ -6605,7 +6605,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void phoneticExtensions(Map<Character, String> map) {
+  public static void phoneticExtensions(Map<Character, String> map) {
 
     map.put('\u1D00', "LATIN LETTER SMALL CAPITAL A");
     map.put('\u1D01', "LATIN LETTER SMALL CAPITAL AE");
@@ -6738,7 +6738,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void phoneticExtensionsSupplement(Map<Character, String> map) {
+  public static void phoneticExtensionsSupplement(Map<Character, String> map) {
 
     map.put('\u1D80', "LATIN SMALL LETTER B WITH PALATAL HOOK");
     map.put('\u1D81', "LATIN SMALL LETTER D WITH PALATAL HOOK");
@@ -6807,7 +6807,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void combiningDiacriticalMarksSupplement(Map<Character, String> map) {
+  public static void combiningDiacriticalMarksSupplement(Map<Character, String> map) {
 
     map.put('\u1DC0', "COMBINING DOTTED GRAVE ACCENT");
     map.put('\u1DC1', "COMBINING DOTTED ACUTE ACCENT");
@@ -6854,7 +6854,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void latinExtendedAdditional(Map<Character, String> map) {
+  public static void latinExtendedAdditional(Map<Character, String> map) {
 
     map.put('\u1E00', "LATIN CAPITAL LETTER A WITH RING BELOW");
     map.put('\u1E01', "LATIN SMALL LETTER A WITH RING BELOW");
@@ -7115,7 +7115,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void greekExtended(Map<Character, String> map) {
+  public static void greekExtended(Map<Character, String> map) {
 
     map.put('\u1F00', "GREEK SMALL LETTER ALPHA WITH PSILI");
     map.put('\u1F01', "GREEK SMALL LETTER ALPHA WITH DASIA");
@@ -7353,7 +7353,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void generalPunctuation(Map<Character, String> map) {
+  public static void generalPunctuation(Map<Character, String> map) {
 
     map.put('\u2000', "EN QUAD");
     map.put('\u2001', "EM QUAD");
@@ -10958,7 +10958,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void cjkSymbolsAndPunctuation(Map<Character, String> map) {
+  public static void cjkSymbolsAndPunctuation(Map<Character, String> map) {
 
     map.put('\u3000', "IDEOGRAPHIC SPACE");
     map.put('\u3001', "IDEOGRAPHIC COMMA");
@@ -14560,7 +14560,7 @@ public class UnicodeCharacterName {
 
   }
 
-  public static final void hangulSyllables(Map<Character, String> map) {
+  public static void hangulSyllables(Map<Character, String> map) {
 
     map.put('\uD7B0', "HANGUL JUNGSEONG O-YEO");
     map.put('\uD7B1', "HANGUL JUNGSEONG O-O-I");

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/encoding/Analyzer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/encoding/Analyzer.java b/src/main/java/org/apache/joshua/util/encoding/Analyzer.java
index d9bab66..65792d3 100644
--- a/src/main/java/org/apache/joshua/util/encoding/Analyzer.java
+++ b/src/main/java/org/apache/joshua/util/encoding/Analyzer.java
@@ -27,11 +27,11 @@ import org.apache.joshua.util.io.LineReader;
 
 public class Analyzer {
 
-  private TreeMap<Float, Integer> histogram;
+  private final TreeMap<Float, Integer> histogram;
   private int total;
 
   public Analyzer() {
-    histogram = new TreeMap<Float, Integer>();
+    histogram = new TreeMap<>();
     initialize();
   }
 
@@ -108,8 +108,7 @@ public class Analyzer {
       buckets[index++] = sum / count;
 
     float[] shortened = new float[index];
-    for (int i = 0; i < shortened.length; ++i)
-      shortened[i] = buckets[i];
+    System.arraycopy(buckets, 0, shortened, 0, shortened.length);
     return shortened;
   }
 
@@ -188,13 +187,14 @@ public class Analyzer {
   public String toString(String label) {
     StringBuilder sb = new StringBuilder();
     for (float val : histogram.keySet())
-      sb.append(label + "\t" + String.format("%.5f", val) + "\t" + histogram.get(val) + "\n");
+      sb.append(label).append("\t").append(String.format("%.5f", val)).append("\t")
+          .append(histogram.get(val)).append("\n");
     return sb.toString();
   }
 
   public static void main(String[] args) throws IOException {
-    try (LineReader reader = new LineReader(args[0]);) {
-      ArrayList<Float> s = new ArrayList<Float>();
+    try (LineReader reader = new LineReader(args[0])) {
+      ArrayList<Float> s = new ArrayList<>();
 
       System.out.println("Initialized.");
       while (reader.hasNext())
@@ -206,13 +206,13 @@ public class Analyzer {
       Analyzer q = new Analyzer();
 
       q.initialize();
-      for (int i = 0; i < n; i++)
-        q.add(s.get(i));
+      for (Float value1 : s)
+        q.add(value1);
       EightBitQuantizer eb = new EightBitQuantizer(q.quantize(8));
       System.out.println("Quantizer learned.");
 
-      for (int i = 0; i < n; i++)
-        eb.write(b, s.get(i));
+      for (Float value : s)
+        eb.write(b, value);
       b.rewind();
       System.out.println("Quantization complete.");
 

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/encoding/EightBitQuantizer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/encoding/EightBitQuantizer.java b/src/main/java/org/apache/joshua/util/encoding/EightBitQuantizer.java
index 5876d4f..27ad9c8 100644
--- a/src/main/java/org/apache/joshua/util/encoding/EightBitQuantizer.java
+++ b/src/main/java/org/apache/joshua/util/encoding/EightBitQuantizer.java
@@ -73,8 +73,8 @@ public class EightBitQuantizer implements FloatEncoder {
   public void writeState(DataOutputStream out) throws IOException {
     out.writeUTF(getKey());
     out.writeInt(buckets.length);
-    for (int i = 0; i < buckets.length; i++)
-      out.writeFloat(buckets[i]);
+    for (float bucket : buckets)
+      out.writeFloat(bucket);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/encoding/EncoderConfiguration.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/encoding/EncoderConfiguration.java b/src/main/java/org/apache/joshua/util/encoding/EncoderConfiguration.java
index 28b013f..e09d6e1 100644
--- a/src/main/java/org/apache/joshua/util/encoding/EncoderConfiguration.java
+++ b/src/main/java/org/apache/joshua/util/encoding/EncoderConfiguration.java
@@ -38,14 +38,14 @@ public class EncoderConfiguration {
   private FloatEncoder[] encoderById;
   private FloatEncoder[] encoders;
 
-  private Map<Integer, Integer> outerToInner;
+  private final Map<Integer, Integer> outerToInner;
   
   private boolean labeled;
   
   private int numDenseFeatures = 0;
   
   public EncoderConfiguration() {
-    this.outerToInner = new HashMap<Integer, Integer>();
+    this.outerToInner = new HashMap<>();
   }
 
   public int getNumDenseFeatures() {

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/encoding/FeatureTypeAnalyzer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/encoding/FeatureTypeAnalyzer.java b/src/main/java/org/apache/joshua/util/encoding/FeatureTypeAnalyzer.java
index d485ea5..10213ea 100644
--- a/src/main/java/org/apache/joshua/util/encoding/FeatureTypeAnalyzer.java
+++ b/src/main/java/org/apache/joshua/util/encoding/FeatureTypeAnalyzer.java
@@ -38,17 +38,17 @@ public class FeatureTypeAnalyzer {
 
   private static final Logger LOG = LoggerFactory.getLogger(FeatureTypeAnalyzer.class);
 
-  private ArrayList<FeatureType> types;
+  private final ArrayList<FeatureType> types;
 
-  private Map<Integer, Integer> featureToType;
+  private final Map<Integer, Integer> featureToType;
 
-  private Map<Integer, Integer> featureIdMap;
+  private final Map<Integer, Integer> featureIdMap;
 
   // Is the feature setup labeled.
   private boolean labeled;
 
   // Is the encoder configuration open for new features (that are not assumed boolean)?
-  private boolean open;
+  private final boolean open;
 
   public FeatureTypeAnalyzer() {
     this(false);
@@ -56,13 +56,13 @@ public class FeatureTypeAnalyzer {
 
   public FeatureTypeAnalyzer(boolean open) {
     this.open = open;
-    this.types = new ArrayList<FeatureType>();
-    this.featureToType = new HashMap<Integer, Integer>();
-    this.featureIdMap = new HashMap<Integer, Integer>();
+    this.types = new ArrayList<>();
+    this.featureToType = new HashMap<>();
+    this.featureIdMap = new HashMap<>();
   }
 
   public void readConfig(String config_filename) throws IOException {
-    try(LineReader reader = new LineReader(config_filename);) {
+    try(LineReader reader = new LineReader(config_filename)) {
       while (reader.hasNext()) {
         // Clean up line, chop comments off and skip if the result is empty.
         String line = reader.next().trim();
@@ -78,7 +78,7 @@ public class FeatureTypeAnalyzer {
             throw new RuntimeException("Incomplete encoder line in config.");
           }
           String encoder_key = fields[1];
-          List<Integer> feature_ids = new ArrayList<Integer>();
+          List<Integer> feature_ids = new ArrayList<>();
           for (int i = 2; i < fields.length; i++)
             feature_ids.add(Vocabulary.id(fields[i]));
           addFeatures(encoder_key, feature_ids);
@@ -121,9 +121,7 @@ public class FeatureTypeAnalyzer {
   // Inspects the collected histograms, inferring actual type of feature. Then replaces the
   // analyzer, if present, with the most compact applicable type.
   public void inferTypes(boolean labeled) {
-    for (FeatureType ft : types) {
-      ft.inferUncompressedType();
-    }
+    types.forEach(FeatureType::inferUncompressedType);
     if (LOG.isInfoEnabled()) {
       for (int id : featureToType.keySet()) {
         LOG.info("Type inferred: {} is {}", (labeled ? Vocabulary.word(id) : "Feature " + id),
@@ -168,8 +166,8 @@ public class FeatureTypeAnalyzer {
     getIdEncoder().writeState(out_stream);
     out_stream.writeBoolean(labeled);
     out_stream.writeInt(types.size());
-    for (int index = 0; index < types.size(); index++)
-      types.get(index).encoder.writeState(out_stream);
+    for (FeatureType type : types)
+      type.encoder.writeState(out_stream);
 
     out_stream.writeInt(featureToType.size());
     for (int feature_id : featureToType.keySet()) {
@@ -203,7 +201,7 @@ public class FeatureTypeAnalyzer {
   static class FeatureType {
     FloatEncoder encoder;
     Analyzer analyzer;
-    int bits;
+    final int bits;
 
     FeatureType() {
       encoder = null;

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/encoding/FloatEncoder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/encoding/FloatEncoder.java b/src/main/java/org/apache/joshua/util/encoding/FloatEncoder.java
index 5121ea2..3e28181 100644
--- a/src/main/java/org/apache/joshua/util/encoding/FloatEncoder.java
+++ b/src/main/java/org/apache/joshua/util/encoding/FloatEncoder.java
@@ -25,15 +25,15 @@ import java.nio.ByteBuffer;
 
 public interface FloatEncoder {
 
-  public float read(ByteBuffer stream, int position);
+  float read(ByteBuffer stream, int position);
 
-  public void write(ByteBuffer stream, float value);
+  void write(ByteBuffer stream, float value);
 
-  public String getKey();
+  String getKey();
 
-  public void writeState(DataOutputStream out) throws IOException;
+  void writeState(DataOutputStream out) throws IOException;
 
-  public void readState(DataInputStream in) throws IOException;
+  void readState(DataInputStream in) throws IOException;
 
-  public int size();
+  int size();
 }

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/encoding/IntEncoder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/encoding/IntEncoder.java b/src/main/java/org/apache/joshua/util/encoding/IntEncoder.java
index a8917f7..607ec6f 100644
--- a/src/main/java/org/apache/joshua/util/encoding/IntEncoder.java
+++ b/src/main/java/org/apache/joshua/util/encoding/IntEncoder.java
@@ -25,15 +25,15 @@ import java.nio.ByteBuffer;
 
 public interface IntEncoder {
 
-  public int read(ByteBuffer stream, int position);
+  int read(ByteBuffer stream, int position);
 
-  public void write(ByteBuffer stream, int value);
+  void write(ByteBuffer stream, int value);
 
-  public String getKey();
+  String getKey();
 
-  public void writeState(DataOutputStream out) throws IOException;
+  void writeState(DataOutputStream out) throws IOException;
 
-  public void readState(DataInputStream in) throws IOException;
+  void readState(DataInputStream in);
 
-  public int size();
+  int size();
 }

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/encoding/PrimitiveFloatEncoder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/encoding/PrimitiveFloatEncoder.java b/src/main/java/org/apache/joshua/util/encoding/PrimitiveFloatEncoder.java
index d5015f2..be1afa9 100644
--- a/src/main/java/org/apache/joshua/util/encoding/PrimitiveFloatEncoder.java
+++ b/src/main/java/org/apache/joshua/util/encoding/PrimitiveFloatEncoder.java
@@ -87,7 +87,7 @@ public enum PrimitiveFloatEncoder implements FloatEncoder {
   private final String key;
   private final int size;
 
-  private PrimitiveFloatEncoder(String k, int s) {
+  PrimitiveFloatEncoder(String k, int s) {
     key = k;
     size = s;
   }

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/encoding/PrimitiveIntEncoder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/encoding/PrimitiveIntEncoder.java b/src/main/java/org/apache/joshua/util/encoding/PrimitiveIntEncoder.java
index 42f6053..5b0f087 100644
--- a/src/main/java/org/apache/joshua/util/encoding/PrimitiveIntEncoder.java
+++ b/src/main/java/org/apache/joshua/util/encoding/PrimitiveIntEncoder.java
@@ -48,11 +48,11 @@ public enum PrimitiveIntEncoder implements IntEncoder {
 
   INT("int", 4) {
     public final int read(ByteBuffer stream, int position) {
-      return (int) stream.getInt(position);
+      return stream.getInt(position);
     }
 
     public final void write(ByteBuffer stream, int value) {
-      stream.putInt((int) value);
+      stream.putInt(value);
     }
   },
 
@@ -69,7 +69,7 @@ public enum PrimitiveIntEncoder implements IntEncoder {
   private final String key;
   private final int size;
 
-  private PrimitiveIntEncoder(String k, int s) {
+  PrimitiveIntEncoder(String k, int s) {
     key = k;
     size = s;
   }
@@ -95,7 +95,7 @@ public enum PrimitiveIntEncoder implements IntEncoder {
   }
 
   @Override
-  public void readState(DataInputStream in) throws IOException {
+  public void readState(DataInputStream in) {
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/io/BinaryIn.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/io/BinaryIn.java b/src/main/java/org/apache/joshua/util/io/BinaryIn.java
index 9483e3e..10fc1e3 100644
--- a/src/main/java/org/apache/joshua/util/io/BinaryIn.java
+++ b/src/main/java/org/apache/joshua/util/io/BinaryIn.java
@@ -57,9 +57,7 @@ public class BinaryIn<E extends Externalizable> extends RandomAccessFile impleme
         obj = type.newInstance();
         obj.readExternal(this);
         return obj;
-      } catch (InstantiationException e) {
-        throw new RuntimeException(e);
-      } catch (IllegalAccessException e) {
+      } catch (InstantiationException | IllegalAccessException e) {
         throw new RuntimeException(e);
       }
     }

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/io/BinaryOut.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/io/BinaryOut.java b/src/main/java/org/apache/joshua/util/io/BinaryOut.java
index 8383053..d419365 100644
--- a/src/main/java/org/apache/joshua/util/io/BinaryOut.java
+++ b/src/main/java/org/apache/joshua/util/io/BinaryOut.java
@@ -65,15 +65,15 @@ public class BinaryOut implements DataOutput, ObjectOutput, Flushable, Closeable
   private final utf8CharRange[] charSizeBuffer;
   private final boolean writeObjects;
 
-  public BinaryOut(File file) throws FileNotFoundException, IOException {
+  public BinaryOut(File file) throws IOException {
     this(new FileOutputStream(file), true);
   }
 
-  public BinaryOut(String filename) throws FileNotFoundException, IOException {
+  public BinaryOut(String filename) throws IOException {
     this(new File(filename));
   }
 
-  public BinaryOut(OutputStream out, boolean writeObjects) throws IOException {
+  public BinaryOut(OutputStream out, boolean writeObjects) {
     this.out = out;
     this.buffer = new byte[BUFFER_SIZE];
     this.charBuffer = new char[BUFFER_SIZE];
@@ -498,7 +498,7 @@ public class BinaryOut implements DataOutput, ObjectOutput, Flushable, Closeable
 
   }
 
-  private static enum utf8CharRange {
+  private enum utf8CharRange {
     ONE_BYTE, TWO_BYTES, THREE_BYTES
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/io/ExistingUTF8EncodedTextFile.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/io/ExistingUTF8EncodedTextFile.java b/src/main/java/org/apache/joshua/util/io/ExistingUTF8EncodedTextFile.java
index 42dd236..d2233c5 100644
--- a/src/main/java/org/apache/joshua/util/io/ExistingUTF8EncodedTextFile.java
+++ b/src/main/java/org/apache/joshua/util/io/ExistingUTF8EncodedTextFile.java
@@ -33,7 +33,7 @@ import java.util.stream.Stream;
  * {@link Path}, or {@link String} representing a Path, is not found.
  */
 public class ExistingUTF8EncodedTextFile {
-  private static final Predicate<String> emptyStringPredicate = s -> s.isEmpty();
+  private static final Predicate<String> emptyStringPredicate = String::isEmpty;
 
   private final Path p;
 
@@ -59,7 +59,7 @@ public class ExistingUTF8EncodedTextFile {
    * @throws IOException on inability to read file (maybe it's not a text file)
    */
   public int getNumberOfLines() throws IOException {
-    try(Stream<String> ls = Files.lines(this.p, StandardCharsets.UTF_8);) {
+    try(Stream<String> ls = Files.lines(this.p, StandardCharsets.UTF_8)) {
       return (int) ls.count();
     }
   }
@@ -69,7 +69,7 @@ public class ExistingUTF8EncodedTextFile {
    * @throws IOException on inability to read file (maybe it's not a text file)
    */
   public int getNumberOfNonEmptyLines() throws IOException {
-    try(Stream<String> ls = Files.lines(this.p, StandardCharsets.UTF_8);) {
+    try(Stream<String> ls = Files.lines(this.p, StandardCharsets.UTF_8)) {
       return (int) ls.filter(emptyStringPredicate.negate())
           .count();
     }

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/io/LineReader.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/io/LineReader.java b/src/main/java/org/apache/joshua/util/io/LineReader.java
index 09e22c2..e283013 100644
--- a/src/main/java/org/apache/joshua/util/io/LineReader.java
+++ b/src/main/java/org/apache/joshua/util/io/LineReader.java
@@ -298,7 +298,7 @@ public class LineReader implements Reader<String> {
       System.exit(1);
     }
 
-    try (LineReader in = new LineReader(args[0]);) {
+    try (LineReader in = new LineReader(args[0])) {
       for (String line : in) {
         System.out.println(line);
       }

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/quantization/Quantizer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/quantization/Quantizer.java b/src/main/java/org/apache/joshua/util/quantization/Quantizer.java
index ab291be..48c071d 100644
--- a/src/main/java/org/apache/joshua/util/quantization/Quantizer.java
+++ b/src/main/java/org/apache/joshua/util/quantization/Quantizer.java
@@ -25,19 +25,19 @@ import java.nio.ByteBuffer;
 
 public interface Quantizer {
 
-  public float read(ByteBuffer stream, int position);
+  float read(ByteBuffer stream, int position);
 
-  public void write(ByteBuffer stream, float value);
+  void write(ByteBuffer stream, float value);
 
-  public void initialize();
+  void initialize();
 
-  public void add(float key);
+  void add(float key);
 
-  public String getKey();
+  String getKey();
 
-  public void writeState(DataOutputStream out) throws IOException;
+  void writeState(DataOutputStream out) throws IOException;
 
-  public void readState(DataInputStream in) throws IOException;
+  void readState(DataInputStream in);
 
-  public int size();
+  int size();
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/quantization/QuantizerConfiguration.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/quantization/QuantizerConfiguration.java b/src/main/java/org/apache/joshua/util/quantization/QuantizerConfiguration.java
index 39aef36..3f754e4 100644
--- a/src/main/java/org/apache/joshua/util/quantization/QuantizerConfiguration.java
+++ b/src/main/java/org/apache/joshua/util/quantization/QuantizerConfiguration.java
@@ -37,16 +37,16 @@ public class QuantizerConfiguration {
 
   private static final Quantizer DEFAULT;
 
-  private ArrayList<Quantizer> quantizers;
-  private Map<Integer, Integer> quantizerByFeatureId;
+  private final ArrayList<Quantizer> quantizers;
+  private final Map<Integer, Integer> quantizerByFeatureId;
 
   static {
     DEFAULT = new BooleanQuantizer();
   }
 
   public QuantizerConfiguration() {
-    quantizers = new ArrayList<Quantizer>();
-    quantizerByFeatureId = new HashMap<Integer, Integer>();
+    quantizers = new ArrayList<>();
+    quantizerByFeatureId = new HashMap<>();
   }
 
   public void add(String quantizer_key, List<Integer> feature_ids) {
@@ -58,8 +58,7 @@ public class QuantizerConfiguration {
   }
 
   public void initialize() {
-    for (Quantizer q : quantizers)
-      q.initialize();
+    quantizers.forEach(Quantizer::initialize);
   }
 
   public final Quantizer get(int feature_id) {
@@ -102,8 +101,8 @@ public class QuantizerConfiguration {
     DataOutputStream out_stream =
         new DataOutputStream(new BufferedOutputStream(new FileOutputStream(vocab_file)));
     out_stream.writeInt(quantizers.size());
-    for (int index = 0; index < quantizers.size(); index++)
-      quantizers.get(index).writeState(out_stream);
+    for (Quantizer quantizer : quantizers)
+      quantizer.writeState(out_stream);
     out_stream.writeInt(quantizerByFeatureId.size());
     for (int feature_id : quantizerByFeatureId.keySet()) {
       out_stream.writeUTF(Vocabulary.word(feature_id));

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/e2a1e6a0/src/main/java/org/apache/joshua/util/quantization/StatelessQuantizer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/util/quantization/StatelessQuantizer.java b/src/main/java/org/apache/joshua/util/quantization/StatelessQuantizer.java
index a241cdf..587276f 100644
--- a/src/main/java/org/apache/joshua/util/quantization/StatelessQuantizer.java
+++ b/src/main/java/org/apache/joshua/util/quantization/StatelessQuantizer.java
@@ -36,5 +36,5 @@ abstract class StatelessQuantizer implements Quantizer {
   }
 
   @Override
-  public void readState(DataInputStream in) throws IOException {}
+  public void readState(DataInputStream in) {}
 }
\ No newline at end of file