Merge "Use FrameLayout for the backing view" into lmp-dev
diff --git a/java/src/com/android/inputmethod/compat/AppWorkaroundsHelper.java b/java-overridable/src/com/android/inputmethod/compat/AppWorkaroundsHelper.java
similarity index 100%
rename from java/src/com/android/inputmethod/compat/AppWorkaroundsHelper.java
rename to java-overridable/src/com/android/inputmethod/compat/AppWorkaroundsHelper.java
diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionaryPackConstants.java b/java-overridable/src/com/android/inputmethod/dictionarypack/DictionaryPackConstants.java
similarity index 100%
rename from java/src/com/android/inputmethod/dictionarypack/DictionaryPackConstants.java
rename to java-overridable/src/com/android/inputmethod/dictionarypack/DictionaryPackConstants.java
diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataUriGetter.java b/java-overridable/src/com/android/inputmethod/dictionarypack/MetadataUriGetter.java
similarity index 100%
rename from java/src/com/android/inputmethod/dictionarypack/MetadataUriGetter.java
rename to java-overridable/src/com/android/inputmethod/dictionarypack/MetadataUriGetter.java
diff --git a/java/src/com/android/inputmethod/latin/SpecialKeyDetector.java b/java-overridable/src/com/android/inputmethod/latin/SpecialKeyDetector.java
similarity index 100%
rename from java/src/com/android/inputmethod/latin/SpecialKeyDetector.java
rename to java-overridable/src/com/android/inputmethod/latin/SpecialKeyDetector.java
diff --git a/java/src/com/android/inputmethod/latin/about/AboutPreferences.java b/java-overridable/src/com/android/inputmethod/latin/about/AboutPreferences.java
similarity index 100%
rename from java/src/com/android/inputmethod/latin/about/AboutPreferences.java
rename to java-overridable/src/com/android/inputmethod/latin/about/AboutPreferences.java
diff --git a/java/src/com/android/inputmethod/latin/define/DebugFlags.java b/java-overridable/src/com/android/inputmethod/latin/define/DebugFlags.java
similarity index 100%
rename from java/src/com/android/inputmethod/latin/define/DebugFlags.java
rename to java-overridable/src/com/android/inputmethod/latin/define/DebugFlags.java
diff --git a/java/src/com/android/inputmethod/latin/define/JniLibName.java b/java-overridable/src/com/android/inputmethod/latin/define/JniLibName.java
similarity index 100%
rename from java/src/com/android/inputmethod/latin/define/JniLibName.java
rename to java-overridable/src/com/android/inputmethod/latin/define/JniLibName.java
diff --git a/java/src/com/android/inputmethod/latin/define/ProductionFlags.java b/java-overridable/src/com/android/inputmethod/latin/define/ProductionFlags.java
similarity index 100%
rename from java/src/com/android/inputmethod/latin/define/ProductionFlags.java
rename to java-overridable/src/com/android/inputmethod/latin/define/ProductionFlags.java
diff --git a/java/src/com/android/inputmethod/latin/personalization/ContextualDictionaryUpdater.java b/java-overridable/src/com/android/inputmethod/latin/personalization/ContextualDictionaryUpdater.java
similarity index 100%
rename from java/src/com/android/inputmethod/latin/personalization/ContextualDictionaryUpdater.java
rename to java-overridable/src/com/android/inputmethod/latin/personalization/ContextualDictionaryUpdater.java
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdater.java b/java-overridable/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdater.java
similarity index 100%
rename from java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdater.java
rename to java-overridable/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdater.java
diff --git a/java/src/com/android/inputmethod/latin/settings/AdditionalFeaturesSettingUtils.java b/java-overridable/src/com/android/inputmethod/latin/settings/AdditionalFeaturesSettingUtils.java
similarity index 100%
rename from java/src/com/android/inputmethod/latin/settings/AdditionalFeaturesSettingUtils.java
rename to java-overridable/src/com/android/inputmethod/latin/settings/AdditionalFeaturesSettingUtils.java
diff --git a/java/src/com/android/inputmethod/latin/utils/FeedbackUtils.java b/java-overridable/src/com/android/inputmethod/latin/utils/FeedbackUtils.java
similarity index 100%
rename from java/src/com/android/inputmethod/latin/utils/FeedbackUtils.java
rename to java-overridable/src/com/android/inputmethod/latin/utils/FeedbackUtils.java
diff --git a/java/src/com/android/inputmethod/latin/utils/FileTransforms.java b/java-overridable/src/com/android/inputmethod/latin/utils/FileTransforms.java
similarity index 100%
rename from java/src/com/android/inputmethod/latin/utils/FileTransforms.java
rename to java-overridable/src/com/android/inputmethod/latin/utils/FileTransforms.java
diff --git a/java/src/com/android/inputmethod/latin/utils/MetadataFileUriGetter.java b/java-overridable/src/com/android/inputmethod/latin/utils/MetadataFileUriGetter.java
similarity index 100%
rename from java/src/com/android/inputmethod/latin/utils/MetadataFileUriGetter.java
rename to java-overridable/src/com/android/inputmethod/latin/utils/MetadataFileUriGetter.java
diff --git a/java/src/com/android/inputmethod/latin/utils/StatsUtils.java b/java-overridable/src/com/android/inputmethod/latin/utils/StatsUtils.java
similarity index 100%
rename from java/src/com/android/inputmethod/latin/utils/StatsUtils.java
rename to java-overridable/src/com/android/inputmethod/latin/utils/StatsUtils.java
diff --git a/java/Android.mk b/java/Android.mk
index 9b8b2b4..0d12c45 100644
--- a/java/Android.mk
+++ b/java/Android.mk
@@ -17,7 +17,7 @@
 
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src ../java-overridable/src)
 
 LOCAL_PACKAGE_NAME := LatinIME
 
