Skip to content

Commit d074dc0

Browse files
martin-strecker-sonarsourcepavel-mikula-sonarsource
authored andcommitted
NET-2893 Simplify SyntaxNodeTypes.LatestType
Co-authored-by: Pavel Mikula <pavel.mikula@sonarsource.com> GitOrigin-RevId: 3d5d33a27a7baff9184b9fbef26ae3f8c82cdaa4
1 parent 6b641f5 commit d074dc0

1 file changed

Lines changed: 7 additions & 18 deletions

File tree

analyzers/src/SonarAnalyzer.ShimLayer/Common/SyntaxNodeTypes.cs

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,31 +14,20 @@
1414
* along with this program; if not, see https://sonarsource.com/license/ssal/
1515
*/
1616

17+
using System.Reflection;
1718
using Microsoft.CodeAnalysis.CSharp;
1819

1920
namespace SonarAnalyzer.ShimLayer;
2021

2122
internal static class SyntaxNodeTypes
2223
{
23-
private static readonly ImmutableDictionary<Type, Type> Map; // Wrapper type => Latest Roslyn type
24-
25-
static SyntaxNodeTypes()
24+
public static Type LatestType(Type wrapper)
2625
{
27-
var builder = ImmutableDictionary.CreateBuilder<Type, Type>();
28-
var assembly = typeof(CSharpSyntaxNode).Assembly;
29-
foreach (var wrapper in typeof(SyntaxNodeTypes).Assembly.ExportedTypes)
30-
{
31-
if ((Load(wrapper, nameof(BaseNamespaceDeclarationSyntaxWrapper.WrappedTypeName)) ?? Load(wrapper, nameof(BaseNamespaceDeclarationSyntaxWrapper.FallbackWrappedTypeName))) is { } type)
32-
{
33-
builder.Add(wrapper, type);
34-
}
35-
}
36-
Map = builder.ToImmutable();
26+
return Load(wrapper, nameof(BaseNamespaceDeclarationSyntaxWrapper.WrappedTypeName)) ?? Load(wrapper, nameof(BaseNamespaceDeclarationSyntaxWrapper.FallbackWrappedTypeName));
3727

38-
Type Load(Type wrapper, string fieldName) =>
39-
wrapper.GetField(fieldName) is { } field && field.GetValue(null) is string name ? assembly.GetType(name) : null;
28+
static Type Load(Type wrapper, string fieldName) =>
29+
wrapper.GetField(fieldName, BindingFlags.Static | BindingFlags.Public) is { } field && field.GetValue(null) is string name
30+
? typeof(CSharpSyntaxNode).Assembly.GetType(name) // This may need to be extended to other assemblies if needed. See TypeLoader.LoadBaseline and .LoadLatest
31+
: null;
4032
}
41-
42-
public static Type LatestType(Type wrapper) =>
43-
Map.TryGetValue(wrapper, out var latest) ? latest : null;
4433
}

0 commit comments

Comments
 (0)