diff --git a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
index 8185619f9682cd8746f7c4d28d07d167f344ccf1..e1b7781261cacf4ddd8ea014ea04438060c7a84c 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
@@ -30,7 +30,6 @@ import android.view.inputmethod.EditorInfo;
 
 import com.android.inputmethod.compat.AccessibilityEventCompatUtils;
 import com.android.inputmethod.compat.AudioManagerCompatWrapper;
-import com.android.inputmethod.compat.EditorInfoCompatUtils;
 import com.android.inputmethod.compat.InputTypeCompatUtils;
 import com.android.inputmethod.compat.MotionEventCompatUtils;
 import com.android.inputmethod.keyboard.Key;
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index e9a7fd07772172ff5cfb749243d44699a98bf640..49e92fd2b715e2ac31b8d6e91d5e2afa811c311c 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -317,6 +317,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
         }
 
         final boolean settingsKeyEnabled = settingsValues.isSettingsKeyEnabled();
+        @SuppressWarnings("deprecation")
         final boolean noMicrophone = Utils.inPrivateImeOptions(
                 mPackageName, LatinIME.IME_OPTION_NO_MICROPHONE, editorInfo)
                 || Utils.inPrivateImeOptions(
diff --git a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
index 34a77e1ca43d8d2e813e37b19d744ba63bdeb30f..2a25d0ca7da39b36822104d5d80468af2961bf2e 100644
--- a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
+++ b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
@@ -18,9 +18,7 @@ package com.android.inputmethod.keyboard;
 
 import android.graphics.Rect;
 
-import com.android.inputmethod.keyboard.Key;
 import com.android.inputmethod.keyboard.internal.KeyboardParams.TouchPositionCorrection;
-import com.android.inputmethod.latin.SubtypeSwitcher;
 import com.android.inputmethod.latin.Utils;
 import com.android.inputmethod.latin.spellcheck.SpellCheckerProximityInfo;
 
diff --git a/java/src/com/android/inputmethod/latin/AssetFileAddress.java b/java/src/com/android/inputmethod/latin/AssetFileAddress.java
index 074ecacc53d22b1afdf55498d25b68aac4d21a94..3549a1561af8a9fba0794da6f58ca5607f1e9ddc 100644
--- a/java/src/com/android/inputmethod/latin/AssetFileAddress.java
+++ b/java/src/com/android/inputmethod/latin/AssetFileAddress.java
@@ -37,16 +37,16 @@ class AssetFileAddress {
 
     public static AssetFileAddress makeFromFileName(final String filename) {
         if (null == filename) return null;
-        File f = new File(filename);
-        if (null == f || !f.isFile()) return null;
+        final File f = new File(filename);
+        if (!f.isFile()) return null;
         return new AssetFileAddress(filename, 0l, f.length());
     }
 
     public static AssetFileAddress makeFromFileNameAndOffset(final String filename,
             final long offset, final long length) {
         if (null == filename) return null;
-        File f = new File(filename);
-        if (null == f || !f.isFile()) return null;
+        final File f = new File(filename);
+        if (!f.isFile()) return null;
         return new AssetFileAddress(filename, offset, length);
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index 18a9e3ab19ee145783bae3ec0b05bfcddd70285f..b9fd57434131077148fedc1cf33766baeb8e990e 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -16,12 +16,10 @@
 
 package com.android.inputmethod.latin;
 
-import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.keyboard.KeyboardSwitcher;
-import com.android.inputmethod.keyboard.ProximityInfo;
-
 import android.content.Context;
 
+import com.android.inputmethod.keyboard.ProximityInfo;
+
 import java.util.Arrays;
 
 /**
@@ -41,7 +39,6 @@ public class BinaryDictionary extends Dictionary {
     public static final int MAX_WORD_LENGTH = 48;
     public static final int MAX_WORDS = 18;
 
-    @SuppressWarnings("unused")
     private static final String TAG = "BinaryDictionary";
     private static final int MAX_PROXIMITY_CHARS_SIZE = ProximityInfo.MAX_PROXIMITY_CHARS_SIZE;
     private static final int MAX_BIGRAMS = 60;
@@ -56,8 +53,6 @@ public class BinaryDictionary extends Dictionary {
     private final int[] mScores = new int[MAX_WORDS];
     private final int[] mBigramScores = new int[MAX_BIGRAMS];
 
-    private final KeyboardSwitcher mKeyboardSwitcher = KeyboardSwitcher.getInstance();
-
     public static final Flag FLAG_REQUIRES_GERMAN_UMLAUT_PROCESSING =
             new Flag(R.bool.config_require_umlaut_processing, 0x1);
 
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
index 38563be4a4dc02d088225638355b193d3067a5af..9ffc7d0a285749d97f648c081045f56f7558cde6 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
@@ -19,7 +19,6 @@ package com.android.inputmethod.latin;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.res.AssetFileDescriptor;
-import android.content.res.Resources;
 import android.database.Cursor;
 import android.net.Uri;
 import android.text.TextUtils;
@@ -27,7 +26,6 @@ import android.util.Log;
 
 import java.io.BufferedInputStream;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
index 5546d48c077f36aef9d4c5f1fd359cea1f907de6..b333e48738f75555144d9cc279d7c1e02a35823d 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
@@ -24,9 +24,6 @@ import android.content.res.Resources;
 import android.util.Log;
 
 import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.Arrays;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
diff --git a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
index 2b78b9065e20426b498cf34e3c458ac57f6fdf1f..cad69bb0e78c3539a1f3d6a14648c78f054b0c82 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
@@ -17,7 +17,6 @@
 package com.android.inputmethod.latin;
 
 import android.content.Context;
-import android.os.AsyncTask;
 
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.keyboard.ProximityInfo;
@@ -166,15 +165,14 @@ public class ExpandableDictionary extends Dictionary {
         // Does children have the current character?
         final int childrenLength = children.mLength;
         Node childNode = null;
-        boolean found = false;
         for (int i = 0; i < childrenLength; i++) {
-            childNode = children.mData[i];
-            if (childNode.mCode == c) {
-                found = true;
+            final Node node = children.mData[i];
+            if (node.mCode == c) {
+                childNode = node;
                 break;
             }
         }
-        if (!found) {
+        if (childNode == null) {
             childNode = new Node();
             childNode.mCode = c;
             childNode.mParent = parentNode;
@@ -206,7 +204,7 @@ public class ExpandableDictionary extends Dictionary {
     }
 
     protected final void getWordsInner(final WordComposer codes, final WordCallback callback,
-            final ProximityInfo proximityInfo) {
+            @SuppressWarnings("unused") final ProximityInfo proximityInfo) {
         mInputLength = codes.size();
         if (mCodes.length < mInputLength) mCodes = new int[mInputLength][];
         // Cache the codes so that we don't have to lookup an array list
@@ -270,7 +268,7 @@ public class ExpandableDictionary extends Dictionary {
      */
     // TODO: Share this routine with the native code for BinaryDictionary
     protected void getWordsRec(NodeArray roots, final WordComposer codes, final char[] word,
-            final int depth, boolean completion, int snr, int inputIndex, int skipPos,
+            final int depth, final boolean completion, int snr, int inputIndex, int skipPos,
             WordCallback callback) {
         final int count = roots.mLength;
         final int codeSize = mInputLength;
@@ -278,9 +276,9 @@ public class ExpandableDictionary extends Dictionary {
         if (depth > mMaxDepth) {
             return;
         }
-        int[] currentChars = null;
+        final int[] currentChars;
         if (codeSize <= inputIndex) {
-            completion = true;
+            currentChars = null;
         } else {
             currentChars = mCodes[inputIndex];
         }
@@ -292,7 +290,7 @@ public class ExpandableDictionary extends Dictionary {
             final boolean terminal = node.mTerminal;
             final NodeArray children = node.mChildren;
             final int freq = node.mFrequency;
-            if (completion) {
+            if (completion || currentChars == null) {
                 word[depth] = c;
                 if (terminal) {
                     final int finalFreq;
@@ -307,7 +305,7 @@ public class ExpandableDictionary extends Dictionary {
                     }
                 }
                 if (children != null) {
-                    getWordsRec(children, codes, word, depth + 1, completion, snr, inputIndex,
+                    getWordsRec(children, codes, word, depth + 1, true, snr, inputIndex,
                             skipPos, callback);
                 }
             } else if ((c == Keyboard.CODE_SINGLE_QUOTE
@@ -412,15 +410,14 @@ public class ExpandableDictionary extends Dictionary {
         // Does children have the current character?
         final int childrenLength = children.mLength;
         Node childNode = null;
-        boolean found = false;
         for (int i = 0; i < childrenLength; i++) {
-            childNode = children.mData[i];
-            if (childNode.mCode == c) {
-                found = true;
+            final Node node = children.mData[i];
+            if (node.mCode == c) {
+                childNode = node;
                 break;
             }
         }
-        if (!found) {
+        if (childNode == null) {
             childNode = new Node();
             childNode.mCode = c;
             childNode.mParent = parentNode;
diff --git a/java/src/com/android/inputmethod/latin/FileTransforms.java b/java/src/com/android/inputmethod/latin/FileTransforms.java
index d0374e01e6ab02fad01070c0f4cc8e86a19dcf01..80159521cea14aee76bb41c46a42181328bf0c22 100644
--- a/java/src/com/android/inputmethod/latin/FileTransforms.java
+++ b/java/src/com/android/inputmethod/latin/FileTransforms.java
@@ -16,8 +16,6 @@
 
 package com.android.inputmethod.latin;
 
-import android.util.Log;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
diff --git a/java/src/com/android/inputmethod/latin/LocaleUtils.java b/java/src/com/android/inputmethod/latin/LocaleUtils.java
index efa9bfee3456ac740019668d5ca9f2b81c3c1be9..e05b47cb7af93faa3f8e43af1e1bd281fd0a5286 100644
--- a/java/src/com/android/inputmethod/latin/LocaleUtils.java
+++ b/java/src/com/android/inputmethod/latin/LocaleUtils.java
@@ -32,9 +32,6 @@ import java.util.Locale;
  * dictionary pack.
  */
 public class LocaleUtils {
-
-    private final static String TAG = LocaleUtils.class.getSimpleName();
-
     private LocaleUtils() {
         // Intentional empty constructor for utility class.
     }
diff --git a/java/src/com/android/inputmethod/latin/SynchronouslyLoadedUserDictionary.java b/java/src/com/android/inputmethod/latin/SynchronouslyLoadedUserDictionary.java
index b526fe5103c79dde57d0a53bcf582ea52066a54d..e52b46ac0695971b6319da3d347ee5fc7f3e7953 100644
--- a/java/src/com/android/inputmethod/latin/SynchronouslyLoadedUserDictionary.java
+++ b/java/src/com/android/inputmethod/latin/SynchronouslyLoadedUserDictionary.java
@@ -32,7 +32,7 @@ public class SynchronouslyLoadedUserDictionary extends UserDictionary {
     }
 
     @Override
-    public void getWords(final WordComposer codes, final WordCallback callback,
+    public synchronized void getWords(final WordComposer codes, final WordCallback callback,
             final ProximityInfo proximityInfo) {
         blockingReloadDictionaryIfRequired();
         getWordsInner(codes, callback, proximityInfo);
diff --git a/java/src/com/android/inputmethod/latin/UserBigramDictionary.java b/java/src/com/android/inputmethod/latin/UserBigramDictionary.java
index 5b615ca294f061a8d168d46e62f87e4bda18db45..9e656675eeaac73cd116b769e97f8ad49ce5e5e0 100644
--- a/java/src/com/android/inputmethod/latin/UserBigramDictionary.java
+++ b/java/src/com/android/inputmethod/latin/UserBigramDictionary.java
@@ -104,12 +104,12 @@ public class UserBigramDictionary extends ExpandableDictionary {
     private static class Bigram {
         public final String mWord1;
         public final String mWord2;
-        public final int frequency;
+        public final int mFrequency;
 
         Bigram(String word1, String word2, int frequency) {
             this.mWord1 = word1;
             this.mWord2 = word2;
-            this.frequency = frequency;
+            this.mFrequency = frequency;
         }
 
         @Override
@@ -190,7 +190,7 @@ public class UserBigramDictionary extends ExpandableDictionary {
             // Nothing pending? Return
             if (mPendingWrites.isEmpty()) return;
             // Create a background thread to write the pending entries
-            new UpdateDbTask(getContext(), sOpenHelper, mPendingWrites, mLocale).execute();
+            new UpdateDbTask(sOpenHelper, mPendingWrites, mLocale).execute();
             // Create a new map for writing new entries into while the old one is written to db
             mPendingWrites = new HashSet<Bigram>();
         }
@@ -302,8 +302,8 @@ public class UserBigramDictionary extends ExpandableDictionary {
         private final DatabaseHelper mDbHelper;
         private final String mLocale;
 
-        public UpdateDbTask(Context context, DatabaseHelper openHelper,
-                HashSet<Bigram> pendingWrites, String locale) {
+        public UpdateDbTask(DatabaseHelper openHelper, HashSet<Bigram> pendingWrites,
+                String locale) {
             mMap = pendingWrites;
             mLocale = locale;
             mDbHelper = openHelper;
@@ -372,7 +372,7 @@ public class UserBigramDictionary extends ExpandableDictionary {
                 c.close();
 
                 // insert new frequency
-                db.insert(FREQ_TABLE_NAME, null, getFrequencyContentValues(pairId, bi.frequency));
+                db.insert(FREQ_TABLE_NAME, null, getFrequencyContentValues(pairId, bi.mFrequency));
             }
             checkPruneData(db);
             sUpdatingDB = false;
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index 9e030eb90aac47957d0a483b59efdb872ce8454f..b197c5beaf27d8abe7c8656ea4d91588fc86d41d 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -19,14 +19,12 @@ package com.android.inputmethod.latin.spellcheck;
 import android.content.Intent;
 import android.content.res.Resources;
 import android.service.textservice.SpellCheckerService;
-import android.service.textservice.SpellCheckerService.Session;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.textservice.SuggestionsInfo;
 import android.view.textservice.TextInfo;
-import android.text.TextUtils;
 
 import com.android.inputmethod.compat.ArraysCompatUtils;
-import com.android.inputmethod.keyboard.Key;
 import com.android.inputmethod.keyboard.ProximityInfo;
 import com.android.inputmethod.latin.BinaryDictionary;
 import com.android.inputmethod.latin.Dictionary;
@@ -38,7 +36,6 @@ import com.android.inputmethod.latin.Flag;
 import com.android.inputmethod.latin.LocaleUtils;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.SynchronouslyLoadedUserDictionary;
-import com.android.inputmethod.latin.UserDictionary;
 import com.android.inputmethod.latin.Utils;
 import com.android.inputmethod.latin.WordComposer;
 
@@ -111,7 +108,6 @@ public class AndroidSpellCheckerService extends SpellCheckerService {
             }
         }
 
-        private final int DEFAULT_SUGGESTION_LENGTH = 16;
         private final ArrayList<CharSequence> mSuggestions;
         private final int[] mScores;
         private final String mOriginalText;
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
index dec18c1d550bad463ba04f3c4b27ac460e87116c..8fc632ee7216fe6186122bc4aac5e967d06ce2c4 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
@@ -16,14 +16,13 @@
 
 package com.android.inputmethod.latin.spellcheck;
 
-import android.content.Context;
-
 import java.util.Locale;
 import java.util.concurrent.LinkedBlockingQueue;
 
 /**
  * A blocking queue that creates dictionaries up to a certain limit as necessary.
  */
+@SuppressWarnings("serial")
 public class DictionaryPool extends LinkedBlockingQueue<DictAndProximity> {
     private final AndroidSpellCheckerService mService;
     private final int mMaxSize;
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerProximityInfo.java b/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerProximityInfo.java
index abcf7e52a11f4fc222e6edb450d472bd8149e9b7..d5b04b27c76d920572a7a1e18becffcc3d603876 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerProximityInfo.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerProximityInfo.java
@@ -19,7 +19,6 @@ package com.android.inputmethod.latin.spellcheck;
 import com.android.inputmethod.keyboard.KeyDetector;
 import com.android.inputmethod.keyboard.ProximityInfo;
 
-import java.util.Map;
 import java.util.TreeMap;
 
 public class SpellCheckerProximityInfo {
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerSettingsActivity.java b/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerSettingsActivity.java
index 483679a55840f9f5b254c58433b1182f3bf926f0..e14db8797f322631fd855c2f0b2a3f7745d8cf2c 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerSettingsActivity.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerSettingsActivity.java
@@ -16,14 +16,10 @@
 
 package com.android.inputmethod.latin.spellcheck;
 
-import com.android.inputmethod.latin.R;
-
 import android.content.Intent;
 import android.os.Bundle;
 import android.preference.PreferenceActivity;
 
-import java.util.List;
-
 /**
  * Spell checker preference screen.
  */
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerSettingsFragment.java b/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerSettingsFragment.java
index 9b821be35de186b1ce6dc157d4faa1f3b9c65688..7056874a174d99184bf20a7e8c8b85d79b35e172 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerSettingsFragment.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerSettingsFragment.java
@@ -16,17 +16,15 @@
 
 package com.android.inputmethod.latin.spellcheck;
 
-import com.android.inputmethod.latin.R;
-
 import android.os.Bundle;
 import android.preference.PreferenceFragment;
 
+import com.android.inputmethod.latin.R;
+
 /**
  * Preference screen.
  */
 public class SpellCheckerSettingsFragment extends PreferenceFragment {
-    private static final String TAG = SpellCheckerSettingsFragment.class.getSimpleName();
-
     /**
      * Empty constructor for fragment generation.
      */