public override IEntity VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration, object data)
        {
            DefaultMethod m = new DefaultMethod(currentTypeDefinition, operatorDeclaration.Name);

            m.EntityType = EntityType.Operator;
            m.Region     = MakeRegion(operatorDeclaration);
            m.BodyRegion = MakeRegion(operatorDeclaration.Body);

            m.ReturnType = ConvertType(operatorDeclaration.ReturnType);
            ConvertAttributes(m.Attributes, operatorDeclaration.Attributes.Where(s => s.AttributeTarget != AttributeTarget.Return));
            ConvertAttributes(m.ReturnTypeAttributes, operatorDeclaration.Attributes.Where(s => s.AttributeTarget == AttributeTarget.Return));

            ApplyModifiers(m, operatorDeclaration.Modifiers);

            ConvertParameters(m.Parameters, operatorDeclaration.Parameters);

            currentTypeDefinition.Methods.Add(m);
            return(m);
        }
        public override void VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration)
        {
            FixAttributesAndDocComment(operatorDeclaration);

            ForceSpacesBefore(operatorDeclaration.LParToken, policy.SpaceBeforeMethodDeclarationParentheses);
            if (operatorDeclaration.Parameters.Any())
            {
                ForceSpacesAfter(operatorDeclaration.LParToken, policy.SpaceWithinMethodDeclarationParentheses);
                FormatArguments(operatorDeclaration);
            }
            else
            {
                ForceSpacesAfter(operatorDeclaration.LParToken, policy.SpaceBetweenEmptyMethodDeclarationParentheses);
                ForceSpacesBefore(operatorDeclaration.RParToken, policy.SpaceBetweenEmptyMethodDeclarationParentheses);
            }

            if (!operatorDeclaration.Body.IsNull)
            {
                FixOpenBrace(policy.MethodBraceStyle, operatorDeclaration.Body.LBraceToken);
                VisitBlockWithoutFixingBraces(operatorDeclaration.Body, policy.IndentMethodBody);
                FixClosingBrace(policy.MethodBraceStyle, operatorDeclaration.Body.RBraceToken);
            }
        }
Esempio n. 3
0
 void IAstVisitor.VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration)
 {
     Visit(EnterOperatorDeclaration, LeaveOperatorDeclaration, operatorDeclaration);
 }
Esempio n. 4
0
        void WriteMemberDeclarationName(IMember member, TokenWriter writer, CSharpFormattingOptions formattingPolicy)
        {
            TypeSystemAstBuilder astBuilder = CreateAstBuilder();
            EntityDeclaration    node       = astBuilder.ConvertEntity(member);

            if ((ConversionFlags & ConversionFlags.ShowDeclaringType) == ConversionFlags.ShowDeclaringType && member.DeclaringType != null)
            {
                ConvertType(member.DeclaringType, writer, formattingPolicy);
                writer.WriteToken(Roles.Dot, ".");
            }
            switch (member.SymbolKind)
            {
            case SymbolKind.Indexer:
                writer.WriteKeyword(Roles.Identifier, "this");
                break;

            case SymbolKind.Constructor:
                WriteQualifiedName(member.DeclaringType.Name, writer, formattingPolicy);
                break;

            case SymbolKind.Destructor:
                writer.WriteToken(DestructorDeclaration.TildeRole, "~");
                WriteQualifiedName(member.DeclaringType.Name, writer, formattingPolicy);
                break;

            case SymbolKind.Operator:
                switch (member.Name)
                {
                case "op_Implicit":
                    writer.WriteKeyword(OperatorDeclaration.ImplicitRole, "implicit");
                    writer.Space();
                    writer.WriteKeyword(OperatorDeclaration.OperatorKeywordRole, "operator");
                    writer.Space();
                    ConvertType(member.ReturnType, writer, formattingPolicy);
                    break;

                case "op_Explicit":
                    writer.WriteKeyword(OperatorDeclaration.ExplicitRole, "explicit");
                    writer.Space();
                    writer.WriteKeyword(OperatorDeclaration.OperatorKeywordRole, "operator");
                    writer.Space();
                    ConvertType(member.ReturnType, writer, formattingPolicy);
                    break;

                default:
                    writer.WriteKeyword(OperatorDeclaration.OperatorKeywordRole, "operator");
                    writer.Space();
                    var operatorType = OperatorDeclaration.GetOperatorType(member.Name);
                    if (operatorType.HasValue)
                    {
                        writer.WriteToken(OperatorDeclaration.GetRole(operatorType.Value), OperatorDeclaration.GetToken(operatorType.Value));
                    }
                    else
                    {
                        writer.WriteIdentifier(node.NameToken);
                    }
                    break;
                }
                break;

            default:
                writer.WriteIdentifier(Identifier.Create(member.Name));
                break;
            }
            if ((ConversionFlags & ConversionFlags.ShowTypeParameterList) == ConversionFlags.ShowTypeParameterList && member.SymbolKind == SymbolKind.Method)
            {
                var outputVisitor = new CSharpOutputVisitor(writer, formattingPolicy);
                outputVisitor.WriteTypeParameters(node.GetChildrenByRole(Roles.TypeParameter));
            }
        }
