Fix missing class warnings on old platforms. Also fix BaseObj.equals.

Change-Id: I7deb528815d98e3359eb5e8c801d6fa71b90bab8
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/BaseObj.java b/v8/renderscript/java/src/android/support/v8/renderscript/BaseObj.java
index 2088a04..153019d 100644
--- a/v8/renderscript/java/src/android/support/v8/renderscript/BaseObj.java
+++ b/v8/renderscript/java/src/android/support/v8/renderscript/BaseObj.java
@@ -51,12 +51,6 @@
      */
     int getID(RenderScript rs) {
         mRS.validate();
-        if (rs.isNative) {
-            RenderScriptThunker rst = (RenderScriptThunker)rs;
-            if (getNObj() != null) {
-                return getNObj().hashCode();
-            }
-        }
         if (mDestroyed) {
             throw new RSInvalidStateException("using a destroyed object.");
         }
@@ -150,6 +144,10 @@
             return false;
         }
 
+        if (mRS.isNative) {
+            return ((RenderScriptThunker)mRS).equals((Object)this, obj);
+        }
+
         BaseObj b = (BaseObj) obj;
         return mID == b.mID;
     }
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java b/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java
index eb51076..ffdb66f 100644
--- a/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java
+++ b/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java
@@ -29,14 +29,14 @@
  *
  **/
 public class FieldPacker {
-    private android.renderscript.FieldPacker mN;
+    private FieldPackerThunker mN;
 
     public FieldPacker(int len) {
         mPos = 0;
         mLen = len;
         mData = new byte[len];
         if (RenderScript.shouldThunk()) {
-            mN = new android.renderscript.FieldPacker(len);
+            mN = new FieldPackerThunker(len);
         }
     }
 
@@ -209,11 +209,7 @@
 
     public void addObj(BaseObj obj) {
         if (RenderScript.shouldThunk()) {
-            if (obj != null) {
-                mN.addObj(obj.getNObj());
-            } else {
-                mN.addObj(null);
-            }
+            mN.addObj(obj);
             return;
         }
         if (obj != null) {
@@ -225,7 +221,7 @@
 
     public void addF32(Float2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addF32(new android.renderscript.Float2(v.x, v.y));
+            mN.addF32(v);
             return;
         }
         addF32(v.x);
@@ -233,7 +229,7 @@
     }
     public void addF32(Float3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addF32(new android.renderscript.Float3(v.x, v.y, v.z));
+            mN.addF32(v);
             return;
         }
         addF32(v.x);
@@ -242,7 +238,7 @@
     }
     public void addF32(Float4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addF32(new android.renderscript.Float4(v.x, v.y, v.z, v.w));
+            mN.addF32(v);
             return;
         }
         addF32(v.x);
@@ -253,7 +249,7 @@
 
     public void addF64(Double2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addF64(new android.renderscript.Double2(v.x, v.y));
+            mN.addF64(v);
             return;
         }
         addF64(v.x);
@@ -261,7 +257,7 @@
     }
     public void addF64(Double3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addF64(new android.renderscript.Double3(v.x, v.y, v.z));
+            mN.addF64(v);
             return;
         }
         addF64(v.x);
@@ -270,7 +266,7 @@
     }
     public void addF64(Double4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addF64(new android.renderscript.Double4(v.x, v.y, v.z, v.w));
+            mN.addF64(v);
             return;
         }
         addF64(v.x);
@@ -281,7 +277,7 @@
 
     public void addI8(Byte2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI8(new android.renderscript.Byte2(v.x, v.y));
+            mN.addI8(v);
             return;
         }
         addI8(v.x);
@@ -289,7 +285,7 @@
     }
     public void addI8(Byte3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI8(new android.renderscript.Byte3(v.x, v.y, v.z));
+            mN.addI8(v);
             return;
         }
         addI8(v.x);
@@ -298,7 +294,7 @@
     }
     public void addI8(Byte4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI8(new android.renderscript.Byte4(v.x, v.y, v.z, v.w));
+            mN.addI8(v);
             return;
         }
         addI8(v.x);
@@ -309,7 +305,7 @@
 
     public void addU8(Short2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU8(new android.renderscript.Short2(v.x, v.y));
+            mN.addU8(v);
             return;
         }
         addU8(v.x);
@@ -317,7 +313,7 @@
     }
     public void addU8(Short3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU8(new android.renderscript.Short3(v.x, v.y, v.z));
+            mN.addU8(v);
             return;
         }
         addU8(v.x);
