< prev index next >

langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symtab.java

Print this page




 137 
 138     /** A value for the errType, with a originalType of noType */
 139     public final Type errType;
 140 
 141     /** A value for the unknown type. */
 142     public final Type unknownType;
 143 
 144     /** The builtin type of all arrays. */
 145     public final ClassSymbol arrayClass;
 146     public final MethodSymbol arrayCloneMethod;
 147 
 148     /** VGJ: The (singleton) type of all bound types. */
 149     public final ClassSymbol boundClass;
 150 
 151     /** The builtin type of all methods. */
 152     public final ClassSymbol methodClass;
 153 
 154     /** A symbol for the java.base module.
 155      */
 156     public final ModuleSymbol java_base;

 157 
 158     /** Predefined types.
 159      */
 160     public final Type objectType;
 161     public final Type valueClassType;
 162     public final Type objectsType;
 163     public final Type classType;
 164     public final Type classLoaderType;
 165     public final Type stringType;
 166     public final Type stringBufferType;
 167     public final Type stringBuilderType;
 168     public final Type cloneableType;
 169     public final Type serializableType;
 170     public final Type serializedLambdaType;
 171     public final Type varHandleType;
 172     public final Type methodHandleType;
 173     public final Type methodHandleLookupType;
 174     public final Type methodTypeType;
 175     public final Type nativeHeaderType;
 176     public final Type throwableType;


 512         // Enter symbols for basic types.
 513         scope.enter(byteType.tsym);
 514         scope.enter(shortType.tsym);
 515         scope.enter(charType.tsym);
 516         scope.enter(intType.tsym);
 517         scope.enter(longType.tsym);
 518         scope.enter(floatType.tsym);
 519         scope.enter(doubleType.tsym);
 520         scope.enter(booleanType.tsym);
 521         scope.enter(errType.tsym);
 522 
 523         // Enter symbol for the errSymbol
 524         scope.enter(errSymbol);
 525 
 526         Source source = Source.instance(context);
 527         if (source.allowModules()) {
 528             java_base = enterModule(names.java_base);
 529             //avoid completing java.base during the Symtab initialization
 530             java_base.completer = Completer.NULL_COMPLETER;
 531             java_base.visiblePackages = Collections.emptyMap();




 532         } else {
 533             java_base = noModule;

 534         }
 535 
 536         // Get the initial completer for ModuleSymbols from Modules
 537         moduleCompleter = Modules.instance(context).getCompleter();
 538 
 539         // Enter predefined classes. All are assumed to be in the java.base module.
 540         objectType = enterClass("java.lang.Object");
 541         objectsType = enterClass("java.util.Objects");
 542         valueClassType = enterClass("java.lang.__Value");
 543         classType = enterClass("java.lang.Class");
 544         stringType = enterClass("java.lang.String");
 545         stringBufferType = enterClass("java.lang.StringBuffer");
 546         stringBuilderType = enterClass("java.lang.StringBuilder");
 547         cloneableType = enterClass("java.lang.Cloneable");
 548         throwableType = enterClass("java.lang.Throwable");
 549         serializableType = enterClass("java.io.Serializable");
 550         serializedLambdaType = enterClass("java.lang.invoke.SerializedLambda");
 551         varHandleType = enterClass("java.lang.invoke.VarHandle");
 552         methodHandleType = enterClass("java.lang.invoke.MethodHandle");
 553         methodHandleLookupType = enterClass("java.lang.invoke.MethodHandles$Lookup");


 583         retentionType = enterClass("java.lang.annotation.Retention");
 584         deprecatedType = enterClass("java.lang.Deprecated");
 585         suppressWarningsType = enterClass("java.lang.SuppressWarnings");
 586         supplierType = enterClass("java.util.function.Supplier");
 587         inheritedType = enterClass("java.lang.annotation.Inherited");
 588         repeatableType = enterClass("java.lang.annotation.Repeatable");
 589         documentedType = enterClass("java.lang.annotation.Documented");
 590         elementTypeType = enterClass("java.lang.annotation.ElementType");
 591         systemType = enterClass("java.lang.System");
 592         autoCloseableType = enterClass("java.lang.AutoCloseable");
 593         autoCloseableClose = new MethodSymbol(PUBLIC,
 594                              names.close,
 595                              new MethodType(List.nil(), voidType,
 596                                             List.of(exceptionType), methodClass),
 597                              autoCloseableType.tsym);
 598         trustMeType = enterClass("java.lang.SafeVarargs");
 599         nativeHeaderType = enterClass("java.lang.annotation.Native");
 600         lambdaMetafactory = enterClass("java.lang.invoke.LambdaMetafactory");
 601         stringConcatFactory = enterClass("java.lang.invoke.StringConcatFactory");
 602         functionalInterfaceType = enterClass("java.lang.FunctionalInterface");
 603         valueCapableClass = enterClass("jvm.internal.value.ValueCapableClass");


 604 
 605         synthesizeEmptyInterfaceIfMissing(autoCloseableType);
 606         synthesizeEmptyInterfaceIfMissing(cloneableType);
 607         synthesizeEmptyInterfaceIfMissing(serializableType);
 608         synthesizeEmptyInterfaceIfMissing(lambdaMetafactory);
 609         synthesizeEmptyInterfaceIfMissing(serializedLambdaType);
 610         synthesizeEmptyInterfaceIfMissing(stringConcatFactory);
 611         synthesizeBoxTypeIfMissing(doubleType);
 612         synthesizeBoxTypeIfMissing(floatType);
 613         synthesizeBoxTypeIfMissing(voidType);
 614         synthesizeJavaLangValueClassIfMissing(valueClassType);
 615         synthesizeDeriveValueTypeIfMissing(valueCapableClass);
 616 
 617         // Enter a synthetic class that is used to mark internal
 618         // proprietary classes in ct.sym.  This class does not have a
 619         // class file.
 620         proprietaryType = enterSyntheticAnnotation("sun.Proprietary+Annotation");
 621 
 622         // Enter a synthetic class that is used to provide profile info for
 623         // classes in ct.sym.  This class does not have a class file.


 629         // The class implements java.lang.Cloneable and java.io.Serializable.
 630         // It has a final length field and a clone method.
 631         ClassType arrayClassType = (ClassType)arrayClass.type;
 632         arrayClassType.supertype_field = objectType;
 633         arrayClassType.interfaces_field = List.of(cloneableType, serializableType);
 634         arrayClass.members_field = WriteableScope.create(arrayClass);
 635         lengthVar = new VarSymbol(
 636             PUBLIC | FINAL,
 637             names.length,
 638             intType,
 639             arrayClass);
 640         arrayClass.members().enter(lengthVar);
 641         arrayCloneMethod = new MethodSymbol(
 642             PUBLIC,
 643             names.clone,
 644             new MethodType(List.nil(), objectType,
 645                            List.nil(), methodClass),
 646             arrayClass);
 647         arrayClass.members().enter(arrayCloneMethod);
 648 
 649         if (java_base != noModule)
 650             java_base.completer = moduleCompleter::complete; //bootstrap issues


 651 
 652     }
 653 
 654     /** Define a new class given its name and owner.
 655      */
 656     public ClassSymbol defineClass(Name name, Symbol owner) {
 657         ClassSymbol c = new ClassSymbol(0, name, owner);
 658         c.completer = initialCompleter;
 659         return c;
 660     }
 661 
 662     /** Create a new toplevel or member class symbol with given name
 663      *  and owner and enter in `classes' unless already there.
 664      */
 665     public ClassSymbol enterClass(ModuleSymbol msym, Name name, TypeSymbol owner) {
 666         Assert.checkNonNull(msym);
 667         Name flatname = TypeSymbol.formFlatName(name, owner);
 668         ClassSymbol c = getClass(msym, flatname);
 669         if (c == null) {
 670             c = defineClass(name, owner);




 137 
 138     /** A value for the errType, with a originalType of noType */
 139     public final Type errType;
 140 
 141     /** A value for the unknown type. */
 142     public final Type unknownType;
 143 
 144     /** The builtin type of all arrays. */
 145     public final ClassSymbol arrayClass;
 146     public final MethodSymbol arrayCloneMethod;
 147 
 148     /** VGJ: The (singleton) type of all bound types. */
 149     public final ClassSymbol boundClass;
 150 
 151     /** The builtin type of all methods. */
 152     public final ClassSymbol methodClass;
 153 
 154     /** A symbol for the java.base module.
 155      */
 156     public final ModuleSymbol java_base;
 157     public final ModuleSymbol jdk_incubator_mvt;
 158 
 159     /** Predefined types.
 160      */
 161     public final Type objectType;
 162     public final Type valueClassType;
 163     public final Type objectsType;
 164     public final Type classType;
 165     public final Type classLoaderType;
 166     public final Type stringType;
 167     public final Type stringBufferType;
 168     public final Type stringBuilderType;
 169     public final Type cloneableType;
 170     public final Type serializableType;
 171     public final Type serializedLambdaType;
 172     public final Type varHandleType;
 173     public final Type methodHandleType;
 174     public final Type methodHandleLookupType;
 175     public final Type methodTypeType;
 176     public final Type nativeHeaderType;
 177     public final Type throwableType;


 513         // Enter symbols for basic types.
 514         scope.enter(byteType.tsym);
 515         scope.enter(shortType.tsym);
 516         scope.enter(charType.tsym);
 517         scope.enter(intType.tsym);
 518         scope.enter(longType.tsym);
 519         scope.enter(floatType.tsym);
 520         scope.enter(doubleType.tsym);
 521         scope.enter(booleanType.tsym);
 522         scope.enter(errType.tsym);
 523 
 524         // Enter symbol for the errSymbol
 525         scope.enter(errSymbol);
 526 
 527         Source source = Source.instance(context);
 528         if (source.allowModules()) {
 529             java_base = enterModule(names.java_base);
 530             //avoid completing java.base during the Symtab initialization
 531             java_base.completer = Completer.NULL_COMPLETER;
 532             java_base.visiblePackages = Collections.emptyMap();
 533 
 534             jdk_incubator_mvt = enterModule(names.fromString("jdk.incubator.mvt"));
 535             jdk_incubator_mvt.completer = Completer.NULL_COMPLETER;
 536             jdk_incubator_mvt.visiblePackages = Collections.emptyMap();
 537         } else {
 538             java_base = noModule;
 539             jdk_incubator_mvt = noModule;
 540         }
 541 
 542         // Get the initial completer for ModuleSymbols from Modules
 543         moduleCompleter = Modules.instance(context).getCompleter();
 544 
 545         // Enter predefined classes. All are assumed to be in the java.base module.
 546         objectType = enterClass("java.lang.Object");
 547         objectsType = enterClass("java.util.Objects");
 548         valueClassType = enterClass("java.lang.__Value");
 549         classType = enterClass("java.lang.Class");
 550         stringType = enterClass("java.lang.String");
 551         stringBufferType = enterClass("java.lang.StringBuffer");
 552         stringBuilderType = enterClass("java.lang.StringBuilder");
 553         cloneableType = enterClass("java.lang.Cloneable");
 554         throwableType = enterClass("java.lang.Throwable");
 555         serializableType = enterClass("java.io.Serializable");
 556         serializedLambdaType = enterClass("java.lang.invoke.SerializedLambda");
 557         varHandleType = enterClass("java.lang.invoke.VarHandle");
 558         methodHandleType = enterClass("java.lang.invoke.MethodHandle");
 559         methodHandleLookupType = enterClass("java.lang.invoke.MethodHandles$Lookup");


 589         retentionType = enterClass("java.lang.annotation.Retention");
 590         deprecatedType = enterClass("java.lang.Deprecated");
 591         suppressWarningsType = enterClass("java.lang.SuppressWarnings");
 592         supplierType = enterClass("java.util.function.Supplier");
 593         inheritedType = enterClass("java.lang.annotation.Inherited");
 594         repeatableType = enterClass("java.lang.annotation.Repeatable");
 595         documentedType = enterClass("java.lang.annotation.Documented");
 596         elementTypeType = enterClass("java.lang.annotation.ElementType");
 597         systemType = enterClass("java.lang.System");
 598         autoCloseableType = enterClass("java.lang.AutoCloseable");
 599         autoCloseableClose = new MethodSymbol(PUBLIC,
 600                              names.close,
 601                              new MethodType(List.nil(), voidType,
 602                                             List.of(exceptionType), methodClass),
 603                              autoCloseableType.tsym);
 604         trustMeType = enterClass("java.lang.SafeVarargs");
 605         nativeHeaderType = enterClass("java.lang.annotation.Native");
 606         lambdaMetafactory = enterClass("java.lang.invoke.LambdaMetafactory");
 607         stringConcatFactory = enterClass("java.lang.invoke.StringConcatFactory");
 608         functionalInterfaceType = enterClass("java.lang.FunctionalInterface");
 609 
 610         Name vccName = names.fromString("jdk.incubator.mvt.ValueCapableClass");
 611         valueCapableClass = enterClass(jdk_incubator_mvt, vccName).type;
 612 
 613         synthesizeEmptyInterfaceIfMissing(autoCloseableType);
 614         synthesizeEmptyInterfaceIfMissing(cloneableType);
 615         synthesizeEmptyInterfaceIfMissing(serializableType);
 616         synthesizeEmptyInterfaceIfMissing(lambdaMetafactory);
 617         synthesizeEmptyInterfaceIfMissing(serializedLambdaType);
 618         synthesizeEmptyInterfaceIfMissing(stringConcatFactory);
 619         synthesizeBoxTypeIfMissing(doubleType);
 620         synthesizeBoxTypeIfMissing(floatType);
 621         synthesizeBoxTypeIfMissing(voidType);
 622         synthesizeJavaLangValueClassIfMissing(valueClassType);
 623         synthesizeDeriveValueTypeIfMissing(valueCapableClass);
 624 
 625         // Enter a synthetic class that is used to mark internal
 626         // proprietary classes in ct.sym.  This class does not have a
 627         // class file.
 628         proprietaryType = enterSyntheticAnnotation("sun.Proprietary+Annotation");
 629 
 630         // Enter a synthetic class that is used to provide profile info for
 631         // classes in ct.sym.  This class does not have a class file.


 637         // The class implements java.lang.Cloneable and java.io.Serializable.
 638         // It has a final length field and a clone method.
 639         ClassType arrayClassType = (ClassType)arrayClass.type;
 640         arrayClassType.supertype_field = objectType;
 641         arrayClassType.interfaces_field = List.of(cloneableType, serializableType);
 642         arrayClass.members_field = WriteableScope.create(arrayClass);
 643         lengthVar = new VarSymbol(
 644             PUBLIC | FINAL,
 645             names.length,
 646             intType,
 647             arrayClass);
 648         arrayClass.members().enter(lengthVar);
 649         arrayCloneMethod = new MethodSymbol(
 650             PUBLIC,
 651             names.clone,
 652             new MethodType(List.nil(), objectType,
 653                            List.nil(), methodClass),
 654             arrayClass);
 655         arrayClass.members().enter(arrayCloneMethod);
 656 
 657         if (java_base != noModule) {
 658             java_base.completer = moduleCompleter::complete; //bootstrap issues
 659             jdk_incubator_mvt.completer = moduleCompleter::complete; //bootstrap issues
 660         }
 661 
 662     }
 663 
 664     /** Define a new class given its name and owner.
 665      */
 666     public ClassSymbol defineClass(Name name, Symbol owner) {
 667         ClassSymbol c = new ClassSymbol(0, name, owner);
 668         c.completer = initialCompleter;
 669         return c;
 670     }
 671 
 672     /** Create a new toplevel or member class symbol with given name
 673      *  and owner and enter in `classes' unless already there.
 674      */
 675     public ClassSymbol enterClass(ModuleSymbol msym, Name name, TypeSymbol owner) {
 676         Assert.checkNonNull(msym);
 677         Name flatname = TypeSymbol.formFlatName(name, owner);
 678         ClassSymbol c = getClass(msym, flatname);
 679         if (c == null) {
 680             c = defineClass(name, owner);


< prev index next >