@@ -6289,8 +6289,7 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
62896289
62906290 void visitOpenedArchetypeType (OpenedArchetypeType *T) {
62916291 if (auto parent = T->getParent ()) {
6292- visitParentType (parent);
6293- printArchetypeCommon (T, getAbstractTypeParamDecl (T));
6292+ printArchetypeCommon (T);
62946293 return ;
62956294 }
62966295
@@ -6299,8 +6298,20 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
62996298 visit (T->getExistentialType ());
63006299 }
63016300
6302- void printArchetypeCommon (ArchetypeType *T,
6303- const AbstractTypeParamDecl *Decl) {
6301+ void printDependentMember (DependentMemberType *T) {
6302+ if (auto *const Assoc = T->getAssocType ()) {
6303+ if (Options.ProtocolQualifiedDependentMemberTypes ) {
6304+ Printer << " [" ;
6305+ Printer.printName (Assoc->getProtocol ()->getName ());
6306+ Printer << " ]" ;
6307+ }
6308+ Printer.printTypeRef (T, Assoc, T->getName ());
6309+ } else {
6310+ Printer.printName (T->getName ());
6311+ }
6312+ }
6313+
6314+ void printArchetypeCommon (ArchetypeType *T) {
63046315 if (Options.AlternativeTypeNames ) {
63056316 auto found = Options.AlternativeTypeNames ->find (T->getCanonicalType ());
63066317 if (found != Options.AlternativeTypeNames ->end ()) {
@@ -6309,36 +6320,22 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
63096320 }
63106321 }
63116322
6312- const auto Name = T->getName ();
6313- if (Name.empty ()) {
6314- Printer << " <anonymous>" ;
6315- } else if (Decl) {
6316- Printer.printTypeRef (T, Decl, Name);
6323+ auto interfaceType = T->getInterfaceType ();
6324+ if (auto *dependentMember = interfaceType->getAs <DependentMemberType>()) {
6325+ visitParentType (T->getParent ());
6326+ printDependentMember (dependentMember);
63176327 } else {
6318- Printer. printName (Name );
6328+ visit (interfaceType );
63196329 }
63206330 }
63216331
6322- static AbstractTypeParamDecl *getAbstractTypeParamDecl (ArchetypeType *T) {
6323- if (auto gp = T->getInterfaceType ()->getAs <GenericTypeParamType>()) {
6324- return gp->getDecl ();
6325- }
6326-
6327- auto depMemTy = T->getInterfaceType ()->castTo <DependentMemberType>();
6328- return depMemTy->getAssocType ();
6329- }
6330-
63316332 void visitPrimaryArchetypeType (PrimaryArchetypeType *T) {
6332- if (auto parent = T->getParent ())
6333- visitParentType (parent);
6334-
6335- printArchetypeCommon (T, getAbstractTypeParamDecl (T));
6333+ printArchetypeCommon (T);
63366334 }
63376335
63386336 void visitOpaqueTypeArchetypeType (OpaqueTypeArchetypeType *T) {
63396337 if (auto parent = T->getParent ()) {
6340- visitParentType (parent);
6341- printArchetypeCommon (T, getAbstractTypeParamDecl (T));
6338+ printArchetypeCommon (T);
63426339 return ;
63436340 }
63446341
@@ -6415,9 +6412,7 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
64156412 }
64166413
64176414 void visitSequenceArchetypeType (SequenceArchetypeType *T) {
6418- if (auto parent = T->getParent ())
6419- visitParentType (parent);
6420- printArchetypeCommon (T, getAbstractTypeParamDecl (T));
6415+ printArchetypeCommon (T);
64216416 }
64226417
64236418 void visitGenericTypeParamType (GenericTypeParamType *T) {
@@ -6475,16 +6470,7 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
64756470
64766471 void visitDependentMemberType (DependentMemberType *T) {
64776472 visitParentType (T->getBase ());
6478- if (auto *const Assoc = T->getAssocType ()) {
6479- if (Options.ProtocolQualifiedDependentMemberTypes ) {
6480- Printer << " [" ;
6481- Printer.printName (Assoc->getProtocol ()->getName ());
6482- Printer << " ]" ;
6483- }
6484- Printer.printTypeRef (T, Assoc, T->getName ());
6485- } else {
6486- Printer.printName (T->getName ());
6487- }
6473+ printDependentMember (T);
64886474 }
64896475
64906476#define REF_STORAGE (Name, name, ...) \
0 commit comments