88
89 /* Flag that marks a symbol synthetic, added in classfile v49.0. */
90 public static final int SYNTHETIC = 1<<12;
91
92 /** Flag that marks attribute interfaces, added in classfile v49.0. */
93 public static final int ANNOTATION = 1<<13;
94
95 /** An enumeration type or an enumeration constant, added in
96 * classfile v49.0. */
97 public static final int ENUM = 1<<14;
98
99 /** Added in SE8, represents constructs implicitly declared in source. */
100 public static final int MANDATED = 1<<15;
101
102 public static final int StandardFlags = 0x0fff;
103
104 // Because the following access flags are overloaded with other
105 // bit positions, we translate them when reading and writing class
106 // files into unique bits positions: ACC_SYNTHETIC <-> SYNTHETIC,
107 // for example.
108 public static final int ACC_SUPER = 0x0020;
109 public static final int ACC_BRIDGE = 0x0040;
110 public static final int ACC_VARARGS = 0x0080;
111 public static final int ACC_MODULE = 0x8000;
112
113 /* ***************************************
114 * Internal compiler flags (no bits in the lower 16).
115 *****************************************/
116
117 /** Flag is set if symbol is deprecated. See also DEPRECATED_REMOVAL.
118 */
119 public static final int DEPRECATED = 1<<17;
120
121 /** Flag is set for a variable symbol if the variable's definition
122 * has an initializer part.
123 */
124 public static final int HASINIT = 1<<18;
125
126 /** Class is an implicitly declared top level class.
127 */
128 public static final int IMPLICIT_CLASS = 1<<19;
129
130 /** Flag is set for compiler-generated anonymous method symbols
131 * that `own' an initializer block.
132 */
133 public static final int BLOCK = 1<<20;
134
135 /** Flag is set for ClassSymbols that are being compiled from source.
136 */
137 public static final int FROM_SOURCE = 1<<21; //ClassSymbols
138
139 /** Flag is set for nested classes that do not access instance members
140 * or `this' of an outer class and therefore don't need to be passed
141 * a this$n reference. This value is currently set only for anonymous
142 * classes in superclass constructor calls.
143 * todo: use this value for optimizing away this$n parameters in
144 * other cases.
145 */
146 public static final int NOOUTERTHIS = 1<<22;
147
148 /** Flag is set for package symbols if a package has a member or
149 * directory and therefore exists.
150 */
151 public static final int EXISTS = 1<<23;
152
153 /** Flag is set for compiler-generated compound classes
154 * representing multiple variable bounds
310 /**
311 * Flag to indicate the given PackageSymbol contains any non-.java and non-.class resources.
312 */
313 public static final long HAS_RESOURCE = 1L<<52; //PackageSymbols only
314
315 /**
316 * Flag to indicate the given ParamSymbol has a user-friendly name filled.
317 */
318 public static final long NAME_FILLED = 1L<<52; //ParamSymbols only
319
320 /**
321 * Flag to indicate the given ModuleSymbol is a system module.
322 */
323 public static final long SYSTEM_MODULE = 1L<<53; //ModuleSymbols only
324
325 /**
326 * Flag to indicate the given ClassSymbol is a value based.
327 */
328 public static final long VALUE_BASED = 1L<<53; //ClassSymbols only
329
330 /**
331 * Flag to indicate the given symbol has a @Deprecated annotation.
332 */
333 public static final long DEPRECATED_ANNOTATION = 1L<<54;
334
335 /**
336 * Flag to indicate the given symbol has been deprecated and marked for removal.
337 */
338 public static final long DEPRECATED_REMOVAL = 1L<<55;
339
340 /**
341 * Flag to indicate the API element in question is for a preview API.
342 */
343 public static final long PREVIEW_API = 1L<<56; //any Symbol kind
344
345 /**
346 * Flag for synthesized default constructors of anonymous classes that have an enclosing expression.
347 */
348 public static final long ANONCONSTR_BASED = 1L<<57;
349
392 /**
393 * Flag to indicate sealed class/interface declaration.
394 */
395 public static final long SEALED = 1L<<62; // ClassSymbols
396
397 /**
398 * Flag to indicate restricted method declaration.
399 */
400 public static final long RESTRICTED = 1L<<62; // MethodSymbols
401
402 /**
403 * Flag to indicate type annotations have been queued for field initializers.
404 */
405 public static final long FIELD_INIT_TYPE_ANNOTATIONS_QUEUED = 1L<<53; // VarSymbols
406
407 /**
408 * Flag to indicate that the class/interface was declared with the non-sealed modifier.
409 */
410 public static final long NON_SEALED = 1L<<63; // ClassSymbols
411
412 /**
413 * Describe modifier flags as they might appear in source code, i.e.,
414 * separated by spaces and in the order suggested by JLS 8.1.1.
415 */
416 public static String toSource(long flags) {
417 return asModifierSet(flags).stream()
418 .map(Modifier::toString)
419 .collect(Collectors.joining(" "));
420 }
421
422 /** Modifier masks.
423 */
424 public static final int
425 AccessFlags = PUBLIC | PROTECTED | PRIVATE,
426 LocalClassFlags = FINAL | ABSTRACT | STRICTFP | ENUM | SYNTHETIC,
427 StaticLocalFlags = LocalClassFlags | STATIC | INTERFACE,
428 MemberClassFlags = LocalClassFlags | INTERFACE | AccessFlags,
429 MemberStaticClassFlags = MemberClassFlags | STATIC,
430 ClassFlags = LocalClassFlags | INTERFACE | PUBLIC | ANNOTATION,
431 InterfaceVarFlags = FINAL | STATIC | PUBLIC,
432 VarFlags = AccessFlags | FINAL | STATIC |
433 VOLATILE | TRANSIENT | ENUM,
434 ConstructorFlags = AccessFlags,
435 InterfaceMethodFlags = ABSTRACT | PUBLIC,
436 MethodFlags = AccessFlags | ABSTRACT | STATIC | NATIVE |
437 SYNCHRONIZED | FINAL | STRICTFP,
438 RecordMethodFlags = AccessFlags | ABSTRACT | STATIC |
439 SYNCHRONIZED | FINAL | STRICTFP;
440 public static final long
441 ExtendedStandardFlags = (long)StandardFlags | DEFAULT | SEALED | NON_SEALED,
442 ExtendedMemberClassFlags = (long)MemberClassFlags | SEALED | NON_SEALED,
443 ExtendedMemberStaticClassFlags = (long) MemberStaticClassFlags | SEALED | NON_SEALED,
444 ExtendedClassFlags = (long)ClassFlags | SEALED | NON_SEALED,
445 ModifierFlags = ((long)StandardFlags & ~INTERFACE) | DEFAULT | SEALED | NON_SEALED,
446 InterfaceMethodMask = ABSTRACT | PRIVATE | STATIC | PUBLIC | STRICTFP | DEFAULT,
447 AnnotationTypeElementMask = ABSTRACT | PUBLIC,
448 LocalVarFlags = FINAL | PARAMETER,
449 ReceiverParamFlags = PARAMETER;
450
451 public static Set<Modifier> asModifierSet(long flags) {
452 Set<Modifier> modifiers = modifierSets.get(flags);
453 if (modifiers == null) {
454 modifiers = java.util.EnumSet.noneOf(Modifier.class);
455 if (0 != (flags & PUBLIC)) modifiers.add(Modifier.PUBLIC);
456 if (0 != (flags & PROTECTED)) modifiers.add(Modifier.PROTECTED);
457 if (0 != (flags & PRIVATE)) modifiers.add(Modifier.PRIVATE);
458 if (0 != (flags & ABSTRACT)) modifiers.add(Modifier.ABSTRACT);
459 if (0 != (flags & STATIC)) modifiers.add(Modifier.STATIC);
460 if (0 != (flags & SEALED)) modifiers.add(Modifier.SEALED);
461 if (0 != (flags & NON_SEALED))
462 modifiers.add(Modifier.NON_SEALED);
463 if (0 != (flags & FINAL)) modifiers.add(Modifier.FINAL);
464 if (0 != (flags & TRANSIENT)) modifiers.add(Modifier.TRANSIENT);
465 if (0 != (flags & VOLATILE)) modifiers.add(Modifier.VOLATILE);
466 if (0 != (flags & SYNCHRONIZED))
467 modifiers.add(Modifier.SYNCHRONIZED);
468 if (0 != (flags & NATIVE)) modifiers.add(Modifier.NATIVE);
469 if (0 != (flags & STRICTFP)) modifiers.add(Modifier.STRICTFP);
470 if (0 != (flags & DEFAULT)) modifiers.add(Modifier.DEFAULT);
471 modifiers = Collections.unmodifiableSet(modifiers);
472 modifierSets.put(flags, modifiers);
473 }
474 return modifiers;
475 }
476
477 // Cache of modifier sets.
478 private static final Map<Long, Set<Modifier>> modifierSets = new ConcurrentHashMap<>(64);
479
480 public static boolean isStatic(Symbol symbol) {
481 return (symbol.flags() & STATIC) != 0;
482 }
483
484 public static boolean isEnum(Symbol symbol) {
485 return (symbol.flags() & ENUM) != 0;
486 }
487
488 public static boolean isConstant(Symbol.VarSymbol symbol) {
489 return symbol.getConstValue() != null;
490 }
491
492
493 public enum Flag {
494 PUBLIC(Flags.PUBLIC),
495 PRIVATE(Flags.PRIVATE),
496 PROTECTED(Flags.PROTECTED),
497 STATIC(Flags.STATIC),
498 FINAL(Flags.FINAL),
499 SYNCHRONIZED(Flags.SYNCHRONIZED),
500 VOLATILE(Flags.VOLATILE),
501 TRANSIENT(Flags.TRANSIENT),
502 NATIVE(Flags.NATIVE),
503 INTERFACE(Flags.INTERFACE),
504 ABSTRACT(Flags.ABSTRACT),
505 DEFAULT(Flags.DEFAULT),
506 STRICTFP(Flags.STRICTFP),
507 BRIDGE(Flags.BRIDGE),
508 SYNTHETIC(Flags.SYNTHETIC),
509 ANNOTATION(Flags.ANNOTATION),
510 DEPRECATED(Flags.DEPRECATED),
511 HASINIT(Flags.HASINIT),
512 IMPLICIT_CLASS(Flags.IMPLICIT_CLASS),
513 BLOCK(Flags.BLOCK),
514 FROM_SOURCE(Flags.FROM_SOURCE),
515 ENUM(Flags.ENUM),
516 MANDATED(Flags.MANDATED),
517 NOOUTERTHIS(Flags.NOOUTERTHIS),
518 EXISTS(Flags.EXISTS),
519 COMPOUND(Flags.COMPOUND),
520 CLASS_SEEN(Flags.CLASS_SEEN),
521 SOURCE_SEEN(Flags.SOURCE_SEEN),
522 LOCKED(Flags.LOCKED),
523 UNATTRIBUTED(Flags.UNATTRIBUTED),
524 ANONCONSTR(Flags.ANONCONSTR),
525 ACYCLIC(Flags.ACYCLIC),
526 PARAMETER(Flags.PARAMETER),
527 VARARGS(Flags.VARARGS),
528 ACYCLIC_ANN(Flags.ACYCLIC_ANN),
529 GENERATEDCONSTR(Flags.GENERATEDCONSTR),
530 HYPOTHETICAL(Flags.HYPOTHETICAL),
531 PROPRIETARY(Flags.PROPRIETARY),
543 AUTOMATIC_MODULE(Flags.AUTOMATIC_MODULE),
544 SYSTEM_MODULE(Flags.SYSTEM_MODULE),
545 DEPRECATED_ANNOTATION(Flags.DEPRECATED_ANNOTATION),
546 DEPRECATED_REMOVAL(Flags.DEPRECATED_REMOVAL),
547 HAS_RESOURCE(Flags.HAS_RESOURCE),
548 // Bit 48 is currently available
549 ANONCONSTR_BASED(Flags.ANONCONSTR_BASED),
550 NAME_FILLED(Flags.NAME_FILLED),
551 PREVIEW_API(Flags.PREVIEW_API),
552 PREVIEW_REFLECTIVE(Flags.PREVIEW_REFLECTIVE),
553 MATCH_BINDING(Flags.MATCH_BINDING),
554 MATCH_BINDING_TO_OUTER(Flags.MATCH_BINDING_TO_OUTER),
555 RECORD(Flags.RECORD),
556 RECOVERABLE(Flags.RECOVERABLE),
557 SEALED(Flags.SEALED),
558 NON_SEALED(Flags.NON_SEALED) {
559 @Override
560 public String toString() {
561 return "non-sealed";
562 }
563 };
564
565 Flag(long flag) {
566 this.value = flag;
567 this.lowercaseName = StringUtils.toLowerCase(name());
568 }
569
570 @Override
571 public String toString() {
572 return lowercaseName;
573 }
574
575 final long value;
576 final String lowercaseName;
577 }
578
579 }
|
88
89 /* Flag that marks a symbol synthetic, added in classfile v49.0. */
90 public static final int SYNTHETIC = 1<<12;
91
92 /** Flag that marks attribute interfaces, added in classfile v49.0. */
93 public static final int ANNOTATION = 1<<13;
94
95 /** An enumeration type or an enumeration constant, added in
96 * classfile v49.0. */
97 public static final int ENUM = 1<<14;
98
99 /** Added in SE8, represents constructs implicitly declared in source. */
100 public static final int MANDATED = 1<<15;
101
102 public static final int StandardFlags = 0x0fff;
103
104 // Because the following access flags are overloaded with other
105 // bit positions, we translate them when reading and writing class
106 // files into unique bits positions: ACC_SYNTHETIC <-> SYNTHETIC,
107 // for example.
108 public static final int ACC_IDENTITY = 0x0020;
109 public static final int ACC_BRIDGE = 0x0040;
110 public static final int ACC_VARARGS = 0x0080;
111 public static final int ACC_STRICT = 0x0800;
112 public static final int ACC_MODULE = 0x8000;
113
114 /* ***************************************
115 * Internal compiler flags (no bits in the lower 16).
116 *****************************************/
117
118 /** Flag is set if symbol is deprecated. See also DEPRECATED_REMOVAL.
119 */
120 public static final int DEPRECATED = 1<<17;
121
122 /** Flag is set for a variable symbol if the variable's definition
123 * has an initializer part.
124 */
125 public static final int HASINIT = 1<<18;
126
127 /** Flag is set for a class or interface whose instances have identity
128 * i.e. any concrete class not declared with the modifier `value'
129 * (a) abstract class not declared `value'
130 * (b) older class files with ACC_SUPER bit set
131 */
132 public static final int IDENTITY_TYPE = 1<<19;
133
134 /** Class is an implicitly declared top level class.
135 */
136 public static final int IMPLICIT_CLASS = 1<<23;
137
138 /** Flag is set for compiler-generated anonymous method symbols
139 * that `own' an initializer block.
140 */
141 public static final int BLOCK = 1<<20;
142
143 /** Marks a type as a value class */
144 public static final int VALUE_CLASS = 1<<20;
145
146 /** Flag is set for ClassSymbols that are being compiled from source.
147 */
148 public static final int FROM_SOURCE = 1<<21; //ClassSymbols
149
150 /** Flag is set for nested classes that do not access instance members
151 * or `this' of an outer class and therefore don't need to be passed
152 * a this$n reference. This value is currently set only for anonymous
153 * classes in superclass constructor calls.
154 * todo: use this value for optimizing away this$n parameters in
155 * other cases.
156 */
157 public static final int NOOUTERTHIS = 1<<22;
158
159 /** Flag is set for package symbols if a package has a member or
160 * directory and therefore exists.
161 */
162 public static final int EXISTS = 1<<23;
163
164 /** Flag is set for compiler-generated compound classes
165 * representing multiple variable bounds
321 /**
322 * Flag to indicate the given PackageSymbol contains any non-.java and non-.class resources.
323 */
324 public static final long HAS_RESOURCE = 1L<<52; //PackageSymbols only
325
326 /**
327 * Flag to indicate the given ParamSymbol has a user-friendly name filled.
328 */
329 public static final long NAME_FILLED = 1L<<52; //ParamSymbols only
330
331 /**
332 * Flag to indicate the given ModuleSymbol is a system module.
333 */
334 public static final long SYSTEM_MODULE = 1L<<53; //ModuleSymbols only
335
336 /**
337 * Flag to indicate the given ClassSymbol is a value based.
338 */
339 public static final long VALUE_BASED = 1L<<53; //ClassSymbols only
340
341 /**
342 * Flag to indicate the given ClassSymbol is a value based.
343 */
344 public static final long MIGRATED_VALUE_CLASS = 1L<<57; //ClassSymbols only
345
346 /**
347 * Flag to indicate the given symbol has a @Deprecated annotation.
348 */
349 public static final long DEPRECATED_ANNOTATION = 1L<<54;
350
351 /**
352 * Flag to indicate the given symbol has been deprecated and marked for removal.
353 */
354 public static final long DEPRECATED_REMOVAL = 1L<<55;
355
356 /**
357 * Flag to indicate the API element in question is for a preview API.
358 */
359 public static final long PREVIEW_API = 1L<<56; //any Symbol kind
360
361 /**
362 * Flag for synthesized default constructors of anonymous classes that have an enclosing expression.
363 */
364 public static final long ANONCONSTR_BASED = 1L<<57;
365
408 /**
409 * Flag to indicate sealed class/interface declaration.
410 */
411 public static final long SEALED = 1L<<62; // ClassSymbols
412
413 /**
414 * Flag to indicate restricted method declaration.
415 */
416 public static final long RESTRICTED = 1L<<62; // MethodSymbols
417
418 /**
419 * Flag to indicate type annotations have been queued for field initializers.
420 */
421 public static final long FIELD_INIT_TYPE_ANNOTATIONS_QUEUED = 1L<<53; // VarSymbols
422
423 /**
424 * Flag to indicate that the class/interface was declared with the non-sealed modifier.
425 */
426 public static final long NON_SEALED = 1L<<63; // ClassSymbols
427
428 /**
429 * Flag to indicate that a class has at least one strict field
430 */
431 public static final long HAS_STRICT = 1L<<52; // ClassSymbols, temporary hack
432
433 /**
434 * Flag to indicate that a field is strict
435 */
436 public static final long STRICT = 1L<<53; // VarSymbols
437
438 /**
439 * Describe modifier flags as they might appear in source code, i.e.,
440 * separated by spaces and in the order suggested by JLS 8.1.1.
441 */
442 public static String toSource(long flags) {
443 return asModifierSet(flags).stream()
444 .map(Modifier::toString)
445 .collect(Collectors.joining(" "));
446 }
447
448 /** Modifier masks.
449 */
450 public static final int
451 AccessFlags = PUBLIC | PROTECTED | PRIVATE,
452 LocalClassFlags = FINAL | ABSTRACT | STRICTFP | ENUM | SYNTHETIC | IDENTITY_TYPE,
453 StaticLocalClassFlags = LocalClassFlags | STATIC | INTERFACE,
454 MemberClassFlags = LocalClassFlags | INTERFACE | AccessFlags,
455 MemberStaticClassFlags = MemberClassFlags | STATIC,
456 ClassFlags = LocalClassFlags | INTERFACE | PUBLIC | ANNOTATION,
457 InterfaceVarFlags = FINAL | STATIC | PUBLIC,
458 VarFlags = AccessFlags | FINAL | STATIC |
459 VOLATILE | TRANSIENT | ENUM,
460 ConstructorFlags = AccessFlags,
461 InterfaceMethodFlags = ABSTRACT | PUBLIC,
462 MethodFlags = AccessFlags | ABSTRACT | STATIC | NATIVE |
463 SYNCHRONIZED | FINAL | STRICTFP,
464 RecordMethodFlags = AccessFlags | ABSTRACT | STATIC |
465 SYNCHRONIZED | FINAL | STRICTFP;
466 public static final long
467 ExtendedStandardFlags = (long)StandardFlags | DEFAULT | SEALED | NON_SEALED | VALUE_CLASS,
468 ExtendedMemberClassFlags = (long)MemberClassFlags | SEALED | NON_SEALED | VALUE_CLASS,
469 ExtendedMemberStaticClassFlags = (long) MemberStaticClassFlags | SEALED | NON_SEALED | VALUE_CLASS,
470 ExtendedClassFlags = (long)ClassFlags | SEALED | NON_SEALED | VALUE_CLASS,
471 ExtendedLocalClassFlags = (long) LocalClassFlags | VALUE_CLASS,
472 ExtendedStaticLocalClassFlags = (long) StaticLocalClassFlags | VALUE_CLASS,
473 ValueFieldFlags = (long) VarFlags | STRICT | FINAL,
474 ModifierFlags = ((long)StandardFlags & ~INTERFACE) | DEFAULT | SEALED | NON_SEALED | VALUE_CLASS,
475 InterfaceMethodMask = ABSTRACT | PRIVATE | STATIC | PUBLIC | STRICTFP | DEFAULT,
476 AnnotationTypeElementMask = ABSTRACT | PUBLIC,
477 LocalVarFlags = FINAL | PARAMETER,
478 ReceiverParamFlags = PARAMETER;
479
480 public static Set<Modifier> asModifierSet(long flags) {
481 Set<Modifier> modifiers = modifierSets.get(flags);
482 if (modifiers == null) {
483 modifiers = java.util.EnumSet.noneOf(Modifier.class);
484 if (0 != (flags & PUBLIC)) modifiers.add(Modifier.PUBLIC);
485 if (0 != (flags & PROTECTED)) modifiers.add(Modifier.PROTECTED);
486 if (0 != (flags & PRIVATE)) modifiers.add(Modifier.PRIVATE);
487 if (0 != (flags & ABSTRACT)) modifiers.add(Modifier.ABSTRACT);
488 if (0 != (flags & STATIC)) modifiers.add(Modifier.STATIC);
489 if (0 != (flags & SEALED)) modifiers.add(Modifier.SEALED);
490 if (0 != (flags & NON_SEALED))
491 modifiers.add(Modifier.NON_SEALED);
492 if (0 != (flags & FINAL)) modifiers.add(Modifier.FINAL);
493 if (0 != (flags & TRANSIENT)) modifiers.add(Modifier.TRANSIENT);
494 if (0 != (flags & VOLATILE)) modifiers.add(Modifier.VOLATILE);
495 if (0 != (flags & SYNCHRONIZED))
496 modifiers.add(Modifier.SYNCHRONIZED);
497 if (0 != (flags & NATIVE)) modifiers.add(Modifier.NATIVE);
498 if (0 != (flags & STRICTFP)) modifiers.add(Modifier.STRICTFP);
499 if (0 != (flags & DEFAULT)) modifiers.add(Modifier.DEFAULT);
500 if (0 != (flags & VALUE_CLASS)) modifiers.add(Modifier.VALUE);
501 modifiers = Collections.unmodifiableSet(modifiers);
502 modifierSets.put(flags, modifiers);
503 }
504 return modifiers;
505 }
506
507 // Cache of modifier sets.
508 private static final Map<Long, Set<Modifier>> modifierSets = new ConcurrentHashMap<>(64);
509
510 public static boolean isStatic(Symbol symbol) {
511 return (symbol.flags() & STATIC) != 0;
512 }
513
514 public static boolean isEnum(Symbol symbol) {
515 return (symbol.flags() & ENUM) != 0;
516 }
517
518 public static boolean isConstant(Symbol.VarSymbol symbol) {
519 return symbol.getConstValue() != null;
520 }
521
522 public enum Flag {
523 PUBLIC(Flags.PUBLIC),
524 PRIVATE(Flags.PRIVATE),
525 PROTECTED(Flags.PROTECTED),
526 STATIC(Flags.STATIC),
527 FINAL(Flags.FINAL),
528 SYNCHRONIZED(Flags.SYNCHRONIZED),
529 VOLATILE(Flags.VOLATILE),
530 TRANSIENT(Flags.TRANSIENT),
531 NATIVE(Flags.NATIVE),
532 INTERFACE(Flags.INTERFACE),
533 ABSTRACT(Flags.ABSTRACT),
534 DEFAULT(Flags.DEFAULT),
535 STRICTFP(Flags.STRICTFP),
536 BRIDGE(Flags.BRIDGE),
537 SYNTHETIC(Flags.SYNTHETIC),
538 ANNOTATION(Flags.ANNOTATION),
539 DEPRECATED(Flags.DEPRECATED),
540 HASINIT(Flags.HASINIT),
541 IDENTITY_TYPE(Flags.IDENTITY_TYPE) {
542 @Override
543 public String toString() {
544 return "identity";
545 }
546 },
547 VALUE(Flags.VALUE_CLASS),
548 IMPLICIT_CLASS(Flags.IMPLICIT_CLASS),
549 BLOCK(Flags.BLOCK),
550 FROM_SOURCE(Flags.FROM_SOURCE),
551 ENUM(Flags.ENUM),
552 MANDATED(Flags.MANDATED),
553 NOOUTERTHIS(Flags.NOOUTERTHIS),
554 EXISTS(Flags.EXISTS),
555 COMPOUND(Flags.COMPOUND),
556 CLASS_SEEN(Flags.CLASS_SEEN),
557 SOURCE_SEEN(Flags.SOURCE_SEEN),
558 LOCKED(Flags.LOCKED),
559 UNATTRIBUTED(Flags.UNATTRIBUTED),
560 ANONCONSTR(Flags.ANONCONSTR),
561 ACYCLIC(Flags.ACYCLIC),
562 PARAMETER(Flags.PARAMETER),
563 VARARGS(Flags.VARARGS),
564 ACYCLIC_ANN(Flags.ACYCLIC_ANN),
565 GENERATEDCONSTR(Flags.GENERATEDCONSTR),
566 HYPOTHETICAL(Flags.HYPOTHETICAL),
567 PROPRIETARY(Flags.PROPRIETARY),
579 AUTOMATIC_MODULE(Flags.AUTOMATIC_MODULE),
580 SYSTEM_MODULE(Flags.SYSTEM_MODULE),
581 DEPRECATED_ANNOTATION(Flags.DEPRECATED_ANNOTATION),
582 DEPRECATED_REMOVAL(Flags.DEPRECATED_REMOVAL),
583 HAS_RESOURCE(Flags.HAS_RESOURCE),
584 // Bit 48 is currently available
585 ANONCONSTR_BASED(Flags.ANONCONSTR_BASED),
586 NAME_FILLED(Flags.NAME_FILLED),
587 PREVIEW_API(Flags.PREVIEW_API),
588 PREVIEW_REFLECTIVE(Flags.PREVIEW_REFLECTIVE),
589 MATCH_BINDING(Flags.MATCH_BINDING),
590 MATCH_BINDING_TO_OUTER(Flags.MATCH_BINDING_TO_OUTER),
591 RECORD(Flags.RECORD),
592 RECOVERABLE(Flags.RECOVERABLE),
593 SEALED(Flags.SEALED),
594 NON_SEALED(Flags.NON_SEALED) {
595 @Override
596 public String toString() {
597 return "non-sealed";
598 }
599 },
600 STRICT(Flags.STRICT);
601
602 Flag(long flag) {
603 this.value = flag;
604 this.lowercaseName = StringUtils.toLowerCase(name());
605 }
606
607 @Override
608 public String toString() {
609 return lowercaseName;
610 }
611
612 final long value;
613 final String lowercaseName;
614 }
615
616 }
|