diff --git a/java/src/com/android/inputmethod/compat/CompatUtils.java b/java/src/com/android/inputmethod/compat/CompatUtils.java
index 4fd2a69..6aa2736 100644
--- a/java/src/com/android/inputmethod/compat/CompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/CompatUtils.java
@@ -127,4 +127,92 @@
             Log.e(TAG, "Exception in setFieldValue", e);
         }
     }
+
+    public static ClassWrapper getClassWrapper(final String className) {
+        return new ClassWrapper(getClass(className));
+    }
+
+    public static final class ClassWrapper {
+        private final Class<?> mClass;
+        public ClassWrapper(final Class<?> targetClass) {
+            mClass = targetClass;
+        }
+
+        public boolean exists() {
+            return mClass != null;
+        }
+
+        public <T> ToObjectMethodWrapper<T> getMethod(final String name,
+                final T defaultValue, final Class<?>... parameterTypes) {
+            return new ToObjectMethodWrapper<T>(CompatUtils.getMethod(mClass, name, parameterTypes),
+                    defaultValue);
+        }
+
+        public ToIntMethodWrapper getPrimitiveMethod(final String name, final int defaultValue,
+                final Class<?>... parameterTypes) {
+            return new ToIntMethodWrapper(CompatUtils.getMethod(mClass, name, parameterTypes),
+                    defaultValue);
+        }
+
+        public ToFloatMethodWrapper getPrimitiveMethod(final String name, final float defaultValue,
+                final Class<?>... parameterTypes) {
+            return new ToFloatMethodWrapper(CompatUtils.getMethod(mClass, name, parameterTypes),
+                    defaultValue);
+        }
+
+        public ToBooleanMethodWrapper getPrimitiveMethod(final String name,
+                final boolean defaultValue, final Class<?>... parameterTypes) {
+            return new ToBooleanMethodWrapper(CompatUtils.getMethod(mClass, name, parameterTypes),
+                    defaultValue);
+        }
+    }
+
+    public static final class ToObjectMethodWrapper<T> {
+        private final Method mMethod;
+        private final T mDefaultValue;
+        public ToObjectMethodWrapper(final Method method, final T defaultValue) {
+            mMethod = method;
+            mDefaultValue = defaultValue;
+        }
+        @SuppressWarnings("unchecked")
+        public T invoke(final Object receiver, final Object... args) {
+            return (T) CompatUtils.invoke(receiver, mDefaultValue, mMethod, args);
+        }
+    }
+
+    public static final class ToIntMethodWrapper {
+        private final Method mMethod;
+        private final int mDefaultValue;
+        public ToIntMethodWrapper(final Method method, final int defaultValue) {
+            mMethod = method;
+            mDefaultValue = defaultValue;
+        }
+        public int invoke(final Object receiver, final Object... args) {
+            return (int) CompatUtils.invoke(receiver, mDefaultValue, mMethod, args);
+        }
+    }
+
+    public static final class ToFloatMethodWrapper {
+        private final Method mMethod;
+        private final float mDefaultValue;
+        public ToFloatMethodWrapper(final Method method, final float defaultValue) {
+            mMethod = method;
+            mDefaultValue = defaultValue;
+        }
+        public float invoke(final Object receiver, final Object... args) {
+            return (float) CompatUtils.invoke(receiver, mDefaultValue, mMethod, args);
+        }
+    }
+
+    public static final class ToBooleanMethodWrapper {
+        private final Method mMethod;
+        private final boolean mDefaultValue;
+        public ToBooleanMethodWrapper(final Method method, final boolean defaultValue) {
+            mMethod = method;
+            mDefaultValue = defaultValue;
+        }
+        public boolean invoke(final Object receiver, final Object... args) {
+            return (boolean) CompatUtils.invoke(receiver, mDefaultValue, mMethod, args);
+        }
+    }
 }
