Merge "Add null analysis annotation to CollectionUtils"
diff --git a/java/src/com/android/inputmethod/latin/utils/CoordinateUtils.java b/java/src/com/android/inputmethod/latin/utils/CoordinateUtils.java
index 87df013..3a97059 100644
--- a/java/src/com/android/inputmethod/latin/utils/CoordinateUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/CoordinateUtils.java
@@ -16,7 +16,7 @@
 
 package com.android.inputmethod.latin.utils;
 
-import java.util.Arrays;
+import javax.annotation.Nonnull;
 
 public final class CoordinateUtils {
     private static final int INDEX_X = 0;
@@ -27,32 +27,35 @@
         // This utility class is not publicly instantiable.
     }
 
+    @Nonnull
     public static int[] newInstance() {
         return new int[ELEMENT_SIZE];
     }
 
-    public static int x(final int[] coords) {
+    public static int x(@Nonnull final int[] coords) {
         return coords[INDEX_X];
     }
 
-    public static int y(final int[] coords) {
+    public static int y(@Nonnull final int[] coords) {
         return coords[INDEX_Y];
     }
 
-    public static void set(final int[] coords, final int x, final int y) {
+    public static void set(@Nonnull final int[] coords, final int x, final int y) {
         coords[INDEX_X] = x;
         coords[INDEX_Y] = y;
     }
 
-    public static void copy(final int[] destination, final int[] source) {
+    public static void copy(@Nonnull final int[] destination, @Nonnull final int[] source) {
         destination[INDEX_X] = source[INDEX_X];
         destination[INDEX_Y] = source[INDEX_Y];
     }
 
+    @Nonnull
     public static int[] newCoordinateArray(final int arraySize) {
         return new int[ELEMENT_SIZE * arraySize];
     }
 
+    @Nonnull
     public static int[] newCoordinateArray(final int arraySize,
             final int defaultX, final int defaultY) {
         final int[] result = new int[ELEMENT_SIZE * arraySize];
@@ -62,30 +65,30 @@
         return result;
     }
 
-    public static int xFromArray(final int[] coordsArray, final int index) {
+    public static int xFromArray(@Nonnull final int[] coordsArray, final int index) {
         return coordsArray[ELEMENT_SIZE * index + INDEX_X];
     }
 
-    public static int yFromArray(final int[] coordsArray, final int index) {
+    public static int yFromArray(@Nonnull final int[] coordsArray, final int index) {
         return coordsArray[ELEMENT_SIZE * index + INDEX_Y];
     }
 
-    public static int[] coordinateFromArray(final int[] coordsArray, final int index) {
-        final int baseIndex = ELEMENT_SIZE * index;
-        return Arrays.copyOfRange(coordsArray, baseIndex, baseIndex + ELEMENT_SIZE);
+    @Nonnull
+    public static int[] coordinateFromArray(@Nonnull final int[] coordsArray, final int index) {
+        final int[] coords = newInstance();
+        set(coords, xFromArray(coordsArray, index), yFromArray(coordsArray, index));
+        return coords;
     }
 
-    public static void setXYInArray(final int[] coordsArray, final int index,
+    public static void setXYInArray(@Nonnull final int[] coordsArray, final int index,
             final int x, final int y) {
         final int baseIndex = ELEMENT_SIZE * index;
         coordsArray[baseIndex + INDEX_X] = x;
         coordsArray[baseIndex + INDEX_Y] = y;
     }
 
-    public static void setCoordinateInArray(final int[] coordsArray, final int index,
-            final int[] coords) {
-        final int baseIndex = ELEMENT_SIZE * index;
-        coordsArray[baseIndex + INDEX_X] = coords[INDEX_X];
-        coordsArray[baseIndex + INDEX_Y] = coords[INDEX_Y];
+    public static void setCoordinateInArray(@Nonnull final int[] coordsArray, final int index,
+            @Nonnull final int[] coords) {
+        setXYInArray(coordsArray, index, x(coords), y(coords));
     }
 }