private void AddUnboundDefaultMemberReference( DictionaryAccessExpression expression, QualifiedModuleName module, Declaration scope, Declaration parent, bool isAssignmentTarget, bool hasExplicitLetStatement, bool isSetAssignment) { var callSiteContext = expression.DefaultMemberContext; var identifier = expression.Context.GetText(); var selection = callSiteContext.GetSelection(); var callee = expression.ReferencedDeclaration; var reference = new IdentifierReference( module, scope, parent, identifier, selection, callSiteContext, callee, isAssignmentTarget, hasExplicitLetStatement, FindIdentifierAnnotations(module, selection.StartLine), isSetAssignment, isIndexedDefaultMemberAccess: true, defaultMemberRecursionDepth: expression.DefaultMemberRecursionDepth); _declarationFinder.AddUnboundDefaultMemberAccess(reference); }
private void Visit( DictionaryAccessExpression expression, QualifiedModuleName module, Declaration scope, Declaration parent, bool isAssignmentTarget, bool hasExplicitLetStatement, bool isSetAssignment) { Visit(expression.LExpression, module, scope, parent, hasExplicitLetStatement: hasExplicitLetStatement); var containedExpression = expression.ContainedDefaultMemberRecursionExpression; if (containedExpression != null) { Visit(containedExpression, module, scope, parent, hasExplicitLetStatement); } switch (expression.Classification) { case ExpressionClassification.ResolutionFailed: AddFailedIndexedDefaultMemberReference(expression, module, scope, parent, isAssignmentTarget, hasExplicitLetStatement); break; case ExpressionClassification.Unbound: AddUnboundDefaultMemberReference(expression, module, scope, parent, isAssignmentTarget, hasExplicitLetStatement, isSetAssignment); break; default: if (expression.ReferencedDeclaration != null) { AddDefaultMemberReference(expression, module, scope, parent, isAssignmentTarget, hasExplicitLetStatement, isSetAssignment); } break; } // Argument List not affected by being unbound. foreach (var argument in expression.ArgumentList.Arguments) { if (argument.ReferencedParameter != null) { AddArgumentReference(argument, module, scope, parent); } if (argument.Expression != null) { Visit(argument.Expression, module, scope, parent); } if (argument.NamedArgumentExpression != null) { Visit(argument.NamedArgumentExpression, module, scope, parent); } } }
private void Visit(DictionaryAccessExpression expression, Declaration parent, IBoundExpression withExpression) { Visit(expression.LExpression, parent, withExpression); }