diff --git a/java/src/com/android/inputmethod/compat/CursorAnchorInfoCompatWrapper.java b/java/src/com/android/inputmethod/compat/CursorAnchorInfoCompatWrapper.java
index 2cec142..24eaec8 100644
--- a/java/src/com/android/inputmethod/compat/CursorAnchorInfoCompatWrapper.java
+++ b/java/src/com/android/inputmethod/compat/CursorAnchorInfoCompatWrapper.java
@@ -21,39 +21,8 @@
 
 import com.android.inputmethod.annotations.UsedForTesting;
 
-import java.lang.reflect.Method;
-
 @UsedForTesting
 public final class CursorAnchorInfoCompatWrapper {
-    // Note that CursorAnchorInfo has been introduced in API level XX (Build.VERSION_CODE.LXX).
-    private static Class<?> getCursorAnchorInfoClass() {
-        try {
-            return Class.forName("android.view.inputmethod.CursorAnchorInfo");
-        } catch (ClassNotFoundException e) {
-            return null;
-        }
-    }
-    private static final Class<?> CLASS;
-    private static final Method METHOD_GET_CHARACTER_RECT;
-    private static final Method METHOD_GET_CHARACTER_RECT_FLAGS;
-    private static final Method METHOD_GET_COMPOSING_TEXT;
-    private static final Method METHOD_GET_COMPOSING_TEXT_START;
-    private static final Method METHOD_GET_MATRIX;
-    static {
-        CLASS = getCursorAnchorInfoClass();
-        METHOD_GET_CHARACTER_RECT = CompatUtils.getMethod(CLASS, "getCharacterRect", int.class);
-        METHOD_GET_CHARACTER_RECT_FLAGS = CompatUtils.getMethod(CLASS, "getCharacterRectFlags",
-                int.class);
-        METHOD_GET_COMPOSING_TEXT = CompatUtils.getMethod(CLASS, "getComposingText");
-        METHOD_GET_COMPOSING_TEXT_START = CompatUtils.getMethod(CLASS, "getComposingTextStart");
-        METHOD_GET_MATRIX = CompatUtils.getMethod(CLASS, "getMatrix");
-    }
-
-    @UsedForTesting
-    public static boolean isAvailable() {
-        return CLASS != null;
-    }
-
     public static final int CHARACTER_RECT_TYPE_MASK = 0x0f;
 
     /**
@@ -83,6 +52,49 @@
      */
     public static final int CHARACTER_RECT_TYPE_NOT_FEASIBLE = 4;
 
+    // Note that CursorAnchorInfo has been introduced in API level XX (Build.VERSION_CODE.LXX).
+    private static final CompatUtils.ClassWrapper sCursorAnchorInfoClass;
+    private static final CompatUtils.ToObjectMethodWrapper<RectF> sGetCharacterRectMethod;
+    private static final CompatUtils.ToIntMethodWrapper sGetCharacterRectFlagsMethod;
+    private static final CompatUtils.ToObjectMethodWrapper<CharSequence> sGetComposingTextMethod;
+    private static final CompatUtils.ToIntMethodWrapper sGetComposingTextStartMethod;
+    private static final CompatUtils.ToFloatMethodWrapper sGetInsertionMarkerBaselineMethod;
+    private static final CompatUtils.ToFloatMethodWrapper sGetInsertionMarkerBottomMethod;
+    private static final CompatUtils.ToFloatMethodWrapper sGetInsertionMarkerHorizontalMethod;
+    private static final CompatUtils.ToFloatMethodWrapper sGetInsertionMarkerTopMethod;
+    private static final CompatUtils.ToObjectMethodWrapper<Matrix> sGetMatrixMethod;
+    private static final CompatUtils.ToBooleanMethodWrapper sIsInsertionMarkerClippedMethod;
+
+    private static int COMPOSING_TEXT_START_DEFAULT = -1;
+    static {
+        sCursorAnchorInfoClass = CompatUtils.getClassWrapper(
+                "android.view.inputmethod.CursorAnchorInfo");
+        sGetCharacterRectMethod = sCursorAnchorInfoClass.getMethod(
+                "getCharacterRect", (RectF)null, int.class);
+        sGetCharacterRectFlagsMethod = sCursorAnchorInfoClass.getPrimitiveMethod(
+                "getCharacterRectFlags", CHARACTER_RECT_TYPE_UNSPECIFIED, int.class);
+        sGetComposingTextMethod = sCursorAnchorInfoClass.getMethod(
+                "getComposingText", (CharSequence)null);
+        sGetComposingTextStartMethod = sCursorAnchorInfoClass.getPrimitiveMethod(
+                "getComposingTextStart", COMPOSING_TEXT_START_DEFAULT);
+        sGetInsertionMarkerBaselineMethod = sCursorAnchorInfoClass.getPrimitiveMethod(
+                "getInsertionMarkerBaseline", 0.0f);
+        sGetInsertionMarkerBottomMethod = sCursorAnchorInfoClass.getPrimitiveMethod(
+                "getInsertionMarkerBottom", 0.0f);
+        sGetInsertionMarkerHorizontalMethod = sCursorAnchorInfoClass.getPrimitiveMethod(
+                "getInsertionMarkerHorizontal", 0.0f);
+        sGetInsertionMarkerTopMethod = sCursorAnchorInfoClass.getPrimitiveMethod(
+                "getInsertionMarkerTop", 0.0f);
+        sGetMatrixMethod = sCursorAnchorInfoClass.getMethod("getMatrix", (Matrix)null);
+        sIsInsertionMarkerClippedMethod = sCursorAnchorInfoClass.getPrimitiveMethod(
+                "isInsertionMarkerClipped", false);
+    }
+
+    @UsedForTesting
+    public static boolean isAvailable() {
+        return sCursorAnchorInfoClass.exists();
+    }
+
     private Object mInstance;
 
     private CursorAnchorInfoCompatWrapper(final Object instance) {
@@ -107,29 +119,42 @@
     }
 
     public CharSequence getComposingText() {
-        return (CharSequence) CompatUtils.invoke(mInstance, null, METHOD_GET_COMPOSING_TEXT);
+        return sGetComposingTextMethod.invoke(mInstance);
     }
 
-    private static int COMPOSING_TEXT_START_DEFAULT = -1;
     public int getComposingTextStart() {
-        if (mInstance == null || METHOD_GET_COMPOSING_TEXT_START == null) {
-            return COMPOSING_TEXT_START_DEFAULT;
-        }
-        return (int) CompatUtils.invoke(mInstance, null, METHOD_GET_COMPOSING_TEXT_START);
+        return sGetComposingTextStartMethod.invoke(mInstance);
     }
 
     public Matrix getMatrix() {
-        return (Matrix) CompatUtils.invoke(mInstance, null, METHOD_GET_MATRIX);
+        return sGetMatrixMethod.invoke(mInstance);
     }
 
     public RectF getCharacterRect(final int index) {
-        return (RectF) CompatUtils.invoke(mInstance, null, METHOD_GET_CHARACTER_RECT, index);
+        return sGetCharacterRectMethod.invoke(mInstance, index);
     }
 
     public int getCharacterRectFlags(final int index) {
-        if (mInstance == null || METHOD_GET_CHARACTER_RECT_FLAGS == null) {
-            return CHARACTER_RECT_TYPE_UNSPECIFIED;
-        }
-        return (int) CompatUtils.invoke(mInstance, null, METHOD_GET_CHARACTER_RECT_FLAGS, index);
+        return sGetCharacterRectFlagsMethod.invoke(mInstance, index);
+    }
+
+    public float getInsertionMarkerBaseline() {
+        return sGetInsertionMarkerBaselineMethod.invoke(mInstance);
+    }
+
+    public float getInsertionMarkerBottom() {
+        return sGetInsertionMarkerBottomMethod.invoke(mInstance);
+    }
+
+    public float getInsertionMarkerHorizontal() {
+        return sGetInsertionMarkerHorizontalMethod.invoke(mInstance);
+    }
+
+    public float getInsertionMarkerTop() {
+        return sGetInsertionMarkerTopMethod.invoke(mInstance);
+    }
+
+    public boolean isInsertionMarkerClipped() {
+        return sIsInsertionMarkerClippedMethod.invoke(mInstance);
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 258f21f..eec08f2 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -420,18 +420,6 @@
                 if (latinIme != null) {
                     executePendingImsCallback(latinIme, editorInfo, restarting);
                     latinIme.onStartInputInternal(editorInfo, restarting);
-                    if (ProductionFlags.ENABLE_CURSOR_RECT_CALLBACK) {
-                        InputConnectionCompatUtils.requestCursorRect(
-                                latinIme.getCurrentInputConnection(), true /* enableMonitor */);
-                    }
-                    if (ProductionFlags.ENABLE_CURSOR_ANCHOR_INFO_CALLBACK) {
-                        // AcceptTypedWord feature relies on CursorAnchorInfo.
-                        if (latinIme.mSettings.getCurrent().mShouldShowUiToAcceptTypedWord) {
-                            InputConnectionCompatUtils.requestCursorAnchorInfo(
-                                    latinIme.getCurrentInputConnection(), true /* enableMonitor */,
-                                    true /* requestImmediateCallback */);
-                        }
-                    }
                 }
             }
         }
