private void GenerateClassProperties(Class @class, Class realOwner) { if (@class.IsValueType) { foreach (var @base in @class.Bases.Where(b => b.IsClass && b.Class.IsDeclared)) { GenerateClassProperties(@base.Class, realOwner); } } foreach (var property in @class.Properties.Where( p => !ASTUtils.CheckIgnoreProperty(p) && !p.IsInRefTypeAndBackedByValueClassField() && !CLIHeaders.TypeIgnored(p.Type))) { GenerateProperty(property, realOwner); } }
private void GenerateStructMarshaling(Class @class, string nativeVar) { foreach (var @base in @class.Bases.Where(b => b.IsClass && b.Class.IsDeclared)) { GenerateStructMarshaling(@base.Class, nativeVar); } int paramIndex = 0; foreach (var property in @class.Properties.Where( p => !ASTUtils.CheckIgnoreProperty(p) && !CLIHeaders.TypeIgnored(p.Type))) { if (property.Field == null) { continue; } var nativeField = string.Format("{0}{1}", nativeVar, property.Field.OriginalName); var ctx = new MarshalContext(Context) { ArgName = property.Name, ReturnVarName = nativeField, ReturnType = property.QualifiedType, Declaration = property.Field, ParameterIndex = paramIndex++ }; var marshal = new CLIMarshalNativeToManagedPrinter(ctx); property.Visit(marshal); if (!string.IsNullOrWhiteSpace(marshal.Context.Before)) { Write(marshal.Context.Before); } WriteLine("{0} = {1};", property.Field.Name, marshal.Context.Return); } }