View Javadoc
1   /*
2    * Copyright (c) 2002, 2013, 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   */
24  
25  package sun.jvm.hotspot.runtime;
26  
27  public interface ClassConstants
28  {
29      // constant pool constant types - from JVM spec.
30  
31      public static final int JVM_CONSTANT_Utf8               = 1;
32      public static final int JVM_CONSTANT_Unicode            = 2; // unused
33      public static final int JVM_CONSTANT_Integer            = 3;
34      public static final int JVM_CONSTANT_Float              = 4;
35      public static final int JVM_CONSTANT_Long               = 5;
36      public static final int JVM_CONSTANT_Double             = 6;
37      public static final int JVM_CONSTANT_Class              = 7;
38      public static final int JVM_CONSTANT_String             = 8;
39      public static final int JVM_CONSTANT_Fieldref           = 9;
40      public static final int JVM_CONSTANT_Methodref          = 10;
41      public static final int JVM_CONSTANT_InterfaceMethodref = 11;
42      public static final int JVM_CONSTANT_NameAndType        = 12;
43      public static final int JVM_CONSTANT_MethodHandle       = 15;
44      public static final int JVM_CONSTANT_MethodType         = 16;
45      //     static final int JVM_CONSTANT_(unused)           = 17;
46      public static final int JVM_CONSTANT_InvokeDynamic      = 18;
47  
48      // JVM_CONSTANT_MethodHandle subtypes
49      public static final int JVM_REF_getField                = 1;
50      public static final int JVM_REF_getStatic               = 2;
51      public static final int JVM_REF_putField                = 3;
52      public static final int JVM_REF_putStatic               = 4;
53      public static final int JVM_REF_invokeVirtual           = 5;
54      public static final int JVM_REF_invokeStatic            = 6;
55      public static final int JVM_REF_invokeSpecial           = 7;
56      public static final int JVM_REF_newInvokeSpecial        = 8;
57      public static final int JVM_REF_invokeInterface         = 9;
58  
59      // HotSpot specific constant pool constant types.
60  
61      // For bad value initialization
62      public static final int JVM_CONSTANT_Invalid            = 0;
63  
64      public static final int JVM_CONSTANT_UnresolvedClass          = 100;  // Temporary tag until actual use
65      public static final int JVM_CONSTANT_ClassIndex               = 101;  // Temporary tag while constructing constant pool
66      public static final int JVM_CONSTANT_StringIndex              = 102;  // Temporary tag while constructing constant pool
67      public static final int JVM_CONSTANT_UnresolvedClassInError   = 103;  // Error tag due to resolution error
68      public static final int JVM_CONSTANT_MethodHandleInError      = 104;  // Error tag due to resolution error
69      public static final int JVM_CONSTANT_MethodTypeInError        = 105;  // Error tag due to resolution error
70  
71      // 1.5 major/minor version numbers from JVM spec. 3rd edition
72      public static final short MAJOR_VERSION = 49;
73      public static final short MINOR_VERSION = 0;
74  
75      public static final short MAJOR_VERSION_OLD = 46;
76      public static final short MINOR_VERSION_OLD = 0;
77  
78      // From jvm.h
79      public static final long JVM_ACC_PUBLIC       = 0x0001; /* visible to everyone */
80      public static final long JVM_ACC_PRIVATE      = 0x0002; /* visible only to the defining class */
81      public static final long JVM_ACC_PROTECTED    = 0x0004; /* visible to subclasses */
82      public static final long JVM_ACC_STATIC       = 0x0008; /* instance variable is static */
83      public static final long JVM_ACC_FINAL        = 0x0010; /* no further subclassing, overriding */
84      public static final long JVM_ACC_SYNCHRONIZED = 0x0020; /* wrap method call in monitor lock */
85      public static final long JVM_ACC_SUPER        = 0x0020; /* funky handling of invokespecial */
86      public static final long JVM_ACC_VOLATILE     = 0x0040; /* can not cache in registers */
87      public static final long JVM_ACC_BRIDGE       = 0x0040; /* bridge method generated by compiler */
88      public static final long JVM_ACC_TRANSIENT    = 0x0080; /* not persistant */
89      public static final long JVM_ACC_VARARGS      = 0x0080; /* method declared with variable number of args */
90      public static final long JVM_ACC_NATIVE       = 0x0100; /* implemented in C */
91      public static final long JVM_ACC_INTERFACE    = 0x0200; /* class is an interface */
92      public static final long JVM_ACC_ABSTRACT     = 0x0400; /* no definition provided */
93      public static final long JVM_ACC_STRICT       = 0x0800; /* strict floating point */
94      public static final long JVM_ACC_SYNTHETIC    = 0x1000; /* compiler-generated class, method or field */
95      public static final long JVM_ACC_ANNOTATION   = 0x2000; /* annotation type */
96      public static final long JVM_ACC_ENUM         = 0x4000; /* field is declared as element of enum */
97  
98  
99      // from accessFlags.hpp - hotspot internal flags
100 
101     // flags actually put in .class file
102     public static final long JVM_ACC_WRITTEN_FLAGS = 0x00007FFF;
103 
104     // Method* flags
105     // monitorenter/monitorexit bytecodes match
106     public static final long JVM_ACC_MONITOR_MATCH = 0x10000000;
107     // Method contains monitorenter/monitorexit bytecodes
108     public static final long JVM_ACC_HAS_MONITOR_BYTECODES = 0x20000000;
109     // Method has loops
110     public static final long JVM_ACC_HAS_LOOPS             = 0x40000000;
111     // The loop flag has been initialized
112     public static final long JVM_ACC_LOOPS_FLAG_INIT       = (int)0x80000000;
113     // Queued for compilation
114     public static final long JVM_ACC_QUEUED                = 0x01000000;
115     // TEMPORARY: currently on stack replacement compilation is not built into the
116     // invocation counter machinery.  Until it is, we will keep track of methods which
117     // cannot be on stack replaced in the access flags.
118     public static final long JVM_ACC_NOT_OSR_COMPILABLE     = 0x08000000;
119     public static final long JVM_ACC_HAS_LINE_NUMBER_TABLE  = 0x00100000;
120     public static final long JVM_ACC_HAS_CHECKED_EXCEPTIONS = 0x00400000;
121     public static final long JVM_ACC_HAS_JSRS               = 0x00800000;
122     // RedefineClasses() has made method obsolete
123     public static final long JVM_ACC_IS_OBSOLETE            = 0x00010000;
124 
125     // Klass* flags
126     // True if this class has miranda methods in it's vtable
127     public static final long JVM_ACC_HAS_MIRANDA_METHODS      = 0x10000000;
128     // True if klass has a vanilla default constructor
129     public static final long JVM_ACC_HAS_VANILLA_CONSTRUCTOR  = 0x20000000;
130     // True if klass has a non-empty finalize() method
131     public static final long JVM_ACC_HAS_FINALIZER            = 0x40000000;
132     // True if klass supports the Clonable interface
133     public static final long JVM_ACC_IS_CLONEABLE             = 0x80000000;
134 
135     // Klass* and Method* flags
136     public static final long JVM_ACC_HAS_LOCAL_VARIABLE_TABLE = 0x00200000;
137     // flags promoted from methods to the holding klass
138     public static final long JVM_ACC_PROMOTED_FLAGS           = 0x00200000;
139 
140     // field flags
141     // Note: these flags must be defined in the low order 16 bits because
142     // InstanceKlass only stores a ushort worth of information from the
143     // AccessFlags value.
144     // field access is watched by JVMTI
145     public static final long JVM_ACC_FIELD_ACCESS_WATCHED         = 0x00002000;
146     // field modification is watched by JVMTI
147     public static final long JVM_ACC_FIELD_MODIFICATION_WATCHED   = 0x00008000;
148     // field has generic signature
149     public static final long JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE  = 0x00000800;
150 
151     // flags accepted by set_field_flags
152     public static final long JVM_ACC_FIELD_FLAGS = 0x00008000 | JVM_ACC_WRITTEN_FLAGS;
153 
154     // from jvm.h
155 
156     public static final long JVM_RECOGNIZED_CLASS_MODIFIERS   = (JVM_ACC_PUBLIC |
157                                                                  JVM_ACC_FINAL |
158                                                                  JVM_ACC_SUPER |
159                                                                  JVM_ACC_INTERFACE |
160                                                                  JVM_ACC_ABSTRACT |
161                                                                  JVM_ACC_ANNOTATION |
162                                                                  JVM_ACC_ENUM |
163                                                                  JVM_ACC_SYNTHETIC);
164 
165 
166     public static final long JVM_RECOGNIZED_FIELD_MODIFIERS  = (JVM_ACC_PUBLIC |
167                                                                 JVM_ACC_PRIVATE |
168                                                                 JVM_ACC_PROTECTED |
169                                                                 JVM_ACC_STATIC |
170                                                                 JVM_ACC_FINAL |
171                                                                 JVM_ACC_VOLATILE |
172                                                                 JVM_ACC_TRANSIENT |
173                                                                 JVM_ACC_ENUM |
174                                                                 JVM_ACC_SYNTHETIC);
175 
176     public static final long JVM_RECOGNIZED_METHOD_MODIFIERS  = (JVM_ACC_PUBLIC |
177                                                                  JVM_ACC_PRIVATE |
178                                                                  JVM_ACC_PROTECTED |
179                                                                  JVM_ACC_STATIC |
180                                                                  JVM_ACC_FINAL |
181                                                                  JVM_ACC_SYNCHRONIZED |
182                                                                  JVM_ACC_BRIDGE |
183                                                                  JVM_ACC_VARARGS |
184                                                                  JVM_ACC_NATIVE |
185                                                                  JVM_ACC_ABSTRACT |
186                                                                  JVM_ACC_STRICT |
187                                                                  JVM_ACC_SYNTHETIC);
188 }