209 public final Type inheritedType;
210 public final Type profileType;
211 public final Type proprietaryType;
212 public final Type systemType;
213 public final Type autoCloseableType;
214 public final Type trustMeType;
215 public final Type lambdaMetafactory;
216 public final Type stringConcatFactory;
217 public final Type repeatableType;
218 public final Type documentedType;
219 public final Type elementTypeType;
220 public final Type functionalInterfaceType;
221 public final Type previewFeatureType;
222 public final Type previewFeatureInternalType;
223 public final Type restrictedType;
224 public final Type restrictedInternalType;
225 public final Type typeDescriptorType;
226 public final Type recordType;
227 public final Type switchBootstrapsType;
228 public final Type constantBootstrapsType;
229 public final Type valueBasedType;
230 public final Type valueBasedInternalType;
231 public final Type requiresIdentityType;
232 public final Type requiresIdentityInternalType;
233 public final Type classDescType;
234 public final Type enumDescType;
235
236 // For serialization lint checking
237 public final Type objectStreamFieldType;
238 public final Type objectInputStreamType;
239 public final Type objectOutputStreamType;
240 public final Type ioExceptionType;
241 public final Type objectStreamExceptionType;
242 // For externalization lint checking
243 public final Type externalizableType;
244 public final Type objectInputType;
245 public final Type objectOutputType;
246
247 /** The symbol representing the length field of an array.
248 */
249 public final VarSymbol lengthVar;
250
251 /** The symbol representing the final finalize method on enums */
252 public final MethodSymbol enumFinalFinalize;
253
254 /** The symbol representing the close method on TWR AutoCloseable type */
255 public final MethodSymbol autoCloseableClose;
256
257 /** The predefined type that belongs to a tag.
258 */
259 public final Type[] typeOfTag = new Type[TypeTag.getTypeTagCount()];
260
261 /** The name of the class that belongs to a basic type tag.
262 */
263 public final Name[] boxedName = new Name[TypeTag.getTypeTagCount()];
264
265 /** A hashtable containing the encountered top-level and member classes,
266 * indexed by flat names. The table does not contain local classes.
525
526 // Enter symbols for basic types.
527 scope.enter(byteType.tsym);
528 scope.enter(shortType.tsym);
529 scope.enter(charType.tsym);
530 scope.enter(intType.tsym);
531 scope.enter(longType.tsym);
532 scope.enter(floatType.tsym);
533 scope.enter(doubleType.tsym);
534 scope.enter(booleanType.tsym);
535 scope.enter(errType.tsym);
536
537 // Enter symbol for the errSymbol
538 scope.enter(errSymbol);
539
540 // Get the initial completer for ModuleSymbols from Modules
541 moduleCompleter = Modules.instance(context).getCompleter();
542
543 // Enter predefined classes. All are assumed to be in the java.base module.
544 objectType = enterClass("java.lang.Object");
545 objectMethodsType = enterClass("java.lang.runtime.ObjectMethods");
546 exactConversionsSupportType = enterClass("java.lang.runtime.ExactConversionsSupport");
547 objectsType = enterClass("java.util.Objects");
548 classType = enterClass("java.lang.Class");
549 stringType = enterClass("java.lang.String");
550 stringBufferType = enterClass("java.lang.StringBuffer");
551 stringBuilderType = enterClass("java.lang.StringBuilder");
552 cloneableType = enterClass("java.lang.Cloneable");
553 throwableType = enterClass("java.lang.Throwable");
554 serializableType = enterClass("java.io.Serializable");
555 serializedLambdaType = enterClass("java.lang.invoke.SerializedLambda");
556 varHandleType = enterClass("java.lang.invoke.VarHandle");
557 methodHandleType = enterClass("java.lang.invoke.MethodHandle");
558 methodHandlesType = enterClass("java.lang.invoke.MethodHandles");
559 methodHandleLookupType = enterClass("java.lang.invoke.MethodHandles$Lookup");
560 methodTypeType = enterClass("java.lang.invoke.MethodType");
561 errorType = enterClass("java.lang.Error");
562 illegalArgumentExceptionType = enterClass("java.lang.IllegalArgumentException");
563 interruptedExceptionType = enterClass("java.lang.InterruptedException");
564 exceptionType = enterClass("java.lang.Exception");
565 runtimeExceptionType = enterClass("java.lang.RuntimeException");
566 classNotFoundExceptionType = enterClass("java.lang.ClassNotFoundException");
567 noClassDefFoundErrorType = enterClass("java.lang.NoClassDefFoundError");
568 noSuchFieldErrorType = enterClass("java.lang.NoSuchFieldError");
569 assertionErrorType = enterClass("java.lang.AssertionError");
570 incompatibleClassChangeErrorType = enterClass("java.lang.IncompatibleClassChangeError");
571 cloneNotSupportedExceptionType = enterClass("java.lang.CloneNotSupportedException");
572 matchExceptionType = enterClass("java.lang.MatchException");
573 annotationType = enterClass("java.lang.annotation.Annotation");
601 autoCloseableClose = new MethodSymbol(PUBLIC,
602 names.close,
603 new MethodType(List.nil(), voidType,
604 List.of(exceptionType), methodClass),
605 autoCloseableType.tsym);
606 trustMeType = enterClass("java.lang.SafeVarargs");
607 nativeHeaderType = enterClass("java.lang.annotation.Native");
608 lambdaMetafactory = enterClass("java.lang.invoke.LambdaMetafactory");
609 stringConcatFactory = enterClass("java.lang.invoke.StringConcatFactory");
610 functionalInterfaceType = enterClass("java.lang.FunctionalInterface");
611 previewFeatureType = enterClass("jdk.internal.javac.PreviewFeature");
612 previewFeatureInternalType = enterSyntheticAnnotation("jdk.internal.PreviewFeature+Annotation");
613 restrictedType = enterClass("jdk.internal.javac.Restricted");
614 restrictedInternalType = enterSyntheticAnnotation("jdk.internal.javac.Restricted+Annotation");
615 typeDescriptorType = enterClass("java.lang.invoke.TypeDescriptor");
616 recordType = enterClass("java.lang.Record");
617 switchBootstrapsType = enterClass("java.lang.runtime.SwitchBootstraps");
618 constantBootstrapsType = enterClass("java.lang.invoke.ConstantBootstraps");
619 valueBasedType = enterClass("jdk.internal.ValueBased");
620 valueBasedInternalType = enterSyntheticAnnotation("jdk.internal.ValueBased+Annotation");
621 requiresIdentityType = enterClass("jdk.internal.RequiresIdentity");
622 requiresIdentityInternalType = enterSyntheticAnnotation(names.requiresIdentityInternal);
623 classDescType = enterClass("java.lang.constant.ClassDesc");
624 enumDescType = enterClass("java.lang.Enum$EnumDesc");
625 // For serialization lint checking
626 objectStreamFieldType = enterClass("java.io.ObjectStreamField");
627 objectInputStreamType = enterClass("java.io.ObjectInputStream");
628 objectOutputStreamType = enterClass("java.io.ObjectOutputStream");
629 ioExceptionType = enterClass("java.io.IOException");
630 objectStreamExceptionType = enterClass("java.io.ObjectStreamException");
631 externalizableType = enterClass("java.io.Externalizable");
632 objectInputType = enterClass("java.io.ObjectInput");
633 objectOutputType = enterClass("java.io.ObjectOutput");
634 synthesizeEmptyInterfaceIfMissing(autoCloseableType);
635 synthesizeEmptyInterfaceIfMissing(cloneableType);
636 synthesizeEmptyInterfaceIfMissing(serializableType);
637 synthesizeEmptyInterfaceIfMissing(lambdaMetafactory);
638 synthesizeEmptyInterfaceIfMissing(serializedLambdaType);
639 synthesizeEmptyInterfaceIfMissing(stringConcatFactory);
640 synthesizeBoxTypeIfMissing(doubleType);
641 synthesizeBoxTypeIfMissing(floatType);
642 synthesizeBoxTypeIfMissing(voidType);
643
644 // Enter a synthetic class that is used to mark internal
645 // proprietary classes in ct.sym. This class does not have a
646 // class file.
647 proprietaryType = enterSyntheticAnnotation("sun.Proprietary+Annotation");
648
649 // Enter a synthetic class that is used to provide profile info for
650 // classes in ct.sym. This class does not have a class file.
651 profileType = enterSyntheticAnnotation("jdk.Profile+Annotation");
652 MethodSymbol m = new MethodSymbol(PUBLIC | ABSTRACT, names.value, intType, profileType.tsym);
653 profileType.tsym.members().enter(m);
654
655 // Enter a class for arrays.
656 // The class implements java.lang.Cloneable and java.io.Serializable.
657 // It has a final length field and a clone method.
658 ClassType arrayClassType = (ClassType)arrayClass.type;
659 arrayClassType.supertype_field = objectType;
660 arrayClassType.interfaces_field = List.of(cloneableType, serializableType);
661 arrayClass.members_field = WriteableScope.create(arrayClass);
662 lengthVar = new VarSymbol(
663 PUBLIC | FINAL,
|
209 public final Type inheritedType;
210 public final Type profileType;
211 public final Type proprietaryType;
212 public final Type systemType;
213 public final Type autoCloseableType;
214 public final Type trustMeType;
215 public final Type lambdaMetafactory;
216 public final Type stringConcatFactory;
217 public final Type repeatableType;
218 public final Type documentedType;
219 public final Type elementTypeType;
220 public final Type functionalInterfaceType;
221 public final Type previewFeatureType;
222 public final Type previewFeatureInternalType;
223 public final Type restrictedType;
224 public final Type restrictedInternalType;
225 public final Type typeDescriptorType;
226 public final Type recordType;
227 public final Type switchBootstrapsType;
228 public final Type constantBootstrapsType;
229 public final Type requiresIdentityType;
230 public final Type requiresIdentityInternalType;
231 public final Type classDescType;
232 public final Type enumDescType;
233
234 // For serialization lint checking
235 public final Type objectStreamFieldType;
236 public final Type objectInputStreamType;
237 public final Type objectOutputStreamType;
238 public final Type ioExceptionType;
239 public final Type objectStreamExceptionType;
240 // For externalization lint checking
241 public final Type externalizableType;
242 public final Type objectInputType;
243 public final Type objectOutputType;
244
245 // valhalla
246 public final Type valueBasedType;
247 public final Type valueBasedInternalType;
248 public final Type migratedValueClassType;
249 public final Type migratedValueClassInternalType;
250 public final Type strictType;
251 /** The symbol representing the finalize method on Object */
252 public final MethodSymbol objectFinalize;
253 public final Type numberType;
254
255 /** The symbol representing the length field of an array.
256 */
257 public final VarSymbol lengthVar;
258
259 /** The symbol representing the final finalize method on enums */
260 public final MethodSymbol enumFinalFinalize;
261
262 /** The symbol representing the close method on TWR AutoCloseable type */
263 public final MethodSymbol autoCloseableClose;
264
265 /** The predefined type that belongs to a tag.
266 */
267 public final Type[] typeOfTag = new Type[TypeTag.getTypeTagCount()];
268
269 /** The name of the class that belongs to a basic type tag.
270 */
271 public final Name[] boxedName = new Name[TypeTag.getTypeTagCount()];
272
273 /** A hashtable containing the encountered top-level and member classes,
274 * indexed by flat names. The table does not contain local classes.
533
534 // Enter symbols for basic types.
535 scope.enter(byteType.tsym);
536 scope.enter(shortType.tsym);
537 scope.enter(charType.tsym);
538 scope.enter(intType.tsym);
539 scope.enter(longType.tsym);
540 scope.enter(floatType.tsym);
541 scope.enter(doubleType.tsym);
542 scope.enter(booleanType.tsym);
543 scope.enter(errType.tsym);
544
545 // Enter symbol for the errSymbol
546 scope.enter(errSymbol);
547
548 // Get the initial completer for ModuleSymbols from Modules
549 moduleCompleter = Modules.instance(context).getCompleter();
550
551 // Enter predefined classes. All are assumed to be in the java.base module.
552 objectType = enterClass("java.lang.Object");
553 throwableType = enterClass("java.lang.Throwable");
554 objectFinalize = new MethodSymbol(PROTECTED,
555 names.finalize,
556 new MethodType(List.nil(), voidType,
557 List.of(throwableType), methodClass),
558 objectType.tsym);
559 objectMethodsType = enterClass("java.lang.runtime.ObjectMethods");
560 exactConversionsSupportType = enterClass("java.lang.runtime.ExactConversionsSupport");
561 objectsType = enterClass("java.util.Objects");
562 classType = enterClass("java.lang.Class");
563 stringType = enterClass("java.lang.String");
564 stringBufferType = enterClass("java.lang.StringBuffer");
565 stringBuilderType = enterClass("java.lang.StringBuilder");
566 cloneableType = enterClass("java.lang.Cloneable");
567 serializableType = enterClass("java.io.Serializable");
568 serializedLambdaType = enterClass("java.lang.invoke.SerializedLambda");
569 varHandleType = enterClass("java.lang.invoke.VarHandle");
570 methodHandleType = enterClass("java.lang.invoke.MethodHandle");
571 methodHandlesType = enterClass("java.lang.invoke.MethodHandles");
572 methodHandleLookupType = enterClass("java.lang.invoke.MethodHandles$Lookup");
573 methodTypeType = enterClass("java.lang.invoke.MethodType");
574 errorType = enterClass("java.lang.Error");
575 illegalArgumentExceptionType = enterClass("java.lang.IllegalArgumentException");
576 interruptedExceptionType = enterClass("java.lang.InterruptedException");
577 exceptionType = enterClass("java.lang.Exception");
578 runtimeExceptionType = enterClass("java.lang.RuntimeException");
579 classNotFoundExceptionType = enterClass("java.lang.ClassNotFoundException");
580 noClassDefFoundErrorType = enterClass("java.lang.NoClassDefFoundError");
581 noSuchFieldErrorType = enterClass("java.lang.NoSuchFieldError");
582 assertionErrorType = enterClass("java.lang.AssertionError");
583 incompatibleClassChangeErrorType = enterClass("java.lang.IncompatibleClassChangeError");
584 cloneNotSupportedExceptionType = enterClass("java.lang.CloneNotSupportedException");
585 matchExceptionType = enterClass("java.lang.MatchException");
586 annotationType = enterClass("java.lang.annotation.Annotation");
614 autoCloseableClose = new MethodSymbol(PUBLIC,
615 names.close,
616 new MethodType(List.nil(), voidType,
617 List.of(exceptionType), methodClass),
618 autoCloseableType.tsym);
619 trustMeType = enterClass("java.lang.SafeVarargs");
620 nativeHeaderType = enterClass("java.lang.annotation.Native");
621 lambdaMetafactory = enterClass("java.lang.invoke.LambdaMetafactory");
622 stringConcatFactory = enterClass("java.lang.invoke.StringConcatFactory");
623 functionalInterfaceType = enterClass("java.lang.FunctionalInterface");
624 previewFeatureType = enterClass("jdk.internal.javac.PreviewFeature");
625 previewFeatureInternalType = enterSyntheticAnnotation("jdk.internal.PreviewFeature+Annotation");
626 restrictedType = enterClass("jdk.internal.javac.Restricted");
627 restrictedInternalType = enterSyntheticAnnotation("jdk.internal.javac.Restricted+Annotation");
628 typeDescriptorType = enterClass("java.lang.invoke.TypeDescriptor");
629 recordType = enterClass("java.lang.Record");
630 switchBootstrapsType = enterClass("java.lang.runtime.SwitchBootstraps");
631 constantBootstrapsType = enterClass("java.lang.invoke.ConstantBootstraps");
632 valueBasedType = enterClass("jdk.internal.ValueBased");
633 valueBasedInternalType = enterSyntheticAnnotation("jdk.internal.ValueBased+Annotation");
634 strictType = enterSyntheticAnnotation("jdk.internal.vm.annotation.Strict");
635 migratedValueClassType = enterClass("jdk.internal.MigratedValueClass");
636 migratedValueClassInternalType = enterSyntheticAnnotation("jdk.internal.MigratedValueClass+Annotation");
637 requiresIdentityType = enterClass("jdk.internal.RequiresIdentity");
638 requiresIdentityInternalType = enterSyntheticAnnotation(names.requiresIdentityInternal);
639 classDescType = enterClass("java.lang.constant.ClassDesc");
640 enumDescType = enterClass("java.lang.Enum$EnumDesc");
641 // For serialization lint checking
642 objectStreamFieldType = enterClass("java.io.ObjectStreamField");
643 objectInputStreamType = enterClass("java.io.ObjectInputStream");
644 objectOutputStreamType = enterClass("java.io.ObjectOutputStream");
645 ioExceptionType = enterClass("java.io.IOException");
646 objectStreamExceptionType = enterClass("java.io.ObjectStreamException");
647 externalizableType = enterClass("java.io.Externalizable");
648 objectInputType = enterClass("java.io.ObjectInput");
649 objectOutputType = enterClass("java.io.ObjectOutput");
650 synthesizeEmptyInterfaceIfMissing(autoCloseableType);
651 synthesizeEmptyInterfaceIfMissing(cloneableType);
652 synthesizeEmptyInterfaceIfMissing(serializableType);
653 synthesizeEmptyInterfaceIfMissing(lambdaMetafactory);
654 synthesizeEmptyInterfaceIfMissing(serializedLambdaType);
655 synthesizeEmptyInterfaceIfMissing(stringConcatFactory);
656 synthesizeBoxTypeIfMissing(doubleType);
657 synthesizeBoxTypeIfMissing(floatType);
658 synthesizeBoxTypeIfMissing(voidType);
659
660 numberType = enterClass("java.lang.Number");
661
662 // Enter a synthetic class that is used to mark internal
663 // proprietary classes in ct.sym. This class does not have a
664 // class file.
665 proprietaryType = enterSyntheticAnnotation("sun.Proprietary+Annotation");
666
667 // Enter a synthetic class that is used to provide profile info for
668 // classes in ct.sym. This class does not have a class file.
669 profileType = enterSyntheticAnnotation("jdk.Profile+Annotation");
670 MethodSymbol m = new MethodSymbol(PUBLIC | ABSTRACT, names.value, intType, profileType.tsym);
671 profileType.tsym.members().enter(m);
672
673 // Enter a class for arrays.
674 // The class implements java.lang.Cloneable and java.io.Serializable.
675 // It has a final length field and a clone method.
676 ClassType arrayClassType = (ClassType)arrayClass.type;
677 arrayClassType.supertype_field = objectType;
678 arrayClassType.interfaces_field = List.of(cloneableType, serializableType);
679 arrayClass.members_field = WriteableScope.create(arrayClass);
680 lengthVar = new VarSymbol(
681 PUBLIC | FINAL,
|