From afdde633744e7e93a04d3f966cd118eee86936d2 Mon Sep 17 00:00:00 2001
From: Jean Chalard <jchalard@google.com>
Date: Tue, 21 Oct 2014 14:44:52 +0900
Subject: [PATCH] Some more simplification of DecoderSpec works

Change-Id: I23fa4e4ed96228406e70aa94d84fd7b8d3f69347
---
 .../dicttool/BinaryDictOffdeviceUtils.java    | 19 +++++++++++++------
 .../BinaryDictOffdeviceUtilsTests.java        |  2 +-
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java
index d7497e6235..f169641f0a 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java
@@ -32,6 +32,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
+import java.util.Arrays;
 import java.util.ArrayList;
 
 /**
@@ -52,12 +53,18 @@ public final class BinaryDictOffdeviceUtils {
         public final static int ENCRYPTION = 2;
         private final static int MAX_DECODE_DEPTH = 4;
 
-        ArrayList<Integer> mDecoderSpec = new ArrayList<>();
+        final int[] mDecoderSpec;
         File mFile;
 
-        public DecoderChainSpec addStep(final int stepDescription) {
-            mDecoderSpec.add(stepDescription);
-            return this;
+        public DecoderChainSpec() {
+            mDecoderSpec = new int[0];
+            mFile = null;
+        }
+
+        public DecoderChainSpec(final DecoderChainSpec src, final int newStep) {
+            mDecoderSpec = Arrays.copyOf(src.mDecoderSpec, src.mDecoderSpec.length + 1);
+            mDecoderSpec[src.mDecoderSpec.length] = newStep;
+            mFile = src.mFile;
         }
 
         private String getStepDescription(final int step) {
@@ -120,7 +127,7 @@ public final class BinaryDictOffdeviceUtils {
             final DecoderChainSpec newSpec =
                     getRawDictionaryOrNullInternal(spec, uncompressedFile, depth + 1);
             if (null == newSpec) return null;
-            return newSpec.addStep(DecoderChainSpec.COMPRESSION);
+            return new DecoderChainSpec(newSpec, DecoderChainSpec.COMPRESSION);
         }
         // It's not a compressed either - try to see if it's crypted.
         final File decryptedFile = tryGetDecryptedFile(src);
@@ -128,7 +135,7 @@ public final class BinaryDictOffdeviceUtils {
             final DecoderChainSpec newSpec =
                     getRawDictionaryOrNullInternal(spec, decryptedFile, depth + 1);
             if (null == newSpec) return null;
-            return newSpec.addStep(DecoderChainSpec.ENCRYPTION);
+            return new DecoderChainSpec(newSpec, DecoderChainSpec.ENCRYPTION);
         }
         return null;
     }
diff --git a/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java b/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java
index fc0cbfd277..6cdbff7e54 100644
--- a/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java
+++ b/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java
@@ -82,7 +82,7 @@ public class BinaryDictOffdeviceUtilsTests extends TestCase {
             assertEquals("Wrong decode spec",
                     BinaryDictOffdeviceUtils.DecoderChainSpec.COMPRESSION, step);
         }
-        assertEquals("Wrong decode spec", 3, decodeSpec.mDecoderSpec.size());
+        assertEquals("Wrong decode spec", 3, decodeSpec.mDecoderSpec.length);
         final DictDecoder dictDecoder = BinaryDictIOUtils.getDictDecoder(decodeSpec.mFile, 0,
                 decodeSpec.mFile.length());
         final FusionDictionary resultDict =
-- 
GitLab