Remove constructors

And small cleanup.

Change-Id: I1de903f42c1b8d57a488be2162e0b94055a6d1f2
diff --git a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
index d8081e1..3515287 100644
--- a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
+++ b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
@@ -249,16 +249,6 @@
     public final DictionaryOptions mOptions;
     public final Node mRoot;
 
-    public FusionDictionary() {
-        mRoot = new Node();
-        mOptions = new DictionaryOptions(new HashMap<String, String>());
-    }
-
-    public FusionDictionary(final HashMap<String, String> attributes) {
-        mRoot = new Node();
-        mOptions = new DictionaryOptions(attributes);
-    }
-
     public FusionDictionary(final Node root, final DictionaryOptions options) {
         mRoot = root;
         mOptions = options;
diff --git a/tools/makedict/src/com/android/inputmethod/latin/makedict/XmlDictInputOutput.java b/tools/makedict/src/com/android/inputmethod/latin/makedict/XmlDictInputOutput.java
index c51eea5..0acd1b2 100644
--- a/tools/makedict/src/com/android/inputmethod/latin/makedict/XmlDictInputOutput.java
+++ b/tools/makedict/src/com/android/inputmethod/latin/makedict/XmlDictInputOutput.java
@@ -16,6 +16,8 @@
 
 package com.android.inputmethod.latin.makedict;
 
+import com.android.inputmethod.latin.makedict.FusionDictionary.DictionaryOptions;
+import com.android.inputmethod.latin.makedict.FusionDictionary.Node;
 import com.android.inputmethod.latin.makedict.FusionDictionary.WeightedString;
 
 import java.io.IOException;
@@ -61,7 +63,7 @@
         private static final int END = 5;
         private static final int UNKNOWN = 6;
 
-        final FusionDictionary mDictionary;
+        FusionDictionary mDictionary;
         int mState; // the state of the parser
         int mFreq; // the currently read freq
         String mWord; // the current word
@@ -71,13 +73,12 @@
         /**
          * Create the handler.
          *
-         * @param dict the dictionary to construct.
+         * @param shortcuts the shortcuts as a map. This may be empty, but may not be null.
          * @param bigrams the bigrams as a map. This may be empty, but may not be null.
          */
-        public UnigramHandler(final FusionDictionary dict,
-                final HashMap<String, ArrayList<WeightedString>> shortcuts,
+        public UnigramHandler(final HashMap<String, ArrayList<WeightedString>> shortcuts,
                 final HashMap<String, ArrayList<WeightedString>> bigrams) {
-            mDictionary = dict;
+            mDictionary = null;
             mShortcutsMap = shortcuts;
             mBigramsMap = bigrams;
             mWord = "";
@@ -85,6 +86,17 @@
             mFreq = 0;
         }
 
+        public FusionDictionary getFinalDictionary() {
+            final FusionDictionary dict = mDictionary;
+            mDictionary = null;
+            mShortcutsMap.clear();
+            mBigramsMap.clear();
+            mWord = "";
+            mState = START;
+            mFreq = 0;
+            return dict;
+        }
+
         @Override
         public void startElement(String uri, String localName, String qName, Attributes attrs) {
             if (WORD_TAG.equals(localName)) {
@@ -97,10 +109,12 @@
                     }
                 }
             } else if (ROOT_TAG.equals(localName)) {
+                final HashMap<String, String> attributes = new HashMap<String, String>();
                 for (int attrIndex = 0; attrIndex < attrs.getLength(); ++attrIndex) {
                     final String attrName = attrs.getLocalName(attrIndex);
-                    mDictionary.mOptions.mAttributes.put(attrName, attrs.getValue(attrIndex));
+                    attributes.put(attrName, attrs.getValue(attrIndex));
                 }
+                mDictionary = new FusionDictionary(new Node(), new DictionaryOptions(attributes));
             } else {
                 mState = UNKNOWN;
             }
@@ -235,12 +249,11 @@
         final ShortcutHandler shortcutHandler = new ShortcutHandler();
         if (null != shortcuts) parser.parse(shortcuts, shortcutHandler);
 
-        final FusionDictionary dict = new FusionDictionary();
         final UnigramHandler unigramHandler =
-                new UnigramHandler(dict, shortcutHandler.getShortcutMap(),
+                new UnigramHandler(shortcutHandler.getShortcutMap(),
                         bigramHandler.getBigramMap());
         parser.parse(unigrams, unigramHandler);
-        return dict;
+        return unigramHandler.getFinalDictionary();
     }
 
     /**
diff --git a/tools/makedict/tests/com/android/inputmethod/latin/BinaryDictInputOutputTest.java b/tools/makedict/tests/com/android/inputmethod/latin/BinaryDictInputOutputTest.java
index 9682c9b..e19c7d5 100644
--- a/tools/makedict/tests/com/android/inputmethod/latin/BinaryDictInputOutputTest.java
+++ b/tools/makedict/tests/com/android/inputmethod/latin/BinaryDictInputOutputTest.java
@@ -16,9 +16,11 @@
 
 package com.android.inputmethod.latin.makedict;
 
+import com.android.inputmethod.latin.makedict.FusionDictionary.DictionaryOptions;
 import com.android.inputmethod.latin.makedict.FusionDictionary.Node;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 
 import junit.framework.TestCase;
 
@@ -38,7 +40,8 @@
     // Test the flattened array contains the expected number of nodes, and
     // that it does not contain any duplicates.
     public void testFlattenNodes() {
-        final FusionDictionary dict = new FusionDictionary();
+        final FusionDictionary dict = new FusionDictionary(new Node(),
+                new DictionaryOptions(new HashMap<String, String>()));
         dict.add("foo", 1, null, null);
         dict.add("fta", 1, null, null);
         dict.add("ftb", 1, null, null);