diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java b/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
index 58d3022c99a3414b9f2badb5f62eb0f310d79b05..1eee1df8730e3bc858a0a7dcfa83fef2a180f1ec 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
@@ -37,7 +37,7 @@ import com.android.inputmethod.compat.SettingsSecureCompatUtils;
 import com.android.inputmethod.latin.InputTypeUtils;
 import com.android.inputmethod.latin.R;
 
-public class AccessibilityUtils {
+public final class AccessibilityUtils {
     private static final String TAG = AccessibilityUtils.class.getSimpleName();
     private static final String CLASS = AccessibilityUtils.class.getClass().getName();
     private static final String PACKAGE = AccessibilityUtils.class.getClass().getPackage()
diff --git a/java/src/com/android/inputmethod/compat/CompatUtils.java b/java/src/com/android/inputmethod/compat/CompatUtils.java
index ce427e9c9d5bffe91023f1149e79c4436c047e34..ffed6ecb1bfb748a98e481417084cff51cf729c6 100644
--- a/java/src/com/android/inputmethod/compat/CompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/CompatUtils.java
@@ -24,7 +24,7 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 
-public class CompatUtils {
+public final class CompatUtils {
     private static final String TAG = CompatUtils.class.getSimpleName();
     private static final String EXTRA_INPUT_METHOD_ID = "input_method_id";
     // TODO: Can these be constants instead of literal String constants?
diff --git a/java/src/com/android/inputmethod/compat/EditorInfoCompatUtils.java b/java/src/com/android/inputmethod/compat/EditorInfoCompatUtils.java
index 08c246f8b8664a60977667045ce5ad73e5506165..210058bec0a29a42b0fba0109af3fa8a068112a9 100644
--- a/java/src/com/android/inputmethod/compat/EditorInfoCompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/EditorInfoCompatUtils.java
@@ -20,7 +20,7 @@ import android.view.inputmethod.EditorInfo;
 
 import java.lang.reflect.Field;
 
-public class EditorInfoCompatUtils {
+public final class EditorInfoCompatUtils {
     // EditorInfo.IME_FLAG_FORCE_ASCII has been introduced since API#16 (JellyBean).
     private static final Field FIELD_IME_FLAG_FORCE_ASCII = CompatUtils.getField(
             EditorInfo.class, "IME_FLAG_FORCE_ASCII");
diff --git a/java/src/com/android/inputmethod/compat/InputMethodServiceCompatUtils.java b/java/src/com/android/inputmethod/compat/InputMethodServiceCompatUtils.java
index 0befa7a66bdf33690882e130e8dc1aac02c1c6c0..8eea31ed2f6c7e00b474b243dd618765b3b5da9f 100644
--- a/java/src/com/android/inputmethod/compat/InputMethodServiceCompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/InputMethodServiceCompatUtils.java
@@ -20,7 +20,7 @@ import android.inputmethodservice.InputMethodService;
 
 import java.lang.reflect.Method;
 
-public class InputMethodServiceCompatUtils {
+public final class InputMethodServiceCompatUtils {
     private static final Method METHOD_enableHardwareAcceleration =
             CompatUtils.getMethod(InputMethodService.class, "enableHardwareAcceleration");
 
diff --git a/java/src/com/android/inputmethod/compat/SettingsSecureCompatUtils.java b/java/src/com/android/inputmethod/compat/SettingsSecureCompatUtils.java
index 1b79992f0d19f11c6327612ced2019c0818acfb3..db5abd0fe5ea77cf423935374ffaa344fa844656 100644
--- a/java/src/com/android/inputmethod/compat/SettingsSecureCompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/SettingsSecureCompatUtils.java
@@ -18,7 +18,7 @@ package com.android.inputmethod.compat;
 
 import java.lang.reflect.Field;
 
-public class SettingsSecureCompatUtils {
+public final class SettingsSecureCompatUtils {
     private static final Field FIELD_ACCESSIBILITY_SPEAK_PASSWORD = CompatUtils.getField(
             android.provider.Settings.Secure.class, "ACCESSIBILITY_SPEAK_PASSWORD");
 
diff --git a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
index 6ba309fcbe809d9c1a731efc232a3f6791181e23..159f436502132bc83a85fbdb2c2f70c5bb5cea6f 100644
--- a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
+++ b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
@@ -33,7 +33,7 @@ import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Locale;
 
-public class SuggestionSpanUtils {
+public final class SuggestionSpanUtils {
     private static final String TAG = SuggestionSpanUtils.class.getSimpleName();
     // TODO: Use reflection to get field values
     public static final String ACTION_SUGGESTION_PICKED =
diff --git a/java/src/com/android/inputmethod/compat/SuggestionsInfoCompatUtils.java b/java/src/com/android/inputmethod/compat/SuggestionsInfoCompatUtils.java
index e5f9db27c79c634bec9d46e3af192e0550704c1f..8314212c9c443a77f856c15fae0116ad5163692a 100644
--- a/java/src/com/android/inputmethod/compat/SuggestionsInfoCompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/SuggestionsInfoCompatUtils.java
@@ -20,7 +20,7 @@ import android.view.textservice.SuggestionsInfo;
 
 import java.lang.reflect.Field;
 
-public class SuggestionsInfoCompatUtils {
+public final class SuggestionsInfoCompatUtils {
     private static final Field FIELD_RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS = CompatUtils.getField(
             SuggestionsInfo.class, "RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS");
     private static final Integer OBJ_RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS = (Integer) CompatUtils
diff --git a/java/src/com/android/inputmethod/keyboard/ViewLayoutUtils.java b/java/src/com/android/inputmethod/keyboard/ViewLayoutUtils.java
index ee5047083b392f3eecd197157d53ec8cd0a68d88..dc12fa468fdb45d5fea90c6f87b6043c133cb92c 100644
--- a/java/src/com/android/inputmethod/keyboard/ViewLayoutUtils.java
+++ b/java/src/com/android/inputmethod/keyboard/ViewLayoutUtils.java
@@ -22,7 +22,7 @@ import android.view.ViewGroup.MarginLayoutParams;
 import android.widget.FrameLayout;
 import android.widget.RelativeLayout;
 
-public class ViewLayoutUtils {
+public final class ViewLayoutUtils {
     private ViewLayoutUtils() {
         // This utility class is not publicly instantiable.
     }
diff --git a/java/src/com/android/inputmethod/latin/CollectionUtils.java b/java/src/com/android/inputmethod/latin/CollectionUtils.java
index baa2ee1cdf1d34dddfba38375996503cc7efeb67..c75f2df5c88db0227a21bc180e912fd2e364a1a4 100644
--- a/java/src/com/android/inputmethod/latin/CollectionUtils.java
+++ b/java/src/com/android/inputmethod/latin/CollectionUtils.java
@@ -30,7 +30,7 @@ import java.util.TreeSet;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-public class CollectionUtils {
+public final class CollectionUtils {
     private CollectionUtils() {
         // This utility class is not publicly instantiable.
     }
diff --git a/java/src/com/android/inputmethod/latin/ImfUtils.java b/java/src/com/android/inputmethod/latin/ImfUtils.java
index 1461c0240f97579ed1315a70d8688ea8f735d652..2674e45759cf5328b52f39821f346c6929c5906a 100644
--- a/java/src/com/android/inputmethod/latin/ImfUtils.java
+++ b/java/src/com/android/inputmethod/latin/ImfUtils.java
@@ -29,7 +29,7 @@ import java.util.List;
 /**
  * Utility class for Input Method Framework
  */
-public class ImfUtils {
+public final class ImfUtils {
     private ImfUtils() {
         // This utility class is not publicly instantiable.
     }
diff --git a/java/src/com/android/inputmethod/latin/InputTypeUtils.java b/java/src/com/android/inputmethod/latin/InputTypeUtils.java
index 40c3b765e0ad11f5998982a14b7945ba15b70238..500866a132e43d15a6c9d39138fda16f5215a50b 100644
--- a/java/src/com/android/inputmethod/latin/InputTypeUtils.java
+++ b/java/src/com/android/inputmethod/latin/InputTypeUtils.java
@@ -18,7 +18,7 @@ package com.android.inputmethod.latin;
 
 import android.text.InputType;
 
-public class InputTypeUtils implements InputType {
+public final class InputTypeUtils implements InputType {
     private static final int WEB_TEXT_PASSWORD_INPUT_TYPE =
             TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_WEB_PASSWORD;
     private static final int WEB_TEXT_EMAIL_ADDRESS_INPUT_TYPE =
diff --git a/java/src/com/android/inputmethod/latin/JniUtils.java b/java/src/com/android/inputmethod/latin/JniUtils.java
index 86a3826d8072b59a1b3596f9a98eabe06d9c4be4..f9305991af276115acfb7d85a2f4e2b816fedeea 100644
--- a/java/src/com/android/inputmethod/latin/JniUtils.java
+++ b/java/src/com/android/inputmethod/latin/JniUtils.java
@@ -20,7 +20,7 @@ import android.util.Log;
 
 import com.android.inputmethod.latin.define.JniLibName;
 
-public class JniUtils {
+public final class JniUtils {
     private static final String TAG = JniUtils.class.getSimpleName();
 
     private JniUtils() {
diff --git a/java/src/com/android/inputmethod/latin/LocaleUtils.java b/java/src/com/android/inputmethod/latin/LocaleUtils.java
index 01c281b89e911e3c01c4ea3b05d087d006b3c182..feb1b2d0efe70aa5eba6b6cf6e9d3035c50d35dd 100644
--- a/java/src/com/android/inputmethod/latin/LocaleUtils.java
+++ b/java/src/com/android/inputmethod/latin/LocaleUtils.java
@@ -31,7 +31,7 @@ import java.util.Locale;
  * update/bugfix to this file, consider also updating/fixing the version in the
  * dictionary pack.
  */
-public class LocaleUtils {
+public final class LocaleUtils {
     private static final HashMap<String, Long> EMPTY_LT_HASH_MAP = CollectionUtils.newHashMap();
     private static final String LOCALE_AND_TIME_STR_SEPARATER = ",";
 
diff --git a/java/src/com/android/inputmethod/latin/ResourceUtils.java b/java/src/com/android/inputmethod/latin/ResourceUtils.java
index 93a9c88f34309511045515d28b43f062be24ab7f..e01ac3dd4b92b65e1e7e2859b12445a09f7bec10 100644
--- a/java/src/com/android/inputmethod/latin/ResourceUtils.java
+++ b/java/src/com/android/inputmethod/latin/ResourceUtils.java
@@ -21,7 +21,7 @@ import android.os.Build;
 
 import java.util.HashMap;
 
-public class ResourceUtils {
+public final class ResourceUtils {
     private ResourceUtils() {
         // This utility class is not publicly instantiable.
     }
diff --git a/java/src/com/android/inputmethod/latin/StringUtils.java b/java/src/com/android/inputmethod/latin/StringUtils.java
index 39c59b44c6b829b3ac8f75f9caffba4fe033da87..9c47a38c23ce30f4890b17f8030af48b5c057c3f 100644
--- a/java/src/com/android/inputmethod/latin/StringUtils.java
+++ b/java/src/com/android/inputmethod/latin/StringUtils.java
@@ -21,7 +21,7 @@ import android.text.TextUtils;
 import java.util.ArrayList;
 import java.util.Locale;
 
-public class StringUtils {
+public final class StringUtils {
     private StringUtils() {
         // This utility class is not publicly instantiable.
     }
diff --git a/java/src/com/android/inputmethod/latin/UserHistoryForgettingCurveUtils.java b/java/src/com/android/inputmethod/latin/UserHistoryForgettingCurveUtils.java
index 5a2fdf48e9ab5c3f061bbc125a02af4e14a40440..3d3bd980c7d17fd8a89ae038a7767ebcbc38b0f8 100644
--- a/java/src/com/android/inputmethod/latin/UserHistoryForgettingCurveUtils.java
+++ b/java/src/com/android/inputmethod/latin/UserHistoryForgettingCurveUtils.java
@@ -19,7 +19,7 @@ package com.android.inputmethod.latin;
 import android.text.format.DateUtils;
 import android.util.Log;
 
-public class UserHistoryForgettingCurveUtils {
+public final class UserHistoryForgettingCurveUtils {
     private static final String TAG = UserHistoryForgettingCurveUtils.class.getSimpleName();
     private static final boolean DEBUG = false;
     private static final int FC_FREQ_MAX = 127;
diff --git a/java/src/com/android/inputmethod/latin/Utils.java b/java/src/com/android/inputmethod/latin/Utils.java
index 50e2204f4a510b9493b8584ccfecc0170ba85e0c..1c98b92cdda665219a800a9f6e63e1b004e1fda5 100644
--- a/java/src/com/android/inputmethod/latin/Utils.java
+++ b/java/src/com/android/inputmethod/latin/Utils.java
@@ -16,14 +16,11 @@
 
 package com.android.inputmethod.latin;
 
-import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
-import android.content.res.Resources;
 import android.inputmethodservice.InputMethodService;
 import android.net.Uri;
 import android.os.AsyncTask;
-import android.os.Build;
 import android.os.Environment;
 import android.os.Handler;
 import android.os.HandlerThread;
@@ -44,9 +41,8 @@ import java.io.PrintWriter;
 import java.nio.channels.FileChannel;
 import java.text.SimpleDateFormat;
 import java.util.Date;
-import java.util.HashMap;
 
-public class Utils {
+public final class Utils {
     private Utils() {
         // This utility class is not publicly instantiable.
     }
@@ -183,7 +179,7 @@ public class Utils {
         return getStackTrace(Integer.MAX_VALUE - 1);
     }
 
-    public static class UsabilityStudyLogUtils {
+    public static final class UsabilityStudyLogUtils {
         // TODO: remove code duplication with ResearchLog class
         private static final String USABILITY_TAG = UsabilityStudyLogUtils.class.getSimpleName();
         private static final String FILENAME = "log.txt";
@@ -392,9 +388,7 @@ public class Utils {
         }
     }
 
-    public static class Stats {
-        static final int NOT_A_SEPARATOR_CODE_POINT = -1;
-
+    public static final class Stats {
         public static void onNonSeparator(final char code, final int x,
                 final int y) {
             RingCharBuffer.getInstance().push(code, x, y);
@@ -423,7 +417,7 @@ public class Utils {
             // TODO: this fails when the separator is more than 1 code point long, but
             // the backend can't handle it yet. The only case when this happens is with
             // smileys and other multi-character keys.
-            final int codePoint = TextUtils.isEmpty(separatorString) ? NOT_A_SEPARATOR_CODE_POINT
+            final int codePoint = TextUtils.isEmpty(separatorString) ? Constants.NOT_A_CODE
                     : separatorString.codePointAt(0);
             LatinImeLogger.logOnAutoCorrection(typedWord, correctedWord, codePoint);
         }
diff --git a/java/src/com/android/inputmethod/latin/VibratorUtils.java b/java/src/com/android/inputmethod/latin/VibratorUtils.java
index 33ffdd9c9a485a7a235ce980dc2fc98a361d7238..b6696cec01458de1d883d6f3586aa02b1f597327 100644
--- a/java/src/com/android/inputmethod/latin/VibratorUtils.java
+++ b/java/src/com/android/inputmethod/latin/VibratorUtils.java
@@ -19,7 +19,7 @@ package com.android.inputmethod.latin;
 import android.content.Context;
 import android.os.Vibrator;
 
-public class VibratorUtils {
+public final class VibratorUtils {
     private static final VibratorUtils sInstance = new VibratorUtils();
     private Vibrator mVibrator;
 
diff --git a/java/src/com/android/inputmethod/latin/XmlParseUtils.java b/java/src/com/android/inputmethod/latin/XmlParseUtils.java
index 481cdfa47dde64717d1945841536b592f5775903..b5cbaf19e91a0e0f94d741a61884aa391e1eb2f4 100644
--- a/java/src/com/android/inputmethod/latin/XmlParseUtils.java
+++ b/java/src/com/android/inputmethod/latin/XmlParseUtils.java
@@ -23,7 +23,7 @@ import org.xmlpull.v1.XmlPullParserException;
 
 import java.io.IOException;
 
-public class XmlParseUtils {
+public final class XmlParseUtils {
     private XmlParseUtils() {
         // This utility class is not publicly instantiable.
     }
diff --git a/tools/maketext/src/com/android/inputmethod/latin/maketext/JarUtils.java b/tools/maketext/src/com/android/inputmethod/latin/maketext/JarUtils.java
index 07a6c300e67b9e5c53847c9517fca9f7313e77e8..6d6bc0ea6bbaf415df7fe03bfd18cc59f9e2dd5e 100644
--- a/tools/maketext/src/com/android/inputmethod/latin/maketext/JarUtils.java
+++ b/tools/maketext/src/com/android/inputmethod/latin/maketext/JarUtils.java
@@ -26,7 +26,7 @@ import java.util.Enumeration;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 
-public class JarUtils {
+public final class JarUtils {
     private JarUtils() {
         // This utility class is not publicly instantiable.
     }