Merge change 23193 into eclair

* changes:
  Expand indirect reference ifdefs.
diff --git a/vm/CheckJni.c b/vm/CheckJni.c
index 9ed7419..2e3b1c1 100644
--- a/vm/CheckJni.c
+++ b/vm/CheckJni.c
@@ -2207,11 +2207,12 @@
             goto bail;
         }
 
-        // TODO: this should not be using internal structures
-        Method* toLong = ((Object*)platformAddr)->clazz->vtable[
-                gDvm.voffOrgApacheHarmonyLuniPlatformPlatformAddress_toLong];
+        jclass platformAddrClass = (*env)->FindClass(env,
+            "org/apache/harmony/luni/platform/PlatformAddress");
+        jmethodID toLongMethod = (*env)->GetMethodID(env, platformAddrClass,
+            "toLong", "()J");
         checkResult = (void*)(u4)(*env)->CallLongMethod(env, platformAddr,
-                (jmethodID)toLong);
+                toLongMethod);
 
     bail:
         if (platformAddr != NULL)
diff --git a/vm/Jni.c b/vm/Jni.c
index a720648..10afcaa 100644
--- a/vm/Jni.c
+++ b/vm/Jni.c
@@ -533,17 +533,15 @@
  */
 #ifdef USE_INDIRECT_REF
 static inline IndirectRefTable* getLocalRefTable(JNIEnv* env)
-{
-    return &((JNIEnvExt*)env)->self->jniLocalRefTable;
-}
 #else
 static inline ReferenceTable* getLocalRefTable(JNIEnv* env)
+#endif
 {
     //return &dvmThreadSelf()->jniLocalRefTable;
     return &((JNIEnvExt*)env)->self->jniLocalRefTable;
 }
-#endif
 
+#ifdef USE_INDIRECT_REF
 /*
  * Convert an indirect reference to an Object reference.  The indirect
  * reference may be local, global, or weak-global.
@@ -552,7 +550,6 @@
  */
 Object* dvmDecodeIndirectRef(JNIEnv* env, jobject jobj)
 {
-#ifdef USE_INDIRECT_REF
     if (jobj == NULL)
         return NULL;
 
@@ -590,10 +587,10 @@
     }
 
     return result;
-#else
-    return (Object*) jobj;
-#endif
 }
+#else
+    /* use trivial inline in JniInternal.h for performance */
+#endif
 
 /*
  * Add a local reference for an object to the current stack frame.  When
@@ -1013,7 +1010,7 @@
 }
 
 
-#if 0
+#ifndef USE_INDIRECT_REF
 /*
  * Determine if "obj" appears in the argument list for the native method.
  *
@@ -1124,13 +1121,11 @@
     //Object** top;
     Object** ptr;
 
-#if 0
     /* check args */
     if (findInArgList(self, jobj)) {
         //LOGI("--- REF found %p on stack\n", jobj);
         return JNILocalRefType;
     }
-#endif
 
     /* check locals */
     if (dvmFindInReferenceTable(pRefTable, pRefTable->table, jobj) != NULL) {
@@ -1461,11 +1456,13 @@
 static inline void convertReferenceResult(JNIEnv* env, JValue* pResult,
     const Method* method, Thread* self)
 {
+#ifdef USE_INDIRECT_REF
     if (method->shorty[0] == 'L' && !dvmCheckException(self) &&
             pResult->l != NULL)
     {
         pResult->l = dvmDecodeIndirectRef(env, pResult->l);
     }
+#endif
 }
 
 /*
@@ -1476,18 +1473,19 @@
 {
     int oldStatus;
     u4* modArgs = (u4*) args;
+    jclass staticMethodClass;
+    JNIEnv* env = self->jniEnv;
 
     assert(method->insns != NULL);
 
     //LOGI("JNI calling %p (%s.%s:%s):\n", method->insns,
     //    method->clazz->descriptor, method->name, method->shorty);
 
+#ifdef USE_INDIRECT_REF
     /*
      * Walk the argument list, creating local references for appropriate
      * arguments.
      */
-    JNIEnv* env = self->jniEnv;
-    jclass staticMethodClass;
     int idx = 0;
     if (dvmIsStaticMethod(method)) {
         /* add the class object we pass in */
@@ -1535,11 +1533,15 @@
 
         idx++;
     }
+#else
+    staticMethodClass = dvmIsStaticMethod(method) ?
+        (jclass) method->clazz : NULL;
+#endif
 
     oldStatus = dvmChangeStatus(self, THREAD_NATIVE);
 
     COMPUTE_STACK_SUM(self);
-    dvmPlatformInvoke(self->jniEnv, staticMethodClass,
+    dvmPlatformInvoke(env, staticMethodClass,
         method->jniArgInfo, method->insSize, modArgs, method->shorty,
         (void*)method->insns, pResult);
     CHECK_STACK_SUM(self);
@@ -1586,12 +1588,14 @@
     u4* modArgs = (u4*) args;
     int oldStatus;
 
+#ifdef USE_INDIRECT_REF
     jobject thisObj = addLocalReference(self->jniEnv, (Object*) args[0]);
     if (thisObj == NULL) {
         assert(dvmCheckException(self));
         return;
     }
     modArgs[0] = (u4) thisObj;
+#endif
 
     oldStatus = dvmChangeStatus(self, THREAD_NATIVE);
 
@@ -1617,11 +1621,15 @@
     jclass staticMethodClass;
     int oldStatus;
 
+#ifdef USE_INDIRECT_REF
     staticMethodClass = addLocalReference(self->jniEnv, (Object*)method->clazz);
     if (staticMethodClass == NULL) {
         assert(dvmCheckException(self));
         return;
     }
+#else
+    staticMethodClass = (jobject) method->clazz;
+#endif
 
     oldStatus = dvmChangeStatus(self, THREAD_NATIVE);
 
@@ -1749,12 +1757,10 @@
 static jclass GetSuperclass(JNIEnv* env, jclass jclazz)
 {
     JNI_ENTER();
-    jclass jsuper;
+    jclass jsuper = NULL;
 
     ClassObject* clazz = (ClassObject*) dvmDecodeIndirectRef(env, jclazz);
-    if (clazz == NULL)
-        jsuper = NULL;
-    else
+    if (clazz != NULL)
         jsuper = addLocalReference(env, (Object*)clazz->super);
     JNI_EXIT();
     return jsuper;
diff --git a/vm/JniInternal.h b/vm/JniInternal.h
index 4620c50..37920ca 100644
--- a/vm/JniInternal.h
+++ b/vm/JniInternal.h
@@ -158,7 +158,14 @@
 /*
  * Decode a local, global, or weak-global reference.
  */
+#ifdef USE_INDIRECT_REF
 Object* dvmDecodeIndirectRef(JNIEnv* env, jobject jobj);
+#else
+/* use an inline to ensure this is a no-op */
+INLINE Object* dvmDecodeIndirectRef(JNIEnv* env, jobject jobj) {
+    return (Object*) jobj;
+}
+#endif
 
 /*
  * Verify that a reference passed in from native code is valid.  Returns