/*
 * Copyright (C) 2010 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.
 */

#ifndef JNI_CONSTANTS_H_included
#define JNI_CONSTANTS_H_included

#include "JNIHelp.h"

/**
 * A cache to avoid calling FindClass at runtime.
 *
 * Class lookup is relatively expensive, so we do these lookups at startup. This means that code
 * that never uses, say, java.util.zip.Deflater still has to pay for the lookup, but it means that
 * on device the cost is paid during boot and amortized. A central cache also removes the temptation
 * to dynamically call FindClass rather than add a small cache to each file that needs one. Another
 * cost is that each class cached here requires a global reference, though in practice we save
 * enough by not having a global reference for each file that uses a class such as java.lang.String
 * which is used in several files.
 *
 * FindClass is still called in a couple of situations: when throwing exceptions, and in some of
 * the serialization code. The former is clearly not a performance case, and we're currently
 * assuming that neither is the latter.
 *
 * TODO: similar arguments hold for field and method IDs; we should cache them centrally too.
 */
struct JniConstants {
    static void init(JNIEnv* env);

    static jclass booleanClass;
    static jclass byteArrayClass;
    static jclass calendarClass;
    static jclass charsetICUClass;
    static jclass doubleClass;
    static jclass errnoExceptionClass;
    static jclass fileDescriptorClass;
    static jclass gaiExceptionClass;
    static jclass inet6AddressClass;
    static jclass inet6AddressHolderClass;
    static jclass inetAddressClass;
    static jclass inetAddressHolderClass;
    static jclass inetSocketAddressClass;
    static jclass inetSocketAddressHolderClass;
    static jclass integerClass;
    static jclass localeDataClass;
    static jclass longClass;
    static jclass mutableIntClass;
    static jclass mutableLongClass;
    static jclass netlinkSocketAddressClass;
    static jclass packetSocketAddressClass;
    static jclass patternSyntaxExceptionClass;
    static jclass referenceClass;
    static jclass socketTaggerClass;
    static jclass stringClass;
    static jclass structAddrinfoClass;
    static jclass structFlockClass;
    static jclass structGroupReqClass;
    static jclass structGroupSourceReqClass;
    static jclass structIfaddrs;
    static jclass structLingerClass;
    static jclass structPasswdClass;
    static jclass structPollfdClass;
    static jclass structStatClass;
    static jclass structStatVfsClass;
    static jclass structTimevalClass;
    static jclass structUcredClass;
    static jclass structUtsnameClass;
    static jclass unixSocketAddressClass;
    static jclass zipEntryClass;
};

#define NATIVE_METHOD(className, functionName, signature) \
    { #functionName, signature, reinterpret_cast<void*>(className ## _ ## functionName) }

#endif  // JNI_CONSTANTS_H_included
