You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@joshua.apache.org by mj...@apache.org on 2016/08/21 17:42:25 UTC

[16/22] incubator-joshua git commit: JOSHUA-291 - static analysis based code improvements on decoder package

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/hypergraph/OutputStringExtractor.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/hypergraph/OutputStringExtractor.java b/src/main/java/org/apache/joshua/decoder/hypergraph/OutputStringExtractor.java
index f20e063..77b76a4 100644
--- a/src/main/java/org/apache/joshua/decoder/hypergraph/OutputStringExtractor.java
+++ b/src/main/java/org/apache/joshua/decoder/hypergraph/OutputStringExtractor.java
@@ -34,7 +34,7 @@ public class OutputStringExtractor implements WalkerFunction, DerivationVisitor
     this.extractSource = extractSource;
   }
   
-  private Stack<OutputString> outputStringStack = new Stack<>();
+  private final Stack<OutputString> outputStringStack = new Stack<>();
   private final boolean extractSource;
 
   @Override
@@ -103,7 +103,7 @@ public class OutputStringExtractor implements WalkerFunction, DerivationVisitor
   private static String arrayToString(int[] ids) {
     StringBuilder sb = new StringBuilder();
     for (int i : ids) {
-      sb.append(i + " ");
+      sb.append(i).append(" ");
     }
     return sb.toString().trim();
   }
@@ -180,8 +180,8 @@ public class OutputStringExtractor implements WalkerFunction, DerivationVisitor
       for (int i = 0; i < position; i++) {
         result[resultIndex++] = this.words[i];
       }
