public MethodMarshallingContext(VTableCreationState state, List <StructDeclarationSyntax> RegisteredWrappers) { WrapperSymbols.Capacity = RegisteredWrappers.Count; foreach (var decl in RegisteredWrappers) { var model = state.GetSemanticModel(decl.SyntaxTree); var symbol = model.GetDeclaredSymbol(decl) ?? throw new InvalidOperationException(); //TODO: Verify Attribute var handleSymbol = symbol.GetMembers() .FirstOrDefault(member => ((member is IFieldSymbol field && field.Type.IsUnmanagedType) || (member is IPropertySymbol prop && prop.Type.IsUnmanagedType)) && member.Name == "Handle"); if (handleSymbol is null) { //TODO: Create Diagnostic for this situation continue; } if (handleSymbol.DeclaredAccessibility != Accessibility.Public) { //TODO: Create Diagnostic for this situation continue; } WrapperSymbols.Add(symbol); } FmodBoolType = state.Compilation.GetTypeByMetadataName("FmodAudio.Base.FmodBool"); }
public void Execute(GeneratorExecutionContext context) { if (!(context.SyntaxReceiver is VTableSyntaxReceiver reciever)) { return; } var state = new VTableCreationState(context, reciever); if (context.CancellationToken.IsCancellationRequested) { return; } state.GenerateSources(); }