官术网_书友最值得收藏!

  • Roslyn Cookbook
  • Manish Vasani
  • 264字
  • 2021-07-15 17:07:30

How it works...

Symbol analyzers register one or more symbol action callbacks to analyze symbol kinds of interest. Note that, unlike the default implementation that registered a delegate method named AnalyzeSymbol, we registered a lambda callback.

We specified interest in analyzing all the top-level symbol kinds that can have an enclosing type, namely types, methods, fields, properties, and events in the RegisterSymbolAction invocation:

context.RegisterSymbolAction(symbolContext =>
{
...
},
SymbolKind.NamedType,
SymbolKind.Method,
SymbolKind.Field,
SymbolKind.Event,
SymbolKind.Property);

The analyzer driver ensures that the registered lambda is invoked for all symbols of the registered interest kinds in the compilation.

Analysis skips the immediate enclosing type, as C# compiler already reports error CS0542, if a member has the same name as its enclosing type.

// Skip the immediate containing type, CS0542 already covers this case.
var outerType = symbolContext.Symbol.ContainingType?.ContainingType;

Core analysis works by looping over the outer types and comparing the name of the symbol in a symbol analysis context with the relevant outer types, until it finds a match, in which case, it reports a diagnostic; if the outer type has no containing type, it doesn t report a diagnostic.

while (outerType != null)
{
// Check if the current outer type has the same name as the given member.
if (symbolName.Equals(outerType.Name))
{
// For all such symbols, report a diagnostic.
...
}

outerType = outerType.ContainingType;
}
It is recommended that symbol actions only analyze and report diagnostics about declarations, not the executable code within it. If you need to analyze executable code within a symbol, you should try to register other action kinds discussed later in this chapter.
主站蜘蛛池模板: 唐海县| 集贤县| 习水县| 福泉市| 秦皇岛市| 溧阳市| 五台县| 张家川| 郓城县| 炎陵县| 黄冈市| 中山市| 天等县| 玉环县| 宜宾市| 沙河市| 自贡市| 芮城县| 衢州市| 石台县| 托里县| 古蔺县| 静海县| 三门峡市| 外汇| 三台县| 四子王旗| 西平县| 且末县| 贡嘎县| 普安县| 庄河市| 通化县| 福州市| 宜章县| 会宁县| 栾城县| 吕梁市| 静海县| 宕昌县| 开阳县|