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:05:04 UTC

[2/7] incubator-joshua git commit: static analysis based code improvements on metrics package

static analysis based code improvements on metrics 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/23ebc372
Tree: http://git-wip-us.apache.org/repos/asf/incubator-joshua/tree/23ebc372
Diff: http://git-wip-us.apache.org/repos/asf/incubator-joshua/diff/23ebc372

Branch: refs/heads/master
Commit: 23ebc3721f6b17c2ea3eb40202fa33646590caf6
Parents: 2d3911c
Author: Tommaso Teofili <to...@apache.org>
Authored: Mon Sep 26 13:49:40 2016 +0200
Committer: Tommaso Teofili <to...@apache.org>
Committed: Mon Sep 26 13:49:40 2016 +0200

----------------------------------------------------------------------
 .../java/org/apache/joshua/metrics/BLEU.java    | 27 ++++----
 .../java/org/apache/joshua/metrics/CHRF.java    | 37 +++++-----
 .../apache/joshua/metrics/EvaluationMetric.java | 72 ++++++++++++--------
 .../apache/joshua/metrics/GradeLevelBLEU.java   | 24 +++----
 .../java/org/apache/joshua/metrics/METEOR.java  | 40 ++++++-----
 .../joshua/metrics/MinimumChangeBLEU.java       |  8 +--
 .../java/org/apache/joshua/metrics/Precis.java  |  8 +--
 .../joshua/metrics/PrecisMinusSourceBLEU.java   | 24 +++----
 .../java/org/apache/joshua/metrics/SARI.java    | 26 ++++---
 .../org/apache/joshua/metrics/SourceBLEU.java   |  4 +-
 .../java/org/apache/joshua/metrics/TER.java     | 32 +++++----
 .../org/apache/joshua/metrics/TERMinusBLEU.java | 24 +++----
 .../org/apache/joshua/metrics/TercomRunner.java | 10 +--
 13 files changed, 170 insertions(+), 166 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/23ebc372/src/main/java/org/apache/joshua/metrics/BLEU.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/metrics/BLEU.java b/src/main/java/org/apache/joshua/metrics/BLEU.java
index f1b50e7..f80faa1 100644
--- a/src/main/java/org/apache/joshua/metrics/BLEU.java
+++ b/src/main/java/org/apache/joshua/metrics/BLEU.java
@@ -55,13 +55,16 @@ public class BLEU extends EvaluationMetric {
       throw new RuntimeException("Maximum gram length must be positive");
     }
 
