本文整理汇总了C#中CompilationStartAnalysisContext.RegisterSyntaxTreeAction方法的典型用法代码示例。如果您正苦于以下问题:C# CompilationStartAnalysisContext.RegisterSyntaxTreeAction方法的具体用法?C# CompilationStartAnalysisContext.RegisterSyntaxTreeAction怎么用?C# CompilationStartAnalysisContext.RegisterSyntaxTreeAction使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CompilationStartAnalysisContext
的用法示例。
在下文中一共展示了CompilationStartAnalysisContext.RegisterSyntaxTreeAction方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Analyze
void Analyze(CompilationStartAnalysisContext compilationContext)
{
var compilation = compilationContext.Compilation;
compilationContext.RegisterSyntaxTreeAction(async delegate (SyntaxTreeAnalysisContext context)
{
try
{
if (!compilation.SyntaxTrees.Contains(context.Tree))
return;
var semanticModel = compilation.GetSemanticModel(context.Tree);
var root = await context.Tree.GetRootAsync(context.CancellationToken).ConfigureAwait(false);
var model = compilationContext.Compilation.GetSemanticModel(context.Tree);
if (model.IsFromGeneratedCode(compilationContext.CancellationToken))
return;
new GatherVisitor(context, semanticModel).Visit(root);
}
catch (OperationCanceledException) {}
});
}
示例2: Analyze
void Analyze(CompilationStartAnalysisContext compilationContext)
{
var compilation = compilationContext.Compilation;
compilationContext.RegisterSyntaxTreeAction(delegate (SyntaxTreeAnalysisContext context)
{
try
{
if (!compilation.SyntaxTrees.Contains(context.Tree))
return;
var semanticModel = compilation.GetSemanticModel(context.Tree);
var root = context.Tree.GetRoot(context.CancellationToken);
var model = compilationContext.Compilation.GetSemanticModel(context.Tree);
if (model.IsFromGeneratedCode(compilationContext.CancellationToken))
return;
var usageVisitor = new GetDelgateUsagesVisitor(semanticModel, context.CancellationToken);
usageVisitor.Visit(root);
var analyzer = new NodeAnalyzer(context, model, usageVisitor);
analyzer.Visit(root);
}
catch (OperationCanceledException) {}
});
}
示例3: AnalyzeCompilation
private static void AnalyzeCompilation(CompilationStartAnalysisContext compilationStartAnalysisContext)
{
var compilation = compilationStartAnalysisContext.Compilation;
compilationStartAnalysisContext.RegisterSyntaxTreeAction(context => AnalyzeTree(context, compilation));
}
示例4: Analyze
void Analyze(CompilationStartAnalysisContext compilationContext)
{
var compilation = compilationContext.Compilation;
compilationContext.RegisterSyntaxTreeAction(async delegate (SyntaxTreeAnalysisContext context)
{
try
{
if (!compilation.SyntaxTrees.Contains(context.Tree))
return;
var semanticModel = compilation.GetSemanticModel(context.Tree);
var root = await context.Tree.GetRootAsync(context.CancellationToken).ConfigureAwait(false);
var model = compilationContext.Compilation.GetSemanticModel(context.Tree);
foreach (var type in root.DescendantNodesAndSelf(SkipMembers).OfType<ClassDeclarationSyntax>())
{
var allMembers = type.GetMembersFromAllParts(model);
if (allMembers == null)
continue;
var fieldDeclarations = type
.ChildNodes()
.OfType<FieldDeclarationSyntax>()
.Where(f => FieldFilter(model, f))
.SelectMany(fd => fd.Declaration.Variables.Select(v => new { Field = fd, Variable = v, Symbol = semanticModel.GetDeclaredSymbol(v, context.CancellationToken) }));
foreach (var candidateField in fieldDeclarations)
{
context.CancellationToken.ThrowIfCancellationRequested();
// handled by ConvertToConstantIssue
if (candidateField?.Variable?.Initializer != null && semanticModel.GetConstantValue(candidateField.Variable.Initializer.Value, context.CancellationToken).HasValue)
continue;
// user-defined value type -- might be mutable
var field = candidateField.Symbol;
if (field != null && !field.GetReturnType().IsReferenceType)
{
if (field.GetReturnType().IsDefinedInSource())
{
continue;
}
}
if (field.GetAttributes().Any(ad => ad.AttributeClass.Name == "SerializableAttribute" && ad.AttributeClass.ContainingNamespace.GetFullName() == "System"))
continue;
bool wasAltered = false;
bool wasUsed = false;
foreach (var member in allMembers)
{
if (member == candidateField.Field)
continue;
if (IsAltered(model, member, candidateField.Symbol, context.CancellationToken, out wasUsed))
{
wasAltered = true;
break;
}
}
if (!wasAltered && wasUsed)
{
context.CancellationToken.ThrowIfCancellationRequested();
context.ReportDiagnostic(Diagnostic.Create(descriptor, candidateField.Variable.Identifier.GetLocation()));
}
}
}
}
catch (Exception) { }
});
}
示例5: HandleCompilationStart
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
{
var compilation = context.Compilation;
// Disabling SA1633 will disable all other header related diagnostics.
if (!compilation.IsAnalyzerSuppressed(SA1633Identifier))
{
context.RegisterSyntaxTreeAction((ctx, settings) => Analyzer.HandleSyntaxTree(ctx, settings, compilation));
}
}
示例6: HandleCompilationStart
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
{
Analyzer analyzer = new Analyzer();
context.RegisterSyntaxTreeAction(analyzer.HandleSyntaxTree);
context.RegisterCompilationEndAction(analyzer.HandleCompilation);
}