Names.java revision 2571:10fc81ac75b4
178189Sbrian/*
278189Sbrian * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
378189Sbrian * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
478189Sbrian *
578189Sbrian * This code is free software; you can redistribute it and/or modify it
66059Samurai * under the terms of the GNU General Public License version 2 only, as
778189Sbrian * published by the Free Software Foundation.  Oracle designates this
878189Sbrian * particular file as subject to the "Classpath" exception as provided
978189Sbrian * by Oracle in the LICENSE file that accompanied this code.
1078189Sbrian *
1178189Sbrian * This code is distributed in the hope that it will be useful, but WITHOUT
1278189Sbrian * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1378189Sbrian * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1478189Sbrian * version 2 for more details (a copy is included in the LICENSE file that
156059Samurai * accompanied this code).
1678189Sbrian *
1778189Sbrian * You should have received a copy of the GNU General Public License version
1878189Sbrian * 2 along with this work; if not, write to the Free Software Foundation,
1978189Sbrian * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2078189Sbrian *
2178189Sbrian * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2278189Sbrian * or visit www.oracle.com if you need additional information or have any
2378189Sbrian * questions.
2478189Sbrian */
2578189Sbrian
2678189Sbrianpackage com.sun.tools.javac.util;
276059Samurai
2850479Speter/**
296059Samurai * Access to the compiler's name table.  STandard names are defined,
306059Samurai * as well as methods to create new names.
316059Samurai *
3254912Sbrian *  <p><b>This is NOT part of any supported API.
33134789Sbrian *  If you write code that depends on this, you do so at your own risk.
3454912Sbrian *  This code and its internal interfaces are subject to change or
3554912Sbrian *  deletion without notice.</b>
3654912Sbrian */
3754912Sbrianpublic class Names {
38131327Sbrian
3938472Sbrian    public static final Context.Key<Names> namesKey = new Context.Key<>();
406059Samurai
416059Samurai    public static Names instance(Context context) {
426059Samurai        Names instance = context.get(namesKey);
436059Samurai        if (instance == null) {
446059Samurai            instance = new Names(context);
4554912Sbrian            context.put(namesKey, instance);
466059Samurai        }
476059Samurai        return instance;
4846828Sbrian    }
49134789Sbrian
506059Samurai    // operators and punctuation
5146828Sbrian    public final Name asterisk;
52134789Sbrian    public final Name comma;
5346828Sbrian    public final Name empty;
5447695Sbrian    public final Name hyphen;
5547695Sbrian    public final Name one;
5681634Sbrian    public final Name period;
5781634Sbrian    public final Name semicolon;
5881634Sbrian    public final Name slash;
5981634Sbrian    public final Name slashequals;
6081634Sbrian
6181634Sbrian    // keywords
6281634Sbrian    public final Name _class;
6381634Sbrian    public final Name _default;
6481634Sbrian    public final Name _super;
6581634Sbrian    public final Name _this;
6681634Sbrian
6781634Sbrian    // field and method names
6881634Sbrian    public final Name _name;
6981634Sbrian    public final Name addSuppressed;
7081634Sbrian    public final Name any;
7181634Sbrian    public final Name append;
7281634Sbrian    public final Name clinit;
7381634Sbrian    public final Name clone;
7481634Sbrian    public final Name close;
7581634Sbrian    public final Name compareTo;
7681634Sbrian    public final Name deserializeLambda;
7781634Sbrian    public final Name desiredAssertionStatus;
7881634Sbrian    public final Name equals;
7981634Sbrian    public final Name error;
8081634Sbrian    public final Name family;
8181634Sbrian    public final Name finalize;
8281634Sbrian    public final Name forName;
8381634Sbrian    public final Name getClass;
8481634Sbrian    public final Name getClassLoader;
8581634Sbrian    public final Name getComponentType;
8681634Sbrian    public final Name getDeclaringClass;
8781634Sbrian    public final Name getMessage;
8881634Sbrian    public final Name hasNext;
8981634Sbrian    public final Name hashCode;
9081634Sbrian    public final Name init;
9181634Sbrian    public final Name initCause;
9281634Sbrian    public final Name iterator;
9381634Sbrian    public final Name length;
9481634Sbrian    public final Name next;
9581634Sbrian    public final Name ordinal;
9681634Sbrian    public final Name serialVersionUID;
9747695Sbrian    public final Name toString;
986059Samurai    public final Name value;
9968596Sbrian    public final Name valueOf;
10054913Sbrian    public final Name values;
10136285Sbrian
10236285Sbrian    // class names
103134789Sbrian    public final Name java_io_Serializable;
10454912Sbrian    public final Name java_lang_AutoCloseable;
10554912Sbrian    public final Name java_lang_Class;
10654912Sbrian    public final Name java_lang_Cloneable;
10746686Sbrian    public final Name java_lang_Enum;
10846686Sbrian    public final Name java_lang_Object;
10946686Sbrian    public final Name java_lang_invoke_MethodHandle;
110134789Sbrian
11154912Sbrian    // names of builtin classes
11254912Sbrian    public final Name Array;
11354912Sbrian    public final Name Bound;
11455353Sbrian    public final Name Method;
11554912Sbrian
11636285Sbrian    // package names
11754912Sbrian    public final Name java_lang;
11854912Sbrian
11954912Sbrian    // attribute names
120    public final Name Annotation;
121    public final Name AnnotationDefault;
122    public final Name BootstrapMethods;
123    public final Name Bridge;
124    public final Name CharacterRangeTable;
125    public final Name Code;
126    public final Name CompilationID;
127    public final Name ConstantValue;
128    public final Name Deprecated;
129    public final Name EnclosingMethod;
130    public final Name Enum;
131    public final Name Exceptions;
132    public final Name InnerClasses;
133    public final Name LineNumberTable;
134    public final Name LocalVariableTable;
135    public final Name LocalVariableTypeTable;
136    public final Name MethodParameters;
137    public final Name RuntimeInvisibleAnnotations;
138    public final Name RuntimeInvisibleParameterAnnotations;
139    public final Name RuntimeInvisibleTypeAnnotations;
140    public final Name RuntimeVisibleAnnotations;
141    public final Name RuntimeVisibleParameterAnnotations;
142    public final Name RuntimeVisibleTypeAnnotations;
143    public final Name Signature;
144    public final Name SourceFile;
145    public final Name SourceID;
146    public final Name StackMap;
147    public final Name StackMapTable;
148    public final Name Synthetic;
149    public final Name Value;
150    public final Name Varargs;
151
152    // members of java.lang.annotation.ElementType
153    public final Name ANNOTATION_TYPE;
154    public final Name CONSTRUCTOR;
155    public final Name FIELD;
156    public final Name LOCAL_VARIABLE;
157    public final Name METHOD;
158    public final Name PACKAGE;
159    public final Name PARAMETER;
160    public final Name TYPE;
161    public final Name TYPE_PARAMETER;
162    public final Name TYPE_USE;
163
164    // members of java.lang.annotation.RetentionPolicy
165    public final Name CLASS;
166    public final Name RUNTIME;
167    public final Name SOURCE;
168
169    // other identifiers
170    public final Name T;
171    public final Name deprecated;
172    public final Name ex;
173    public final Name package_info;
174
175    //lambda-related
176    public final Name lambda;
177    public final Name metafactory;
178    public final Name altMetafactory;
179
180    public final Name.Table table;
181
182    public Names(Context context) {
183        Options options = Options.instance(context);
184        table = createTable(options);
185
186        // operators and punctuation
187        asterisk = fromString("*");
188        comma = fromString(",");
189        empty = fromString("");
190        hyphen = fromString("-");
191        one = fromString("1");
192        period = fromString(".");
193        semicolon = fromString(";");
194        slash = fromString("/");
195        slashequals = fromString("/=");
196
197        // keywords
198        _class = fromString("class");
199        _default = fromString("default");
200        _super = fromString("super");
201        _this = fromString("this");
202
203        // field and method names
204        _name = fromString("name");
205        addSuppressed = fromString("addSuppressed");
206        any = fromString("<any>");
207        append = fromString("append");
208        clinit = fromString("<clinit>");
209        clone = fromString("clone");
210        close = fromString("close");
211        compareTo = fromString("compareTo");
212        deserializeLambda = fromString("$deserializeLambda$");
213        desiredAssertionStatus = fromString("desiredAssertionStatus");
214        equals = fromString("equals");
215        error = fromString("<error>");
216        family = fromString("family");
217        finalize = fromString("finalize");
218        forName = fromString("forName");
219        getClass = fromString("getClass");
220        getClassLoader = fromString("getClassLoader");
221        getComponentType = fromString("getComponentType");
222        getDeclaringClass = fromString("getDeclaringClass");
223        getMessage = fromString("getMessage");
224        hasNext = fromString("hasNext");
225        hashCode = fromString("hashCode");
226        init = fromString("<init>");
227        initCause = fromString("initCause");
228        iterator = fromString("iterator");
229        length = fromString("length");
230        next = fromString("next");
231        ordinal = fromString("ordinal");
232        serialVersionUID = fromString("serialVersionUID");
233        toString = fromString("toString");
234        value = fromString("value");
235        valueOf = fromString("valueOf");
236        values = fromString("values");
237
238        // class names
239        java_io_Serializable = fromString("java.io.Serializable");
240        java_lang_AutoCloseable = fromString("java.lang.AutoCloseable");
241        java_lang_Class = fromString("java.lang.Class");
242        java_lang_Cloneable = fromString("java.lang.Cloneable");
243        java_lang_Enum = fromString("java.lang.Enum");
244        java_lang_Object = fromString("java.lang.Object");
245        java_lang_invoke_MethodHandle = fromString("java.lang.invoke.MethodHandle");
246
247        // names of builtin classes
248        Array = fromString("Array");
249        Bound = fromString("Bound");
250        Method = fromString("Method");
251
252        // package names
253        java_lang = fromString("java.lang");
254
255        // attribute names
256        Annotation = fromString("Annotation");
257        AnnotationDefault = fromString("AnnotationDefault");
258        BootstrapMethods = fromString("BootstrapMethods");
259        Bridge = fromString("Bridge");
260        CharacterRangeTable = fromString("CharacterRangeTable");
261        Code = fromString("Code");
262        CompilationID = fromString("CompilationID");
263        ConstantValue = fromString("ConstantValue");
264        Deprecated = fromString("Deprecated");
265        EnclosingMethod = fromString("EnclosingMethod");
266        Enum = fromString("Enum");
267        Exceptions = fromString("Exceptions");
268        InnerClasses = fromString("InnerClasses");
269        LineNumberTable = fromString("LineNumberTable");
270        LocalVariableTable = fromString("LocalVariableTable");
271        LocalVariableTypeTable = fromString("LocalVariableTypeTable");
272        MethodParameters = fromString("MethodParameters");
273        RuntimeInvisibleAnnotations = fromString("RuntimeInvisibleAnnotations");
274        RuntimeInvisibleParameterAnnotations = fromString("RuntimeInvisibleParameterAnnotations");
275        RuntimeInvisibleTypeAnnotations = fromString("RuntimeInvisibleTypeAnnotations");
276        RuntimeVisibleAnnotations = fromString("RuntimeVisibleAnnotations");
277        RuntimeVisibleParameterAnnotations = fromString("RuntimeVisibleParameterAnnotations");
278        RuntimeVisibleTypeAnnotations = fromString("RuntimeVisibleTypeAnnotations");
279        Signature = fromString("Signature");
280        SourceFile = fromString("SourceFile");
281        SourceID = fromString("SourceID");
282        StackMap = fromString("StackMap");
283        StackMapTable = fromString("StackMapTable");
284        Synthetic = fromString("Synthetic");
285        Value = fromString("Value");
286        Varargs = fromString("Varargs");
287
288        // members of java.lang.annotation.ElementType
289        ANNOTATION_TYPE = fromString("ANNOTATION_TYPE");
290        CONSTRUCTOR = fromString("CONSTRUCTOR");
291        FIELD = fromString("FIELD");
292        LOCAL_VARIABLE = fromString("LOCAL_VARIABLE");
293        METHOD = fromString("METHOD");
294        PACKAGE = fromString("PACKAGE");
295        PARAMETER = fromString("PARAMETER");
296        TYPE = fromString("TYPE");
297        TYPE_PARAMETER = fromString("TYPE_PARAMETER");
298        TYPE_USE = fromString("TYPE_USE");
299
300        // members of java.lang.annotation.RetentionPolicy
301        CLASS = fromString("CLASS");
302        RUNTIME = fromString("RUNTIME");
303        SOURCE = fromString("SOURCE");
304
305        // other identifiers
306        T = fromString("T");
307        deprecated = fromString("deprecated");
308        ex = fromString("ex");
309        package_info = fromString("package-info");
310
311        //lambda-related
312        lambda = fromString("lambda$");
313        metafactory = fromString("metafactory");
314        altMetafactory = fromString("altMetafactory");
315    }
316
317    protected Name.Table createTable(Options options) {
318        boolean useUnsharedTable = options.isSet("useUnsharedTable");
319        if (useUnsharedTable)
320            return UnsharedNameTable.create(this);
321        else
322            return SharedNameTable.create(this);
323    }
324
325    public void dispose() {
326        table.dispose();
327    }
328
329    public Name fromChars(char[] cs, int start, int len) {
330        return table.fromChars(cs, start, len);
331    }
332
333    public Name fromString(String s) {
334        return table.fromString(s);
335    }
336
337    public Name fromUtf(byte[] cs) {
338        return table.fromUtf(cs);
339    }
340
341    public Name fromUtf(byte[] cs, int start, int len) {
342        return table.fromUtf(cs, start, len);
343    }
344}
345