@@ -326,7 +322,7 @@
     }
     public void addU8(Short4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU8(new android.renderscript.Short4(v.x, v.y, v.z, v.w));
+            mN.addU8(v);
             return;
         }
         addU8(v.x);
@@ -337,7 +333,7 @@
 
     public void addI16(Short2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI16(new android.renderscript.Short2(v.x, v.y));
+            mN.addI16(v);
             return;
         }
         addI16(v.x);
@@ -345,7 +341,7 @@
     }
     public void addI16(Short3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI16(new android.renderscript.Short3(v.x, v.y, v.z));
+            mN.addI16(v);
             return;
         }
         addI16(v.x);
@@ -354,7 +350,7 @@
     }
     public void addI16(Short4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI16(new android.renderscript.Short4(v.x, v.y, v.z, v.w));
+            mN.addI16(v);
             return;
         }
         addI16(v.x);
@@ -365,7 +361,7 @@
 
     public void addU16(Int2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU16(new android.renderscript.Int2(v.x, v.y));
+            mN.addU16(v);
             return;
         }
         addU16(v.x);
@@ -373,7 +369,7 @@
     }
     public void addU16(Int3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU16(new android.renderscript.Int3(v.x, v.y, v.z));
+            mN.addU16(v);
             return;
         }
         addU16(v.x);
@@ -382,7 +378,7 @@
     }
     public void addU16(Int4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU16(new android.renderscript.Int4(v.x, v.y, v.z, v.w));
+            mN.addU16(v);
             return;
         }
         addU16(v.x);
@@ -393,7 +389,7 @@
 
     public void addI32(Int2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI32(new android.renderscript.Int2(v.x, v.y));
+            mN.addI32(v);
             return;
         }
         addI32(v.x);
@@ -401,7 +397,7 @@
     }
     public void addI32(Int3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI32(new android.renderscript.Int3(v.x, v.y, v.z));
+            mN.addI32(v);
             return;
         }
         addI32(v.x);
@@ -410,7 +406,7 @@
     }
     public void addI32(Int4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI32(new android.renderscript.Int4(v.x, v.y, v.z, v.w));
+            mN.addI32(v);
             return;
         }
         addI32(v.x);
@@ -421,7 +417,7 @@
 
     public void addU32(Long2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU32(new android.renderscript.Long2(v.x, v.y));
+            mN.addU32(v);
             return;
         }
         addU32(v.x);
@@ -429,7 +425,7 @@
     }
     public void addU32(Long3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU32(new android.renderscript.Long3(v.x, v.y, v.z));
+            mN.addU32(v);
             return;
         }
         addU32(v.x);
@@ -438,7 +434,7 @@
     }
     public void addU32(Long4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU32(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+            mN.addU32(v);
             return;
         }
         addU32(v.x);
@@ -449,7 +445,7 @@
 
     public void addI64(Long2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI64(new android.renderscript.Long2(v.x, v.y));
+            mN.addI64(v);
             return;
         }
         addI64(v.x);
@@ -457,7 +453,7 @@
     }
     public void addI64(Long3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI64(new android.renderscript.Long3(v.x, v.y, v.z));
+            mN.addI64(v);
             return;
         }
         addI64(v.x);
@@ -466,7 +462,7 @@
     }
     public void addI64(Long4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI64(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+            mN.addI64(v);
             return;
         }
         addI64(v.x);
@@ -477,7 +473,7 @@
 
     public void addU64(Long2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU64(new android.renderscript.Long2(v.x, v.y));
+            mN.addU64(v);
             return;
         }
         addU64(v.x);
@@ -485,7 +481,7 @@
     }
     public void addU64(Long3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU64(new android.renderscript.Long3(v.x, v.y, v.z));
+            mN.addU64(v);
             return;
         }
         addU64(v.x);
