001: /*
002: * Copyright 2003-2004 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package sun.reflect;
027:
028: import java.lang.reflect.*;
029:
030: /** Provides reflective access to the constant pools of classes.
031: Currently this is needed to provide reflective access to annotations
032: but may be used by other internal subsystems in the future. */
033:
034: public class ConstantPool {
035: // Number of entries in this constant pool (= maximum valid constant pool index)
036: public int getSize() {
037: return getSize0(constantPoolOop);
038: }
039:
040: public Class getClassAt(int index) {
041: return getClassAt0(constantPoolOop, index);
042: }
043:
044: public Class getClassAtIfLoaded(int index) {
045: return getClassAtIfLoaded0(constantPoolOop, index);
046: }
047:
048: // Returns either a Method or Constructor.
049: // Static initializers are returned as Method objects.
050: public Member getMethodAt(int index) {
051: return getMethodAt0(constantPoolOop, index);
052: }
053:
054: public Member getMethodAtIfLoaded(int index) {
055: return getMethodAtIfLoaded0(constantPoolOop, index);
056: }
057:
058: public Field getFieldAt(int index) {
059: return getFieldAt0(constantPoolOop, index);
060: }
061:
062: public Field getFieldAtIfLoaded(int index) {
063: return getFieldAtIfLoaded0(constantPoolOop, index);
064: }
065:
066: // Fetches the class name, member (field, method or interface
067: // method) name, and type descriptor as an array of three Strings
068: public String[] getMemberRefInfoAt(int index) {
069: return getMemberRefInfoAt0(constantPoolOop, index);
070: }
071:
072: public int getIntAt(int index) {
073: return getIntAt0(constantPoolOop, index);
074: }
075:
076: public long getLongAt(int index) {
077: return getLongAt0(constantPoolOop, index);
078: }
079:
080: public float getFloatAt(int index) {
081: return getFloatAt0(constantPoolOop, index);
082: }
083:
084: public double getDoubleAt(int index) {
085: return getDoubleAt0(constantPoolOop, index);
086: }
087:
088: public String getStringAt(int index) {
089: return getStringAt0(constantPoolOop, index);
090: }
091:
092: public String getUTF8At(int index) {
093: return getUTF8At0(constantPoolOop, index);
094: }
095:
096: //---------------------------------------------------------------------------
097: // Internals only below this point
098: //
099:
100: static {
101: Reflection.registerFieldsToFilter(ConstantPool.class,
102: new String[] { "constantPoolOop" });
103: }
104:
105: // HotSpot-internal constant pool object (set by the VM, name known to the VM)
106: private Object constantPoolOop;
107:
108: private native int getSize0(Object constantPoolOop);
109:
110: private native Class getClassAt0(Object constantPoolOop, int index);
111:
112: private native Class getClassAtIfLoaded0(Object constantPoolOop,
113: int index);
114:
115: private native Member getMethodAt0(Object constantPoolOop, int index);
116:
117: private native Member getMethodAtIfLoaded0(Object constantPoolOop,
118: int index);
119:
120: private native Field getFieldAt0(Object constantPoolOop, int index);
121:
122: private native Field getFieldAtIfLoaded0(Object constantPoolOop,
123: int index);
124:
125: private native String[] getMemberRefInfoAt0(Object constantPoolOop,
126: int index);
127:
128: private native int getIntAt0(Object constantPoolOop, int index);
129:
130: private native long getLongAt0(Object constantPoolOop, int index);
131:
132: private native float getFloatAt0(Object constantPoolOop, int index);
133:
134: private native double getDoubleAt0(Object constantPoolOop, int index);
135:
136: private native String getStringAt0(Object constantPoolOop, int index);
137:
138: private native String getUTF8At0(Object constantPoolOop, int index);
139: }
|