private IEnumerable <Instruction> ProcessElementAccess(ElementAccessExpressionSyntax elementAccessSyntax) { if (elementAccessSyntax.GetFirstNonParenthesizedParent() is AssignmentExpressionSyntax assignmentSyntax && assignmentSyntax.IsKind(SyntaxKind.SimpleAssignmentExpression) && assignmentSyntax.Left.RemoveParentheses() == elementAccessSyntax) { return(NoInstructions); } var elementAccessType = this.semanticModel.GetTypeInfo(elementAccessSyntax.Expression).ConvertedType; if (elementAccessType == null) { return(NoInstructions); } if (elementAccessType.TypeKind == TypeKind.Array) { return(BuildArrayGetCall(elementAccessSyntax, elementAccessType)); } if (!(GetNodeSymbol(elementAccessSyntax) is IPropertySymbol indexerPropertySymbol)) { return(NoInstructions); } var instructions = new List <Instruction>(); var expressions = GetInvocationExpressions(indexerPropertySymbol.Parameters, elementAccessSyntax.ArgumentList, instructions); instructions.AddRange(BuildFunctionCall(elementAccessSyntax, indexerPropertySymbol.GetMethod, GetTargetExpression(elementAccessSyntax, indexerPropertySymbol), expressions)); return(instructions); }
private static bool IsDictionarySetItem(ElementAccessExpressionSyntax elementAccess) => (elementAccess.GetFirstNonParenthesizedParent() as AssignmentExpressionSyntax) ?.Left.RemoveParentheses() == elementAccess;