|
1 | 1 | using System; |
2 | 2 | using System.Linq; |
3 | 3 | using CppSharp.AST; |
| 4 | +using CppSharp.AST.Extensions; |
4 | 5 | using CppSharp.Generators; |
5 | 6 |
|
6 | 7 | namespace CppSharp.Passes |
@@ -38,6 +39,12 @@ public override bool VisitFieldDecl(Field field) |
38 | 39 | if (ASTUtils.CheckIgnoreField(field)) |
39 | 40 | return false; |
40 | 41 |
|
| 42 | + if (Options.GeneratorKind == GeneratorKind.CPlusPlus) |
| 43 | + { |
| 44 | + if (field.Access != AccessSpecifier.Public) |
| 45 | + return false; |
| 46 | + } |
| 47 | + |
41 | 48 | var @class = field.Namespace as Class; |
42 | 49 | if (@class == null) |
43 | 50 | return false; |
@@ -91,31 +98,35 @@ private void GenerateAcessorMethods(Field field, Property property) |
91 | 98 | SynthKind = FunctionSynthKind.FieldAcessor |
92 | 99 | }; |
93 | 100 |
|
94 | | - var setter = new Method |
95 | | - { |
96 | | - Name = $"set_{field.Name}", |
97 | | - Namespace = @class, |
98 | | - ReturnType = new QualifiedType(new BuiltinType(PrimitiveType.Void)), |
99 | | - Access = field.Access, |
100 | | - AssociatedDeclaration = property, |
101 | | - IsStatic = field.IsStatic, |
102 | | - SynthKind = FunctionSynthKind.FieldAcessor |
103 | | - }; |
104 | | - |
105 | | - var param = new Parameter |
106 | | - { |
107 | | - Name = "value", |
108 | | - QualifiedType = field.QualifiedType, |
109 | | - Namespace = setter |
110 | | - }; |
111 | | - |
112 | | - setter.Parameters.Add(param); |
113 | | - |
114 | 101 | property.GetMethod = getter; |
115 | | - property.SetMethod = setter; |
116 | | - |
117 | 102 | @class.Methods.Add(getter); |
118 | | - @class.Methods.Add(setter); |
| 103 | + |
| 104 | + var isSetterInvalid = field.QualifiedType.IsConstRef(); |
| 105 | + if (!isSetterInvalid) |
| 106 | + { |
| 107 | + var setter = new Method |
| 108 | + { |
| 109 | + Name = $"set_{field.Name}", |
| 110 | + Namespace = @class, |
| 111 | + ReturnType = new QualifiedType(new BuiltinType(PrimitiveType.Void)), |
| 112 | + Access = field.Access, |
| 113 | + AssociatedDeclaration = property, |
| 114 | + IsStatic = field.IsStatic, |
| 115 | + SynthKind = FunctionSynthKind.FieldAcessor |
| 116 | + }; |
| 117 | + |
| 118 | + var param = new Parameter |
| 119 | + { |
| 120 | + Name = "value", |
| 121 | + QualifiedType = field.QualifiedType, |
| 122 | + Namespace = setter |
| 123 | + }; |
| 124 | + |
| 125 | + setter.Parameters.Add(param); |
| 126 | + |
| 127 | + property.SetMethod = setter; |
| 128 | + @class.Methods.Add(setter); |
| 129 | + } |
119 | 130 | } |
120 | 131 | } |
121 | 132 | } |
0 commit comments