25 #ifndef SHARE_VM_RUNTIME_REFLECTION_HPP |
25 #ifndef SHARE_VM_RUNTIME_REFLECTION_HPP |
26 #define SHARE_VM_RUNTIME_REFLECTION_HPP |
26 #define SHARE_VM_RUNTIME_REFLECTION_HPP |
27 |
27 |
28 #include "oops/oop.hpp" |
28 #include "oops/oop.hpp" |
29 #include "runtime/fieldDescriptor.hpp" |
29 #include "runtime/fieldDescriptor.hpp" |
30 #include "runtime/reflectionCompat.hpp" |
|
31 #include "utilities/accessFlags.hpp" |
30 #include "utilities/accessFlags.hpp" |
32 #include "utilities/growableArray.hpp" |
31 #include "utilities/growableArray.hpp" |
33 |
32 |
34 // Class Reflection contains utility methods needed for implementing the |
33 // Class Reflection contains utility methods needed for implementing the |
35 // reflection api. |
34 // reflection api. |
118 // Create a java.lang.reflect.Constructor object based on a method |
117 // Create a java.lang.reflect.Constructor object based on a method |
119 static oop new_constructor(methodHandle method, TRAPS); |
118 static oop new_constructor(methodHandle method, TRAPS); |
120 // Create a java.lang.reflect.Field object based on a field descriptor |
119 // Create a java.lang.reflect.Field object based on a field descriptor |
121 static oop new_field(fieldDescriptor* fd, bool intern_name, TRAPS); |
120 static oop new_field(fieldDescriptor* fd, bool intern_name, TRAPS); |
122 |
121 |
123 //--------------------------------------------------------------------------- |
|
124 // |
|
125 // Support for old native code-based reflection (pre-JDK 1.4) |
|
126 // |
|
127 // NOTE: the method and constructor invocation code is still used |
|
128 // for startup time reasons; see reflectionCompat.hpp. |
|
129 // |
|
130 //--------------------------------------------------------------------------- |
|
131 |
|
132 #ifdef SUPPORT_OLD_REFLECTION |
|
133 private: |
122 private: |
134 // method resolution for invoke |
123 // method resolution for invoke |
135 static methodHandle resolve_interface_call(instanceKlassHandle klass, methodHandle method, KlassHandle recv_klass, Handle receiver, TRAPS); |
124 static methodHandle resolve_interface_call(instanceKlassHandle klass, methodHandle method, KlassHandle recv_klass, Handle receiver, TRAPS); |
136 // Method call (shared by invoke_method and invoke_constructor) |
125 // Method call (shared by invoke_method and invoke_constructor) |
137 static oop invoke(instanceKlassHandle klass, methodHandle method, Handle receiver, bool override, objArrayHandle ptypes, BasicType rtype, objArrayHandle args, bool is_method_invoke, TRAPS); |
126 static oop invoke(instanceKlassHandle klass, methodHandle method, Handle receiver, bool override, objArrayHandle ptypes, BasicType rtype, objArrayHandle args, bool is_method_invoke, TRAPS); |
142 static void narrow(jvalue* value, BasicType narrow_type, TRAPS); |
131 static void narrow(jvalue* value, BasicType narrow_type, TRAPS); |
143 |
132 |
144 // Conversion |
133 // Conversion |
145 static BasicType basic_type_mirror_to_basic_type(oop basic_type_mirror, TRAPS); |
134 static BasicType basic_type_mirror_to_basic_type(oop basic_type_mirror, TRAPS); |
146 |
135 |
147 static bool match_parameter_types(methodHandle method, objArrayHandle types, int parameter_count, TRAPS); |
|
148 // Creating new java.lang.reflect.xxx wrappers |
|
149 static oop new_field(FieldStream* st, TRAPS); |
|
150 |
|
151 public: |
136 public: |
152 // Field lookup and verification. |
|
153 static bool resolve_field(Handle field_mirror, Handle& receiver, fieldDescriptor* fd, bool check_final, TRAPS); |
|
154 |
|
155 // Reflective field access. Returns type code. Throws IllegalArgumentException. |
|
156 static BasicType field_get(jvalue* value, fieldDescriptor* fd, Handle receiver); |
|
157 static void field_set(jvalue* value, fieldDescriptor* fd, Handle receiver, BasicType value_type, TRAPS); |
|
158 |
|
159 // Reflective lookup of fields. Returns java.lang.reflect.Field instances. |
|
160 static oop reflect_field(oop mirror, Symbol* field_name, jint which, TRAPS); |
|
161 static objArrayOop reflect_fields(oop mirror, jint which, TRAPS); |
|
162 |
|
163 // Reflective lookup of methods. Returns java.lang.reflect.Method instances. |
|
164 static oop reflect_method(oop mirror, Symbol* method_name, objArrayHandle types, jint which, TRAPS); |
|
165 static objArrayOop reflect_methods(oop mirror, jint which, TRAPS); |
|
166 |
|
167 // Reflective lookup of constructors. Returns java.lang.reflect.Constructor instances. |
|
168 static oop reflect_constructor(oop mirror, objArrayHandle types, jint which, TRAPS); |
|
169 static objArrayOop reflect_constructors(oop mirror, jint which, TRAPS); |
|
170 |
|
171 // Method invokation through java.lang.reflect.Method |
137 // Method invokation through java.lang.reflect.Method |
172 static oop invoke_method(oop method_mirror, Handle receiver, objArrayHandle args, TRAPS); |
138 static oop invoke_method(oop method_mirror, Handle receiver, objArrayHandle args, TRAPS); |
173 // Method invokation through java.lang.reflect.Constructor |
139 // Method invokation through java.lang.reflect.Constructor |
174 static oop invoke_constructor(oop method_mirror, objArrayHandle args, TRAPS); |
140 static oop invoke_constructor(oop method_mirror, objArrayHandle args, TRAPS); |
175 #endif /* SUPPORT_OLD_REFLECTION */ |
|
176 |
141 |
177 }; |
142 }; |
178 |
143 |
179 #endif // SHARE_VM_RUNTIME_REFLECTION_HPP |
144 #endif // SHARE_VM_RUNTIME_REFLECTION_HPP |