-    if (methodStr.equals("closest")) {
+    switch (methodStr) {
+    case "closest":
       setEffLengthMethod(EffectiveLengthMethod.CLOSEST);
-    } else if (methodStr.equals("shortest")) {
+      break;
+    case "shortest":
       setEffLengthMethod(EffectiveLengthMethod.SHORTEST);
       // } else if (methodStr.equals("average")) {
       // effLengthMethod = EffectiveLengthMethod.AVERAGE;
-    } else {
+      break;
+    default:
       LOG.error("Unknown effective length method string {}", methodStr);
       // System.out.println("Should be one of closest, shortest, or average.");
       LOG.error("Should be one of closest or shortest.");
@@ -109,8 +112,8 @@ public class BLEU extends EvaluationMetric {
     HashMap<String, Integer>[] temp_HMA = new HashMap[numSentences];
     maxNgramCounts = temp_HMA;
 
-    String gram = "";
-    int oldCount = 0, nextCount = 0;
+    String gram;
+    int oldCount, nextCount;
 
     for (int i = 0; i < numSentences; ++i) {
       maxNgramCounts[i] = getNgramCountsAll(refSentences[i][0]);
@@ -188,14 +191,12 @@ public class BLEU extends EvaluationMetric {
     for (int n = 1; n <= getMaxGramLength(); ++n) {
 
       int correctGramCount = 0;
-      String gram = "";
-      int candGramCount = 0, maxRefGramCount = 0, clippedCount = 0;
-
-      Iterator<String> it = (candCountsArray[n].keySet()).iterator();
+      String gram;
+      int candGramCount, maxRefGramCount, clippedCount;
 
-      while (it.hasNext()) {
+      for (String s : (candCountsArray[n].keySet())) {
         // for each n-gram type in the candidate
-        gram = it.next();
+        gram = s;
         candGramCount = candCountsArray[n].get(gram);
         // if (maxNgramCounts[i][n].containsKey(gram)) {
         // maxRefGramCount = maxNgramCounts[i][n].get(gram);
@@ -411,7 +412,7 @@ public class BLEU extends EvaluationMetric {
     HashMap<String, Integer>[] ngramCountsArray = new HashMap[1 + getMaxGramLength()];
     ngramCountsArray[0] = null;
     for (int n = 1; n <= getMaxGramLength(); ++n) {
-      ngramCountsArray[n] = new HashMap<String, Integer>();
+      ngramCountsArray[n] = new HashMap<>();
     }
 
     int len = words.length;
@@ -481,7 +482,7 @@ public class BLEU extends EvaluationMetric {
   }
 
   public HashMap<String, Integer> getNgramCountsAll(String[] words) {
-    HashMap<String, Integer> ngramCountsAll = new HashMap<String, Integer>();
+    HashMap<String, Integer> ngramCountsAll = new HashMap<>();
 
     int len = words.length;
     String gram;

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/23ebc372/src/main/java/org/apache/joshua/metrics/CHRF.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/metrics/CHRF.java b/src/main/java/org/apache/joshua/metrics/CHRF.java
index dcf606a..c1a0cff 100644
--- a/src/main/java/org/apache/joshua/metrics/CHRF.java
+++ b/src/main/java/org/apache/joshua/metrics/CHRF.java
@@ -131,12 +131,12 @@ public class CHRF extends EvaluationMetric {
     HashMap<String, Integer>[] grams = new HashMap[1 + maxGramLength];
     grams[0] = null;
     for (int n = 1; n <= maxGramLength; ++n) {
-      grams[n] = new HashMap<String, Integer>();
+      grams[n] = new HashMap<>();
     }
 
 
     for (int n=1; n<=maxGramLength; n++){
-      String gram = "";
+      String gram;
       for (int i = 0; i < s.length() - n + 1; i++){
           gram = s.substring(i, i+n);
           if(grams[n].containsKey(gram)){
@@ -169,26 +169,23 @@ public class CHRF extends EvaluationMetric {
       int[] to_return = {0,0};
       String gram;
       int cand_grams = 0;
-      int candGramCount = 0, refGramCount = 0;
+      int candGramCount, refGramCount;
       int errors = 0;
 
-        Iterator<String> it = (cand.keySet()).iterator();
-
-        while (it.hasNext()) {
-            gram = it.next();
-            candGramCount = cand.get(gram);
-            cand_grams += candGramCount;
-            if (ref.containsKey(gram)) {
-                refGramCount = ref.get(gram);
-                if(candGramCount>refGramCount){
-                    int error_here = candGramCount - refGramCount;
-                    errors += error_here;
-                }
-            } else {
-                refGramCount = 0;
-                errors += candGramCount;
-            }
+    for (String s : (cand.keySet())) {
+      gram = s;
+      candGramCount = cand.get(gram);
+      cand_grams += candGramCount;
+      if (ref.containsKey(gram)) {
+        refGramCount = ref.get(gram);
+        if (candGramCount > refGramCount) {
+          int error_here = candGramCount - refGramCount;
+          errors += error_here;
         }
+      } else {
+        errors += candGramCount;
+      }
+    }
 
       //System.out.println("  Ngrams not found: " + not_found);
 
@@ -236,7 +233,7 @@ public class CHRF extends EvaluationMetric {
     double[] recalls = new double[maxGramLength+1];
     double[] fs = new double[maxGramLength+1];
     //double[] scs = new double[maxGramLength+1];
-    double totalF = 0, totalSC = 0;
+    double totalF = 0, totalSC;
     double lp = 1;
 
     if (stats.length != suffStatsCount) {

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/23ebc372/src/main/java/org/apache/joshua/metrics/EvaluationMetric.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/metrics/EvaluationMetric.java b/src/main/java/org/apache/joshua/metrics/EvaluationMetric.java
index 9ac77f1..3067d10 100644
--- a/src/main/java/org/apache/joshua/metrics/EvaluationMetric.java
+++ b/src/main/java/org/apache/joshua/metrics/EvaluationMetric.java
@@ -53,7 +53,7 @@ public abstract class EvaluationMetric {
 
   /* static (=> also non-abstract) methods */
   public static void set_knownMetrics() {
-    metricOptionCount = new TreeMap<String, Integer>();
+    metricOptionCount = new TreeMap<>();
 
     metricOptionCount.put("BLEU", 2);
     // the "BLEU" metric expects an options array of length 2
@@ -83,44 +83,64 @@ public abstract class EvaluationMetric {
   public static EvaluationMetric getMetric(String metricName, String[] metricOptions) {
     EvaluationMetric retMetric = null;
 
-    if (metricName.equals("BLEU")) {
+    switch (metricName) {
+    case "BLEU":
       retMetric = new BLEU(metricOptions); // the "BLEU" metric corresponds to the BLEU class
-    } else if (metricName.equals("BLEU_SBP")) {
+
+      break;
+    case "BLEU_SBP":
       retMetric = new BLEU_SBP(metricOptions); // the "BLEU_SBP" metric corresponds to the BLEU_SBP
-                                               // class
-    } else if (metricName.equals("01LOSS")) {
+
+      // class
+      break;
+    case "01LOSS":
       retMetric = new ZeroOneLoss(metricOptions); // the "01LOSS" metric corresponds to the
-                                                  // ZeroOneLoss class
-    } else if (metricName.equals("TER")) {
+
+      // ZeroOneLoss class
+      break;
+    case "TER":
       retMetric = new TER(metricOptions); // the "TER" metric corresponds to the TER class
+
       // } else if (metricName.equals("METEOR")) {
       // retMetric = new METEOR(metricOptions); // the "METEOR" metric corresponds to the METEOR
       // class
       // } else if (metricName.equals("RYPT")) {
       // retMetric = new RYPT(metricOptions); // the "RYPT" metric corresponds to the RYPT class
-    } else if (metricName.equals("TER-BLEU")) {
+      break;
+    case "TER-BLEU":
       retMetric = new TERMinusBLEU(metricOptions); // the "TER-BLEU" metric corresponds to the
-                                                   // TERMinusBLEU class
+
+      // TERMinusBLEU class
       // } else if (metricName.equals("WER")) {
       // retMetric = new WordErrorRate(metricOptions); // the "WER" metric corresponds to the
       // WordErrorRate class
-    } else if (metricName.equals("MC_BLEU")) {
+      break;
+    case "MC_BLEU":
       retMetric = new MinimumChangeBLEU(metricOptions); // the "MC_BLEU" metric corresponds to the
-                                                        // ParaphraseBLEU class
-    } else if (metricName.equals("PRECIS")) {
+
+      // ParaphraseBLEU class
+      break;
+    case "PRECIS":
       retMetric = new Precis(metricOptions);
-    } else if (metricName.equals("SRC_BLEU")) {
+      break;
+    case "SRC_BLEU":
       retMetric = new SourceBLEU(metricOptions);
-    } else if (metricName.equals("PRECIS-SRC_BLEU")) {
+      break;
+    case "PRECIS-SRC_BLEU":
       retMetric = new PrecisMinusSourceBLEU(metricOptions);
-    } else if (metricName.equals("GL_BLEU")) {
+      break;
+    case "GL_BLEU":
       retMetric = new GradeLevelBLEU(metricOptions); // the "GL_BLEU" metric corresponds to the
-                                                     // GradeLevelBLEU class
-    } else if (metricName.equals("SARI")) { 
+
+      // GradeLevelBLEU class
+      break;
+    case "SARI":
       retMetric = new SARI(metricOptions);
-    
-    } else if (metricName.equals("CHRF")) {
-        retMetric = new CHRF(metricOptions);
+
+      break;
+    case "CHRF":
+      retMetric = new CHRF(metricOptions);
+      break;
     }
     
     return retMetric;
@@ -145,9 +165,7 @@ public abstract class EvaluationMetric {
   public static void set_refSentences(String[][] refs) {
     refSentences = new String[numSentences][refsPerSen];
     for (int i = 0; i < numSentences; ++i) {
-      for (int r = 0; r < refsPerSen; ++r) {
-        refSentences[i][r] = refs[i][r];
-      }
+      System.arraycopy(refs[i], 0, refSentences[i], 0, refsPerSen);
     }
   }
 
@@ -190,9 +208,7 @@ public abstract class EvaluationMetric {
     int[][] SS = suffStats(SA, IA);
 
     int[] stats = new int[suffStatsCount];
-    for (int s = 0; s < suffStatsCount; ++s) {
-      stats[s] = SS[0][s];
-    }
+    System.arraycopy(SS[0], 0, stats, 0, suffStatsCount);
 
     return score(stats);
   }
@@ -241,9 +257,7 @@ public abstract class EvaluationMetric {
     for (int d = 0; d < candCount; ++d) {
       int[] currStats = suffStats(cand_strings[d], cand_indices[d]);
 
-      for (int s = 0; s < suffStatsCount; ++s) {
-        stats[d][s] = currStats[s];
-      }
+      System.arraycopy(currStats, 0, stats[d], 0, suffStatsCount);
     } // for (d)
 
     return stats;

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/23ebc372/src/main/java/org/apache/joshua/metrics/GradeLevelBLEU.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/metrics/GradeLevelBLEU.java b/src/main/java/org/apache/joshua/metrics/GradeLevelBLEU.java
index e143572..8bda9b8 100644
--- a/src/main/java/org/apache/joshua/metrics/GradeLevelBLEU.java
+++ b/src/main/java/org/apache/joshua/metrics/GradeLevelBLEU.java
@@ -36,13 +36,14 @@ public class GradeLevelBLEU extends BLEU {
   private static final Pattern syllable = Pattern.compile("([^aeiouy]*[aeiouy]+)");
   private static final Pattern silentE = Pattern.compile("[^aeiou]e$");
   private static final int SOURCE = 0, CANDIDATE = 1, REFERENCE = 2;
-  private int srcIndex = 1, sentCountIndex;
+  private final int srcIndex = 1;
+  private int sentCountIndex;
   private SourceBLEU srcBLEU;
   private double targetGL = 9.87; // tune.simp avg GL = 9.8704 (tune.en =
   // 14.0785
   private double alpha = 0.9;
   private boolean useTarget = true;
-  private boolean useBLEUplus = true;
+  private final boolean useBLEUplus = true;
 
   public GradeLevelBLEU() {
     super();
@@ -76,9 +77,7 @@ public class GradeLevelBLEU extends BLEU {
     String line;
     int i = 0;
     while (i < numSentences && (line = br.readLine()) != null) {
-      for (int r = 0; r < refsPerSen; ++r) {
-        newRefSentences[i][r] = refSentences[i][r];
-      }
+      System.arraycopy(refSentences[i], 0, newRefSentences[i], 0, refsPerSen);
       newRefSentences[i][refsPerSen] = line.trim();
       i++;
     }
@@ -98,7 +97,7 @@ public class GradeLevelBLEU extends BLEU {
   public int[] suffStats(String cand_str, int i) {
     int[] stats = new int[suffStatsCount];
 
-    String[] candidate_tokens = null;
+    String[] candidate_tokens;
 
     if (!cand_str.equals("")) {
       candidate_tokens = cand_str.split("\\s+");
@@ -113,9 +112,8 @@ public class GradeLevelBLEU extends BLEU {
     // set source BLEU stats
     if (useBLEUplus) {
       int[] src_prec_suffStats = srcBLEU.suffStats(cand_str, i);
-      for (int j = 0; j < src_prec_suffStats.length; j++) {
-        stats[2 * getMaxGramLength() + j] = src_prec_suffStats[j];
-      }
+      System.arraycopy(src_prec_suffStats, 0, stats, 2 * getMaxGramLength() + 0,
+          src_prec_suffStats.length);
     }
 
     // now set the readability stats
@@ -194,7 +192,7 @@ public class GradeLevelBLEU extends BLEU {
     double candGL =
         gradeLevel(stats[tokenLength(CANDIDATE)], stats[syllableLength(CANDIDATE)],
             stats[sentCountIndex]);
-    double readabilityPenalty = 1;
+    double readabilityPenalty;
 
     if (useTarget) {
       readabilityPenalty = getReadabilityPenalty(candGL, targetGL);
@@ -207,9 +205,7 @@ public class GradeLevelBLEU extends BLEU {
 
     if (useBLEUplus) {
       int[] srcStats = new int[2 * getMaxGramLength()];
-      for (int i = 0; i < 2 * getMaxGramLength(); i++) {
-        srcStats[i] = stats[2 * getMaxGramLength() + i];
-      }
+      System.arraycopy(stats, 2 * getMaxGramLength(), srcStats, 0, 2 * getMaxGramLength());
       srcStats[2 * getMaxGramLength()] = stats[tokenLength(CANDIDATE)];
       srcStats[2 * getMaxGramLength()] = stats[tokenLength(SOURCE)];
       double srcBLEUscore = srcBLEU.score(stats);
@@ -246,7 +242,7 @@ public class GradeLevelBLEU extends BLEU {
     double ref_gl =
         gradeLevel(stats[tokenLength(REFERENCE)], stats[syllableLength(REFERENCE)],
             stats[sentCountIndex]);
-    double penalty = 1;
+    double penalty;
     double bleu_ref = super.score(stats);
     double bleu_src = srcBLEU.score(stats);
     double bleu_plus = BLEU_plus(bleu_ref, bleu_src);

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/23ebc372/src/main/java/org/apache/joshua/metrics/METEOR.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/metrics/METEOR.java b/src/main/java/org/apache/joshua/metrics/METEOR.java
index 33232db..370e707 100644
--- a/src/main/java/org/apache/joshua/metrics/METEOR.java
+++ b/src/main/java/org/apache/joshua/metrics/METEOR.java
@@ -31,7 +31,6 @@ public class METEOR extends EvaluationMetric {
   protected String targetLanguage;
   protected boolean normalize;
   protected boolean keepPunctuation;
-  private int maxComputations;
 
   public METEOR(String[] Metric_options) {
     // M_o[0]: -l language, one of {en,cz,fr,de,es}
@@ -41,27 +40,36 @@ public class METEOR extends EvaluationMetric {
 
     // default in meteor v0.8: en, norm_no, removePunc
 
-    if (Metric_options[0].equals("en")) {
+    switch (Metric_options[0]) {
+    case "en":
       targetLanguage = "en";
-    } else if (Metric_options[0].equals("cz")) {
+      break;
+    case "cz":
       targetLanguage = "cz";
-    } else if (Metric_options[0].equals("fr")) {
+      break;
+    case "fr":
       targetLanguage = "fr";
-    } else if (Metric_options[0].equals("de")) {
+      break;
+    case "de":
       targetLanguage = "de";
-    } else if (Metric_options[0].equals("es")) {
+      break;
+    case "es":
       targetLanguage = "es";
-    } else {
-      String msg = "Unknown language string " + Metric_options[0]
-          + ". Should be one of {en,cz,fr,de,es}.";
+      break;
+    default:
+      String msg =
+          "Unknown language string " + Metric_options[0] + ". Should be one of {en,cz,fr,de,es}.";
       throw new RuntimeException(msg);
     }
 
-    if (Metric_options[1].equals("norm_yes")) {
+    switch (Metric_options[1]) {
+    case "norm_yes":
       normalize = true;
-    } else if (Metric_options[1].equals("norm_no")) {
+      break;
+    case "norm_no":
       normalize = false;
-    } else {
+      break;
+    default:
       String msg = "Unknown normalize string " + Metric_options[1]
           + ". Should be one of norm_yes or norm_no.";
       throw new RuntimeException(msg);
@@ -77,7 +85,7 @@ public class METEOR extends EvaluationMetric {
       throw new RuntimeException(msg);
     }
 
-    maxComputations = Integer.parseInt(Metric_options[3]);
+    int maxComputations = Integer.parseInt(Metric_options[3]);
     if (maxComputations < 1) {
       throw new RuntimeException("Maximum computations must be positive");
     }
@@ -127,8 +135,8 @@ public class METEOR extends EvaluationMetric {
       OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "utf8");
       BufferedWriter outFile = new BufferedWriter(outStreamWriter);
 
-      for (int d = 0; d < candCount; ++d) {
-        writeLine(cand_strings[d], outFile);
+      for (String cand_string : cand_strings) {
+        writeLine(cand_string, outFile);
       }
 
       outFile.close();
@@ -175,7 +183,7 @@ public class METEOR extends EvaluationMetric {
       // 3) Read SS from output file produced by meteor
 
       BufferedReader inFile = new BufferedReader(new FileReader("TER_out.ter"));
-      String line = "";
+      String line;
 
       line = inFile.readLine(); // skip hyp line
       line = inFile.readLine(); // skip ref line

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/23ebc372/src/main/java/org/apache/joshua/metrics/MinimumChangeBLEU.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/metrics/MinimumChangeBLEU.java b/src/main/java/org/apache/joshua/metrics/MinimumChangeBLEU.java
index 6d19ba5..16444a7 100644
--- a/src/main/java/org/apache/joshua/metrics/MinimumChangeBLEU.java
+++ b/src/main/java/org/apache/joshua/metrics/MinimumChangeBLEU.java
@@ -31,8 +31,8 @@ public class MinimumChangeBLEU extends BLEU {
 
   // we assume that the source for the paraphrasing run is
   // part of the set of references
-  private int sourceReferenceIndex;
-  private double thresholdWER;
+  private final int sourceReferenceIndex;
+  private final double thresholdWER;
 
 
   public MinimumChangeBLEU() {
@@ -67,8 +67,8 @@ public class MinimumChangeBLEU extends BLEU {
     HashMap<String, Integer>[] temp_HMA = new HashMap[numSentences];
     maxNgramCounts = temp_HMA;
 
-    String gram = "";
-    int oldCount = 0, nextCount = 0;
+    String gram;
+    int oldCount, nextCount;
 
     for (int i = 0; i < numSentences; ++i) {
       // update counts as necessary from the reference translations

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/23ebc372/src/main/java/org/apache/joshua/metrics/Precis.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/metrics/Precis.java b/src/main/java/org/apache/joshua/metrics/Precis.java
index b2d852b..c620d7d 100644
--- a/src/main/java/org/apache/joshua/metrics/Precis.java
+++ b/src/main/java/org/apache/joshua/metrics/Precis.java
@@ -34,12 +34,12 @@ public class Precis extends BLEU {
 
   // We assume that the source for the paraphrasing run is
   // part of the set of references, this is its index.
-  private int sourceReferenceIndex;
+  private final int sourceReferenceIndex;
 
   // A global target compression rate to achieve
   // if negative, we default to locally aiming for the compression
   // rate given by the (closest) reference compression?
-  private double targetCompressionRate;
+  private final double targetCompressionRate;
 
   // Are we optimizing for character-based compression (as opposed
   // to token-based)?
@@ -112,8 +112,8 @@ public class Precis extends BLEU {
     HashMap<String, Integer>[] temp_HMA = new HashMap[numSentences];
     maxNgramCounts = temp_HMA;
 
-    String gram = "";
-    int oldCount = 0, nextCount = 0;
+    String gram;
+    int oldCount, nextCount;
 
     for (int i = 0; i < numSentences; ++i) {
       // update counts as necessary from the reference translations

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/23ebc372/src/main/java/org/apache/joshua/metrics/PrecisMinusSourceBLEU.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/metrics/PrecisMinusSourceBLEU.java b/src/main/java/org/apache/joshua/metrics/PrecisMinusSourceBLEU.java
index bfe15d0..4827fc9 100644
--- a/src/main/java/org/apache/joshua/metrics/PrecisMinusSourceBLEU.java
+++ b/src/main/java/org/apache/joshua/metrics/PrecisMinusSourceBLEU.java
@@ -27,10 +27,10 @@ import java.io.PrintWriter;
 
 public class PrecisMinusSourceBLEU extends EvaluationMetric {
 
-  private Precis myPrecis;
-  private SourceBLEU mySourceBLEU;
+  private final Precis myPrecis;
+  private final SourceBLEU mySourceBLEU;
 
-  private double bleuWeight;
+  private final double bleuWeight;
 
   private int precisCount;
   private int sourceBleuCount;
@@ -142,16 +142,12 @@ public class PrecisMinusSourceBLEU extends EvaluationMetric {
           + " vs. " + suffStatsCount + ") in PrecisMinusSourceBLEU.score(int[])");
     }
 
-    double sc = 0.0;
+    double sc;
 
     int[] stats_Precis = new int[precisCount];
     int[] stats_SourceBLEU = new int[sourceBleuCount];
-    for (int s = 0; s < precisCount; ++s) {
-      stats_Precis[s] = stats[s];
-    }
-    for (int s = 0; s < sourceBleuCount; ++s) {
-      stats_SourceBLEU[s] = stats[s + precisCount];
-    }
+    System.arraycopy(stats, 0, stats_Precis, 0, precisCount);
+    System.arraycopy(stats, 0 + precisCount, stats_SourceBLEU, 0, sourceBleuCount);
 
     double sc_T = myPrecis.score(stats_Precis);
     double sc_B = mySourceBLEU.score(stats_SourceBLEU);
@@ -164,12 +160,8 @@ public class PrecisMinusSourceBLEU extends EvaluationMetric {
   public void printDetailedScore_fromStats(int[] stats, boolean oneLiner) {
     int[] stats_Precis = new int[precisCount];
     int[] stats_SourceBLEU = new int[sourceBleuCount];
-    for (int s = 0; s < precisCount; ++s) {
-      stats_Precis[s] = stats[s];
-    }
-    for (int s = 0; s < sourceBleuCount; ++s) {
-      stats_SourceBLEU[s] = stats[s + precisCount];
-    }
+    System.arraycopy(stats, 0, stats_Precis, 0, precisCount);
+    System.arraycopy(stats, 0 + precisCount, stats_SourceBLEU, 0, sourceBleuCount);
 
     System.out.println("---PRECIS---");
     myPrecis.printDetailedScore_fromStats(stats_Precis, oneLiner);

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/23ebc372/src/main/java/org/apache/joshua/metrics/SARI.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/metrics/SARI.java b/src/main/java/org/apache/joshua/metrics/SARI.java
index 9ee3af3..990690b 100644
--- a/src/main/java/org/apache/joshua/metrics/SARI.java
+++ b/src/main/java/org/apache/joshua/metrics/SARI.java
@@ -119,8 +119,8 @@ public class SARI extends EvaluationMetric {
     HashMap<String, Integer>[][] temp_HMA = new HashMap[numSentences][maxGramLength];
     refNgramCounts = temp_HMA;
 
-    String gram = "";
-    int oldCount = 0, nextCount = 0;
+    String gram;
+    int oldCount, nextCount;
 
     for (int i = 0; i < numSentences; ++i) {
       refNgramCounts[i] = getNgramCountsArray(refSentences[i][0]);
@@ -133,10 +133,8 @@ public class SARI extends EvaluationMetric {
 
         for (int n = 1; n <= maxGramLength; ++n) {
 
-          Iterator<String> it = (nextNgramCounts[n].keySet()).iterator();
-
-          while (it.hasNext()) {
-            gram = it.next();
+          for (String s : (nextNgramCounts[n].keySet())) {
+            gram = s;
             nextCount = nextNgramCounts[n].get(gram);
 
             if (refNgramCounts[i][n].containsKey(gram)) { // update if necessary
@@ -378,7 +376,7 @@ public class SARI extends EvaluationMetric {
 
   public HashMap<String, Integer> substractHashMap(HashMap<String, Integer> counter1,
       HashMap<String, Integer> counter2) {
-    HashMap<String, Integer> newcounter = new HashMap<String, Integer>();
+    HashMap<String, Integer> newcounter = new HashMap<>();
 
     for (Map.Entry<String, Integer> e : counter1.entrySet()) {
       String ngram = e.getKey();
@@ -394,7 +392,7 @@ public class SARI extends EvaluationMetric {
   // HashMap result = counter1*ratio1 - counter2*ratio2
   public HashMap<String, Integer> substractHashMap(HashMap<String, Integer> counter1,
       HashMap<String, Integer> counter2, int ratio1, int ratio2) {
-    HashMap<String, Integer> newcounter = new HashMap<String, Integer>();
+    HashMap<String, Integer> newcounter = new HashMap<>();
 
     for (Map.Entry<String, Integer> e : counter1.entrySet()) {
       String ngram = e.getKey();
@@ -411,7 +409,7 @@ public class SARI extends EvaluationMetric {
 
   public HashMap<String, Double> divideHashMap(HashMap<String, Integer> counter1,
       HashMap<String, Integer> counter2) {
-    HashMap<String, Double> newcounter = new HashMap<String, Double>();
+    HashMap<String, Double> newcounter = new HashMap<>();
 
     for (Map.Entry<String, Integer> e : counter1.entrySet()) {
       String ngram = e.getKey();
@@ -427,7 +425,7 @@ public class SARI extends EvaluationMetric {
 
   public HashMap<String, Integer> intersectHashMap(HashMap<String, Integer> counter1,
       HashMap<String, Integer> counter2) {
-    HashMap<String, Integer> newcounter = new HashMap<String, Integer>();
+    HashMap<String, Integer> newcounter = new HashMap<>();
 
     for (Map.Entry<String, Integer> e : counter1.entrySet()) {
       String ngram = e.getKey();
@@ -443,7 +441,7 @@ public class SARI extends EvaluationMetric {
   // HashMap result = (counter1*ratio1) & (counter2*ratio2)
   public HashMap<String, Integer> intersectHashMap(HashMap<String, Integer> counter1,
       HashMap<String, Integer> counter2, int ratio1, int ratio2) {
-    HashMap<String, Integer> newcounter = new HashMap<String, Integer>();
+    HashMap<String, Integer> newcounter = new HashMap<>();
 
     for (Map.Entry<String, Integer> e : counter1.entrySet()) {
       String ngram = e.getKey();
@@ -479,7 +477,7 @@ public class SARI extends EvaluationMetric {
     HashMap<String, Integer>[] ngramCountsArray = new HashMap[1 + maxGramLength];
     ngramCountsArray[0] = null;
     for (int n = 1; n <= maxGramLength; ++n) {
-      ngramCountsArray[n] = new HashMap<String, Integer>();
+      ngramCountsArray[n] = new HashMap<>();
     }
 
     int len = words.length;
@@ -549,7 +547,7 @@ public class SARI extends EvaluationMetric {
   }
 
   public HashMap<String, Integer> getNgramCountsAll(String[] words) {
-    HashMap<String, Integer> ngramCountsAll = new HashMap<String, Integer>();
+    HashMap<String, Integer> ngramCountsAll = new HashMap<>();
 
     int len = words.length;
     String gram;
@@ -625,6 +623,6 @@ public class SARI extends EvaluationMetric {
 
   private enum StatIndex {
     KEEPBOTH, KEEPCAND, KEEPREF, DELBOTH, DELCAND, DELREF, ADDBOTH, ADDCAND, ADDREF, KEEPBOTH2
-  };
+  }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/23ebc372/src/main/java/org/apache/joshua/metrics/SourceBLEU.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/metrics/SourceBLEU.java b/src/main/java/org/apache/joshua/metrics/SourceBLEU.java
index f594954..d9c5b3b 100644
--- a/src/main/java/org/apache/joshua/metrics/SourceBLEU.java
+++ b/src/main/java/org/apache/joshua/metrics/SourceBLEU.java
@@ -23,10 +23,10 @@ import java.util.HashMap;
 public class SourceBLEU extends BLEU {
   // We assume that the source for the paraphrasing run is
   // part of the set of references
-  private int sourceReferenceIndex;
+  private final int sourceReferenceIndex;
 
   private int[] sourceWordCount;
-  private boolean useBrevityPenalty;
+  private final boolean useBrevityPenalty;
 
   public SourceBLEU() {
     super();

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/23ebc372/src/main/java/org/apache/joshua/metrics/TER.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/metrics/TER.java b/src/main/java/org/apache/joshua/metrics/TER.java
index 0dcf9d9..1cd2a00 100644
--- a/src/main/java/org/apache/joshua/metrics/TER.java
+++ b/src/main/java/org/apache/joshua/metrics/TER.java
@@ -52,21 +52,27 @@ public class TER extends EvaluationMetric {
 
     // for 0-3, default values in tercom-0.7.25 are: nocase, punc, 20, 50
 
-    if (Metric_options[0].equals("case")) {
+    switch (Metric_options[0]) {
+    case "case":
       caseSensitive = true;
-    } else if (Metric_options[0].equals("nocase")) {
+      break;
+    case "nocase":
       caseSensitive = false;
-    } else {
+      break;
+    default:
       String msg = "Unknown case sensitivity string " + Metric_options[0]
           + ". Should be one of case or nocase.";
       throw new RuntimeException(msg);
     }
 
-    if (Metric_options[1].equals("punc")) {
+    switch (Metric_options[1]) {
+    case "punc":
       withPunctuation = true;
-    } else if (Metric_options[1].equals("nopunc")) {
+      break;
+    case "nopunc":
       withPunctuation = false;
-    } else {
+      break;
+    default:
       String msg = "Unknown with-punctuation string " + Metric_options[1]
           + ". Should be one of punc or nopunc.";
       throw new RuntimeException(msg);
@@ -119,7 +125,7 @@ public class TER extends EvaluationMetric {
   }
 
   public double worstPossibleScore() {
-    return (+1.0 / 0.0);
+    return Double.POSITIVE_INFINITY;
   }
 
   public int[] suffStats(String cand_str, int i) {
@@ -176,7 +182,7 @@ public class TER extends EvaluationMetric {
       // 3) Read SS from output file produced by tercom.7.25.jar
 
       BufferedReader inFile = new BufferedReader(new FileReader("TER_out.ter"));
-      String line = "";
+      String line;
 
       line = inFile.readLine(); // skip hyp line
       line = inFile.readLine(); // skip ref line
@@ -283,7 +289,7 @@ public class TER extends EvaluationMetric {
       OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "utf8");
       BufferedWriter outFile = new BufferedWriter(outStreamWriter);
 
-      String line_cand = "";
+      String line_cand;
 
       if (numCands > 0) {
         for (int d = 0; d < numCands; ++d) {
@@ -326,7 +332,7 @@ public class TER extends EvaluationMetric {
       OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "utf8");
       BufferedWriter outFile = new BufferedWriter(outStreamWriter);
 
-      String line_index = "";
+      String line_index;
 
       if (numIndices > 0) {
         for (int d = 0; d < numIndices; ++d) {
@@ -366,7 +372,7 @@ public class TER extends EvaluationMetric {
   }
 
   public int runTercom(String refFileName, String hypFileName, String outFileNamePrefix, int memSize) {
-    int exitValue = -1;
+    int exitValue;
 
     try {
 
@@ -408,7 +414,7 @@ public class TER extends EvaluationMetric {
   public void copySS(String inputFileName, PrintWriter outFile) {
     try {
       BufferedReader inFile = new BufferedReader(new FileReader(inputFileName));
-      String line = "";
+      String line;
 
       line = inFile.readLine(); // skip hyp line
       line = inFile.readLine(); // skip ref line
@@ -434,7 +440,7 @@ public class TER extends EvaluationMetric {
           + " vs. " + suffStatsCount + ") in TER.score(int[])");
     }
 
-    double sc = 0.0;
+    double sc;
 
     sc = stats[0] / (double) stats[1];
 

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/23ebc372/src/main/java/org/apache/joshua/metrics/TERMinusBLEU.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/metrics/TERMinusBLEU.java b/src/main/java/org/apache/joshua/metrics/TERMinusBLEU.java
index bd40140..fe38913 100644
--- a/src/main/java/org/apache/joshua/metrics/TERMinusBLEU.java
+++ b/src/main/java/org/apache/joshua/metrics/TERMinusBLEU.java
@@ -27,8 +27,8 @@ import java.io.PrintWriter;
 
 public class TERMinusBLEU extends EvaluationMetric {
   // individual components
-  private TER myTER;
-  private BLEU myBLEU;
+  private final TER myTER;
+  private final BLEU myBLEU;
   private int suffStatsCount_TER;
   private int suffStatsCount_BLEU;
 
@@ -63,7 +63,7 @@ public class TERMinusBLEU extends EvaluationMetric {
   }
 
   public double worstPossibleScore() {
-    return (+1.0 / 0.0);
+    return Double.POSITIVE_INFINITY;
   }
 
   public int[] suffStats(String cand_str, int i) {
@@ -154,16 +154,12 @@ public class TERMinusBLEU extends EvaluationMetric {
           + " vs. " + suffStatsCount + ") in TERMinusBLEU.score(int[])");
     }
 
-    double sc = 0.0;
+    double sc;
 
     int[] stats_TER = new int[suffStatsCount_TER];
     int[] stats_BLEU = new int[suffStatsCount_BLEU];
-    for (int s = 0; s < suffStatsCount_TER; ++s) {
-      stats_TER[s] = stats[s];
-    }
-    for (int s = 0; s < suffStatsCount_BLEU; ++s) {
-      stats_BLEU[s] = stats[s + suffStatsCount_TER];
-    }
+    System.arraycopy(stats, 0, stats_TER, 0, suffStatsCount_TER);
+    System.arraycopy(stats, 0 + suffStatsCount_TER, stats_BLEU, 0, suffStatsCount_BLEU);
 
     double sc_T = myTER.score(stats_TER);
     double sc_B = myBLEU.score(stats_BLEU);
@@ -176,12 +172,8 @@ public class TERMinusBLEU extends EvaluationMetric {
   public void printDetailedScore_fromStats(int[] stats, boolean oneLiner) {
     int[] stats_TER = new int[suffStatsCount_TER];
     int[] stats_BLEU = new int[suffStatsCount_BLEU];
-    for (int s = 0; s < suffStatsCount_TER; ++s) {
-      stats_TER[s] = stats[s];
-    }
-    for (int s = 0; s < suffStatsCount_BLEU; ++s) {
-      stats_BLEU[s] = stats[s + suffStatsCount_TER];
-    }
+    System.arraycopy(stats, 0, stats_TER, 0, suffStatsCount_TER);
+    System.arraycopy(stats, 0 + suffStatsCount_TER, stats_BLEU, 0, suffStatsCount_BLEU);
 
     System.out.println("---TER---");
     myTER.printDetailedScore_fromStats(stats_TER, oneLiner);

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/23ebc372/src/main/java/org/apache/joshua/metrics/TercomRunner.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/metrics/TercomRunner.java b/src/main/java/org/apache/joshua/metrics/TercomRunner.java
index d7eeae5..6c78eb2 100644
--- a/src/main/java/org/apache/joshua/metrics/TercomRunner.java
+++ b/src/main/java/org/apache/joshua/metrics/TercomRunner.java
@@ -27,12 +27,12 @@ import org.apache.joshua.util.StreamGobbler;
 
 public class TercomRunner implements Runnable {
   /* non-static data members */
-  private Semaphore blocker;
+  private final Semaphore blocker;
 
-  private String refFileName;
-  private String hypFileName;
-  private String outFileNamePrefix;
-  private int memSize;
+  private final String refFileName;
+  private final String hypFileName;
+  private final String outFileNamePrefix;
+  private final int memSize;
 
   /* static data members */
   private static boolean caseSensitive;