Names.java revision 3822:d8766c39123a
1289550Szbb/*
2289550Szbb * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
3289550Szbb * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4289550Szbb *
5289550Szbb * This code is free software; you can redistribute it and/or modify it
6289550Szbb * under the terms of the GNU General Public License version 2 only, as
7289550Szbb * published by the Free Software Foundation.  Oracle designates this
8289550Szbb * particular file as subject to the "Classpath" exception as provided
9289550Szbb * by Oracle in the LICENSE file that accompanied this code.
10289550Szbb *
11289550Szbb * This code is distributed in the hope that it will be useful, but WITHOUT
12289550Szbb * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13289550Szbb * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14289550Szbb * version 2 for more details (a copy is included in the LICENSE file that
15289550Szbb * accompanied this code).
16289550Szbb *
17289550Szbb * You should have received a copy of the GNU General Public License version
18289550Szbb * 2 along with this work; if not, write to the Free Software Foundation,
19289550Szbb * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20289550Szbb *
21289550Szbb * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22289550Szbb * or visit www.oracle.com if you need additional information or have any
23289550Szbb * questions.
24289550Szbb */
25289550Szbb
26289550Szbbpackage com.sun.tools.javac.util;
27289550Szbb
28289550Szbb/**
29289551Szbb * Access to the compiler's name table.  STandard names are defined,
30289550Szbb * as well as methods to create new names.
31289551Szbb *
32289551Szbb *  <p><b>This is NOT part of any supported API.
33289550Szbb *  If you write code that depends on this, you do so at your own risk.
34289551Szbb *  This code and its internal interfaces are subject to change or
35289551Szbb *  deletion without notice.</b>
36289551Szbb */
37289551Szbbpublic class Names {
38289551Szbb
39289551Szbb    public static final Context.Key<Names> namesKey = new Context.Key<>();
40289551Szbb
41289551Szbb    public static Names instance(Context context) {
42289551Szbb        Names instance = context.get(namesKey);
43289551Szbb        if (instance == null) {
44289551Szbb            instance = new Names(context);
45289551Szbb            context.put(namesKey, instance);
46289551Szbb        }
47289551Szbb        return instance;
48289551Szbb    }
49289551Szbb
50289551Szbb    // operators and punctuation
51289551Szbb    public final Name asterisk;
52289551Szbb    public final Name comma;
53289551Szbb    public final Name empty;
54289551Szbb    public final Name hyphen;
55289551Szbb    public final Name one;
56289551Szbb    public final Name period;
57289551Szbb    public final Name semicolon;
58289551Szbb    public final Name slash;
59289551Szbb    public final Name slashequals;
60289551Szbb
61289551Szbb    // keywords
62289551Szbb    public final Name _class;
63289551Szbb    public final Name _default;
64289550Szbb    public final Name _super;
65289550Szbb    public final Name _this;
66289550Szbb    public final Name exports;
67289551Szbb    public final Name opens;
68289551Szbb    public final Name module;
69289551Szbb    public final Name provides;
70289551Szbb    public final Name requires;
71294990Szbb    public final Name to;
72289551Szbb    public final Name transitive;
73289551Szbb    public final Name uses;
74289551Szbb    public final Name open;
75289551Szbb    public final Name with;
76289550Szbb
77289550Szbb    // field and method names
78289550Szbb    public final Name _name;
79289551Szbb    public final Name addSuppressed;
80289550Szbb    public final Name any;
81289550Szbb    public final Name append;
82289551Szbb    public final Name clinit;
83289550Szbb    public final Name clone;
84289550Szbb    public final Name close;
85289551Szbb    public final Name compareTo;
86289551Szbb    public final Name deserializeLambda;
87289551Szbb    public final Name desiredAssertionStatus;
88289551Szbb    public final Name equals;
89289550Szbb    public final Name error;
90289551Szbb    public final Name family;
91289551Szbb    public final Name finalize;
92289551Szbb    public final Name forName;
93289551Szbb    public final Name forRemoval;
94289551Szbb    public final Name getClass;
95289551Szbb    public final Name getClassLoader;
96289551Szbb    public final Name getComponentType;
97289551Szbb    public final Name getDeclaringClass;
98289551Szbb    public final Name getMessage;
99289551Szbb    public final Name hasNext;
100289551Szbb    public final Name hashCode;
101289550Szbb    public final Name init;
102289550Szbb    public final Name initCause;
103289551Szbb    public final Name iterator;
104289551Szbb    public final Name length;
105289551Szbb    public final Name next;
106289551Szbb    public final Name ordinal;
107289551Szbb    public final Name provider;
108289550Szbb    public final Name serialVersionUID;
109289551Szbb    public final Name toString;
110289550Szbb    public final Name value;
111289551Szbb    public final Name valueOf;
112300294Swma    public final Name values;
113289551Szbb
114289551Szbb    // class names
115300294Swma    public final Name java_io_Serializable;
116289551Szbb    public final Name java_lang_AutoCloseable;
117289551Szbb    public final Name java_lang_Class;
118289551Szbb    public final Name java_lang_Cloneable;
119289551Szbb    public final Name java_lang_Enum;
120289551Szbb    public final Name java_lang_Object;
121289551Szbb    public final Name java_lang_invoke_MethodHandle;
122289551Szbb
123289551Szbb    // names of builtin classes
124289551Szbb    public final Name Array;
125289551Szbb    public final Name Bound;
126289551Szbb    public final Name Method;
127289551Szbb
128289551Szbb    // package names
129289551Szbb    public final Name java_lang;
130289551Szbb
131289551Szbb    // module names
132289551Szbb    public final Name java_base;
133289551Szbb
134289551Szbb    // attribute names
135289551Szbb    public final Name Annotation;
136289551Szbb    public final Name AnnotationDefault;
137289551Szbb    public final Name BootstrapMethods;
138289551Szbb    public final Name Bridge;
139300295Swma    public final Name CharacterRangeTable;
140289551Szbb    public final Name Code;
141289551Szbb    public final Name CompilationID;
142300295Swma    public final Name ConstantValue;
143289551Szbb    public final Name Deprecated;
144289551Szbb    public final Name EnclosingMethod;
145289551Szbb    public final Name Enum;
146300295Swma    public final Name Exceptions;
147300295Swma    public final Name InnerClasses;
148300295Swma    public final Name LineNumberTable;
149289551Szbb    public final Name LocalVariableTable;
150289551Szbb    public final Name LocalVariableTypeTable;
151289551Szbb    public final Name MethodParameters;
152289551Szbb    public final Name Module;
153289551Szbb    public final Name ModuleResolution;
154289551Szbb    public final Name RuntimeInvisibleAnnotations;
155289551Szbb    public final Name RuntimeInvisibleParameterAnnotations;
156289551Szbb    public final Name RuntimeInvisibleTypeAnnotations;
157289551Szbb    public final Name RuntimeVisibleAnnotations;
158289551Szbb    public final Name RuntimeVisibleParameterAnnotations;
159289551Szbb    public final Name RuntimeVisibleTypeAnnotations;
160289551Szbb    public final Name Signature;
161289551Szbb    public final Name SourceFile;
162289551Szbb    public final Name SourceID;
163289551Szbb    public final Name StackMap;
164289551Szbb    public final Name StackMapTable;
165289551Szbb    public final Name Synthetic;
166289551Szbb    public final Name Value;
167289551Szbb    public final Name Varargs;
168289551Szbb
169289551Szbb    // members of java.lang.annotation.ElementType
170289551Szbb    public final Name ANNOTATION_TYPE;
171289551Szbb    public final Name CONSTRUCTOR;
172289551Szbb    public final Name FIELD;
173289551Szbb    public final Name LOCAL_VARIABLE;
174289551Szbb    public final Name METHOD;
175300295Swma    public final Name MODULE;
176300295Swma    public final Name PACKAGE;
177289551Szbb    public final Name PARAMETER;
178289551Szbb    public final Name TYPE;
179300295Swma    public final Name TYPE_PARAMETER;
180289551Szbb    public final Name TYPE_USE;
181289551Szbb
182289551Szbb    // members of java.lang.annotation.RetentionPolicy
183289551Szbb    public final Name CLASS;
184289551Szbb    public final Name RUNTIME;
185289551Szbb    public final Name SOURCE;
186289551Szbb
187289551Szbb    // other identifiers
188289551Szbb    public final Name T;
189289551Szbb    public final Name deprecated;
190289551Szbb    public final Name ex;
191289551Szbb    public final Name module_info;
192289551Szbb    public final Name package_info;
193289551Szbb    public final Name requireNonNull;
194289551Szbb
195289551Szbb    // lambda-related
196289551Szbb    public final Name lambda;
197289551Szbb    public final Name metafactory;
198289551Szbb    public final Name altMetafactory;
199289551Szbb    public final Name dollarThis;
200289551Szbb
201289551Szbb    // string concat
202289551Szbb    public final Name makeConcat;
203289551Szbb    public final Name makeConcatWithConstants;
204289551Szbb
205289551Szbb    public final Name.Table table;
206289551Szbb
207289551Szbb    public Names(Context context) {
208289551Szbb        Options options = Options.instance(context);
209289551Szbb        table = createTable(options);
210300295Swma
211300295Swma        // operators and punctuation
212300295Swma        asterisk = fromString("*");
213300295Swma        comma = fromString(",");
214300295Swma        empty = fromString("");
215300295Swma        hyphen = fromString("-");
216289551Szbb        one = fromString("1");
217289551Szbb        period = fromString(".");
218289551Szbb        semicolon = fromString(";");
219289550Szbb        slash = fromString("/");
220289551Szbb        slashequals = fromString("/=");
221289551Szbb
222289550Szbb        // keywords
223289551Szbb        _class = fromString("class");
224289550Szbb        _default = fromString("default");
225289551Szbb        _super = fromString("super");
226289551Szbb        _this = fromString("this");
227289551Szbb        exports = fromString("exports");
228289550Szbb        opens = fromString("opens");
229289550Szbb        module = fromString("module");
230289551Szbb        provides = fromString("provides");
231289551Szbb        requires = fromString("requires");
232289550Szbb        to = fromString("to");
233289551Szbb        transitive = fromString("transitive");
234289550Szbb        uses = fromString("uses");
235289551Szbb        open = fromString("open");
236289551Szbb        with = fromString("with");
237289551Szbb
238289550Szbb        // field and method names
239289550Szbb        _name = fromString("name");
240289551Szbb        addSuppressed = fromString("addSuppressed");
241289551Szbb        any = fromString("<any>");
242289550Szbb        append = fromString("append");
243289551Szbb        clinit = fromString("<clinit>");
244289550Szbb        clone = fromString("clone");
245289551Szbb        close = fromString("close");
246289551Szbb        compareTo = fromString("compareTo");
247289551Szbb        deserializeLambda = fromString("$deserializeLambda$");
248289550Szbb        desiredAssertionStatus = fromString("desiredAssertionStatus");
249289550Szbb        equals = fromString("equals");
250289551Szbb        error = fromString("<error>");
251289551Szbb        family = fromString("family");
252289551Szbb        finalize = fromString("finalize");
253289550Szbb        forName = fromString("forName");
254297707Swma        forRemoval = fromString("forRemoval");
255289551Szbb        getClass = fromString("getClass");
256289550Szbb        getClassLoader = fromString("getClassLoader");
257289550Szbb        getComponentType = fromString("getComponentType");
258289550Szbb        getDeclaringClass = fromString("getDeclaringClass");
259289550Szbb        getMessage = fromString("getMessage");
260289551Szbb        hasNext = fromString("hasNext");
261289550Szbb        hashCode = fromString("hashCode");
262289551Szbb        init = fromString("<init>");
263289551Szbb        initCause = fromString("initCause");
264297707Swma        iterator = fromString("iterator");
265289550Szbb        length = fromString("length");
266289550Szbb        next = fromString("next");
267289551Szbb        ordinal = fromString("ordinal");
268289550Szbb        provider = fromString("provider");
269289550Szbb        serialVersionUID = fromString("serialVersionUID");
270289550Szbb        toString = fromString("toString");
271289551Szbb        value = fromString("value");
272289551Szbb        valueOf = fromString("valueOf");
273289550Szbb        values = fromString("values");
274289550Szbb        dollarThis = fromString("$this");
275289551Szbb
276289550Szbb        // class names
277289550Szbb        java_io_Serializable = fromString("java.io.Serializable");
278289550Szbb        java_lang_AutoCloseable = fromString("java.lang.AutoCloseable");
279289550Szbb        java_lang_Class = fromString("java.lang.Class");
280289550Szbb        java_lang_Cloneable = fromString("java.lang.Cloneable");
281289550Szbb        java_lang_Enum = fromString("java.lang.Enum");
282289551Szbb        java_lang_Object = fromString("java.lang.Object");
283289550Szbb        java_lang_invoke_MethodHandle = fromString("java.lang.invoke.MethodHandle");
284289550Szbb
285289550Szbb        // names of builtin classes
286289551Szbb        Array = fromString("Array");
287289551Szbb        Bound = fromString("Bound");
288289550Szbb        Method = fromString("Method");
289289550Szbb
290289550Szbb        // package names
291289550Szbb        java_lang = fromString("java.lang");
292289551Szbb
293289551Szbb        // module names
294289550Szbb        java_base = fromString("java.base");
295289551Szbb
296289550Szbb        // attribute names
297289550Szbb        Annotation = fromString("Annotation");
298289550Szbb        AnnotationDefault = fromString("AnnotationDefault");
299289551Szbb        BootstrapMethods = fromString("BootstrapMethods");
300289551Szbb        Bridge = fromString("Bridge");
301289550Szbb        CharacterRangeTable = fromString("CharacterRangeTable");
302289550Szbb        Code = fromString("Code");
303289550Szbb        CompilationID = fromString("CompilationID");
304289550Szbb        ConstantValue = fromString("ConstantValue");
305289550Szbb        Deprecated = fromString("Deprecated");
306289550Szbb        EnclosingMethod = fromString("EnclosingMethod");
307289551Szbb        Enum = fromString("Enum");
308289550Szbb        Exceptions = fromString("Exceptions");
309289550Szbb        InnerClasses = fromString("InnerClasses");
310289550Szbb        LineNumberTable = fromString("LineNumberTable");
311289550Szbb        LocalVariableTable = fromString("LocalVariableTable");
312289550Szbb        LocalVariableTypeTable = fromString("LocalVariableTypeTable");
313289550Szbb        MethodParameters = fromString("MethodParameters");
314289550Szbb        Module = fromString("Module");
315289550Szbb        ModuleResolution = fromString("ModuleResolution");
316289551Szbb        RuntimeInvisibleAnnotations = fromString("RuntimeInvisibleAnnotations");
317289551Szbb        RuntimeInvisibleParameterAnnotations = fromString("RuntimeInvisibleParameterAnnotations");
318289550Szbb        RuntimeInvisibleTypeAnnotations = fromString("RuntimeInvisibleTypeAnnotations");
319289550Szbb        RuntimeVisibleAnnotations = fromString("RuntimeVisibleAnnotations");
320289550Szbb        RuntimeVisibleParameterAnnotations = fromString("RuntimeVisibleParameterAnnotations");
321289551Szbb        RuntimeVisibleTypeAnnotations = fromString("RuntimeVisibleTypeAnnotations");
322289551Szbb        Signature = fromString("Signature");
323289550Szbb        SourceFile = fromString("SourceFile");
324289551Szbb        SourceID = fromString("SourceID");
325289550Szbb        StackMap = fromString("StackMap");
326289550Szbb        StackMapTable = fromString("StackMapTable");
327289551Szbb        Synthetic = fromString("Synthetic");
328289551Szbb        Value = fromString("Value");
329289550Szbb        Varargs = fromString("Varargs");
330289550Szbb
331289550Szbb        // members of java.lang.annotation.ElementType
332289551Szbb        ANNOTATION_TYPE = fromString("ANNOTATION_TYPE");
333289550Szbb        CONSTRUCTOR = fromString("CONSTRUCTOR");
334289550Szbb        FIELD = fromString("FIELD");
335289551Szbb        LOCAL_VARIABLE = fromString("LOCAL_VARIABLE");
336289550Szbb        METHOD = fromString("METHOD");
337289550Szbb        MODULE = fromString("MODULE");
338289551Szbb        PACKAGE = fromString("PACKAGE");
339289551Szbb        PARAMETER = fromString("PARAMETER");
340289550Szbb        TYPE = fromString("TYPE");
341289550Szbb        TYPE_PARAMETER = fromString("TYPE_PARAMETER");
342289551Szbb        TYPE_USE = fromString("TYPE_USE");
343289551Szbb
344289551Szbb        // members of java.lang.annotation.RetentionPolicy
345289550Szbb        CLASS = fromString("CLASS");
346289550Szbb        RUNTIME = fromString("RUNTIME");
347289550Szbb        SOURCE = fromString("SOURCE");
348289550Szbb
349289550Szbb        // other identifiers
350289550Szbb        T = fromString("T");
351289550Szbb        deprecated = fromString("deprecated");
352289550Szbb        ex = fromString("ex");
353289550Szbb        module_info = fromString("module-info");
354289550Szbb        package_info = fromString("package-info");
355289550Szbb        requireNonNull = fromString("requireNonNull");
356289550Szbb
357289550Szbb        //lambda-related
358289550Szbb        lambda = fromString("lambda$");
359289550Szbb        metafactory = fromString("metafactory");
360289550Szbb        altMetafactory = fromString("altMetafactory");
361289550Szbb
362289550Szbb        // string concat
363289550Szbb        makeConcat = fromString("makeConcat");
364289550Szbb        makeConcatWithConstants = fromString("makeConcatWithConstants");
365289550Szbb    }
366289550Szbb
367289550Szbb    protected Name.Table createTable(Options options) {
368289550Szbb        boolean useUnsharedTable = options.isSet("useUnsharedTable");
369289550Szbb        if (useUnsharedTable)
370289550Szbb            return UnsharedNameTable.create(this);
371289550Szbb        else
372289550Szbb            return SharedNameTable.create(this);
373289550Szbb    }
374289550Szbb
375289550Szbb    public void dispose() {
376289550Szbb        table.dispose();
377289550Szbb    }
378289550Szbb
379289550Szbb    public Name fromChars(char[] cs, int start, int len) {
380289550Szbb        return table.fromChars(cs, start, len);
381289550Szbb    }
382289550Szbb
383289550Szbb    public Name fromString(String s) {
384289550Szbb        return table.fromString(s);
385289550Szbb    }
386289550Szbb
387289550Szbb    public Name fromUtf(byte[] cs) {
388289550Szbb        return table.fromUtf(cs);
389289550Szbb    }
390289550Szbb
391289550Szbb    public Name fromUtf(byte[] cs, int start, int len) {
392289550Szbb        return table.fromUtf(cs, start, len);
393289550Szbb    }
394289550Szbb}
395289550Szbb