Check the length of the word when add to FusionDictionary.

Change-Id: Id98d18e90a8b83b597507728b467f56888c8fd12
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index 8909526..c3ae81f 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -41,7 +41,7 @@
      * It is necessary to keep it at this value because some languages e.g. German have
      * really long words.
      */
-    public static final int MAX_WORD_LENGTH = 48;
+    public static final int MAX_WORD_LENGTH = Constants.Dictionary.MAX_WORD_LENGTH;
     public static final int MAX_WORDS = 18;
     public static final int MAX_SPACES = 16;
 
diff --git a/java/src/com/android/inputmethod/latin/Constants.java b/java/src/com/android/inputmethod/latin/Constants.java
index d71c0f9..61817ce 100644
--- a/java/src/com/android/inputmethod/latin/Constants.java
+++ b/java/src/com/android/inputmethod/latin/Constants.java
@@ -128,6 +128,14 @@
         }
     }
 
+    public static class Dictionary {
+        public static final int MAX_WORD_LENGTH = 48;
+
+        private Dictionary() {
+             // This utility class is no publicly instantiable.
+        }
+    }
+
     public static final int NOT_A_CODE = -1;
 
     // See {@link KeyboardActionListener.Adapter#isInvalidCoordinate(int)}.
diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
index 7de5cf3..6b79810 100644
--- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
+++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
@@ -16,6 +16,7 @@
 
 package com.android.inputmethod.latin.makedict;
 
+import com.android.inputmethod.latin.Constants;
 import com.android.inputmethod.latin.makedict.FusionDictionary.CharGroup;
 import com.android.inputmethod.latin.makedict.FusionDictionary.DictionaryOptions;
 import com.android.inputmethod.latin.makedict.FusionDictionary.Node;
@@ -143,7 +144,7 @@
 
     // TODO: Make this value adaptative to content data, store it in the header, and
     // use it in the reading code.
-    private static final int MAX_WORD_LENGTH = 48;
+    private static final int MAX_WORD_LENGTH = Constants.Dictionary.MAX_WORD_LENGTH;
 
     private static final int MASK_GROUP_ADDRESS_TYPE = 0xC0;
     private static final int FLAG_GROUP_ADDRESS_TYPE_NOADDRESS = 0x00;
diff --git a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
index 61f7371..eebead4 100644
--- a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
+++ b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
@@ -16,6 +16,8 @@
 
 package com.android.inputmethod.latin.makedict;
 
+import com.android.inputmethod.latin.Constants;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -382,6 +384,11 @@
             final ArrayList<WeightedString> shortcutTargets,
             final boolean isNotAWord, final boolean isBlacklistEntry) {
         assert(frequency >= 0 && frequency <= 255);
+        if (word.length >= Constants.Dictionary.MAX_WORD_LENGTH) {
+            MakedictLog.w("Ignoring a word that is too long: word.length = " + word.length);
+            return;
+        }
+
         Node currentNode = mRoot;
         int charIndex = 0;