Names.java revision 3792:d516975e8110
1/*
2 * Copyright (c) 1999, 2016, 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.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package com.sun.tools.javac.util;
27
28/**
29 * Access to the compiler's name table.  STandard names are defined,
30 * as well as methods to create new names.
31 *
32 *  <p><b>This is NOT part of any supported API.
33 *  If you write code that depends on this, you do so at your own risk.
34 *  This code and its internal interfaces are subject to change or
35 *  deletion without notice.</b>
36 */
37public class Names {
38
39    public static final Context.Key<Names> namesKey = new Context.Key<>();
40
41    public static Names instance(Context context) {
42        Names instance = context.get(namesKey);
43        if (instance == null) {
44            instance = new Names(context);
45            context.put(namesKey, instance);
46        }
47        return instance;
48    }
49
50    // operators and punctuation
51    public final Name asterisk;
52    public final Name comma;
53    public final Name empty;
54    public final Name hyphen;
55    public final Name one;
56    public final Name period;
57    public final Name semicolon;
58    public final Name slash;
59    public final Name slashequals;
60
61    // keywords
62    public final Name _class;
63    public final Name _default;
64    public final Name _super;
65    public final Name _this;
66    public final Name exports;
67    public final Name opens;
68    public final Name module;
69    public final Name provides;
70    public final Name requires;
71    public final Name to;
72    public final Name transitive;
73    public final Name uses;
74    public final Name open;
75    public final Name with;
76
77    // field and method names
78    public final Name _name;
79    public final Name addSuppressed;
80    public final Name any;
81    public final Name append;
82    public final Name clinit;
83    public final Name clone;
84    public final Name close;
85    public final Name compareTo;
86    public final Name deserializeLambda;
87    public final Name desiredAssertionStatus;
88    public final Name equals;
89    public final Name error;
90    public final Name family;
91    public final Name finalize;
92    public final Name forName;
93    public final Name forRemoval;
94    public final Name getClass;
95    public final Name getClassLoader;
96    public final Name getComponentType;
97    public final Name getDeclaringClass;
98    public final Name getMessage;
99    public final Name hasNext;
100    public final Name hashCode;
101    public final Name init;
102    public final Name initCause;
103    public final Name iterator;
104    public final Name length;
105    public final Name next;
106    public final Name ordinal;
107    public final Name provider;
108    public final Name serialVersionUID;
109    public final Name toString;
110    public final Name value;
111    public final Name valueOf;
112    public final Name values;
113
114    // class names
115    public final Name java_io_Serializable;
116    public final Name java_lang_AutoCloseable;
117    public final Name java_lang_Class;
118    public final Name java_lang_Cloneable;
119    public final Name java_lang_Enum;
120    public final Name java_lang_Object;
121    public final Name java_lang_invoke_MethodHandle;
122
123    // names of builtin classes
124    public final Name Array;
125    public final Name Bound;
126    public final Name Method;
127
128    // package names
129    public final Name java_lang;
130
131    // module names
132    public final Name java_base;
133
134    // attribute names
135    public final Name Annotation;
136    public final Name AnnotationDefault;
137    public final Name BootstrapMethods;
138    public final Name Bridge;
139    public final Name CharacterRangeTable;
140    public final Name Code;
141    public final Name CompilationID;
142    public final Name ConstantValue;
143    public final Name Deprecated;
144    public final Name EnclosingMethod;
145    public final Name Enum;
146    public final Name Exceptions;
147    public final Name InnerClasses;
148    public final Name LineNumberTable;
149    public final Name LocalVariableTable;
150    public final Name LocalVariableTypeTable;
151    public final Name MethodParameters;
152    public final Name Module;
153    public final Name ModuleVersion;
154    public final Name RuntimeInvisibleAnnotations;
155    public final Name RuntimeInvisibleParameterAnnotations;
156    public final Name RuntimeInvisibleTypeAnnotations;
157    public final Name RuntimeVisibleAnnotations;
158    public final Name RuntimeVisibleParameterAnnotations;
159    public final Name RuntimeVisibleTypeAnnotations;
160    public final Name Signature;
161    public final Name SourceFile;
162    public final Name SourceID;
163    public final Name StackMap;
164    public final Name StackMapTable;
165    public final Name Synthetic;
166    public final Name Value;
167    public final Name Varargs;
168
169    // members of java.lang.annotation.ElementType
170    public final Name ANNOTATION_TYPE;
171    public final Name CONSTRUCTOR;
172    public final Name FIELD;
173    public final Name LOCAL_VARIABLE;
174    public final Name METHOD;
175    public final Name MODULE;
176    public final Name PACKAGE;
177    public final Name PARAMETER;
178    public final Name TYPE;
179    public final Name TYPE_PARAMETER;
180    public final Name TYPE_USE;
181
182    // members of java.lang.annotation.RetentionPolicy
183    public final Name CLASS;
184    public final Name RUNTIME;
185    public final Name SOURCE;
186
187    // other identifiers
188    public final Name T;
189    public final Name deprecated;
190    public final Name ex;
191    public final Name module_info;
192    public final Name package_info;
193    public final Name requireNonNull;
194
195    // lambda-related
196    public final Name lambda;
197    public final Name metafactory;
198    public final Name altMetafactory;
199    public final Name dollarThis;
200
201    // string concat
202    public final Name makeConcat;
203    public final Name makeConcatWithConstants;
204
205    public final Name.Table table;
206
207    public Names(Context context) {
208        Options options = Options.instance(context);
209        table = createTable(options);
210
211        // operators and punctuation
212        asterisk = fromString("*");
213        comma = fromString(",");
214        empty = fromString("");
215        hyphen = fromString("-");
216        one = fromString("1");
217        period = fromString(".");
218        semicolon = fromString(";");
219        slash = fromString("/");
220        slashequals = fromString("/=");
221
222        // keywords
223        _class = fromString("class");
224        _default = fromString("default");
225        _super = fromString("super");
226        _this = fromString("this");
227        exports = fromString("exports");
228        opens = fromString("opens");
229        module = fromString("module");
230        provides = fromString("provides");
231        requires = fromString("requires");
232        to = fromString("to");
233        transitive = fromString("transitive");
234        uses = fromString("uses");
235        open = fromString("open");
236        with = fromString("with");
237
238        // field and method names
239        _name = fromString("name");
240        addSuppressed = fromString("addSuppressed");
241        any = fromString("<any>");
242        append = fromString("append");
243        clinit = fromString("<clinit>");
244        clone = fromString("clone");
245        close = fromString("close");
246        compareTo = fromString("compareTo");
247        deserializeLambda = fromString("$deserializeLambda$");
248        desiredAssertionStatus = fromString("desiredAssertionStatus");
249        equals = fromString("equals");
250        error = fromString("<error>");
251        family = fromString("family");
252        finalize = fromString("finalize");
253        forName = fromString("forName");
254        forRemoval = fromString("forRemoval");
255        getClass = fromString("getClass");
256        getClassLoader = fromString("getClassLoader");
257        getComponentType = fromString("getComponentType");
258        getDeclaringClass = fromString("getDeclaringClass");
259        getMessage = fromString("getMessage");
260        hasNext = fromString("hasNext");
261        hashCode = fromString("hashCode");
262        init = fromString("<init>");
263        initCause = fromString("initCause");
264        iterator = fromString("iterator");
265        length = fromString("length");
266        next = fromString("next");
267        ordinal = fromString("ordinal");
268        provider = fromString("provider");
269        serialVersionUID = fromString("serialVersionUID");
270        toString = fromString("toString");
271        value = fromString("value");
272        valueOf = fromString("valueOf");
273        values = fromString("values");
274        dollarThis = fromString("$this");
275
276        // class names
277        java_io_Serializable = fromString("java.io.Serializable");
278        java_lang_AutoCloseable = fromString("java.lang.AutoCloseable");
279        java_lang_Class = fromString("java.lang.Class");
280        java_lang_Cloneable = fromString("java.lang.Cloneable");
281        java_lang_Enum = fromString("java.lang.Enum");
282        java_lang_Object = fromString("java.lang.Object");
283        java_lang_invoke_MethodHandle = fromString("java.lang.invoke.MethodHandle");
284
285        // names of builtin classes
286        Array = fromString("Array");
287        Bound = fromString("Bound");
288        Method = fromString("Method");
289
290        // package names
291        java_lang = fromString("java.lang");
292
293        // module names
294        java_base = fromString("java.base");
295
296        // attribute names
297        Annotation = fromString("Annotation");
298        AnnotationDefault = fromString("AnnotationDefault");
299        BootstrapMethods = fromString("BootstrapMethods");
300        Bridge = fromString("Bridge");
301        CharacterRangeTable = fromString("CharacterRangeTable");
302        Code = fromString("Code");
303        CompilationID = fromString("CompilationID");
304        ConstantValue = fromString("ConstantValue");
305        Deprecated = fromString("Deprecated");
306        EnclosingMethod = fromString("EnclosingMethod");
307        Enum = fromString("Enum");
308        Exceptions = fromString("Exceptions");
309        InnerClasses = fromString("InnerClasses");
310        LineNumberTable = fromString("LineNumberTable");
311        LocalVariableTable = fromString("LocalVariableTable");
312        LocalVariableTypeTable = fromString("LocalVariableTypeTable");
313        MethodParameters = fromString("MethodParameters");
314        Module = fromString("Module");
315        ModuleVersion = fromString("ModuleVersion");
316        RuntimeInvisibleAnnotations = fromString("RuntimeInvisibleAnnotations");
317        RuntimeInvisibleParameterAnnotations = fromString("RuntimeInvisibleParameterAnnotations");
318        RuntimeInvisibleTypeAnnotations = fromString("RuntimeInvisibleTypeAnnotations");
319        RuntimeVisibleAnnotations = fromString("RuntimeVisibleAnnotations");
320        RuntimeVisibleParameterAnnotations = fromString("RuntimeVisibleParameterAnnotations");
321        RuntimeVisibleTypeAnnotations = fromString("RuntimeVisibleTypeAnnotations");
322        Signature = fromString("Signature");
323        SourceFile = fromString("SourceFile");
324        SourceID = fromString("SourceID");
325        StackMap = fromString("StackMap");
326        StackMapTable = fromString("StackMapTable");
327        Synthetic = fromString("Synthetic");
328        Value = fromString("Value");
329        Varargs = fromString("Varargs");
330
331        // members of java.lang.annotation.ElementType
332        ANNOTATION_TYPE = fromString("ANNOTATION_TYPE");
333        CONSTRUCTOR = fromString("CONSTRUCTOR");
334        FIELD = fromString("FIELD");
335        LOCAL_VARIABLE = fromString("LOCAL_VARIABLE");
336        METHOD = fromString("METHOD");
337        MODULE = fromString("MODULE");
338        PACKAGE = fromString("PACKAGE");
339        PARAMETER = fromString("PARAMETER");
340        TYPE = fromString("TYPE");
341        TYPE_PARAMETER = fromString("TYPE_PARAMETER");
342        TYPE_USE = fromString("TYPE_USE");
343
344        // members of java.lang.annotation.RetentionPolicy
345        CLASS = fromString("CLASS");
346        RUNTIME = fromString("RUNTIME");
347        SOURCE = fromString("SOURCE");
348
349        // other identifiers
350        T = fromString("T");
351        deprecated = fromString("deprecated");
352        ex = fromString("ex");
353        module_info = fromString("module-info");
354        package_info = fromString("package-info");
355        requireNonNull = fromString("requireNonNull");
356
357        //lambda-related
358        lambda = fromString("lambda$");
359        metafactory = fromString("metafactory");
360        altMetafactory = fromString("altMetafactory");
361
362        // string concat
363        makeConcat = fromString("makeConcat");
364        makeConcatWithConstants = fromString("makeConcatWithConstants");
365    }
366
367    protected Name.Table createTable(Options options) {
368        boolean useUnsharedTable = options.isSet("useUnsharedTable");
369        if (useUnsharedTable)
370            return UnsharedNameTable.create(this);
371        else
372            return SharedNameTable.create(this);
373    }
374
375    public void dispose() {
376        table.dispose();
377    }
378
379    public Name fromChars(char[] cs, int start, int len) {
380        return table.fromChars(cs, start, len);
381    }
382
383    public Name fromString(String s) {
384        return table.fromString(s);
385    }
386
387    public Name fromUtf(byte[] cs) {
388        return table.fromUtf(cs);
389    }
390
391    public Name fromUtf(byte[] cs, int start, int len) {
392        return table.fromUtf(cs, start, len);
393    }
394}
395