@@ -17,12 +17,36 @@ public static IncrementalValueProvider<ImmutableArray<Compilation>> GetNestedCom
17
17
IncrementalGeneratorInitializationContext context
18
18
) =>
19
19
context
20
- . MetadataReferencesProvider . SelectMany (
21
- ( metadataReference , _ ) => new [ ] { ( metadataReference as CompilationReference ) ? . Compilation } . ToImmutableArray ( )
22
- )
20
+ . GetMetadataReferencesProvider ( )
21
+ . SelectMany ( ( metadataReference , _ ) => new [ ] { ( metadataReference as CompilationReference ) ? . Compilation } . ToImmutableArray ( ) )
23
22
. WhereNotNull ( )
24
23
. Collect ( ) ;
25
24
25
+ /// <summary>
26
+ /// Workaround to mitigate binary incompatibility introduced in Microsoft.CodeAnalysis=4.2
27
+ /// <link cref="https://github.com/dotnet/roslyn/issues/61333#issuecomment-1129073030"/>
28
+ /// </summary>
29
+ private static IncrementalValuesProvider < MetadataReference > GetMetadataReferencesProvider (
30
+ this IncrementalGeneratorInitializationContext context
31
+ )
32
+ {
33
+ var metadataProviderProperty =
34
+ context . GetType ( ) . GetProperty ( nameof ( context . MetadataReferencesProvider ) )
35
+ ?? throw new Exception ( $ "The property '{ nameof ( context . MetadataReferencesProvider ) } ' not found") ;
36
+
37
+ var metadataProvider = metadataProviderProperty . GetValue ( context ) ;
38
+
39
+ if ( metadataProvider is IncrementalValuesProvider < MetadataReference > metadataValuesProvider )
40
+ return metadataValuesProvider ;
41
+
42
+ if ( metadataProvider is IncrementalValueProvider < MetadataReference > metadataValueProvider )
43
+ return metadataValueProvider . SelectMany ( static ( reference , _ ) => ImmutableArray . Create ( reference ) ) ;
44
+
45
+ throw new Exception (
46
+ $ "The '{ nameof ( context . MetadataReferencesProvider ) } ' is neither an '{ nameof ( IncrementalValuesProvider < MetadataReference > ) } <{ nameof ( MetadataReference ) } >' nor an '{ nameof ( IncrementalValueProvider < MetadataReference > ) } <{ nameof ( MetadataReference ) } >.'"
47
+ ) ;
48
+ }
49
+
26
50
public static IncrementalValuesProvider < MapperDeclaration > GetMapperDeclarations ( IncrementalGeneratorInitializationContext context )
27
51
{
28
52
return context
0 commit comments