@@ -766,6 +754,18 @@
 
     private void onStartInputInternal(final EditorInfo editorInfo, final boolean restarting) {
         super.onStartInput(editorInfo, restarting);
+        if (ProductionFlags.ENABLE_CURSOR_RECT_CALLBACK) {
+            InputConnectionCompatUtils.requestCursorRect(getCurrentInputConnection(),
+                    true /* enableMonitor */);
+        }
+        if (ProductionFlags.ENABLE_CURSOR_ANCHOR_INFO_CALLBACK) {
+            // AcceptTypedWord feature relies on CursorAnchorInfo.
+            if (mSettings.getCurrent().mShouldShowUiToAcceptTypedWord) {
+                InputConnectionCompatUtils.requestCursorAnchorInfo(
+                        getCurrentInputConnection(), true /* enableMonitor */,
+                        true /* requestImmediateCallback */);
+            }
+        }
     }
 
     @SuppressWarnings("deprecation")
diff --git a/tools/dicttool/Android.mk b/tools/dicttool/Android.mk
index 0f1f344..3e3d419 100644
--- a/tools/dicttool/Android.mk
+++ b/tools/dicttool/Android.mk
@@ -32,10 +32,12 @@
 include $(CLEAR_VARS)
 
 LATINIME_LOCAL_DIR := ../..
