public static IMethodSymbol CreateAccessorSymbol(
     IMethodSymbol accessor,
     IList <AttributeData> attributes      = null,
     Accessibility?accessibility           = null,
     IMethodSymbol explicitInterfaceSymbol = null,
     IList <SyntaxNode> statements         = null)
 {
     return(CodeGenerationSymbolFactory.CreateMethodSymbol(
                attributes,
                accessibility ?? accessor.DeclaredAccessibility,
                accessor.GetSymbolModifiers().WithIsAbstract(statements == null),
                accessor.ReturnType,
                explicitInterfaceSymbol ?? accessor.ExplicitInterfaceImplementations.FirstOrDefault(),
                accessor.Name,
                accessor.TypeParameters,
                accessor.Parameters,
                statements,
                returnTypeAttributes: accessor.GetReturnTypeAttributes()));
 }
 public static IEventSymbol CreateEventSymbol(
     IEventSymbol @event,
     IList <AttributeData> attributes     = null,
     Accessibility?accessibility          = null,
     DeclarationModifiers?modifiers       = null,
     IEventSymbol explicitInterfaceSymbol = null,
     string name                = null,
     IMethodSymbol addMethod    = null,
     IMethodSymbol removeMethod = null)
 {
     return(CodeGenerationSymbolFactory.CreateEventSymbol(
                attributes,
                accessibility ?? @event.DeclaredAccessibility,
                modifiers ?? @event.GetSymbolModifiers(),
                @event.Type,
                explicitInterfaceSymbol,
                name ?? @event.Name,
                addMethod,
                removeMethod));
 }
 public static IMethodSymbol CreateMethodSymbol(
     IMethodSymbol method,
     IList <AttributeData> attributes      = null,
     Accessibility?accessibility           = null,
     DeclarationModifiers?modifiers        = null,
     IMethodSymbol explicitInterfaceSymbol = null,
     string name = null,
     IList <SyntaxNode> statements = null)
 {
     return(CodeGenerationSymbolFactory.CreateMethodSymbol(
                attributes,
                accessibility ?? method.DeclaredAccessibility,
                modifiers ?? method.GetSymbolModifiers(),
                method.ReturnType,
                explicitInterfaceSymbol,
                name ?? method.Name,
                method.TypeParameters,
                method.Parameters,
                statements,
                returnTypeAttributes: method.GetReturnTypeAttributes()));
 }
        public static IMethodSymbol RenameParameters(this IMethodSymbol method, IList <string> parameterNames)
        {
            var parameterList = method.Parameters;

            if (parameterList.Select(p => p.Name).SequenceEqual(parameterNames))
            {
                return(method);
            }

            var parameters = parameterList.RenameParameters(parameterNames);

            return(CodeGenerationSymbolFactory.CreateMethodSymbol(
                       method.ContainingType,
                       method.GetAttributes(),
                       method.DeclaredAccessibility,
                       method.GetSymbolModifiers(),
                       method.ReturnType,
                       method.ExplicitInterfaceImplementations.FirstOrDefault(),
                       method.Name,
                       method.TypeParameters,
                       parameters));
        }
        public static IMethodSymbol RemoveAttributeFromParametersAndReturnType(
            this IMethodSymbol method, INamedTypeSymbol attributeType,
            IList <SyntaxNode> statements = null, IList <SyntaxNode> handlesExpressions = null)
        {
            if (attributeType == null)
            {
                return(method);
            }

            var someParameterHasAttribute = method.Parameters
                                            .Any(m => m.GetAttributes().Any(a => a.AttributeClass.Equals(attributeType)));

            var returnTypeHasAttribute = method.GetReturnTypeAttributes()
                                         .Any(a => a.AttributeClass.Equals(attributeType));

            if (!someParameterHasAttribute && !returnTypeHasAttribute)
            {
                return(method);
            }

            return(CodeGenerationSymbolFactory.CreateMethodSymbol(
                       method.ContainingType,
                       method.GetAttributes(),
                       method.DeclaredAccessibility,
                       method.GetSymbolModifiers(),
                       method.ReturnType,
                       method.ExplicitInterfaceImplementations.FirstOrDefault(),
                       method.Name,
                       method.TypeParameters,
                       method.Parameters.Select(p =>
                                                CodeGenerationSymbolFactory.CreateParameterSymbol(
                                                    p.GetAttributes().Where(a => !a.AttributeClass.Equals(attributeType)).ToList(),
                                                    p.RefKind, p.IsParams, p.Type, p.Name, p.IsOptional,
                                                    p.HasExplicitDefaultValue, p.HasExplicitDefaultValue ? p.ExplicitDefaultValue : null)).ToList(),
                       statements,
                       handlesExpressions,
                       method.GetReturnTypeAttributes().Where(a => !a.AttributeClass.Equals(attributeType)).ToList()));
        }
 public static IPropertySymbol CreatePropertySymbol(
     IPropertySymbol property,
     IList <AttributeData> attributes        = null,
     Accessibility?accessibility             = null,
     DeclarationModifiers?modifiers          = null,
     IPropertySymbol explicitInterfaceSymbol = null,
     string name             = null,
     bool?isIndexer          = null,
     IMethodSymbol getMethod = null,
     IMethodSymbol setMethod = null)
 {
     return(CodeGenerationSymbolFactory.CreatePropertySymbol(
                attributes,
                accessibility ?? property.DeclaredAccessibility,
                modifiers ?? property.GetSymbolModifiers(),
                property.Type,
                explicitInterfaceSymbol,
                name ?? property.Name,
                property.Parameters,
                getMethod,
                setMethod,
                isIndexer ?? property.IsIndexer));
 }
示例#7
0
        public static IPropertySymbol RenameParameters(this IPropertySymbol property, IList <string> parameterNames)
        {
            var parameterList = property.Parameters;

            if (parameterList.Select(p => p.Name).SequenceEqual(parameterNames))
            {
                return(property);
            }

            var parameters = parameterList.RenameParameters(parameterNames);

            return(CodeGenerationSymbolFactory.CreatePropertySymbol(
                       property.ContainingType,
                       property.GetAttributes(),
                       property.DeclaredAccessibility,
                       property.GetSymbolModifiers(),
                       property.Type,
                       property.ExplicitInterfaceImplementations.FirstOrDefault(),
                       property.Name,
                       parameters,
                       property.GetMethod,
                       property.SetMethod,
                       property.IsIndexer));
        }