ArchiMetrics.Analysis.SemanticAnalyzer.CanBeMadeStatic C# (CSharp) Метод

CanBeMadeStatic() публичный Метод

public CanBeMadeStatic ( Microsoft.CodeAnalysis.CSharp.Syntax.BaseMethodDeclarationSyntax method ) : bool
method Microsoft.CodeAnalysis.CSharp.Syntax.BaseMethodDeclarationSyntax
Результат bool
		public bool CanBeMadeStatic(BaseMethodDeclarationSyntax method)
		{
			if (method.Modifiers.Any(SyntaxKind.StaticKeyword)
				|| method.Body == null
				|| !method.Body.ChildNodes().Any())
			{
				return false;
			}

			var bodyNodes = method.Body.ChildNodes();
			var dataflow = _model.AnalyzeDataFlow(bodyNodes.First(), bodyNodes.Last());
			var hasThisReference = dataflow.DataFlowsIn
				.Any(x => x.Kind == SymbolKind.Parameter && x.Name == SyntaxFactory.Token(SyntaxKind.ThisKeyword).ToFullString());
			return !hasThisReference;
		}
	}

Usage Example

Пример #1
0
		protected override Task<EvaluationResult> EvaluateImpl(
			SyntaxNode node, 
			SemanticModel semanticModel, 
			Solution solution)
		{
			var method = (MethodDeclarationSyntax)node;
			var analyzer = new SemanticAnalyzer(semanticModel);

			if (analyzer.CanBeMadeStatic(method))
			{
				var snippet = method.ToFullString();
				return Task.FromResult(
					new EvaluationResult
					{
						Snippet = snippet
					});
			}

			return Task.FromResult((EvaluationResult)null);
		}