Beispiel #1
0
        public static void ComputeRefactoring(RefactoringContext context, MethodDeclarationSyntax methodDeclaration)
        {
            TypeParameterListSyntax typeParameterList = methodDeclaration.TypeParameterList;

            if (typeParameterList != null)
            {
                if (context.Span.IsEmptyAndContainedInSpan(typeParameterList))
                {
                    RegisterRefactoring(context, methodDeclaration);
                }
            }
            else
            {
                TextSpan span = context.Span;

                SyntaxToken identifier = methodDeclaration.Identifier;

                if (!identifier.IsMissing &&
                    span.Start >= identifier.Span.End)
                {
                    ParameterListSyntax parameterList = methodDeclaration.ParameterList;

                    if (parameterList != null &&
                        span.End <= parameterList.Span.Start &&
                        methodDeclaration.BodyOrExpressionBody() != null)
                    {
                        RegisterRefactoring(context, methodDeclaration);
                    }
                }
            }
        }
        public static void Analyze(SyntaxNodeAnalysisContext context, MethodDeclarationSyntax methodDeclaration)
        {
            if (methodDeclaration.IsParentKind(SyntaxKind.InterfaceDeclaration) ||
                methodDeclaration.Modifiers.Contains(SyntaxKind.AbstractKeyword))
            {
                CSharpSyntaxNode body = methodDeclaration.BodyOrExpressionBody();

                if (body != null)
                {
                    ReportDiagnostic(context, methodDeclaration, body);
                }
            }
        }
        private static MethodDeclarationSyntax GetNewNode(
            MethodDeclarationSyntax methodDeclaration,
            TypeParameterConstraintSyntax constraint,
            SemanticModel semanticModel,
            CancellationToken cancellationToken)
        {
            string name = GetMethodTypeParameterName(semanticModel, methodDeclaration.BodyOrExpressionBody().SpanStart, cancellationToken);

            MethodDeclarationSyntax newNode = methodDeclaration.AddTypeParameterListParameters(TypeParameter(Identifier(name).WithRenameAnnotation()));

            if (constraint != null)
            {
                newNode = newNode.AddConstraintClauses(TypeParameterConstraintClause(name, constraint));
            }

            return(newNode);
        }
        public static ParametersInfo Create(MethodDeclarationSyntax methodDeclaration, bool allowMissing = false)
        {
            ParameterListSyntax parameterList = methodDeclaration.ParameterList;

            if (!Check(parameterList, allowMissing))
            {
                return(Default);
            }

            SeparatedSyntaxList <ParameterSyntax> parameters = parameterList.Parameters;

            if (!CheckParameters(parameters, allowMissing))
            {
                return(Default);
            }

            TypeParameterListSyntax typeParameterList = methodDeclaration.TypeParameterList;
            SeparatedSyntaxList <TypeParameterSyntax> typeParameters = typeParameterList?.Parameters ?? default(SeparatedSyntaxList <TypeParameterSyntax>);

            if (!CheckTypeParameters(typeParameters, allowMissing))
            {
                return(Default);
            }

            if (!parameters.Any() &&
                !typeParameters.Any())
            {
                return(Default);
            }

            CSharpSyntaxNode body = methodDeclaration.BodyOrExpressionBody();

            if (!Check(body, allowMissing))
            {
                return(Default);
            }

            return(new ParametersInfo(typeParameterList, parameterList, body));
        }
Beispiel #5
0
 protected override CSharpSyntaxNode GetBody(MethodDeclarationSyntax node)
 {
     return(node.BodyOrExpressionBody());
 }