From 519df535996427c87242f8dbdd5993c6ab5a87d0 Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Sun, 2 Nov 2014 22:20:26 +0900
Subject: [PATCH] Add null analysis annotations to latinime-common

Change-Id: I06eedd9ab85e5a8890e6809bbf9e88e5b8c14e38
---
 .../latin/common/CodePointUtils.java          | 20 ++++++++++++-----
 .../latin/common/ComposedData.java            | 11 +++++++---
 .../inputmethod/latin/common/Constants.java   |  6 ++++-
 .../latin/common/InputPointers.java           | 22 +++++++++++++------
 .../latin/common/ResizableIntArray.java       | 10 ++++++---
 5 files changed, 50 insertions(+), 19 deletions(-)

diff --git a/common/src/com/android/inputmethod/latin/common/CodePointUtils.java b/common/src/com/android/inputmethod/latin/common/CodePointUtils.java
index 592da5c1fb..ec59de8509 100644
--- a/common/src/com/android/inputmethod/latin/common/CodePointUtils.java
+++ b/common/src/com/android/inputmethod/latin/common/CodePointUtils.java
@@ -20,6 +20,8 @@ import com.android.inputmethod.annotations.UsedForTesting;
 
 import java.util.Random;
 
+import javax.annotation.Nonnull;
+
 // Utility methods related with code points used for tests.
 // TODO: Figure out where this class should be.
 @UsedForTesting
@@ -65,17 +67,23 @@ public class CodePointUtils {
     };
 
     @UsedForTesting
