• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 /*
17  * Resolve "constant pool" references into pointers to VM structs.
18  */
19 #ifndef _DALVIK_OO_RESOLVE
20 #define _DALVIK_OO_RESOLVE
21 
22 /*
23  * "Direct" and "virtual" methods are stored independently.  The type of call
24  * used to invoke the method determines which list we search, and whether
25  * we travel up into superclasses.
26  *
27  * (<clinit>, <init>, and methods declared "private" or "static" are stored
28  * in the "direct" list.  All others are stored in the "virtual" list.)
29  */
30 typedef enum MethodType {
31     METHOD_UNKNOWN  = 0,
32     METHOD_DIRECT,      // <init>, private
33     METHOD_STATIC,      // static
34     METHOD_VIRTUAL,     // virtual, super
35     METHOD_INTERFACE    // interface
36 } MethodType;
37 
38 /*
39  * Resolve a class, given the referring class and a constant pool index
40  * for the DexTypeId.
41  *
42  * Does not initialize the class.
43  *
44  * Throws an exception and returns NULL on failure.
45  */
46 ClassObject* dvmResolveClass(const ClassObject* referrer, u4 classIdx,
47     bool fromUnverifiedConstant);
48 
49 /*
50  * Resolve a direct, static, or virtual method.
51  *
52  * Can cause the method's class to be initialized if methodType is
53  * METHOD_STATIC.
54  *
55  * Throws an exception and returns NULL on failure.
56  */
57 Method* dvmResolveMethod(const ClassObject* referrer, u4 methodIdx,
58     MethodType methodType);
59 
60 /*
61  * Resolve an interface method.
62  *
63  * Throws an exception and returns NULL on failure.
64  */
65 Method* dvmResolveInterfaceMethod(const ClassObject* referrer, u4 methodIdx);
66 
67 /*
68  * Resolve an instance field.
69  *
70  * Throws an exception and returns NULL on failure.
71  */
72 InstField* dvmResolveInstField(const ClassObject* referrer, u4 ifieldIdx);
73 
74 /*
75  * Resolve a static field.
76  *
77  * Causes the field's class to be initialized.
78  *
79  * Throws an exception and returns NULL on failure.
80  */
81 StaticField* dvmResolveStaticField(const ClassObject* referrer, u4 sfieldIdx);
82 
83 /*
84  * Resolve a "const-string" reference.
85  *
86  * Throws an exception and returns NULL on failure.
87  */
88 StringObject* dvmResolveString(const ClassObject* referrer, u4 stringIdx);
89 
90 /*
91  * Return debug string constant for enum.
92  */
93 const char* dvmMethodTypeStr(MethodType methodType);
94 
95 #endif /*_DALVIK_OO_RESOLVE*/
96