Skip to content

Commit cebeb9a

Browse files
committed
Add GetMetadataReferencesProvider
1 parent 466f18b commit cebeb9a

File tree

1 file changed

+27
-3
lines changed

1 file changed

+27
-3
lines changed

src/Riok.Mapperly/SyntaxProvider.Roslyn4.0.cs

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,36 @@ public static IncrementalValueProvider<ImmutableArray<Compilation>> GetNestedCom
1717
IncrementalGeneratorInitializationContext context
1818
) =>
1919
context
20-
.MetadataReferencesProvider.SelectMany(
21-
(metadataReference, _) => new[] { (metadataReference as CompilationReference)?.Compilation }.ToImmutableArray()
22-
)
20+
.GetMetadataReferencesProvider()
21+
.SelectMany((metadataReference, _) => new[] { (metadataReference as CompilationReference)?.Compilation }.ToImmutableArray())
2322
.WhereNotNull()
2423
.Collect();
2524

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+
2650
public static IncrementalValuesProvider<MapperDeclaration> GetMapperDeclarations(IncrementalGeneratorInitializationContext context)
2751
{
2852
return context

0 commit comments

Comments
 (0)