@@ -113,8 +113,7 @@ namespace {
113113
114114 // If this isn't a protocol member to be given special
115115 // treatment, just add the result.
116- if (!Options.contains (NameLookupFlags::ProtocolMembers) ||
117- !isa<ProtocolDecl>(foundDC) ||
116+ if (!isa<ProtocolDecl>(foundDC) ||
118117 isa<GenericTypeParamDecl>(found) ||
119118 isa<TypeAliasDecl>(found) ||
120119 (isa<FuncDecl>(found) && cast<FuncDecl>(found)->isOperator ())) {
@@ -124,9 +123,6 @@ namespace {
124123
125124 assert (isa<ProtocolDecl>(foundDC));
126125
127- if (!Options.contains (NameLookupFlags::PerformConformanceCheck))
128- return ;
129-
130126 // If we found something within the protocol itself, and our
131127 // search began somewhere that is not in a protocol or extension
132128 // thereof, remap this declaration to the witness.
@@ -210,11 +206,9 @@ namespace {
210206
211207static UnqualifiedLookupOptions
212208convertToUnqualifiedLookupOptions (NameLookupOptions options) {
213- UnqualifiedLookupOptions newOptions;
209+ UnqualifiedLookupOptions newOptions = UnqualifiedLookupFlags::AllowProtocolMembers ;
214210 if (options.contains (NameLookupFlags::KnownPrivate))
215211 newOptions |= UnqualifiedLookupFlags::KnownPrivate;
216- if (options.contains (NameLookupFlags::ProtocolMembers))
217- newOptions |= UnqualifiedLookupFlags::AllowProtocolMembers;
218212 if (options.contains (NameLookupFlags::IgnoreAccessControl))
219213 newOptions |= UnqualifiedLookupFlags::IgnoreAccessControl;
220214 if (options.contains (NameLookupFlags::IncludeOuterResults))
@@ -278,8 +272,7 @@ TypeChecker::lookupUnqualifiedType(DeclContext *dc, DeclNameRef name,
278272
279273 auto lookup =
280274 evaluateOrDefault (ctx.evaluator , UnqualifiedLookupRequest{desc}, {});
281- if (!lookup.allResults ().empty () ||
282- !options.contains (NameLookupFlags::ProtocolMembers))
275+ if (!lookup.allResults ().empty ())
283276 return lookup;
284277 }
285278
@@ -302,18 +295,12 @@ LookupResult TypeChecker::lookupMember(DeclContext *dc,
302295 assert (type->mayHaveMembers ());
303296
304297 LookupResult result;
305- NLOptions subOptions = NL_QualifiedDefault;
298+ NLOptions subOptions = ( NL_QualifiedDefault | NL_ProtocolMembers) ;
306299 if (options.contains (NameLookupFlags::KnownPrivate))
307300 subOptions |= NL_KnownNonCascadingDependency;
308301 if (options.contains (NameLookupFlags::IgnoreAccessControl))
309302 subOptions |= NL_IgnoreAccessControl;
310303
311- if (options.contains (NameLookupFlags::ProtocolMembers))
312- subOptions |= NL_ProtocolMembers;
313-
314- if (options.contains (NameLookupFlags::IncludeAttributeImplements))
315- subOptions |= NL_IncludeAttributeImplements;
316-
317304 // We handle our own overriding/shadowing filtering.
318305 subOptions &= ~NL_RemoveOverridden;
319306 subOptions &= ~NL_RemoveNonVisible;
@@ -387,12 +374,10 @@ LookupTypeResult TypeChecker::lookupMemberType(DeclContext *dc,
387374
388375 // Look for members with the given name.
389376 SmallVector<ValueDecl *, 4 > decls;
390- NLOptions subOptions = NL_QualifiedDefault | NL_OnlyTypes;
377+ NLOptions subOptions = ( NL_QualifiedDefault | NL_OnlyTypes | NL_ProtocolMembers) ;
391378
392379 if (options.contains (NameLookupFlags::KnownPrivate))
393380 subOptions |= NL_KnownNonCascadingDependency;
394- if (options.contains (NameLookupFlags::ProtocolMembers))
395- subOptions |= NL_ProtocolMembers;
396381 if (options.contains (NameLookupFlags::IgnoreAccessControl))
397382 subOptions |= NL_IgnoreAccessControl;
398383
@@ -434,21 +419,7 @@ LookupTypeResult TypeChecker::lookupMemberType(DeclContext *dc,
434419 if (auto assocType = dyn_cast<AssociatedTypeDecl>(typeDecl)) {
435420 if (!type->is <ArchetypeType>() &&
436421 !type->isTypeParameter ()) {
437- if (options.contains (NameLookupFlags::PerformConformanceCheck))
438- inferredAssociatedTypes.push_back (assocType);
439- continue ;
440- }
441- }
442-
443- // FIXME: This is a hack, we should be able to remove this entire 'if'
444- // statement once we learn how to deal with the circularity here.
445- if (auto *aliasDecl = dyn_cast<TypeAliasDecl>(typeDecl)) {
446- if (isa<ProtocolDecl>(aliasDecl->getDeclContext ()) &&
447- !type->is <ArchetypeType>() &&
448- !type->isTypeParameter () &&
449- aliasDecl->getUnderlyingType ()->getCanonicalType ()
450- ->hasTypeParameter () &&
451- !options.contains (NameLookupFlags::PerformConformanceCheck)) {
422+ inferredAssociatedTypes.push_back (assocType);
452423 continue ;
453424 }
454425 }
@@ -511,11 +482,6 @@ LookupTypeResult TypeChecker::lookupMemberType(DeclContext *dc,
511482 return result;
512483}
513484
514- LookupResult TypeChecker::lookupConstructors (DeclContext *dc, Type type,
515- NameLookupOptions options) {
516- return lookupMember (dc, type, DeclNameRef::createConstructor (), options);
517- }
518-
519485unsigned TypeChecker::getCallEditDistance (DeclNameRef writtenName,
520486 DeclName correctedName,
521487 unsigned maxEditDistance) {
0 commit comments