in SharpGen/Generator/GeneratorHelpers.cs [116:169]
public static StatementSyntax GetPlatformSpecificStatements(GlobalNamespaceProvider globalNamespace,
GeneratorConfig config,
IEnumerable<PlatformDetectionType> types,
Func<PlatformDetectionType, StatementSyntax> syntaxBuilder)
{
List<IfStatementSyntax> ifStatements = new();
var allPlatformBitmap = config.Platforms;
foreach (var platform in types)
{
var platformStatement = syntaxBuilder(platform);
if ((platform & allPlatformBitmap) == allPlatformBitmap)
return platformStatement;
ExpressionSyntax condition = null;
foreach (var flag in PlatformsNoAny)
{
if ((platform & flag) != flag)
continue;
var newCondition = MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
globalNamespace.GetTypeNameSyntax(WellKnownName.PlatformDetection),
IdentifierName("Is" + flag)
);
condition = condition is null
? newCondition
: BinaryExpression(SyntaxKind.LogicalAndExpression, condition, newCondition);
}
ifStatements.Add(
condition is null
? (IfStatementSyntax) platformStatement
: IfStatement(condition, platformStatement)
);
}
IfStatementSyntax platformDetectionIfStatement = null;
for (var i = ifStatements.Count - 1; i >= 0; i--)
{
platformDetectionIfStatement = ifStatements[i].WithElse(
platformDetectionIfStatement is null
? ElseClause(ThrowPlatformNotSupportedStatement)
: ElseClause(platformDetectionIfStatement)
);
}
return platformDetectionIfStatement;
}