-    public static int[] generateCodePointSet(final int codePointSetSize, final Random random) {
+    @Nonnull
+    public static int[] generateCodePointSet(final int codePointSetSize,
+            @Nonnull final Random random) {
         final int[] codePointSet = new int[codePointSetSize];
         for (int i = codePointSet.length - 1; i >= 0; ) {
             final int r = Math.abs(random.nextInt());
-            if (r < 0) continue;
+            if (r < 0) {
+                continue;
+            }
             // Don't insert 0~0x20, but insert any other code point.
             // Code points are in the range 0~0x10FFFF.
             final int candidateCodePoint = 0x20 + r % (Character.MAX_CODE_POINT - 0x20);
             // Code points between MIN_ and MAX_SURROGATE are not valid on their own.
             if (candidateCodePoint >= Character.MIN_SURROGATE
-                    && candidateCodePoint <= Character.MAX_SURROGATE) continue;
+                    && candidateCodePoint <= Character.MAX_SURROGATE) {
+                continue;
+            }
             codePointSet[i] = candidateCodePoint;
             --i;
         }
@@ -86,8 +94,10 @@ public class CodePointUtils {
      * Generates a random word.
      */
     @UsedForTesting
-    public static String generateWord(final Random random, final int[] codePointSet) {
-        StringBuilder builder = new StringBuilder();
+    @Nonnull
+    public static String generateWord(@Nonnull final Random random,
+            @Nonnull final int[] codePointSet) {
+        final StringBuilder builder = new StringBuilder();
         // 8 * 4 = 32 chars max, but we do it the following way so as to bias the random toward
         // longer words. This should be closer to natural language, and more importantly, it will
         // exercise the algorithms in dicttool much more.
diff --git a/common/src/com/android/inputmethod/latin/common/ComposedData.java b/common/src/com/android/inputmethod/latin/common/ComposedData.java
index 0508d49cb9..7f0966050e 100644
--- a/common/src/com/android/inputmethod/latin/common/ComposedData.java
+++ b/common/src/com/android/inputmethod/latin/common/ComposedData.java
@@ -16,15 +16,20 @@
 
 package com.android.inputmethod.latin.common;
 
+import javax.annotation.Nonnull;
+
 /**
  * An immutable class that encapsulates a snapshot of word composition data.
  */
 public class ComposedData {
+    @Nonnull
     public final InputPointers mInputPointers;
     public final boolean mIsBatchMode;
+    @Nonnull
     public final String mTypedWord;
-    public ComposedData(final InputPointers inputPointers, final boolean isBatchMode,
-            final String typedWord) {
+
+    public ComposedData(@Nonnull final InputPointers inputPointers, final boolean isBatchMode,
+            @Nonnull final String typedWord) {
         mInputPointers = inputPointers;
         mIsBatchMode = isBatchMode;
         mTypedWord = typedWord;
@@ -40,7 +45,7 @@ public class ComposedData {
      * @return the number of copied code points.
      */
     public int copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount(
-            final int[] destination) {
+            @Nonnull final int[] destination) {
         // lastIndex is exclusive
         final int lastIndex = mTypedWord.length()
                 - StringUtils.getTrailingSingleQuotesCount(mTypedWord);
diff --git a/common/src/com/android/inputmethod/latin/common/Constants.java b/common/src/com/android/inputmethod/latin/common/Constants.java
index 8f4a1e50da..abc377a84c 100644
--- a/common/src/com/android/inputmethod/latin/common/Constants.java
+++ b/common/src/com/android/inputmethod/latin/common/Constants.java
@@ -18,6 +18,8 @@ package com.android.inputmethod.latin.common;
 
 import com.android.inputmethod.annotations.UsedForTesting;
 
+import javax.annotation.Nonnull;
+
 public final class Constants {
     public static final class Color {
         /**
@@ -259,6 +261,7 @@ public final class Constants {
         return code >= CODE_SPACE;
     }
 
+    @Nonnull
     public static String printableCode(final int code) {
         switch (code) {
         case CODE_SHIFT: return "shift";
@@ -286,7 +289,8 @@ public final class Constants {
         }
     }
 
-    public static String printableCodes(final int[] codes) {
+    @Nonnull
+    public static String printableCodes(@Nonnull final int[] codes) {
         final StringBuilder sb = new StringBuilder();
         boolean addDelimiter = false;
         for (final int code : codes) {
diff --git a/common/src/com/android/inputmethod/latin/common/InputPointers.java b/common/src/com/android/inputmethod/latin/common/InputPointers.java
index 40131aca45..7beee15361 100644
--- a/common/src/com/android/inputmethod/latin/common/InputPointers.java
+++ b/common/src/com/android/inputmethod/latin/common/InputPointers.java
@@ -18,6 +18,8 @@ package com.android.inputmethod.latin.common;
 
 import com.android.inputmethod.annotations.UsedForTesting;
 
+import javax.annotation.Nonnull;
+
 // TODO: This class is not thread-safe.
 public final class InputPointers {
     private static final boolean DEBUG_TIME = false;
@@ -28,7 +30,7 @@ public final class InputPointers {
     private final ResizableIntArray mPointerIds;
     private final ResizableIntArray mTimes;
 
-    public InputPointers(int defaultCapacity) {
+    public InputPointers(final int defaultCapacity) {
         mDefaultCapacity = defaultCapacity;
         mXCoordinates = new ResizableIntArray(defaultCapacity);
         mYCoordinates = new ResizableIntArray(defaultCapacity);
@@ -51,7 +53,8 @@ public final class InputPointers {
         mTimes.fill(lastTime, fromIndex, fillLength);
     }
 
-    public void addPointerAt(int index, int x, int y, int pointerId, int time) {
+    public void addPointerAt(final int index, final int x, final int y, final int pointerId,
+            final int time) {
         mXCoordinates.addAt(index, x);
         mYCoordinates.addAt(index, y);
         mPointerIds.addAt(index, pointerId);
@@ -62,21 +65,21 @@ public final class InputPointers {
     }
 
     @UsedForTesting
-    public void addPointer(int x, int y, int pointerId, int time) {
+    public void addPointer(final int x, final int y, final int pointerId, final int time) {
         mXCoordinates.add(x);
         mYCoordinates.add(y);
         mPointerIds.add(pointerId);
         mTimes.add(time);
     }
 
-    public void set(InputPointers ip) {
+    public void set(@Nonnull final InputPointers ip) {
         mXCoordinates.set(ip.mXCoordinates);
         mYCoordinates.set(ip.mYCoordinates);
         mPointerIds.set(ip.mPointerIds);
         mTimes.set(ip.mTimes);
     }
 
-    public void copy(InputPointers ip) {
+    public void copy(@Nonnull final InputPointers ip) {
         mXCoordinates.copy(ip.mXCoordinates);
         mYCoordinates.copy(ip.mYCoordinates);
         mPointerIds.copy(ip.mPointerIds);
@@ -93,8 +96,9 @@ public final class InputPointers {
      * @param startPos the starting index of the data in {@code times} and etc.
      * @param length the number of data to be appended.
      */
-    public void append(int pointerId, ResizableIntArray times, ResizableIntArray xCoordinates,
-            ResizableIntArray yCoordinates, int startPos, int length) {
+    public void append(final int pointerId, @Nonnull final ResizableIntArray times,
+            @Nonnull final ResizableIntArray xCoordinates,
+            @Nonnull final ResizableIntArray yCoordinates, final int startPos, final int length) {
         if (length == 0) {
             return;
         }
@@ -127,14 +131,17 @@ public final class InputPointers {
         return mXCoordinates.getLength();
     }
 
+    @Nonnull
     public int[] getXCoordinates() {
         return mXCoordinates.getPrimitiveArray();
     }
 
+    @Nonnull
     public int[] getYCoordinates() {
         return mYCoordinates.getPrimitiveArray();
     }
 
+    @Nonnull
     public int[] getPointerIds() {
         return mPointerIds.getPrimitiveArray();
     }
@@ -145,6 +152,7 @@ public final class InputPointers {
      * @return The time each point was registered, in milliseconds, relative to the first event in
      * the sequence.
      */
+    @Nonnull
     public int[] getTimes() {
         return mTimes.getPrimitiveArray();
     }
diff --git a/common/src/com/android/inputmethod/latin/common/ResizableIntArray.java b/common/src/com/android/inputmethod/latin/common/ResizableIntArray.java
index ea23d8a339..340abb23e7 100644
--- a/common/src/com/android/inputmethod/latin/common/ResizableIntArray.java
+++ b/common/src/com/android/inputmethod/latin/common/ResizableIntArray.java
@@ -18,8 +18,11 @@ package com.android.inputmethod.latin.common;
 
 import java.util.Arrays;
 
+import javax.annotation.Nonnull;
+
 // TODO: This class is not thread-safe.
 public final class ResizableIntArray {
+    @Nonnull
     private int[] mArray;
     private int mLength;
 
@@ -89,17 +92,18 @@ public final class ResizableIntArray {
         mLength = 0;
     }
 
+    @Nonnull
     public int[] getPrimitiveArray() {
         return mArray;
     }
 
-    public void set(final ResizableIntArray ip) {
+    public void set(@Nonnull final ResizableIntArray ip) {
         // TODO: Implement primitive array pool.
         mArray = ip.mArray;
         mLength = ip.mLength;
     }
 
-    public void copy(final ResizableIntArray ip) {
+    public void copy(@Nonnull final ResizableIntArray ip) {
         final int newCapacity = calculateCapacity(ip.mLength);
         if (newCapacity > 0) {
             // TODO: Implement primitive array pool.
@@ -109,7 +113,7 @@ public final class ResizableIntArray {
         mLength = ip.mLength;
     }
 
-    public void append(final ResizableIntArray src, final int startPos, final int length) {
+    public void append(@Nonnull final ResizableIntArray src, final int startPos, final int length) {
         if (length == 0) {
             return;
         }
-- 
GitLab