private void ProcessStructMembers(CodeTypeDeclaration ctd, TransformKindFlags kind) { if (TransformKindFlags.StructMembers != (Kind & TransformKindFlags.StructMembers)) { return; } foreach (TransformPlugin plugin in _list) { if (0 != (plugin.TransformKind & kind)) { plugin.ProcessStructMembers(ctd); } } }
public MarshalTransform(LanguageType lang, NativeSymbolBag bag, TransformKindFlags kind) { _trans = new CodeTransform(lang, bag); Kind = kind; // Method Parameters _list.Add(new BooleanTypesTransformPlugin()); // Process BSTR types before any other string. BSTR can techinally be used as other String types // such as LPWSTR and the other string matching code will flag them as such. Therefore we will // process them first since the reverse is not true _list.Add(new BstrTransformPlugin()); _list.Add(new MutableStringBufferTransformPlugin()); _list.Add(new ConstantStringTransformPlugin()); _list.Add(new ArrayParameterTransformPlugin(_trans)); _list.Add(new BetterManagedTypesTransformPlugin()); _list.Add(new PointerToKnownTypeTransformPlugin(_trans)); _list.Add(new SystemIntTransformPlugin()); _list.Add(new RawStringTransformPlugin()); // Very low on the list as it's a last ditch effort _list.Add(new DoublePointerOutTransformPlugin()); _list.Add(new PointerPointerTransformPlugin()); _list.Add(new DirectionalModifiersTransformPlugin()); // Struct Member _list.Add(new StringBufferStructMemberTransformPlugin()); _list.Add(new StringPointerStructMemberTransformPlugin()); _list.Add(new BoolStructMemberTransformPlugin()); // Union Members _list.Add(new BoolUnionMemberTransformPlugin()); // Mainly wrapper generators _list.Add(new OneWayStringBufferTransformPlugin()); _list.Add(new TwoWayStringBufferTransformPlugin()); _list.Add(new TwoWayViaReturnStringBufferTransformPlugin()); _list.Add(new PInvokePointerTransformPlugin()); foreach (TransformPlugin cur in _list) { cur.LanguageType = lang; } }