@@ -304,7 +304,8 @@ void collectPossibleCalleesByQualifiedLookup(
304
304
305
305
SmallVector<ValueDecl *, 2 > decls;
306
306
auto resolver = DC.getASTContext ().getLazyResolver ();
307
- if (!DC.lookupQualified (baseTy, name, NL_QualifiedDefault, resolver, decls))
307
+ if (!DC.lookupQualified (baseTy->getMetatypeInstanceType (), name,
308
+ NL_QualifiedDefault, resolver, decls))
308
309
return ;
309
310
310
311
for (auto *VD : decls) {
@@ -315,13 +316,22 @@ void collectPossibleCalleesByQualifiedLookup(
315
316
if (!VD->hasInterfaceType ())
316
317
continue ;
317
318
Type declaredMemberType = VD->getInterfaceType ();
318
- if (auto *AFD = dyn_cast<AbstractFunctionDecl>(VD))
319
- if (AFD->getDeclContext ()->isTypeContext ())
319
+ if (VD->getDeclContext ()->isTypeContext ()) {
320
+ if (auto *FD = dyn_cast<FuncDecl>(VD)) {
321
+ if (!baseTy->is <AnyMetatypeType>())
322
+ declaredMemberType =
323
+ declaredMemberType->castTo <AnyFunctionType>()->getResult ();
324
+ }
325
+ if (auto *CD = dyn_cast<ConstructorDecl>(VD)) {
326
+ if (!baseTy->is <AnyMetatypeType>())
327
+ continue ;
320
328
declaredMemberType =
321
329
declaredMemberType->castTo <AnyFunctionType>()->getResult ();
330
+ }
331
+ }
322
332
323
- auto fnType =
324
- baseTy-> getTypeOfMember ( DC.getParentModule (), VD, declaredMemberType);
333
+ auto fnType = baseTy-> getMetatypeInstanceType ()-> getTypeOfMember (
334
+ DC.getParentModule (), VD, declaredMemberType);
325
335
326
336
if (!fnType)
327
337
continue ;
@@ -341,8 +351,8 @@ void collectPossibleCalleesByQualifiedLookup(
341
351
DC.getASTContext (), &DC, CompletionTypeCheckKind::Normal, baseExpr, ref);
342
352
if (!baseTyOpt)
343
353
return ;
344
- auto baseTy = (*baseTyOpt)->getRValueType ()-> getMetatypeInstanceType () ;
345
- if (!baseTy->mayHaveMembers ())
354
+ auto baseTy = (*baseTyOpt)->getRValueType ();
355
+ if (!baseTy->getMetatypeInstanceType ()-> mayHaveMembers ())
346
356
return ;
347
357
348
358
collectPossibleCalleesByQualifiedLookup (DC, baseTy, name, candidates);
@@ -387,7 +397,7 @@ bool collectPossibleCalleesForApply(
387
397
auto baseTy = AMT->getInstanceType ();
388
398
if (baseTy->mayHaveMembers ())
389
399
collectPossibleCalleesByQualifiedLookup (
390
- DC, baseTy , DeclBaseName::createConstructor (), candidates);
400
+ DC, AMT , DeclBaseName::createConstructor (), candidates);
391
401
}
392
402
}
393
403
0 commit comments