-      for (int i = 0; i < words.length; i++) {
-        result[resultIndex++] = words[i];
+      for (int word : words) {
+        result[resultIndex++] = word;
       }
       for (int i = position + 1; i < this.words.length; i++) {
         result[resultIndex++] = this.words[i];

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/hypergraph/StringToTreeConverter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/hypergraph/StringToTreeConverter.java b/src/main/java/org/apache/joshua/decoder/hypergraph/StringToTreeConverter.java
index f393a01..d71cba6 100644
--- a/src/main/java/org/apache/joshua/decoder/hypergraph/StringToTreeConverter.java
+++ b/src/main/java/org/apache/joshua/decoder/hypergraph/StringToTreeConverter.java
@@ -32,16 +32,18 @@ public class StringToTreeConverter {
 
     HyperGraph tree = null;
 
-    Stack<String> stack = new Stack<String>();
+    Stack<String> stack = new Stack<>();
     for (int i = 0; i < inputStr.length(); i++) {
       char curChar = inputStr.charAt(i);
 
       if (curChar == ')' && inputStr.charAt(i - 1) != ' ') {// end of a rule
         StringBuffer ruleString = new StringBuffer();
 
+        label:
         while (stack.empty() == false) {
           String cur = stack.pop();
-          if (cur.equals(beginSymbol)) {// stop
+          switch (cur) {
+          case beginSymbol: // stop
             // setup a node
             // HGNode(int i, int j, int lhs, HashMap<Integer,DPState> dpStates, HyperEdge
             // initHyperedge, double estTotalLogP)
@@ -50,13 +52,15 @@ public class StringToTreeConverter {
             // public Rule(int lhs, int[] sourceRhs, int[] targetRhs, float[]
             // featureScores, int arity, int owner, float latticeCost, int ruleID)
 
-
             stack.add(nodeSymbol);// TODO: should be lHS+id
-            break;
-          } else if (cur.equals(nodeSymbol)) {
 
-          } else {
+            break label;
+          case nodeSymbol:
+
+            break;
+          default:
             ruleString.append(cur);
+            break;
           }
         }
       } else if (curChar == '(' && inputStr.charAt(i + 1) != ' ') {// begin of a rule

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/hypergraph/ViterbiExtractor.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/hypergraph/ViterbiExtractor.java b/src/main/java/org/apache/joshua/decoder/hypergraph/ViterbiExtractor.java
index 734e0aa..51ae3c8 100644
--- a/src/main/java/org/apache/joshua/decoder/hypergraph/ViterbiExtractor.java
+++ b/src/main/java/org/apache/joshua/decoder/hypergraph/ViterbiExtractor.java
@@ -157,7 +157,7 @@ public class ViterbiExtractor {
 
   // TODO: tbl_states
   private static HGNode cloneNodeWithBestHyperedge(HGNode inNode) {
-    List<HyperEdge> hyperedges = new ArrayList<HyperEdge>(1);
+    List<HyperEdge> hyperedges = new ArrayList<>(1);
     HyperEdge cloneEdge = cloneHyperedge(inNode.bestHyperedge);
     hyperedges.add(cloneEdge);
     return new HGNode(inNode.i, inNode.j, inNode.lhs, hyperedges, cloneEdge, inNode.getDPStates());
@@ -167,12 +167,10 @@ public class ViterbiExtractor {
   private static HyperEdge cloneHyperedge(HyperEdge inEdge) {
     List<HGNode> antNodes = null;
     if (null != inEdge.getTailNodes()) {
-      antNodes = new ArrayList<HGNode>(inEdge.getTailNodes());// l_ant_items will be changed in
+      antNodes = new ArrayList<>(inEdge.getTailNodes());// l_ant_items will be changed in
       // get_1best_tree_item
     }
-    HyperEdge res =
-        new HyperEdge(inEdge.getRule(), inEdge.getBestDerivationScore(), inEdge.getTransitionLogP(false),
-            antNodes, inEdge.getSourcePath());
-    return res;
+    return new HyperEdge(inEdge.getRule(), inEdge.getBestDerivationScore(), inEdge.getTransitionLogP(false),
+        antNodes, inEdge.getSourcePath());
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/hypergraph/WordAlignmentExtractor.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/hypergraph/WordAlignmentExtractor.java b/src/main/java/org/apache/joshua/decoder/hypergraph/WordAlignmentExtractor.java
index 04d0897..c949699 100644
--- a/src/main/java/org/apache/joshua/decoder/hypergraph/WordAlignmentExtractor.java
+++ b/src/main/java/org/apache/joshua/decoder/hypergraph/WordAlignmentExtractor.java
@@ -38,7 +38,7 @@ import org.apache.joshua.decoder.hypergraph.KBestExtractor.DerivationVisitor;
  */
 public class WordAlignmentExtractor implements WalkerFunction, DerivationVisitor {
   
-  private final Stack<WordAlignmentState> stack = new Stack<WordAlignmentState>();
+  private final Stack<WordAlignmentState> stack = new Stack<>();
 
   /**
    * Merges a state with the top of the stack if applicable or places it on top of the stack.

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/hypergraph/WordAlignmentState.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/hypergraph/WordAlignmentState.java b/src/main/java/org/apache/joshua/decoder/hypergraph/WordAlignmentState.java
index f057f23..aef4665 100644
--- a/src/main/java/org/apache/joshua/decoder/hypergraph/WordAlignmentState.java
+++ b/src/main/java/org/apache/joshua/decoder/hypergraph/WordAlignmentState.java
@@ -42,7 +42,7 @@ public class WordAlignmentState {
    * rule. The values of the elements correspond to the aligned source token on
    * the source side of the rule.
    */
-  private List<AlignedSourceTokens> trgPoints;
+  private final List<AlignedSourceTokens> trgPoints;
   private final int srcStart;
   /** number of NTs we need to substitute. */
   private int numNT;
@@ -57,7 +57,7 @@ public class WordAlignmentState {
    * @param start the start index
    */
   public WordAlignmentState(final Rule rule, final int start) {
-    trgPoints = new LinkedList<AlignedSourceTokens>();
+    trgPoints = new LinkedList<>();
     srcLength = rule.getFrench().length;
     numNT = rule.getArity();
     srcStart = start;
@@ -123,7 +123,7 @@ public class WordAlignmentState {
    * @return a final alignment list
    */
   public List<List<Integer>> toFinalList() {
-    final List<List<Integer>> alignment = new ArrayList<List<Integer>>(trgPoints.size());
+    final List<List<Integer>> alignment = new ArrayList<>(trgPoints.size());
     if (trgPoints.isEmpty()) {
       return alignment;
     }
@@ -132,7 +132,7 @@ public class WordAlignmentState {
     while (it.hasNext()) {
       final AlignedSourceTokens alignedSourceTokens = it.next();
       if (it.hasNext()) { // if not last element in trgPoints
-        final List<Integer> newAlignedSourceTokens = new ArrayList<Integer>();
+        final List<Integer> newAlignedSourceTokens = new ArrayList<>();
         for (Integer sourceIndex : alignedSourceTokens) {
           newAlignedSourceTokens.add(sourceIndex - 1); // shift by one to disregard sentence marker
         }

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/io/JSONMessage.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/io/JSONMessage.java b/src/main/java/org/apache/joshua/decoder/io/JSONMessage.java
index 5056aaa..36415fe 100644
--- a/src/main/java/org/apache/joshua/decoder/io/JSONMessage.java
+++ b/src/main/java/org/apache/joshua/decoder/io/JSONMessage.java
@@ -51,14 +51,14 @@ public class JSONMessage {
   public Data data = null;
   public List<String> metadata = null;
   public JSONMessage() {
-    metadata = new ArrayList<String>();
+    metadata = new ArrayList<>();
   }
   
   public class Data {
-    public List<TranslationItem> translations;
+    public final List<TranslationItem> translations;
     
     public Data() {
-      translations = new ArrayList<TranslationItem>();
+      translations = new ArrayList<>();
     }
   }
 //
@@ -119,12 +119,12 @@ public class JSONMessage {
   }
 
   public class TranslationItem {
-    public String translatedText;
-    public List<NBestItem> raw_nbest;
+    public final String translatedText;
+    public final List<NBestItem> raw_nbest;
     
     public TranslationItem(String value) {
       this.translatedText = value;
-      this.raw_nbest = new ArrayList<NBestItem>();
+      this.raw_nbest = new ArrayList<>();
     }
     
     /**
@@ -139,8 +139,8 @@ public class JSONMessage {
   }
   
   public class NBestItem {
-    public String hyp;
-    public float totalScore;
+    public final String hyp;
+    public final float totalScore;
     
     public NBestItem(String hyp, float score) {
       this.hyp = hyp;

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/io/TranslationRequestStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/io/TranslationRequestStream.java b/src/main/java/org/apache/joshua/decoder/io/TranslationRequestStream.java
index 0287688..afb63ab 100644
--- a/src/main/java/org/apache/joshua/decoder/io/TranslationRequestStream.java
+++ b/src/main/java/org/apache/joshua/decoder/io/TranslationRequestStream.java
@@ -51,9 +51,7 @@ public class TranslationRequestStream {
   private final JoshuaConfiguration joshuaConfiguration;
   private int sentenceNo = -1;
 
-  private Sentence nextSentence = null;
-
-  /* Plain text or JSON input */ 
+  /* Plain text or JSON input */
   private StreamHandler requestHandler = null;
 
   /* Whether the request has been killed by a broken client connection. */
@@ -139,7 +137,7 @@ public class TranslationRequestStream {
    * new one.
    */
   public synchronized Sentence next() {
-    nextSentence = null;
+    Sentence nextSentence = null;
     
     if (isShutDown)
       return null;

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/phrase/Candidate.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/phrase/Candidate.java b/src/main/java/org/apache/joshua/decoder/phrase/Candidate.java
index ee8a2a9..93e21cd 100644
--- a/src/main/java/org/apache/joshua/decoder/phrase/Candidate.java
+++ b/src/main/java/org/apache/joshua/decoder/phrase/Candidate.java
@@ -37,19 +37,19 @@ import org.apache.joshua.decoder.hypergraph.HGNode;
 public class Candidate {
 
   // the set of hypotheses that can be paired with phrases from this span 
-  private List<Hypothesis> hypotheses;
+  private final List<Hypothesis> hypotheses;
 
   // the list of target phrases gathered from a span of the input
-  private TargetPhrases phrases;
+  private final TargetPhrases phrases;
 
   // source span of new phrase
-  public Span span;
+  public final Span span;
   
   // future cost of applying phrases to hypotheses
-  float future_delta;
+  final float future_delta;
   
   // indices into the hypotheses and phrases arrays (used for cube pruning)
-  private int[] ranks;
+  private final int[] ranks;
   
   // scoring and state information 
   private ComputeNodeResult result;
@@ -186,7 +186,7 @@ public class Candidate {
    * @return a list of size one, wrapping the tail node pointer
    */
   public List<HGNode> getTailNodes() {
-    List<HGNode> tailNodes = new ArrayList<HGNode>();
+    List<HGNode> tailNodes = new ArrayList<>();
     tailNodes.add(getHypothesis());
     return tailNodes;
   }

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/phrase/Coverage.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/phrase/Coverage.java b/src/main/java/org/apache/joshua/decoder/phrase/Coverage.java
index 2c674fc..4ef0ede 100644
--- a/src/main/java/org/apache/joshua/decoder/phrase/Coverage.java
+++ b/src/main/java/org/apache/joshua/decoder/phrase/Coverage.java
@@ -39,7 +39,7 @@ public class Coverage {
   private BitSet bits;
 
   // Default bit vector length
-  private static int INITIAL_LENGTH = 10;
+  private static final int INITIAL_LENGTH = 10;
 
   public Coverage() {
     firstZero = 0;

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/phrase/Future.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/phrase/Future.java b/src/main/java/org/apache/joshua/decoder/phrase/Future.java
index 0ece4a3..83baf9c 100644
--- a/src/main/java/org/apache/joshua/decoder/phrase/Future.java
+++ b/src/main/java/org/apache/joshua/decoder/phrase/Future.java
@@ -27,9 +27,9 @@ public class Future {
   private static final Logger LOG = LoggerFactory.getLogger(Future.class);
 
   // Square matrix with half the values ignored.
-  private ChartSpan<Float> entries;
+  private final ChartSpan<Float> entries;
 
-  private int sentlen;
+  private final int sentlen;
 
   /**
    * Computes bottom-up the best way to cover all spans of the input sentence, using the phrases
@@ -42,7 +42,7 @@ public class Future {
   public Future(PhraseChart chart) {
 
     sentlen = chart.SentenceLength();
-    entries = new ChartSpan<Float>(sentlen + 1, Float.NEGATIVE_INFINITY);
+    entries = new ChartSpan<>(sentlen + 1, Float.NEGATIVE_INFINITY);
 
     /*
      * The sentence is represented as a sequence of words, with the first and last words set

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/phrase/Header.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/phrase/Header.java b/src/main/java/org/apache/joshua/decoder/phrase/Header.java
index 30d771c..d55c08b 100644
--- a/src/main/java/org/apache/joshua/decoder/phrase/Header.java
+++ b/src/main/java/org/apache/joshua/decoder/phrase/Header.java
@@ -30,7 +30,7 @@ public class Header implements Comparable<Header>, Comparator<Header> {
   private static final Logger LOG = LoggerFactory.getLogger(Header.class);
 
   private float score;
-  private int arity;
+  private final int arity;
   private Note note;
     
   protected Header() {

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/phrase/Hypothesis.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/phrase/Hypothesis.java b/src/main/java/org/apache/joshua/decoder/phrase/Hypothesis.java
index 71d3df9..af5069d 100644
--- a/src/main/java/org/apache/joshua/decoder/phrase/Hypothesis.java
+++ b/src/main/java/org/apache/joshua/decoder/phrase/Hypothesis.java
@@ -39,15 +39,14 @@ import org.apache.joshua.decoder.hypergraph.HyperEdge;
 public class Hypothesis extends HGNode implements Comparable<Hypothesis> {
 
   // The hypothesis' coverage vector
-  private Coverage coverage;
+  private final Coverage coverage;
 
-  public static Rule BEGIN_RULE = new HieroFormatReader().parseLine("[X] ||| <s> ||| <s> |||   ||| 0-0");
-  public static Rule END_RULE = new HieroFormatReader().parseLine("[GOAL] ||| [X,1] </s> ||| [X,1] </s> |||   ||| 0-0 1-1");
+  public static final Rule BEGIN_RULE = new HieroFormatReader().parseLine("[X] ||| <s> ||| <s> |||   ||| 0-0");
+  public static final Rule END_RULE = new HieroFormatReader().parseLine("[GOAL] ||| [X,1] </s> ||| [X,1] </s> |||   ||| 0-0 1-1");
 
   public String toString() {
     StringBuffer sb = new StringBuffer();
-    for (DPState state: getDPStates())
-      sb.append(state);
+    getDPStates().forEach(sb::append);
     String words = bestHyperedge.getRule().getEnglishWords();
 //  return String.format("HYP[%s] %.5f j=%d words=%s state=%s", coverage, score, j, words, sb);
     return String.format("HYP[%s] j=%d words=[%s] state=%s", coverage, j, words, sb);

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/phrase/PhraseChart.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/phrase/PhraseChart.java b/src/main/java/org/apache/joshua/decoder/phrase/PhraseChart.java
index 9803d9b..8f8bafe 100644
--- a/src/main/java/org/apache/joshua/decoder/phrase/PhraseChart.java
+++ b/src/main/java/org/apache/joshua/decoder/phrase/PhraseChart.java
@@ -38,15 +38,15 @@ public class PhraseChart {
 
   private static final Logger LOG = LoggerFactory.getLogger(PhraseChart.class);
 
-  private int sentence_length;
+  private final int sentence_length;
   private int max_source_phrase_length;
 
   // Banded array: different source lengths are next to each other.
-  private List<TargetPhrases> entries;
+  private final List<TargetPhrases> entries;
 
   // number of translation options
   int numOptions = 20;
-  private List<FeatureFunction> features;
+  private final List<FeatureFunction> features;
 
   /**
    * Create a new PhraseChart object, which represents all phrases that are
@@ -67,16 +67,16 @@ public class PhraseChart {
     this.features = features;
 
     max_source_phrase_length = 0;
-    for (int i = 0; i < tables.length; i++)
-      max_source_phrase_length = Math.max(max_source_phrase_length,
-          tables[i].getMaxSourcePhraseLength());
+    for (PhraseTable table1 : tables)
+      max_source_phrase_length = Math
+          .max(max_source_phrase_length, table1.getMaxSourcePhraseLength());
     sentence_length = source.length();
 
 //    System.err.println(String.format(
 //        "PhraseChart()::Initializing chart for sentlen %d max %d from %s", sentence_length,
 //        max_source_phrase_length, source));
 
-    entries = new ArrayList<TargetPhrases>();
+    entries = new ArrayList<>();
     for (int i = 0; i < sentence_length * max_source_phrase_length; i++)
       entries.add(null);
 
@@ -93,10 +93,8 @@ public class PhraseChart {
       }
     }
 
-    for (TargetPhrases phrases : entries) {
-      if (phrases != null)
-        phrases.finish(features, Decoder.weights, num_options);
-    }
+    entries.stream().filter(phrases -> phrases != null)
+        .forEach(phrases -> phrases.finish(features, Decoder.weights, num_options));
 
     LOG.info("Input {}: Collecting options took {} seconds", source.id(),
         (System.currentTimeMillis() - startTime) / 1000.0f);

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/phrase/PhraseTable.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/phrase/PhraseTable.java b/src/main/java/org/apache/joshua/decoder/phrase/PhraseTable.java
index 2c8a3e9..4c347dd 100644
--- a/src/main/java/org/apache/joshua/decoder/phrase/PhraseTable.java
+++ b/src/main/java/org/apache/joshua/decoder/phrase/PhraseTable.java
@@ -18,8 +18,6 @@
  */
 package org.apache.joshua.decoder.phrase;
 
-import static org.apache.joshua.decoder.ff.tm.OwnerMap.UNKNOWN_OWNER;
-
 import java.io.File;
 import java.io.IOException;
 import java.util.List;
@@ -43,7 +41,7 @@ import org.apache.joshua.decoder.ff.tm.packed.PackedGrammar;
  */
 public class PhraseTable implements Grammar {
   
-  private JoshuaConfiguration config;
+  private final JoshuaConfiguration config;
   private Grammar backend;
   
   /**
@@ -118,7 +116,7 @@ public class PhraseTable implements Grammar {
    * @param rule the rule to add
    */
   public void addRule(Rule rule) {
-    ((MemoryBasedBatchGrammar)backend).addRule(rule);
+    backend.addRule(rule);
   }
   
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/phrase/Stack.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/phrase/Stack.java b/src/main/java/org/apache/joshua/decoder/phrase/Stack.java
index d0ae2da..6661dfb 100644
--- a/src/main/java/org/apache/joshua/decoder/phrase/Stack.java
+++ b/src/main/java/org/apache/joshua/decoder/phrase/Stack.java
@@ -43,20 +43,20 @@ public class Stack extends ArrayList<Hypothesis> {
 
   private static final long serialVersionUID = 7885252799032416068L;
 
-  private HashMap<Coverage, ArrayList<Hypothesis>> coverages;
+  private final HashMap<Coverage, ArrayList<Hypothesis>> coverages;
   
-  private Sentence sentence;
-  private List<FeatureFunction> featureFunctions;
-  private JoshuaConfiguration config;
+  private final Sentence sentence;
+  private final List<FeatureFunction> featureFunctions;
+  private final JoshuaConfiguration config;
 
   /* The list of states we've already visited. */
-  private HashSet<Candidate> visitedStates;
+  private final HashSet<Candidate> visitedStates;
   
   /* A list of candidates sorted for consideration for entry to the chart (for cube pruning) */
-  private PriorityQueue<Candidate> candidates;
+  private final PriorityQueue<Candidate> candidates;
   
   /* Short-circuits adding a cube-prune state more than once */
-  private HashMap<Hypothesis, Hypothesis> deduper;
+  private final HashMap<Hypothesis, Hypothesis> deduper;
   
   /**
    * Create a new stack. Stacks are organized one for each number of source words that are covered.
@@ -70,10 +70,10 @@ public class Stack extends ArrayList<Hypothesis> {
     this.sentence = sentence;
     this.config = config;
     
-    this.candidates = new PriorityQueue<Candidate>(1, new CandidateComparator());
-    this.coverages = new HashMap<Coverage, ArrayList<Hypothesis>>();
-    this.visitedStates = new HashSet<Candidate>();
-    this.deduper = new HashMap<Hypothesis,Hypothesis>();
+    this.candidates = new PriorityQueue<>(1, new CandidateComparator());
+    this.coverages = new HashMap<>();
+    this.visitedStates = new HashSet<>();
+    this.deduper = new HashMap<>();
   }
 
   /**
@@ -86,7 +86,7 @@ public class Stack extends ArrayList<Hypothesis> {
   public boolean add(Hypothesis hyp) {
     
     if (! coverages.containsKey((hyp.getCoverage())))
-      coverages.put(hyp.getCoverage(), new ArrayList<Hypothesis>()); 
+      coverages.put(hyp.getCoverage(), new ArrayList<>());
     coverages.get(hyp.getCoverage()).add(hyp);
     
     return super.add(hyp);
@@ -153,7 +153,7 @@ public class Stack extends ArrayList<Hypothesis> {
       String newWords = cand.getRule().getEnglishWords().replace("[X,1] ",  "");
           
       // If the string is not found in the target sentence, explore the cube neighbors
-      if (sentence.fullTarget().indexOf(oldWords + " " + newWords) == -1) {
+      if (!sentence.fullTarget().contains(oldWords + " " + newWords)) {
         Candidate next = cand.extendPhrase();
         if (next != null)
           addCandidate(next); 

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/phrase/Stacks.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/phrase/Stacks.java b/src/main/java/org/apache/joshua/decoder/phrase/Stacks.java
index 8c092ec..2802d65 100644
--- a/src/main/java/org/apache/joshua/decoder/phrase/Stacks.java
+++ b/src/main/java/org/apache/joshua/decoder/phrase/Stacks.java
@@ -63,14 +63,14 @@ public class Stacks {
   // The end state
   private Hypothesis end;
   
-  List<FeatureFunction> featureFunctions;
+  final List<FeatureFunction> featureFunctions;
 
-  private Sentence sentence;
+  private final Sentence sentence;
 
-  private JoshuaConfiguration config;
+  private final JoshuaConfiguration config;
 
   /* Contains all the phrase tables */
-  private PhraseChart chart;
+  private final PhraseChart chart;
   
   /**
    * Entry point. Initialize everything. Create pass-through (OOV) phrase table and glue phrase
@@ -89,8 +89,8 @@ public class Stacks {
     this.config = config;
     
     int num_phrase_tables = 0;
-    for (int i = 0; i < grammars.length; i++)
-      if (grammars[i] instanceof PhraseTable)
+    for (Grammar grammar : grammars)
+      if (grammar instanceof PhraseTable)
         ++num_phrase_tables;
     
     PhraseTable[] phraseTables = new PhraseTable[num_phrase_tables + 2];
@@ -118,7 +118,7 @@ public class Stacks {
     long startTime = System.currentTimeMillis();
     
     Future future = new Future(chart);
-    stacks = new ArrayList<Stack>();
+    stacks = new ArrayList<>();
     
     // <s> counts as the first word. Pushing null lets us count from one.
     stacks.add(null);
@@ -233,11 +233,8 @@ public class Stacks {
     /* If a gap is created by applying this phrase, make sure that you can reach the first
      * zero later on without violating the distortion constraint.
      */
-    if (end - firstZero > config.reordering_limit) {
-      return false;
-    }
-    
-    return true;
+    return end - firstZero <= config.reordering_limit;
+
   }
 
 
@@ -254,7 +251,7 @@ public class Stacks {
     
     for (Hypothesis hyp: lastStack) {
       float score = hyp.getScore();
-      List<HGNode> tailNodes = new ArrayList<HGNode>();
+      List<HGNode> tailNodes = new ArrayList<>();
       tailNodes.add(hyp);
       
       float finalTransitionScore = ComputeNodeResult.computeFinalCost(featureFunctions, tailNodes, 0, sentence.length(), null, sentence);

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/segment_file/ConstraintRule.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/segment_file/ConstraintRule.java b/src/main/java/org/apache/joshua/decoder/segment_file/ConstraintRule.java
index 5146e2c..0db76cb 100644
--- a/src/main/java/org/apache/joshua/decoder/segment_file/ConstraintRule.java
+++ b/src/main/java/org/apache/joshua/decoder/segment_file/ConstraintRule.java
@@ -54,9 +54,9 @@ public interface ConstraintRule {
    * The interpretation of a RHS is that it provides a hard constraint to filter the regular grammar
    * such that only rules generating the desired translation can be used.</p>
    */
-  public enum Type {
+  enum Type {
     RULE, LHS, RHS
-  };
+  }
 
   /** 
    * Return the type of this ConstraintRule.

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/segment_file/Sentence.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/segment_file/Sentence.java b/src/main/java/org/apache/joshua/decoder/segment_file/Sentence.java
index e323ef6..7127870 100644
--- a/src/main/java/org/apache/joshua/decoder/segment_file/Sentence.java
+++ b/src/main/java/org/apache/joshua/decoder/segment_file/Sentence.java
@@ -91,7 +91,7 @@ public class Sentence {
     
     config = joshuaConfiguration;
     
-    this.constraints = new LinkedList<ConstraintSpan>();
+    this.constraints = new LinkedList<>();
 
     // Check if the sentence has SGML markings denoting the
     // sentence ID; if so, override the id passed in to the
@@ -103,7 +103,7 @@ public class Sentence {
       this.id = Integer.parseInt(idstr);
 
     } else {
-      if (inputString.indexOf(" ||| ") != -1) {
+      if (inputString.contains(" ||| ")) {
         /* Target-side given; used for parsing and forced decoding */
         String[] pieces = inputString.split("\\s?\\|{3}\\s?");
         source = pieces[0];
@@ -178,7 +178,7 @@ public class Sentence {
     Lattice<Token> oldLattice = this.getLattice();
 
     /* Build a list of terminals across all grammars */
-    HashSet<Integer> vocabulary = new HashSet<Integer>();
+    HashSet<Integer> vocabulary = new HashSet<>();
     for (Grammar grammar : grammars) {
       Iterator<Integer> iterator = grammar.getTrieRoot().getTerminalExtensionIterator();
       while (iterator.hasNext())
@@ -197,11 +197,11 @@ public class Sentence {
           List<Arc<Token>> savedArcs = oldNodes.get(nodeid).getOutgoingArcs();
 
           char[] chars = word.toCharArray();
-          ChartSpan<Boolean> wordChart = new ChartSpan<Boolean>(chars.length + 1, false);
-          ArrayList<Node<Token>> nodes = new ArrayList<Node<Token>>(chars.length + 1);
+          ChartSpan<Boolean> wordChart = new ChartSpan<>(chars.length + 1, false);
+          ArrayList<Node<Token>> nodes = new ArrayList<>(chars.length + 1);
           nodes.add(oldNodes.get(nodeid));
           for (int i = 1; i < chars.length; i++)
-            nodes.add(new Node<Token>(i));
+            nodes.add(new Node<>(i));
           nodes.add(oldNodes.get(nodeid + 1));
           for (int width = 1; width <= chars.length; width++) {
             for (int i = 0; i <= chars.length - width; i++) {
@@ -228,7 +228,7 @@ public class Sentence {
           /* If there's a path from beginning to end */
           if (wordChart.get(0, chars.length)) {
             // Remove nodes not part of a complete path
-            HashSet<Node<Token>> deletedNodes = new HashSet<Node<Token>>();
+            HashSet<Node<Token>> deletedNodes = new HashSet<>();
             for (int k = 1; k < nodes.size() - 1; k++)
               if (!(wordChart.get(0, k) && wordChart.get(k, chars.length)))
                 nodes.set(k, null);
@@ -382,7 +382,7 @@ public class Sentence {
    */
   public List<Token> getTokens() {
     assert isLinearChain();
-    List<Token> tokens = new ArrayList<Token>();
+    List<Token> tokens = new ArrayList<>();
     for (Node<Token> node: getLattice().getNodes())
       if (node != null && node.getOutgoingArcs().size() > 0) 
         tokens.add(node.getOutgoingArcs().get(0).getLabel());
@@ -435,7 +435,7 @@ public class Sentence {
   public String toString() {
     StringBuilder sb = new StringBuilder(source());
     if (target() != null) {
-      sb.append(" ||| " + target());
+      sb.append(" ||| ").append(target());
     }
     return sb.toString();
   }

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/029cbbcc/src/main/java/org/apache/joshua/decoder/segment_file/Token.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/segment_file/Token.java b/src/main/java/org/apache/joshua/decoder/segment_file/Token.java
index b84826d..4cbc7fa 100644
--- a/src/main/java/org/apache/joshua/decoder/segment_file/Token.java
+++ b/src/main/java/org/apache/joshua/decoder/segment_file/Token.java
@@ -42,10 +42,9 @@ public class Token {
 
   // The token without the annotations
   private String token; 
-  private int tokenID;
+  private final int tokenID;
 
   private HashMap<String,String> annotations = null;
-  private JoshuaConfiguration joshuaConfiguration;
 
   /**
    * <p>Constructor : Creates a Token object from a raw word
@@ -75,10 +74,10 @@ public class Token {
    *  
    */
   public Token(String rawWord, JoshuaConfiguration config) {
+
+    JoshuaConfiguration joshuaConfiguration = config;
     
-    this.joshuaConfiguration = config;
-    
-    annotations = new HashMap<String,String>();
+    annotations = new HashMap<>();
     
     // Matches a word with an annotation
     // Check guidelines in constructor description