-LATINIME_BASE_SOURCE_DIRECTORY := $(LATINIME_LOCAL_DIR)/java/src/com/android/inputmethod
-LATINIME_ANNOTATIONS_SOURCE_DIRECTORY := $(LATINIME_BASE_SOURCE_DIRECTORY)/annotations
-MAKEDICT_CORE_SOURCE_DIRECTORY := $(LATINIME_BASE_SOURCE_DIRECTORY)/latin/makedict
-LATINIME_TESTS_SOURCE_DIRECTORY := $(LATINIME_LOCAL_DIR)/tests/src/com/android/inputmethod/latin
+LATINIME_BASE_SRC_DIR := $(LATINIME_LOCAL_DIR)/java/src/com/android/inputmethod
+LATINIME_BASE_OVERRIDABLE_SRC_DIR := \
+        $(LATINIME_LOCAL_DIR)/java-overridable/src/com/android/inputmethod
+LATINIME_ANNOTATIONS_SRC_DIR := $(LATINIME_BASE_SRC_DIR)/annotations
+MAKEDICT_CORE_SRC_DIR := $(LATINIME_BASE_SRC_DIR)/latin/makedict
+LATINIME_TESTS_SRC_DIR := $(LATINIME_LOCAL_DIR)/tests/src/com/android/inputmethod/latin
 
 # Dependencies for Dicttool. Most of these files are needed by BinaryDictionary.java. Note that
 # a significant part of the dependencies are mocked in the compat/ directory, with empty or
