@@ -191,14 +191,21 @@ private void Visit(
191
191
{
192
192
Visit ( expression . LExpression , module , scope , parent , hasExplicitLetStatement : hasExplicitLetStatement ) ;
193
193
194
- if ( expression . Classification != ExpressionClassification . Unbound
195
- && expression . ReferencedDeclaration != null )
194
+ switch ( expression . Classification )
196
195
{
197
- AddDefaultMemberReference ( expression , module , scope , parent , isAssignmentTarget , hasExplicitLetStatement , isSetAssignment ) ;
198
- }
199
- else
200
- {
201
- AddUnboundDefaultMemberReference ( expression , module , scope , parent , isAssignmentTarget , hasExplicitLetStatement , isSetAssignment ) ;
196
+ case ExpressionClassification . ResolutionFailed :
197
+ AddFailedIndexedDefaultMemberReference ( expression , module , scope , parent , isAssignmentTarget , hasExplicitLetStatement , expression . ArgumentList . HasArguments ) ;
198
+ break ;
199
+ case ExpressionClassification . Unbound :
200
+ AddUnboundDefaultMemberReference ( expression , module , scope , parent , isAssignmentTarget , hasExplicitLetStatement , isSetAssignment ) ;
201
+ break ;
202
+ default :
203
+ if ( expression . ReferencedDeclaration != null )
204
+ {
205
+ AddDefaultMemberReference ( expression , module , scope , parent , isAssignmentTarget , hasExplicitLetStatement , isSetAssignment ) ;
206
+ }
207
+
208
+ break ;
202
209
}
203
210
}
204
211
else if ( expression . Classification != ExpressionClassification . Unbound
@@ -343,6 +350,37 @@ private void AddUnboundDefaultMemberReference(
343
350
_declarationFinder . AddUnboundDefaultMemberAccess ( reference ) ;
344
351
}
345
352
353
+ private void AddFailedIndexedDefaultMemberReference (
354
+ IndexExpression expression ,
355
+ QualifiedModuleName module ,
356
+ Declaration scope ,
357
+ Declaration parent ,
358
+ bool isAssignmentTarget ,
359
+ bool hasExplicitLetStatement ,
360
+ bool hasArguments )
361
+ {
362
+ var callSiteContext = expression . Context ;
363
+ var identifier = callSiteContext . GetText ( ) ;
364
+ var selection = callSiteContext . GetSelection ( ) ;
365
+ var callee = expression . ReferencedDeclaration ;
366
+ var reference = new IdentifierReference (
367
+ module ,
368
+ scope ,
369
+ parent ,
370
+ identifier ,
371
+ selection ,
372
+ callSiteContext ,
373
+ callee ,
374
+ isAssignmentTarget ,
375
+ hasExplicitLetStatement ,
376
+ FindIdentifierAnnotations ( module , selection . StartLine ) ,
377
+ false ,
378
+ isIndexedDefaultMemberAccess : hasArguments ,
379
+ isNonIndexedDefaultMemberAccess : ! hasArguments ,
380
+ defaultMemberRecursionDepth : expression . DefaultMemberRecursionDepth ) ;
381
+ _declarationFinder . AddFailedIndexedDefaultMemberResolution ( reference ) ;
382
+ }
383
+
346
384
private void Visit (
347
385
DictionaryAccessExpression expression ,
348
386
QualifiedModuleName module ,
@@ -360,15 +398,23 @@ private void Visit(
360
398
Visit ( containedExpression , module , scope , parent , hasExplicitLetStatement ) ;
361
399
}
362
400
363
- if ( expression . Classification != ExpressionClassification . Unbound
364
- && expression . ReferencedDeclaration != null )
365
- {
366
- AddDefaultMemberReference ( expression , module , scope , parent , isAssignmentTarget , hasExplicitLetStatement , isSetAssignment ) ;
367
- }
368
- else
401
+ switch ( expression . Classification )
369
402
{
370
- AddUnboundDefaultMemberReference ( expression , module , scope , parent , isAssignmentTarget , hasExplicitLetStatement , isSetAssignment ) ;
403
+ case ExpressionClassification . ResolutionFailed :
404
+ AddFailedIndexedDefaultMemberReference ( expression , module , scope , parent , isAssignmentTarget , hasExplicitLetStatement ) ;
405
+ break ;
406
+ case ExpressionClassification . Unbound :
407
+ AddUnboundDefaultMemberReference ( expression , module , scope , parent , isAssignmentTarget , hasExplicitLetStatement , isSetAssignment ) ;
408
+ break ;
409
+ default :
410
+ if ( expression . ReferencedDeclaration != null )
411
+ {
412
+ AddDefaultMemberReference ( expression , module , scope , parent , isAssignmentTarget , hasExplicitLetStatement , isSetAssignment ) ;
413
+ }
414
+
415
+ break ;
371
416
}
417
+
372
418
// Argument List not affected by being unbound.
373
419
foreach ( var argument in expression . ArgumentList . Arguments )
374
420
{
@@ -483,6 +529,35 @@ private void AddDefaultMemberReference(
483
529
defaultMemberRecursionDepth : expression . DefaultMemberRecursionDepth ) ;
484
530
}
485
531
532
+ private void AddFailedIndexedDefaultMemberReference (
533
+ DictionaryAccessExpression expression ,
534
+ QualifiedModuleName module ,
535
+ Declaration scope ,
536
+ Declaration parent ,
537
+ bool isAssignmentTarget ,
538
+ bool hasExplicitLetStatement )
539
+ {
540
+ var callSiteContext = expression . Context ;
541
+ var identifier = callSiteContext . GetText ( ) ;
542
+ var selection = callSiteContext . GetSelection ( ) ;
543
+ var callee = expression . ReferencedDeclaration ;
544
+ var reference = new IdentifierReference (
545
+ module ,
546
+ scope ,
547
+ parent ,
548
+ identifier ,
549
+ selection ,
550
+ callSiteContext ,
551
+ callee ,
552
+ isAssignmentTarget ,
553
+ hasExplicitLetStatement ,
554
+ FindIdentifierAnnotations ( module , selection . StartLine ) ,
555
+ false ,
556
+ isIndexedDefaultMemberAccess : true ,
557
+ defaultMemberRecursionDepth : expression . DefaultMemberRecursionDepth ) ;
558
+ _declarationFinder . AddFailedIndexedDefaultMemberResolution ( reference ) ;
559
+ }
560
+
486
561
private void Visit (
487
562
LetCoercionDefaultMemberAccessExpression expression ,
488
563
QualifiedModuleName module ,
0 commit comments