Skip to content

Commit 56acd53

Browse files
authored
VS-169: Add min 3.0 Driver version validation (#91)
* VS-169: Add min 3.0 Driver version validation
1 parent 3a1da25 commit 56acd53

File tree

4 files changed

+29
-10
lines changed

4 files changed

+29
-10
lines changed

src/MongoDB.Analyzer/Core/AnalysisConstants.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ namespace MongoDB.Analyzer.Core;
1616

1717
internal static class AnalysisConstants
1818
{
19+
public static Version MinimalDriverVersion { get; } = new(3, 0);
20+
1921
public const string AnalysisAssemblyName = nameof(AnalysisAssemblyName);
2022
public const string GeneratedTypeName = "GenType";
2123
}

src/MongoDB.Analyzer/Core/Utilities/AnalysisCodeGeneratorUtilities.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,14 @@ namespace MongoDB.Analyzer.Core.Utilities;
1818

1919
internal static class AnalysisCodeGeneratorUtilities
2020
{
21-
private const string AnalysisAssemblyNameDriver_2_27_OrLower = "DynamicProxyGenAssembly2";
22-
private const string AnalysisAssemblyNameDriver_2_28_OrGreater = "MongoDB.Analyzer.MQLGenerator";
23-
private static readonly Version s_driverVersion_2_28 = new(2, 28);
21+
private const string AnalysisAssemblyNameDriver = "MongoDB.Analyzer.MQLGenerator";
22+
2423
private static readonly ImmutableArray<byte> s_publicKey = new byte[160] { 0, 36, 0, 0, 4, 128, 0, 0, 148, 0, 0, 0, 6, 2, 0, 0, 0, 36, 0, 0, 82, 83, 65, 49, 0, 4, 0, 0, 1, 0, 1, 0, 53, 40, 127, 13, 56, 131, 192, 160, 117, 200, 142, 12, 218, 60, 233, 59, 98, 16, 3, 236, 189, 94, 146, 13, 74, 140, 114, 56, 86, 79, 77, 47, 79, 104, 17, 106, 202, 40, 201, 178, 19, 65, 220, 58, 135, 118, 121, 193, 69, 86, 25, 43, 43, 47, 95, 226, 193, 29, 98, 78, 8, 148, 211, 8, 255, 123, 148, 191, 111, 215, 42, 239, 27, 65, 1, 127, 254, 37, 114, 233, 144, 25, 209, 198, 25, 99, 230, 140, 208, 237, 103, 115, 74, 66, 203, 51, 59, 128, 142, 56, 103, 203, 230, 49, 147, 114, 20, 227, 46, 64, 159, 177, 250, 98, 253, 182, 157, 73, 76, 37, 48, 230, 74, 64, 228, 23, 214, 238 }.ToImmutableArray();
2524

2625
public static Type CompileAndGetGeneratorType(AnalysisType analysisType, MongoAnalysisContext context, ReferencesContainer referencesContainer, IEnumerable<SyntaxTree> syntaxTrees)
2726
{
28-
var assemblyName = referencesContainer.Version >= s_driverVersion_2_28 ? AnalysisAssemblyNameDriver_2_28_OrGreater : AnalysisAssemblyNameDriver_2_27_OrLower;
2927
var compilation = CSharpCompilation.Create(
30-
assemblyName,
28+
AnalysisAssemblyNameDriver,
3129
syntaxTrees,
3230
referencesContainer.References,
3331
new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary, publicSign: true, cryptoPublicKey: s_publicKey));

src/MongoDB.Analyzer/MongoDB.Analyzer.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.3.1" />
3030
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="3.3.1" />
3131
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
32-
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
32+
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
3333
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
3434
</ItemGroup>
3535

src/MongoDB.Analyzer/MongoDBDiagnosticAnalyzer.cs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,17 @@ public static void SemanticModelAction(SemanticModelAnalysisContext context)
4949
logger.Log($"Analysis started, analyzer version: {Assembly.GetExecutingAssembly().GetName().Version}, file: {GetFilePath(context)}");
5050
telemetryService.AnalysisStarted(context, settings);
5151

52-
flushTelemetry |= LinqAnalyzer.AnalyzeIMongoQueryable(mongoAnalyzerContext);
53-
flushTelemetry |= EFAnalyzer.AnalyzeEFQueryable(mongoAnalyzerContext);
54-
flushTelemetry |= BuildersAnalyzer.AnalyzeBuilders(mongoAnalyzerContext);
55-
flushTelemetry |= PocoAnalyzer.AnalyzePoco(mongoAnalyzerContext);
52+
if (!IsDriverVersionSupported(mongoAnalyzerContext))
53+
{
54+
flushTelemetry = true;
55+
}
56+
else
57+
{
58+
flushTelemetry |= LinqAnalyzer.AnalyzeIMongoQueryable(mongoAnalyzerContext);
59+
flushTelemetry |= EFAnalyzer.AnalyzeEFQueryable(mongoAnalyzerContext);
60+
flushTelemetry |= BuildersAnalyzer.AnalyzeBuilders(mongoAnalyzerContext);
61+
flushTelemetry |= PocoAnalyzer.AnalyzePoco(mongoAnalyzerContext);
62+
}
5663
}
5764
catch (Exception ex)
5865
{
@@ -86,4 +93,16 @@ private static string GetFilePath(SemanticModelAnalysisContext context)
8693
return "Unknown";
8794
}
8895
}
96+
97+
private static bool IsDriverVersionSupported(MongoAnalysisContext context)
98+
{
99+
var driverVersion = ReferencesProvider.GetMongoDBDriverVersion(context.SemanticModelAnalysisContext.SemanticModel.Compilation.References);
100+
if (driverVersion < AnalysisConstants.MinimalDriverVersion)
101+
{
102+
context.Logger.Log($"Driver version {driverVersion} is not supported. The minimal supported version is {AnalysisConstants.MinimalDriverVersion}.");
103+
return false;
104+
}
105+
106+
return true;
107+
}
89108
}

0 commit comments

Comments
 (0)