@@ -494,7 +490,7 @@
     }
     public void addU64(Long4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU64(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+            mN.addU64(v);
             return;
         }
         addU64(v.x);
@@ -505,7 +501,7 @@
 
     public void addMatrix(Matrix4f v) {
         if (RenderScript.shouldThunk()) {
-            mN.addMatrix(new android.renderscript.Matrix4f(v.getArray()));
+            mN.addMatrix(v);
             return;
         }
         for (int i=0; i < v.mMat.length; i++) {
@@ -515,7 +511,7 @@
 
     public void addMatrix(Matrix3f v) {
         if (RenderScript.shouldThunk()) {
-            mN.addMatrix(new android.renderscript.Matrix3f(v.getArray()));
+            mN.addMatrix(v);
             return;
         }
         for (int i=0; i < v.mMat.length; i++) {
@@ -525,7 +521,7 @@
 
     public void addMatrix(Matrix2f v) {
         if (RenderScript.shouldThunk()) {
-            mN.addMatrix(new android.renderscript.Matrix2f(v.getArray()));
+            mN.addMatrix(v);
             return;
         }
         for (int i=0; i < v.mMat.length; i++) {
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/FieldPackerThunker.java b/v8/renderscript/java/src/android/support/v8/renderscript/FieldPackerThunker.java
new file mode 100644
index 0000000..3e990f6
--- /dev/null
+++ b/v8/renderscript/java/src/android/support/v8/renderscript/FieldPackerThunker.java
@@ -0,0 +1,223 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v8.renderscript;
+
+import android.os.SystemProperties;
+import android.support.v8.renderscript.RenderScript;
+
+/**
+ * Utility class for packing arguments and structures from Android system objects to
+ * RenderScript objects.
+ *
+ * This class is only intended to be used to support the
+ * reflected code generated by the RS tool chain.  It should not
+ * be called directly.
+ *
+ **/
+public class FieldPackerThunker {
+    private android.renderscript.FieldPacker mN;
+
+    public FieldPackerThunker(int len) {
+        mN = new android.renderscript.FieldPacker(len);
+    }
+
+    void align(int v) {
+        mN.align(v);
+    }
+
+    void reset() {
+        mN.reset();
+    }
+
+    void reset(int i) {
+        mN.reset(i);
+    }
+
+    public void skip(int i) {
+        mN.skip(i);
+    }
+
+    public void addI8(byte v) {
+        mN.addI8(v);
+    }
+
+    public void addI16(short v) {
+        mN.addI16(v);
+    }
+
+    public void addI32(int v) {
+        mN.addI32(v);
+    }
+
+    public void addI64(long v) {
+        mN.addI64(v);
+    }
+
+    public void addU8(short v) {
+        mN.addU8(v);
+    }
+
+    public void addU16(int v) {
+        mN.addU16(v);
+    }
+
+    public void addU32(long v) {
+        mN.addU32(v);
+    }
+
+    public void addU64(long v) {
+        mN.addU64(v);
+    }
+
+    public void addF32(float v) {
+        mN.addF32(v);
+    }
+
+    public void addF64(double v) {
+        mN.addF64(v);
+    }
+
+    public void addObj(BaseObj obj) {
+        if (obj != null) {
+            mN.addObj(obj.getNObj());
+        } else {
+            mN.addObj(null);
+        }
+    }
+
+    public void addF32(Float2 v) {
+        mN.addF32(new android.renderscript.Float2(v.x, v.y));
+    }
+    public void addF32(Float3 v) {
+        mN.addF32(new android.renderscript.Float3(v.x, v.y, v.z));
+    }
+    public void addF32(Float4 v) {
+        mN.addF32(new android.renderscript.Float4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addF64(Double2 v) {
+        mN.addF64(new android.renderscript.Double2(v.x, v.y));
+    }
+    public void addF64(Double3 v) {
+        mN.addF64(new android.renderscript.Double3(v.x, v.y, v.z));
+    }
+    public void addF64(Double4 v) {
+        mN.addF64(new android.renderscript.Double4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addI8(Byte2 v) {
+        mN.addI8(new android.renderscript.Byte2(v.x, v.y));
+    }
+    public void addI8(Byte3 v) {
+        mN.addI8(new android.renderscript.Byte3(v.x, v.y, v.z));
+    }
+    public void addI8(Byte4 v) {
+        mN.addI8(new android.renderscript.Byte4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addU8(Short2 v) {
+        mN.addU8(new android.renderscript.Short2(v.x, v.y));
+    }
+    public void addU8(Short3 v) {
+        mN.addU8(new android.renderscript.Short3(v.x, v.y, v.z));
+    }
+    public void addU8(Short4 v) {
+        mN.addU8(new android.renderscript.Short4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addI16(Short2 v) {
+        mN.addI16(new android.renderscript.Short2(v.x, v.y));
+    }
+    public void addI16(Short3 v) {
+        mN.addI16(new android.renderscript.Short3(v.x, v.y, v.z));
+    }
+    public void addI16(Short4 v) {
+        mN.addI16(new android.renderscript.Short4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addU16(Int2 v) {
+        mN.addU16(new android.renderscript.Int2(v.x, v.y));
+    }
+    public void addU16(Int3 v) {
+        mN.addU16(new android.renderscript.Int3(v.x, v.y, v.z));
+    }
+    public void addU16(Int4 v) {
+        mN.addU16(new android.renderscript.Int4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addI32(Int2 v) {
+        mN.addI32(new android.renderscript.Int2(v.x, v.y));
+    }
+    public void addI32(Int3 v) {
+        mN.addI32(new android.renderscript.Int3(v.x, v.y, v.z));
+    }
+    public void addI32(Int4 v) {
+        mN.addI32(new android.renderscript.Int4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addU32(Long2 v) {
+        mN.addU32(new android.renderscript.Long2(v.x, v.y));
+    }
+    public void addU32(Long3 v) {
+        mN.addU32(new android.renderscript.Long3(v.x, v.y, v.z));
+    }
+    public void addU32(Long4 v) {
+        mN.addU32(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addI64(Long2 v) {
+        mN.addI64(new android.renderscript.Long2(v.x, v.y));
+    }
+    public void addI64(Long3 v) {
+        mN.addI64(new android.renderscript.Long3(v.x, v.y, v.z));
+    }
+    public void addI64(Long4 v) {
+        mN.addI64(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addU64(Long2 v) {
+        mN.addU64(new android.renderscript.Long2(v.x, v.y));
+    }
+    public void addU64(Long3 v) {
+        mN.addU64(new android.renderscript.Long3(v.x, v.y, v.z));
+    }
+    public void addU64(Long4 v) {
+        mN.addU64(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addMatrix(Matrix4f v) {
+        mN.addMatrix(new android.renderscript.Matrix4f(v.getArray()));
+    }
+
+    public void addMatrix(Matrix3f v) {
+        mN.addMatrix(new android.renderscript.Matrix3f(v.getArray()));
+    }
+
+    public void addMatrix(Matrix2f v) {
+        mN.addMatrix(new android.renderscript.Matrix2f(v.getArray()));
+    }
+
+    public void addBoolean(boolean v) {
+        mN.addBoolean(v);
+    }
+
+    public final byte[] getData() {
+        return mN.getData();
+    }
+}
+
+
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/RenderScript.java b/v8/renderscript/java/src/android/support/v8/renderscript/RenderScript.java
index ae67db1..7efbed2 100644
--- a/v8/renderscript/java/src/android/support/v8/renderscript/RenderScript.java
+++ b/v8/renderscript/java/src/android/support/v8/renderscript/RenderScript.java
@@ -768,16 +768,7 @@
         mMessageCallback = msg;
         if (isNative) {
             RenderScriptThunker rst = (RenderScriptThunker) this;
-            android.renderscript.RenderScript.RSMessageHandler newmsg =
-                new android.renderscript.RenderScript.RSMessageHandler() {
-                    public void run()  {
-                        mMessageCallback.mData = mData;
-                        mMessageCallback.mID = mID;
-                        mMessageCallback.mLength = mLength;
-                        mMessageCallback.run();
-                    }
-                };
-            rst.mN.setMessageHandler(newmsg);
+            rst.setMessageHandler(msg);
         }
     }
     public RSMessageHandler getMessageHandler() {
@@ -823,15 +814,7 @@
         mErrorCallback = msg;
         if (isNative) {
             RenderScriptThunker rst = (RenderScriptThunker) this;
-            android.renderscript.RenderScript.RSErrorHandler newmsg =
-                new android.renderscript.RenderScript.RSErrorHandler() {
-                    public void run()  {
-                        mErrorCallback.mErrorMessage = mErrorMessage;
-                        mErrorCallback.mErrorNum = mErrorNum;
-                        mErrorCallback.run();
-                    }
-                };
-            rst.mN.setErrorHandler(newmsg);
+            rst.setErrorHandler(msg);
         }
     }
     public RSErrorHandler getErrorHandler() {
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/RenderScriptThunker.java b/v8/renderscript/java/src/android/support/v8/renderscript/RenderScriptThunker.java
index daf0b26..aa787c0a 100644
--- a/v8/renderscript/java/src/android/support/v8/renderscript/RenderScriptThunker.java
+++ b/v8/renderscript/java/src/android/support/v8/renderscript/RenderScriptThunker.java
@@ -85,4 +85,11 @@
         }
 
     }
+
+    boolean equals(Object obj1, Object obj2) {
+        if (obj2 instanceof android.support.v8.renderscript.BaseObj) {
+            return ((android.renderscript.BaseObj)obj1).equals(((android.support.v8.renderscript.BaseObj)obj2).getNObj());
+        }
+        return false;
+    }
 }