|
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