comparison jvmci/jdk.vm.ci.meta/src/jdk/vm/ci/meta/MetaAccessProvider.java @ 22672:1bbd4a7c274b

Rename jdk.internal.jvmci to jdk.vm.ci
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Thu, 08 Oct 2015 17:28:41 -0700
parents jvmci/jdk.internal.jvmci.meta/src/jdk/internal/jvmci/meta/MetaAccessProvider.java@ec96f33a101d
children 1c4b6a7f1917
comparison
equal deleted inserted replaced
22671:97f30e4d0e95 22672:1bbd4a7c274b
1 /*
2 * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23 package jdk.vm.ci.meta;
24
25 import java.lang.reflect.Constructor;
26 import java.lang.reflect.Executable;
27 import java.lang.reflect.Field;
28 import java.lang.reflect.Method;
29
30 /**
31 * Provides access to the metadata of a class typically provided in a class file.
32 */
33 public interface MetaAccessProvider {
34
35 /**
36 * Returns the resolved Java type representing a given Java class.
37 *
38 * @param clazz the Java class object
39 * @return the resolved Java type object
40 */
41 ResolvedJavaType lookupJavaType(Class<?> clazz);
42
43 /**
44 * Returns the resolved Java types representing some given Java classes.
45 *
46 * @param classes the Java class objects
47 * @return the resolved Java type objects
48 */
49 default ResolvedJavaType[] lookupJavaTypes(Class<?>[] classes) {
50 ResolvedJavaType[] result = new ResolvedJavaType[classes.length];
51 for (int i = 0; i < result.length; i++) {
52 result[i] = lookupJavaType(classes[i]);
53 }
54 return result;
55 }
56
57 /**
58 * Provides the {@link ResolvedJavaMethod} for a {@link Method} or {@link Constructor} obtained
59 * via reflection.
60 */
61 ResolvedJavaMethod lookupJavaMethod(Executable reflectionMethod);
62
63 /**
64 * Provides the {@link ResolvedJavaField} for a {@link Field} obtained via reflection.
65 */
66 ResolvedJavaField lookupJavaField(Field reflectionField);
67
68 /**
69 * Returns the resolved Java type of the given {@link JavaConstant} object.
70 *
71 * @return {@code null} if {@code constant.isNull() || !constant.kind.isObject()}
72 */
73 ResolvedJavaType lookupJavaType(JavaConstant constant);
74
75 /**
76 * Returns the number of bytes occupied by this constant value or constant object.
77 *
78 * @param constant the constant whose bytes should be measured
79 * @return the number of bytes occupied by this constant
80 */
81 long getMemorySize(JavaConstant constant);
82
83 /**
84 * Parses a <a
85 * href="http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.3.3">method
86 * descriptor</a> into a {@link Signature}. The behavior of this method is undefined if the
87 * method descriptor is not well formed.
88 */
89 Signature parseMethodDescriptor(String methodDescriptor);
90
91 /**
92 * Encodes a deoptimization action and a deoptimization reason in an integer value.
93 *
94 * @param debugId an integer that can be used to track the origin of a deoptimization at
95 * runtime. There is no guarantee that the runtime will use this value. The runtime
96 * may even keep fewer than 32 bits.
97 *
98 * @return the encoded value as an integer
99 */
100 JavaConstant encodeDeoptActionAndReason(DeoptimizationAction action, DeoptimizationReason reason, int debugId);
101
102 DeoptimizationReason decodeDeoptReason(JavaConstant constant);
103
104 DeoptimizationAction decodeDeoptAction(JavaConstant constant);
105
106 int decodeDebugId(JavaConstant constant);
107 }