@@ -51,7 +53,6 @@
         latin/PrevWordsInfo.java \
         latin/SuggestedWords.java \
         latin/WordComposer.java \
-        latin/define/DebugFlags.java \
         latin/settings/NativeSuggestOptions.java \
         latin/settings/SettingsValuesForSuggestion.java \
         latin/utils/BinaryDictionaryUtils.java \
@@ -63,29 +64,33 @@
         latin/utils/ResizableIntArray.java \
         latin/utils/StringUtils.java
 
+LATINIME_OVERRIDABLE_SRC_FILES_FOR_DICTTOOL := \
+        latin/define/DebugFlags.java
+
 LATINIME_TEST_SRC_FILES_FOR_DICTTOOL := \
         utils/ByteArrayDictBuffer.java
 
-USED_TARGETED_SRCS := \
-        $(addprefix $(LATINIME_BASE_SOURCE_DIRECTORY)/, $(LATINIME_SRC_FILES_FOR_DICTTOOL)) \
-        $(addprefix $(LATINIME_TESTS_SOURCE_DIRECTORY)/, $(LATINIME_TEST_SRC_FILES_FOR_DICTTOOL))
+USED_TARGETED_SRC_FILES := \
+        $(addprefix $(LATINIME_BASE_SRC_DIR)/, $(LATINIME_SRC_FILES_FOR_DICTTOOL)) \
+        $(addprefix $(LATINIME_BASE_OVERRIDABLE_SRC_DIR)/, \
+                $(LATINIME_OVERRIDABLE_SRC_FILES_FOR_DICTTOOL)) \
+        $(addprefix $(LATINIME_TESTS_SRC_DIR)/, $(LATINIME_TEST_SRC_FILES_FOR_DICTTOOL))
 
-DICTTOOL_ONDEVICE_TESTS_DIRECTORY := \
+DICTTOOL_ONDEVICE_TESTS_DIR := \
         $(LATINIME_LOCAL_DIR)/tests/src/com/android/inputmethod/latin/makedict/
-DICTTOOL_COMPAT_TESTS_DIRECTORY := compat
+DICTTOOL_COMPAT_TESTS_DIR := compat
 
-LOCAL_MAIN_SRC_FILES := $(call all-java-files-under, $(MAKEDICT_CORE_SOURCE_DIRECTORY))
+LOCAL_MAIN_SRC_FILES := $(call all-java-files-under, $(MAKEDICT_CORE_SRC_DIR))
 LOCAL_TOOL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_ANNOTATIONS_SRC_FILES := \
-        $(call all-java-files-under, $(LATINIME_ANNOTATIONS_SOURCE_DIRECTORY))
+LOCAL_ANNOTATIONS_SRC_FILES := $(call all-java-files-under, $(LATINIME_ANNOTATIONS_SRC_DIR))
 
 LOCAL_SRC_FILES := $(LOCAL_TOOL_SRC_FILES) \
         $(filter-out $(addprefix %/, $(notdir $(LOCAL_TOOL_SRC_FILES))), $(LOCAL_MAIN_SRC_FILES)) \
-        $(call all-java-files-under, $(DICTTOOL_COMPAT_TESTS_DIRECTORY)) \
-        $(LOCAL_ANNOTATIONS_SRC_FILES) $(USED_TARGETED_SRCS) \
-        $(LATINIME_BASE_SOURCE_DIRECTORY)/latin/Constants.java \
+        $(call all-java-files-under, $(DICTTOOL_COMPAT_TESTS_DIR)) \
+        $(LOCAL_ANNOTATIONS_SRC_FILES) $(USED_TARGETED_SRC_FILES) \
+        $(LATINIME_BASE_SRC_DIR)/latin/Constants.java \
         $(call all-java-files-under, tests) \
-        $(call all-java-files-under, $(DICTTOOL_ONDEVICE_TESTS_DIRECTORY))
+        $(call all-java-files-under, $(DICTTOOL_ONDEVICE_TESTS_DIR))
 
 LOCAL_JAVA_LIBRARIES := junit
 LOCAL_STATIC_JAVA_LIBRARIES := jsr305lib