/// <summary> /// The save. /// </summary> /// <param name="memberAccessExpression"> /// The member access expression. /// </param> private void Save(MemberAccessExpression memberAccessExpression) { // todo: investigate why it returns multiple result with the same methods var expressionReturnTypeResolver = new ExpressionReturnTypeResolver(this); var resolvedCodeElements = expressionReturnTypeResolver.Resolve(memberAccessExpression.LeftHandSide); var members = resolvedCodeElements.ToList(); var resolvedTypeReference = new TypeResolver(memberAccessExpression.LeftHandSide.Text, this); if (resolvedTypeReference.IsClassName || resolvedTypeReference.IsEnum) { bool isFullyQualified = memberAccessExpression.LeftHandSide.Text.StartsWith(resolvedTypeReference.Namespace); this.cppWriter.Write( isFullyQualified ? resolvedTypeReference.GetCXFullyQualifiedName(SavingOptions.None) : resolvedTypeReference.GetCxName(SavingOptions.None)); } else { @switch(memberAccessExpression.LeftHandSide); } this.Save(this.GetActualMemberAccess(memberAccessExpression, resolvedTypeReference, members, expressionReturnTypeResolver.IsMemberFound)); @switch(memberAccessExpression.RightHandSide); }
private void Save(Attribute attribute, IndentedTextWriter writer) { writer.Write("["); var first = true; foreach (var attributeExpression in attribute.AttributeExpressions) { if (!first) { writer.Write(", "); } else { first = false; } var methodInvocationExpression = attributeExpression.Initialization as MethodInvocationExpression; if (methodInvocationExpression != null) { var resolvedType = new TypeResolver(methodInvocationExpression.Name.Text, this); writer.Write( resolvedType.IsResolved ? resolvedType.GetCXFullyQualifiedName(SavingOptions.UseFullyQualifiedNames) : methodInvocationExpression.Name.Text.Replace(".", "::")); writer.Write('('); this.SwitchStreams(); this.Save(methodInvocationExpression.Arguments); this.SwitchStreams(); writer.Write(')'); continue; } var memberAccessExpression = attributeExpression.Initialization as MemberAccessExpression; if (memberAccessExpression != null) { var resolvedType = new TypeResolver(memberAccessExpression.Text, this); writer.Write( resolvedType.IsResolved ? resolvedType.GetCXFullyQualifiedName(SavingOptions.UseFullyQualifiedNames) : memberAccessExpression.Text.Replace(".", "::")); } } writer.WriteLine("]"); }