/* * This file is part of the Jikes RVM project (http://jikesrvm.org). * * This file is licensed to You under the Eclipse Public License (EPL); * You may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.opensource.org/licenses/eclipse-1.0.php * * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. */ package org.jikesrvm.tools.bootImageWriter; import org.jikesrvm.VM; import org.jikesrvm.classloader.RVMClass; import org.jikesrvm.classloader.RVMMethod; import org.jikesrvm.classloader.TypeReference; import org.jikesrvm.jni.FunctionTable; import org.jikesrvm.jni.JNIFunctions; /** * This class is responsible for constructing the JNIFuctions * array at bootimage writing time. It uses "internal reflection" to * inspect the methods of JNIFunctions and construct * a CodeArray[] that contains pointers to the compiled code * of the appropriate JNI function implementation. * <p> * It builds a JNI function table for JNI version 1.2. */ public class BuildJNIFunctionTable { // index of the named function in the array // (these are constant as defined by the JNI specification) private static final int RESERVED0 = 0; private static final int RESERVED1 = 1; private static final int RESERVED2 = 2; private static final int RESERVED3 = 3; private static final int GETVERSION = 4; private static final int DEFINECLASS = 5; private static final int FINDCLASS = 6; private static final int FROMREFLECTEDMETHOD = 7; private static final int FROMREFLECTEDFIELD = 8; private static final int TOREFLECTEDMETHOD = 9; private static final int GETSUPERCLASS = 10; private static final int ISASSIGNABLEFROM = 11; private static final int TOREFLECTEDFIELD = 12; private static final int THROW = 13; private static final int THROWNEW = 14; private static final int EXCEPTIONOCCURRED = 15; private static final int EXCEPTIONDESCRIBE = 16; private static final int EXCEPTIONCLEAR = 17; private static final int FATALERROR = 18; private static final int PUSHLOCALFRAME = 19; private static final int POPLOCALFRAME = 20; private static final int NEWGLOBALREF = 21; private static final int DELETEGLOBALREF = 22; private static final int DELETELOCALREF = 23; private static final int ISSAMEOBJECT = 24; private static final int NEWLOCALREF = 25; private static final int ENSURELOCALCAPACITY = 26; private static final int ALLOCOBJECT = 27; private static final int NEWOBJECT = 28; private static final int NEWOBJECTV = 29; private static final int NEWOBJECTA = 30; private static final int GETOBJECTCLASS = 31; private static final int ISINSTANCEOF = 32; private static final int GETMETHODID = 33; private static final int CALLOBJECTMETHOD = 34; private static final int CALLOBJECTMETHODV = 35; private static final int CALLOBJECTMETHODA = 36; private static final int CALLBOOLEANMETHOD = 37; private static final int CALLBOOLEANMETHODV = 38; private static final int CALLBOOLEANMETHODA = 39; private static final int CALLBYTEMETHOD = 40; private static final int CALLBYTEMETHODV = 41; private static final int CALLBYTEMETHODA = 42; private static final int CALLCHARMETHOD = 43; private static final int CALLCHARMETHODV = 44; private static final int CALLCHARMETHODA = 45; private static final int CALLSHORTMETHOD = 46; private static final int CALLSHORTMETHODV = 47; private static final int CALLSHORTMETHODA = 48; private static final int CALLINTMETHOD = 49; private static final int CALLINTMETHODV = 50; private static final int CALLINTMETHODA = 51; private static final int CALLLONGMETHOD = 52; private static final int CALLLONGMETHODV = 53; private static final int CALLLONGMETHODA = 54; private static final int CALLFLOATMETHOD = 55; private static final int CALLFLOATMETHODV = 56; private static final int CALLFLOATMETHODA = 57; private static final int CALLDOUBLEMETHOD = 58; private static final int CALLDOUBLEMETHODV = 59; private static final int CALLDOUBLEMETHODA = 60; private static final int CALLVOIDMETHOD = 61; private static final int CALLVOIDMETHODV = 62; private static final int CALLVOIDMETHODA = 63; private static final int CALLNONVIRTUALOBJECTMETHOD = 64; private static final int CALLNONVIRTUALOBJECTMETHODV = 65; private static final int CALLNONVIRTUALOBJECTMETHODA = 66; private static final int CALLNONVIRTUALBOOLEANMETHOD = 67; private static final int CALLNONVIRTUALBOOLEANMETHODV = 68; private static final int CALLNONVIRTUALBOOLEANMETHODA = 69; private static final int CALLNONVIRTUALBYTEMETHOD = 70; private static final int CALLNONVIRTUALBYTEMETHODV = 71; private static final int CALLNONVIRTUALBYTEMETHODA = 72; private static final int CALLNONVIRTUALCHARMETHOD = 73; private static final int CALLNONVIRTUALCHARMETHODV = 74; private static final int CALLNONVIRTUALCHARMETHODA = 75; private static final int CALLNONVIRTUALSHORTMETHOD = 76; private static final int CALLNONVIRTUALSHORTMETHODV = 77; private static final int CALLNONVIRTUALSHORTMETHODA = 78; private static final int CALLNONVIRTUALINTMETHOD = 79; private static final int CALLNONVIRTUALINTMETHODV = 80; private static final int CALLNONVIRTUALINTMETHODA = 81; private static final int CALLNONVIRTUALLONGMETHOD = 82; private static final int CALLNONVIRTUALLONGMETHODV = 83; private static final int CALLNONVIRTUALLONGMETHODA = 84; private static final int CALLNONVIRTUALFLOATMETHOD = 85; private static final int CALLNONVIRTUALFLOATMETHODV = 86; private static final int CALLNONVIRTUALFLOATMETHODA = 87; private static final int CALLNONVIRTUALDOUBLEMETHOD = 88; private static final int CALLNONVIRTUALDOUBLEMETHODV = 89; private static final int CALLNONVIRTUALDOUBLEMETHODA = 90; private static final int CALLNONVIRTUALVOIDMETHOD = 91; private static final int CALLNONVIRTUALVOIDMETHODV = 92; private static final int CALLNONVIRTUALVOIDMETHODA = 93; private static final int GETFIELDID = 94; private static final int GETOBJECTFIELD = 95; private static final int GETBOOLEANFIELD = 96; private static final int GETBYTEFIELD = 97; private static final int GETCHARFIELD = 98; private static final int GETSHORTFIELD = 99; private static final int GETINTFIELD = 100; private static final int GETLONGFIELD = 101; private static final int GETFLOATFIELD = 102; private static final int GETDOUBLEFIELD = 103; private static final int SETOBJECTFIELD = 104; private static final int SETBOOLEANFIELD = 105; private static final int SETBYTEFIELD = 106; private static final int SETCHARFIELD = 107; private static final int SETSHORTFIELD = 108; private static final int SETINTFIELD = 109; private static final int SETLONGFIELD = 110; private static final int SETFLOATFIELD = 111; private static final int SETDOUBLEFIELD = 112; private static final int GETSTATICMETHODID = 113; private static final int CALLSTATICOBJECTMETHOD = 114; private static final int CALLSTATICOBJECTMETHODV = 115; private static final int CALLSTATICOBJECTMETHODA = 116; private static final int CALLSTATICBOOLEANMETHOD = 117; private static final int CALLSTATICBOOLEANMETHODV = 118; private static final int CALLSTATICBOOLEANMETHODA = 119; private static final int CALLSTATICBYTEMETHOD = 120; private static final int CALLSTATICBYTEMETHODV = 121; private static final int CALLSTATICBYTEMETHODA = 122; private static final int CALLSTATICCHARMETHOD = 123; private static final int CALLSTATICCHARMETHODV = 124; private static final int CALLSTATICCHARMETHODA = 125; private static final int CALLSTATICSHORTMETHOD = 126; private static final int CALLSTATICSHORTMETHODV = 127; private static final int CALLSTATICSHORTMETHODA = 128; private static final int CALLSTATICINTMETHOD = 129; private static final int CALLSTATICINTMETHODV = 130; private static final int CALLSTATICINTMETHODA = 131; private static final int CALLSTATICLONGMETHOD = 132; private static final int CALLSTATICLONGMETHODV = 133; private static final int CALLSTATICLONGMETHODA = 134; private static final int CALLSTATICFLOATMETHOD = 135; private static final int CALLSTATICFLOATMETHODV = 136; private static final int CALLSTATICFLOATMETHODA = 137; private static final int CALLSTATICDOUBLEMETHOD = 138; private static final int CALLSTATICDOUBLEMETHODV = 139; private static final int CALLSTATICDOUBLEMETHODA = 140; private static final int CALLSTATICVOIDMETHOD = 141; private static final int CALLSTATICVOIDMETHODV = 142; private static final int CALLSTATICVOIDMETHODA = 143; private static final int GETSTATICFIELDID = 144; private static final int GETSTATICOBJECTFIELD = 145; private static final int GETSTATICBOOLEANFIELD = 146; private static final int GETSTATICBYTEFIELD = 147; private static final int GETSTATICCHARFIELD = 148; private static final int GETSTATICSHORTFIELD = 149; private static final int GETSTATICINTFIELD = 150; private static final int GETSTATICLONGFIELD = 151; private static final int GETSTATICFLOATFIELD = 152; private static final int GETSTATICDOUBLEFIELD = 153; private static final int SETSTATICOBJECTFIELD = 154; private static final int SETSTATICBOOLEANFIELD = 155; private static final int SETSTATICBYTEFIELD = 156; private static final int SETSTATICCHARFIELD = 157; private static final int SETSTATICSHORTFIELD = 158; private static final int SETSTATICINTFIELD = 159; private static final int SETSTATICLONGFIELD = 160; private static final int SETSTATICFLOATFIELD = 161; private static final int SETSTATICDOUBLEFIELD = 162; private static final int NEWSTRING = 163; private static final int GETSTRINGLENGTH = 164; private static final int GETSTRINGCHARS = 165; private static final int RELEASESTRINGCHARS = 166; private static final int NEWSTRINGUTF = 167; private static final int GETSTRINGUTFLENGTH = 168; private static final int GETSTRINGUTFCHARS = 169; private static final int RELEASESTRINGUTFCHARS = 170; private static final int GETARRAYLENGTH = 171; private static final int NEWOBJECTARRAY = 172; private static final int GETOBJECTARRAYELEMENT = 173; private static final int SETOBJECTARRAYELEMENT = 174; private static final int NEWBOOLEANARRAY = 175; private static final int NEWBYTEARRAY = 176; private static final int NEWCHARARRAY = 177; private static final int NEWSHORTARRAY = 178; private static final int NEWINTARRAY = 179; private static final int NEWLONGARRAY = 180; private static final int NEWFLOATARRAY = 181; private static final int NEWDOUBLEARRAY = 182; private static final int GETBOOLEANARRAYELEMENTS = 183; private static final int GETBYTEARRAYELEMENTS = 184; private static final int GETCHARARRAYELEMENTS = 185; private static final int GETSHORTARRAYELEMENTS = 186; private static final int GETINTARRAYELEMENTS = 187; private static final int GETLONGARRAYELEMENTS = 188; private static final int GETFLOATARRAYELEMENTS = 189; private static final int GETDOUBLEARRAYELEMENTS = 190; private static final int RELEASEBOOLEANARRAYELEMENTS = 191; private static final int RELEASEBYTEARRAYELEMENTS = 192; private static final int RELEASECHARARRAYELEMENTS = 193; private static final int RELEASESHORTARRAYELEMENTS = 194; private static final int RELEASEINTARRAYELEMENTS = 195; private static final int RELEASELONGARRAYELEMENTS = 196; private static final int RELEASEFLOATARRAYELEMENTS = 197; private static final int RELEASEDOUBLEARRAYELEMENTS = 198; private static final int GETBOOLEANARRAYREGION = 199; private static final int GETBYTEARRAYREGION = 200; private static final int GETCHARARRAYREGION = 201; private static final int GETSHORTARRAYREGION = 202; private static final int GETINTARRAYREGION = 203; private static final int GETLONGARRAYREGION = 204; private static final int GETFLOATARRAYREGION = 205; private static final int GETDOUBLEARRAYREGION = 206; private static final int SETBOOLEANARRAYREGION = 207; private static final int SETBYTEARRAYREGION = 208; private static final int SETCHARARRAYREGION = 209; private static final int SETSHORTARRAYREGION = 210; private static final int SETINTARRAYREGION = 211; private static final int SETLONGARRAYREGION = 212; private static final int SETFLOATARRAYREGION = 213; private static final int SETDOUBLEARRAYREGION = 214; private static final int REGISTERNATIVES = 215; private static final int UNREGISTERNATIVES = 216; private static final int MONITORENTER = 217; private static final int MONITOREXIT = 218; private static final int GETJAVAVM = 219; private static final int GETSTRINGREGION = 220; private static final int GETSTRINGUTFREGION = 221; private static final int GETPRIMITIVEARRAYCRITICAL = 222; private static final int RELEASEPRIMITIVEARRAYCRITICAL = 223; private static final int GETSTRINGCRITICAL = 224; private static final int RELEASESTRINGCRITICAL = 225; private static final int NEWWEAKGLOBALREF = 226; private static final int DELETEWEAKGLOBALREF = 227; private static final int EXCEPTIONCHECK = 228; /* Added in JNI 1.4: */ private static final int NEWDIRECTBYTEBUFFER = 229; private static final int GETDIRECTBUFFERADDRESS = 230; private static final int GETDIRECTBUFFERCAPACITY = 231; /** * Construct the JNIFuntionTable. * This is not very efficient, but is done at bootImageWriting time, * so we just don't worry about it. */ public static FunctionTable buildTable() { String[] names = initNames(); FunctionTable functions = FunctionTable.allocate(JNIFunctions.FUNCTIONCOUNT); RVMClass cls = TypeReference.JNIFunctions.peekType().asClass(); if (VM.VerifyAssertions) VM._assert(cls.isInstantiated()); for (RVMMethod mth : cls.getDeclaredMethods()) { String methodName = mth.getName().toString(); int jniIndex = indexOf(names, methodName); if (jniIndex != -1) { functions.set(jniIndex, mth.getCurrentEntryCodeArray()); } } return functions; } /** * Get the JNI index for a function name. * @param functionName a JNI function name * @return the index for this function, -1 if not found */ private static int indexOf(String[] names, String functionName) { for (int i=0; i<names.length; i++) { if (names[i].equals(functionName)) return i; } return -1; } private static String[] initNames() { String[] names = new String[JNIFunctions.FUNCTIONCOUNT]; names[0] = "undefined"; names[RESERVED0] = "reserved0"; names[RESERVED1] = "reserved1"; names[RESERVED2] = "reserved2"; names[RESERVED3] = "reserved3"; names[GETVERSION] = "GetVersion"; names[DEFINECLASS] = "DefineClass"; names[FINDCLASS] = "FindClass"; names[FROMREFLECTEDMETHOD] = "FromReflectedMethod"; // JDK1.2, #7 names[FROMREFLECTEDFIELD] = "FromReflectedField"; // JDK1.2, #8 names[TOREFLECTEDMETHOD] = "ToReflectedMethod"; // JDK1.2, #9 names[GETSUPERCLASS] = "GetSuperclass"; names[ISASSIGNABLEFROM] = "IsAssignableFrom"; names[TOREFLECTEDFIELD] = "ToReflectedField"; // JDK1.2, #12 names[THROW] = "Throw"; names[THROWNEW] = "ThrowNew"; names[EXCEPTIONOCCURRED] = "ExceptionOccurred"; names[EXCEPTIONDESCRIBE] = "ExceptionDescribe"; names[EXCEPTIONCLEAR] = "ExceptionClear"; names[FATALERROR] = "FatalError"; names[PUSHLOCALFRAME] = "PushLocalFrame"; // JDK1.2, #19 names[POPLOCALFRAME] = "PopLocalFrame"; // JDK1.2, #20 names[NEWGLOBALREF] = "NewGlobalRef"; names[DELETEGLOBALREF] = "DeleteGlobalRef"; names[DELETELOCALREF] = "DeleteLocalRef"; names[ISSAMEOBJECT] = "IsSameObject"; names[NEWLOCALREF] = "NewLocalRef"; // JDK1.2, #25 names[ENSURELOCALCAPACITY] = "EnsureLocalCapacity"; // JDK1.2, #26 names[ALLOCOBJECT] = "AllocObject"; names[NEWOBJECT] = "NewObject"; names[NEWOBJECTV] = "NewObjectV"; names[NEWOBJECTA] = "NewObjectA"; names[GETOBJECTCLASS] = "GetObjectClass"; names[ISINSTANCEOF] = "IsInstanceOf"; names[GETMETHODID] = "GetMethodID"; names[CALLOBJECTMETHOD] = "CallObjectMethod"; names[CALLOBJECTMETHODV] = "CallObjectMethodV"; names[CALLOBJECTMETHODA] = "CallObjectMethodA"; names[CALLBOOLEANMETHOD] = "CallBooleanMethod"; names[CALLBOOLEANMETHODV] = "CallBooleanMethodV"; names[CALLBOOLEANMETHODA] = "CallBooleanMethodA"; names[CALLBYTEMETHOD] = "CallByteMethod"; names[CALLBYTEMETHODV] = "CallByteMethodV"; names[CALLBYTEMETHODA] = "CallByteMethodA"; names[CALLCHARMETHOD] = "CallCharMethod"; names[CALLCHARMETHODV] = "CallCharMethodV"; names[CALLCHARMETHODA] = "CallCharMethodA"; names[CALLSHORTMETHOD] = "CallShortMethod"; names[CALLSHORTMETHODV] = "CallShortMethodV"; names[CALLSHORTMETHODA] = "CallShortMethodA"; names[CALLINTMETHOD] = "CallIntMethod"; names[CALLINTMETHODV] = "CallIntMethodV"; names[CALLINTMETHODA] = "CallIntMethodA"; names[CALLLONGMETHOD] = "CallLongMethod"; names[CALLLONGMETHODV] = "CallLongMethodV"; names[CALLLONGMETHODA] = "CallLongMethodA"; names[CALLFLOATMETHOD] = "CallFloatMethod"; names[CALLFLOATMETHODV] = "CallFloatMethodV"; names[CALLFLOATMETHODA] = "CallFloatMethodA"; names[CALLDOUBLEMETHOD] = "CallDoubleMethod"; names[CALLDOUBLEMETHODV] = "CallDoubleMethodV"; names[CALLDOUBLEMETHODA] = "CallDoubleMethodA"; names[CALLVOIDMETHOD] = "CallVoidMethod"; names[CALLVOIDMETHODV] = "CallVoidMethodV"; names[CALLVOIDMETHODA] = "CallVoidMethodA"; names[CALLNONVIRTUALOBJECTMETHOD] = "CallNonvirtualObjectMethod"; names[CALLNONVIRTUALOBJECTMETHODV] = "CallNonvirtualObjectMethodV"; names[CALLNONVIRTUALOBJECTMETHODA] = "CallNonvirtualObjectMethodA"; names[CALLNONVIRTUALBOOLEANMETHOD] = "CallNonvirtualBooleanMethod"; names[CALLNONVIRTUALBOOLEANMETHODV] = "CallNonvirtualBooleanMethodV"; names[CALLNONVIRTUALBOOLEANMETHODA] = "CallNonvirtualBooleanMethodA"; names[CALLNONVIRTUALBYTEMETHOD] = "CallNonvirtualByteMethod"; names[CALLNONVIRTUALBYTEMETHODV] = "CallNonvirtualByteMethodV"; names[CALLNONVIRTUALBYTEMETHODA] = "CallNonvirtualByteMethodA"; names[CALLNONVIRTUALCHARMETHOD] = "CallNonvirtualCharMethod"; names[CALLNONVIRTUALCHARMETHODV] = "CallNonvirtualCharMethodV"; names[CALLNONVIRTUALCHARMETHODA] = "CallNonvirtualCharMethodA"; names[CALLNONVIRTUALSHORTMETHOD] = "CallNonvirtualShortMethod"; names[CALLNONVIRTUALSHORTMETHODV] = "CallNonvirtualShortMethodV"; names[CALLNONVIRTUALSHORTMETHODA] = "CallNonvirtualShortMethodA"; names[CALLNONVIRTUALINTMETHOD] = "CallNonvirtualIntMethod"; names[CALLNONVIRTUALINTMETHODV] = "CallNonvirtualIntMethodV"; names[CALLNONVIRTUALINTMETHODA] = "CallNonvirtualIntMethodA"; names[CALLNONVIRTUALLONGMETHOD] = "CallNonvirtualLongMethod"; names[CALLNONVIRTUALLONGMETHODV] = "CallNonvirtualLongMethodV"; names[CALLNONVIRTUALLONGMETHODA] = "CallNonvirtualLongMethodA"; names[CALLNONVIRTUALFLOATMETHOD] = "CallNonvirtualFloatMethod"; names[CALLNONVIRTUALFLOATMETHODV] = "CallNonvirtualFloatMethodV"; names[CALLNONVIRTUALFLOATMETHODA] = "CallNonvirtualFloatMethodA"; names[CALLNONVIRTUALDOUBLEMETHOD] = "CallNonvirtualDoubleMethod"; names[CALLNONVIRTUALDOUBLEMETHODV] = "CallNonvirtualDoubleMethodV"; names[CALLNONVIRTUALDOUBLEMETHODA] = "CallNonvirtualDoubleMethodA"; names[CALLNONVIRTUALVOIDMETHOD] = "CallNonvirtualVoidMethod"; names[CALLNONVIRTUALVOIDMETHODV] = "CallNonvirtualVoidMethodV"; names[CALLNONVIRTUALVOIDMETHODA] = "CallNonvirtualVoidMethodA"; names[GETFIELDID] = "GetFieldID"; names[GETOBJECTFIELD] = "GetObjectField"; names[GETBOOLEANFIELD] = "GetBooleanField"; names[GETBYTEFIELD] = "GetByteField"; names[GETCHARFIELD] = "GetCharField"; names[GETSHORTFIELD] = "GetShortField"; names[GETINTFIELD] = "GetIntField"; names[GETLONGFIELD] = "GetLongField"; names[GETFLOATFIELD] = "GetFloatField"; names[GETDOUBLEFIELD] = "GetDoubleField"; names[SETOBJECTFIELD] = "SetObjectField"; names[SETBOOLEANFIELD] = "SetBooleanField"; names[SETBYTEFIELD] = "SetByteField"; names[SETCHARFIELD] = "SetCharField"; names[SETSHORTFIELD] = "SetShortField"; names[SETINTFIELD] = "SetIntField"; names[SETLONGFIELD] = "SetLongField"; names[SETFLOATFIELD] = "SetFloatField"; names[SETDOUBLEFIELD] = "SetDoubleField"; names[GETSTATICMETHODID] = "GetStaticMethodID"; names[CALLSTATICOBJECTMETHOD] = "CallStaticObjectMethod"; names[CALLSTATICOBJECTMETHODV] = "CallStaticObjectMethodV"; names[CALLSTATICOBJECTMETHODA] = "CallStaticObjectMethodA"; names[CALLSTATICBOOLEANMETHOD] = "CallStaticBooleanMethod"; names[CALLSTATICBOOLEANMETHODV] = "CallStaticBooleanMethodV"; names[CALLSTATICBOOLEANMETHODA] = "CallStaticBooleanMethodA"; names[CALLSTATICBYTEMETHOD] = "CallStaticByteMethod"; names[CALLSTATICBYTEMETHODV] = "CallStaticByteMethodV"; names[CALLSTATICBYTEMETHODA] = "CallStaticByteMethodA"; names[CALLSTATICCHARMETHOD] = "CallStaticCharMethod"; names[CALLSTATICCHARMETHODV] = "CallStaticCharMethodV"; names[CALLSTATICCHARMETHODA] = "CallStaticCharMethodA"; names[CALLSTATICSHORTMETHOD] = "CallStaticShortMethod"; names[CALLSTATICSHORTMETHODV] = "CallStaticShortMethodV"; names[CALLSTATICSHORTMETHODA] = "CallStaticShortMethodA"; names[CALLSTATICINTMETHOD] = "CallStaticIntMethod"; names[CALLSTATICINTMETHODV] = "CallStaticIntMethodV"; names[CALLSTATICINTMETHODA] = "CallStaticIntMethodA"; names[CALLSTATICLONGMETHOD] = "CallStaticLongMethod"; names[CALLSTATICLONGMETHODV] = "CallStaticLongMethodV"; names[CALLSTATICLONGMETHODA] = "CallStaticLongMethodA"; names[CALLSTATICFLOATMETHOD] = "CallStaticFloatMethod"; names[CALLSTATICFLOATMETHODV] = "CallStaticFloatMethodV"; names[CALLSTATICFLOATMETHODA] = "CallStaticFloatMethodA"; names[CALLSTATICDOUBLEMETHOD] = "CallStaticDoubleMethod"; names[CALLSTATICDOUBLEMETHODV] = "CallStaticDoubleMethodV"; names[CALLSTATICDOUBLEMETHODA] = "CallStaticDoubleMethodA"; names[CALLSTATICVOIDMETHOD] = "CallStaticVoidMethod"; names[CALLSTATICVOIDMETHODV] = "CallStaticVoidMethodV"; names[CALLSTATICVOIDMETHODA] = "CallStaticVoidMethodA"; names[GETSTATICFIELDID] = "GetStaticFieldID"; names[GETSTATICOBJECTFIELD] = "GetStaticObjectField"; names[GETSTATICBOOLEANFIELD] = "GetStaticBooleanField"; names[GETSTATICBYTEFIELD] = "GetStaticByteField"; names[GETSTATICCHARFIELD] = "GetStaticCharField"; names[GETSTATICSHORTFIELD] = "GetStaticShortField"; names[GETSTATICINTFIELD] = "GetStaticIntField"; names[GETSTATICLONGFIELD] = "GetStaticLongField"; names[GETSTATICFLOATFIELD] = "GetStaticFloatField"; names[GETSTATICDOUBLEFIELD] = "GetStaticDoubleField"; names[SETSTATICOBJECTFIELD] = "SetStaticObjectField"; names[SETSTATICBOOLEANFIELD] = "SetStaticBooleanField"; names[SETSTATICBYTEFIELD] = "SetStaticByteField"; names[SETSTATICCHARFIELD] = "SetStaticCharField"; names[SETSTATICSHORTFIELD] = "SetStaticShortField"; names[SETSTATICINTFIELD] = "SetStaticIntField"; names[SETSTATICLONGFIELD] = "SetStaticLongField"; names[SETSTATICFLOATFIELD] = "SetStaticFloatField"; names[SETSTATICDOUBLEFIELD] = "SetStaticDoubleField"; names[NEWSTRING] = "NewString"; names[GETSTRINGLENGTH] = "GetStringLength"; names[GETSTRINGCHARS] = "GetStringChars"; names[RELEASESTRINGCHARS] = "ReleaseStringChars"; names[NEWSTRINGUTF] = "NewStringUTF"; names[GETSTRINGUTFLENGTH] = "GetStringUTFLength"; names[GETSTRINGUTFCHARS] = "GetStringUTFChars"; names[RELEASESTRINGUTFCHARS] = "ReleaseStringUTFChars"; names[GETARRAYLENGTH] = "GetArrayLength"; names[NEWOBJECTARRAY] = "NewObjectArray"; names[GETOBJECTARRAYELEMENT] = "GetObjectArrayElement"; names[SETOBJECTARRAYELEMENT] = "SetObjectArrayElement"; names[NEWBOOLEANARRAY] = "NewBooleanArray"; names[NEWBYTEARRAY] = "NewByteArray"; names[NEWCHARARRAY] = "NewCharArray"; names[NEWSHORTARRAY] = "NewShortArray"; names[NEWINTARRAY] = "NewIntArray"; names[NEWLONGARRAY] = "NewLongArray"; names[NEWFLOATARRAY] = "NewFloatArray"; names[NEWDOUBLEARRAY] = "NewDoubleArray"; names[GETBOOLEANARRAYELEMENTS] = "GetBooleanArrayElements"; names[GETBYTEARRAYELEMENTS] = "GetByteArrayElements"; names[GETCHARARRAYELEMENTS] = "GetCharArrayElements"; names[GETSHORTARRAYELEMENTS] = "GetShortArrayElements"; names[GETINTARRAYELEMENTS] = "GetIntArrayElements"; names[GETLONGARRAYELEMENTS] = "GetLongArrayElements"; names[GETFLOATARRAYELEMENTS] = "GetFloatArrayElements"; names[GETDOUBLEARRAYELEMENTS] = "GetDoubleArrayElements"; names[RELEASEBOOLEANARRAYELEMENTS] = "ReleaseBooleanArrayElements"; names[RELEASEBYTEARRAYELEMENTS] = "ReleaseByteArrayElements"; names[RELEASECHARARRAYELEMENTS] = "ReleaseCharArrayElements"; names[RELEASESHORTARRAYELEMENTS] = "ReleaseShortArrayElements"; names[RELEASEINTARRAYELEMENTS] = "ReleaseIntArrayElements"; names[RELEASELONGARRAYELEMENTS] = "ReleaseLongArrayElements"; names[RELEASEFLOATARRAYELEMENTS] = "ReleaseFloatArrayElements"; names[RELEASEDOUBLEARRAYELEMENTS] = "ReleaseDoubleArrayElements"; names[GETBOOLEANARRAYREGION] = "GetBooleanArrayRegion"; names[GETBYTEARRAYREGION] = "GetByteArrayRegion"; names[GETCHARARRAYREGION] = "GetCharArrayRegion"; names[GETSHORTARRAYREGION] = "GetShortArrayRegion"; names[GETINTARRAYREGION] = "GetIntArrayRegion"; names[GETLONGARRAYREGION] = "GetLongArrayRegion"; names[GETFLOATARRAYREGION] = "GetFloatArrayRegion"; names[GETDOUBLEARRAYREGION] = "GetDoubleArrayRegion"; names[SETBOOLEANARRAYREGION] = "SetBooleanArrayRegion"; names[SETBYTEARRAYREGION] = "SetByteArrayRegion"; names[SETCHARARRAYREGION] = "SetCharArrayRegion"; names[SETSHORTARRAYREGION] = "SetShortArrayRegion"; names[SETINTARRAYREGION] = "SetIntArrayRegion"; names[SETLONGARRAYREGION] = "SetLongArrayRegion"; names[SETFLOATARRAYREGION] = "SetFloatArrayRegion"; names[SETDOUBLEARRAYREGION] = "SetDoubleArrayRegion"; names[REGISTERNATIVES] = "RegisterNatives"; names[UNREGISTERNATIVES] = "UnregisterNatives"; names[MONITORENTER] = "MonitorEnter"; names[MONITOREXIT] = "MonitorExit"; names[GETJAVAVM] = "GetJavaVM"; names[GETSTRINGREGION] = "GetStringRegion"; // JDK 1.2, #220 names[GETSTRINGUTFREGION] = "GetStringUTFRegion"; // JDK 1.2, #221 names[GETPRIMITIVEARRAYCRITICAL] = "GetPrimitiveArrayCritical"; // JDK 1.2, #222 names[RELEASEPRIMITIVEARRAYCRITICAL] = "ReleasePrimitiveArrayCritical"; // JDK 1.2, #223 names[GETSTRINGCRITICAL] = "GetStringCritical"; // JDK 1.2, # 224 names[RELEASESTRINGCRITICAL] = "ReleaseStringCritical"; // JDK 1.2, #225 names[NEWWEAKGLOBALREF] = "NewWeakGlobalRef"; // JDK 1.2, #226 names[DELETEWEAKGLOBALREF] = "DeleteWeakGlobalRef"; // JDK 1.2, #227 names[EXCEPTIONCHECK] = "ExceptionCheck"; // JDK 1.2, #228 names[NEWDIRECTBYTEBUFFER] = "NewDirectByteBuffer"; // JDK 1.4, #229 names[GETDIRECTBUFFERADDRESS] = "GetDirectBufferAddress"; // JDK 1.4, #230 names[GETDIRECTBUFFERCAPACITY] = "GetDirectBufferCapacity"; // JDK 1.4, #231 return names; } }