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)); }
protected override CSharpSyntaxNode GetBody(MethodDeclarationSyntax node) { return(node.BodyOrExpressionBody()); }