Field* Class::lookup_field_recursive(const String* name, const String* desc) { // Step 1: lookup in self Field* field = lookup_field(name, desc); if(field) return field; // Step 2: lookup in direct superinterfaces recursively for(uint16 in = 0; in < m_num_superinterfaces; in++) { field = get_superinterface(in)->lookup_field_recursive(name, desc); if(field) return field; } // Step 3: lookup in super classes recursively if(has_super_class()) { field = get_super_class()->lookup_field_recursive(name, desc); } return field; } // Class::lookup_field_recursive
static bool init_ids(JNIEnv* env) { // Load NativeObject classes init_class(env, "mapnik/NativeObject", CLASS_NATIVEOBJECT); init_class(env, "mapnik/MapDefinition", CLASS_MAP); init_class(env, "mapnik/Datasource", CLASS_DATASOURCE); init_class(env, "mapnik/DatasourceCache", CLASS_DATASOURCE_CACHE); init_class(env, "mapnik/Layer", CLASS_LAYER); init_class(env, "mapnik/FeatureTypeStyle", CLASS_FEATURE_TYPE_STYLE); init_class(env, "mapnik/Projection", CLASS_PROJECTION); init_class(env, "mapnik/Query", CLASS_QUERY); init_class(env, "mapnik/FeatureSet", CLASS_FEATURESET); init_class(env, "mapnik/Geometry", CLASS_GEOMETRY); init_class(env, "mapnik/Image", CLASS_IMAGE); init_class(env, "mapnik/Grid", CLASS_GRID); // Ptr CTOR_NATIVEOBJECT=lookup_method(env, CLASS_NATIVEOBJECT, "<init>", "()V"); FIELD_PTR=lookup_field(env, CLASS_NATIVEOBJECT, "ptr", "J"); // FeatureSet FIELD_FEATURESET_FEATURE_PTR=lookup_field(env, CLASS_FEATURESET, "feature_ptr", "J"); // String init_class(env, "java/lang/String", CLASS_STRING); // Integer init_class(env, "java/lang/Integer", CLASS_INTEGER); METHOD_INTEGER_VALUEOF=lookup_static_method(env, CLASS_INTEGER, "valueOf", "(I)Ljava/lang/Integer;"); init_class(env, "java/lang/Boolean", CLASS_BOOLEAN); METHOD_BOOLEAN_VALUEOF=lookup_static_method(env, CLASS_BOOLEAN, "valueOf", "(Z)Ljava/lang/Boolean;"); init_class(env, "java/lang/Long", CLASS_LONG); METHOD_LONG_VALUEOF=lookup_static_method(env, CLASS_LONG, "valueOf", "(J)Ljava/lang/Long;"); // Double init_class(env, "java/lang/Double", CLASS_DOUBLE); METHOD_DOUBLE_VALUEOF=lookup_static_method(env, CLASS_DOUBLE, "valueOf", "(D)Ljava/lang/Double;"); // Parameters init_class(env, "mapnik/Parameters", CLASS_PARAMETERS); CTOR_PARAMETERS=lookup_method(env, CLASS_PARAMETERS, "<init>", "()V"); METHOD_PARAMETERS_SET_STRING=lookup_method(env, CLASS_PARAMETERS, "setString", "(Ljava/lang/String;Ljava/lang/String;)V"); METHOD_PARAMETERS_SET_BOOLEAN=lookup_method(env, CLASS_PARAMETERS, "setBool", "(Ljava/lang/String;Z)V"); METHOD_PARAMETERS_SET_INT=lookup_method(env, CLASS_PARAMETERS, "setInt", "(Ljava/lang/String;I)V"); METHOD_PARAMETERS_SET_LONG=lookup_method(env, CLASS_PARAMETERS, "setLong", "(Ljava/lang/String;J)V"); METHOD_PARAMETERS_SET_DOUBLE=lookup_method(env, CLASS_PARAMETERS, "setDouble", "(Ljava/lang/String;D)V"); METHOD_PARAMETERS_COPY_TO_NATIVE=lookup_method(env, CLASS_PARAMETERS, "copyToNative", "(J)V"); // HashSet init_class(env, "java/util/HashSet", CLASS_HASHSET); CTOR_HASHSET=lookup_method(env, CLASS_HASHSET, "<init>", "()V"); METHOD_HASHSET_ADD=lookup_method(env, CLASS_HASHSET, "add", "(Ljava/lang/Object;)Z"); // Box2d init_class(env, "mapnik/Box2d", CLASS_BOX2D); FIELD_BOX2D_MINX=lookup_field(env, CLASS_BOX2D, "minx", "D"); FIELD_BOX2D_MINY=lookup_field(env, CLASS_BOX2D, "miny", "D"); FIELD_BOX2D_MAXX=lookup_field(env, CLASS_BOX2D, "maxx", "D"); FIELD_BOX2D_MAXY=lookup_field(env, CLASS_BOX2D, "maxy", "D"); // Color init_class(env, "mapnik/Color", CLASS_COLOR); FIELD_COLOR_RED=lookup_field(env, CLASS_COLOR, "red", "I"); FIELD_COLOR_GREEN=lookup_field(env, CLASS_COLOR, "green", "I"); FIELD_COLOR_BLUE=lookup_field(env, CLASS_COLOR, "blue", "I"); FIELD_COLOR_ALPHA=lookup_field(env, CLASS_COLOR, "alpha", "I"); // Coord init_class(env, "mapnik/Coord", CLASS_COORD); FIELD_COORD_X=lookup_field(env, CLASS_COORD, "x", "D"); FIELD_COORD_Y=lookup_field(env, CLASS_COORD, "y", "D"); // LayerDescriptor init_class(env, "mapnik/LayerDescriptor", CLASS_LAYERDESCRIPTOR); CTOR_LAYERDESCRIPTOR=lookup_method(env, CLASS_LAYERDESCRIPTOR, "<init>", "()V"); FIELD_LAYERDESCRIPTOR_NAME=lookup_field(env, CLASS_LAYERDESCRIPTOR, "name", "Ljava/lang/String;"); FIELD_LAYERDESCRIPTOR_ENCODING=lookup_field(env, CLASS_LAYERDESCRIPTOR, "encoding", "Ljava/lang/String;"); METHOD_LAYERDESCRIPTOR_ADDDESCRIPTOR=lookup_method(env, CLASS_LAYERDESCRIPTOR, "addDescriptor", "(Lmapnik/AttributeDescriptor;)V"); // AttributeDescriptor init_class(env, "mapnik/AttributeDescriptor", CLASS_ATTRIBUTEDESCRIPTOR); CTOR_ATTRIBUTEDESCRIPTOR=lookup_method(env, CLASS_ATTRIBUTEDESCRIPTOR, "<init>", "()V"); FIELD_ATTRIBUTEDESCRIPTOR_NAME=lookup_field(env, CLASS_ATTRIBUTEDESCRIPTOR, "name", "Ljava/lang/String;"); FIELD_ATTRIBUTEDESCRIPTOR_TYPE=lookup_field(env, CLASS_ATTRIBUTEDESCRIPTOR, "type", "I"); FIELD_ATTRIBUTEDESCRIPTOR_PRIMARYKEY=lookup_field(env, CLASS_ATTRIBUTEDESCRIPTOR, "primaryKey", "Z"); FIELD_ATTRIBUTEDESCRIPTOR_SIZE=lookup_field(env, CLASS_ATTRIBUTEDESCRIPTOR, "size", "I"); FIELD_ATTRIBUTEDESCRIPTOR_PRECISION=lookup_field(env, CLASS_ATTRIBUTEDESCRIPTOR, "precision", "I"); return true; }