Esempio n. 5
0
 public virtual S VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration, T data)
 {
     return(VisitChildren(operatorDeclaration, data));
 }
Esempio n. 6
0
 public override void VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration)
 {
     // skip
 }
Esempio n. 7
0
        void WriteMemberDeclarationName(IMember member, StringWriter writer)
        {
            TypeSystemAstBuilder astBuilder = CreateAstBuilder();

            if ((ConversionFlags & ConversionFlags.UseFullyQualifiedMemberNames) == ConversionFlags.UseFullyQualifiedMemberNames)
            {
                writer.Write(ConvertType(member.DeclaringType));
                writer.Write('.');
            }
            switch (member.EntityType)
            {
            case EntityType.Indexer:
                writer.Write("this");
                break;

            case EntityType.Constructor:
                writer.Write(member.DeclaringType.Name);
                break;

            case EntityType.Destructor:
                writer.Write('~');
                writer.Write(member.DeclaringType.Name);
                break;

            case EntityType.Operator:
                switch (member.Name)
                {
                case "op_Implicit":
                    writer.Write("implicit operator ");
                    writer.Write(ConvertType(member.ReturnType));
                    break;

                case "op_Explicit":
                    writer.Write("explicit operator ");
                    writer.Write(ConvertType(member.ReturnType));
                    break;

                default:
                    writer.Write("operator ");
                    var operatorType = OperatorDeclaration.GetOperatorType(member.Name);
                    if (operatorType.HasValue)
                    {
                        writer.Write(OperatorDeclaration.GetToken(operatorType.Value));
                    }
                    else
                    {
                        writer.Write(member.Name);
                    }
                    break;
                }
                break;

            default:
                writer.Write(member.Name);
                break;
            }
            if ((ConversionFlags & ConversionFlags.ShowTypeParameterList) == ConversionFlags.ShowTypeParameterList && member.EntityType == EntityType.Method)
            {
                CreatePrinter(writer).WriteTypeParameters(astBuilder.ConvertEntity(member).GetChildrenByRole(AstNode.Roles.TypeParameter));
            }
        }
Esempio n. 8
0
        void WriteMemberDeclarationName(IMember member, IOutputFormatter formatter, CSharpFormattingOptions formattingPolicy)
        {
            TypeSystemAstBuilder astBuilder = CreateAstBuilder();

            if ((ConversionFlags & ConversionFlags.ShowDeclaringType) == ConversionFlags.ShowDeclaringType)
            {
                ConvertType(member.DeclaringType, formatter, formattingPolicy);
                formatter.WriteToken(".");
            }
            switch (member.SymbolKind)
            {
            case SymbolKind.Indexer:
                formatter.WriteKeyword("this");
                break;

            case SymbolKind.Constructor:
                formatter.WriteIdentifier(member.DeclaringType.Name);
                break;

            case SymbolKind.Destructor:
                formatter.WriteToken("~");
                formatter.WriteIdentifier(member.DeclaringType.Name);
                break;

            case SymbolKind.Operator:
                switch (member.Name)
                {
                case "op_Implicit":
                    formatter.WriteKeyword("implicit");
                    formatter.Space();
                    formatter.WriteKeyword("operator");
                    formatter.Space();
                    ConvertType(member.ReturnType, formatter, formattingPolicy);
                    break;

                case "op_Explicit":
                    formatter.WriteKeyword("explicit");
                    formatter.Space();
                    formatter.WriteKeyword("operator");
                    formatter.Space();
                    ConvertType(member.ReturnType, formatter, formattingPolicy);
                    break;

                default:
                    formatter.WriteKeyword("operator");
                    formatter.Space();
                    var operatorType = OperatorDeclaration.GetOperatorType(member.Name);
                    if (operatorType.HasValue)
                    {
                        formatter.WriteToken(OperatorDeclaration.GetToken(operatorType.Value));
                    }
                    else
                    {
                        formatter.WriteIdentifier(member.Name);
                    }
                    break;
                }
                break;

            default:
                formatter.WriteIdentifier(member.Name);
                break;
            }
            if ((ConversionFlags & ConversionFlags.ShowTypeParameterList) == ConversionFlags.ShowTypeParameterList && member.SymbolKind == SymbolKind.Method)
            {
                var outputVisitor = new CSharpOutputVisitor(formatter, formattingPolicy);
                outputVisitor.WriteTypeParameters(astBuilder.ConvertEntity(member).GetChildrenByRole(Roles.TypeParameter));
            }
        }
 public virtual S VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration, T data)
 {
     throw new NotImplementedException();
 }