Browse Source

CLIHeaderTemplate an CLISourcesTemplate now take care of properties with only a getter or s setter, and properties using fields that for now always have a getter and a setter.

pull/16/head
marcos henrich 12 years ago
parent
commit
61986172e7
  1. 26
      src/Generator/Generators/CLI/CLIHeadersTemplate.cs
  2. 70
      src/Generator/Generators/CLI/CLISourcesTemplate.cs

26
src/Generator/Generators/CLI/CLIHeadersTemplate.cs

@ -475,39 +475,33 @@ namespace CppSharp.Generators.CLI @@ -475,39 +475,33 @@ namespace CppSharp.Generators.CLI
public void GenerateClassProperties(Class @class)
{
PushIndent();
foreach (var field in @class.Fields)
{
if (ASTUtils.CheckIgnoreField(@class, field))
continue;
GenerateDeclarationCommon(field);
GenerateProperty(field);
}
PopIndent();
PushIndent();
foreach (var prop in @class.Properties)
{
if (prop.Ignore) continue;
GenerateDeclarationCommon(prop);
GenerateProperty(prop);
var isGetter = prop.GetMethod != null || prop.Field != null;
var isSetter = prop.SetMethod != null || prop.Field != null;
GenerateProperty(prop, isGetter, isSetter);
}
PopIndent();
}
public void GenerateProperty<T>(T decl)
public void GenerateProperty<T>(T decl, bool isGetter = true, bool isSetter = true)
where T : Declaration, ITypedDecl
{
if (!(isGetter || isSetter))
return;
PushBlock(CLIBlockKind.Property, decl);
var type = decl.Type.Visit(TypePrinter, decl.QualifiedType.Qualifiers);
WriteLine("property {0} {1}", type, decl.Name);
WriteStartBraceIndent();
WriteLine("{0} get();", type);
WriteLine("void set({0});", type);
if(isGetter) WriteLine("{0} get();", type);
if(isSetter) WriteLine("void set({0});", type);
WriteCloseBraceIndent();
PopBlock();
@ -518,8 +512,6 @@ namespace CppSharp.Generators.CLI @@ -518,8 +512,6 @@ namespace CppSharp.Generators.CLI
if (method.Ignore) return;
if (method.Access != AccessSpecifier.Public)
return;
PushBlock(CLIBlockKind.Method, method);
GenerateDeclarationCommon(method);

70
src/Generator/Generators/CLI/CLISourcesTemplate.cs

@ -154,16 +154,11 @@ namespace CppSharp.Generators.CLI @@ -154,16 +154,11 @@ namespace CppSharp.Generators.CLI
WriteCloseBraceIndent();
PopBlock(NewLineKind.BeforeNextBlock);
}
foreach (var field in @class.Fields)
{
if (ASTUtils.CheckIgnoreField(@class, field))
continue;
GenerateFieldProperty(field);
}
}
foreach (var property in @class.Properties)
GenerateProperty(property);
foreach (var @event in @class.Events)
{
if (@event.Ignore)
@ -239,21 +234,45 @@ namespace CppSharp.Generators.CLI @@ -239,21 +234,45 @@ namespace CppSharp.Generators.CLI
printer.Context = oldCtx;
}
private void GenerateFieldProperty(Field field)
private void GenerateProperty(Property property)
{
var @class = field.Class;
if (property.Ignore) return;
PushBlock(CLIBlockKind.Property);
var @class = property.Namespace as Class;
GeneratePropertyGetter(field, @class);
GeneratePropertySetter(field, @class);
if (property.Field != null)
{
GeneratePropertyGetter(property.Field, @class, property.Name, property.Type);
GeneratePropertySetter(property.Field, @class, property.Name, property.Type);
}
else
{
GeneratePropertyGetter(property.GetMethod, @class, property.Name, property.Type);
GeneratePropertySetter(property.SetMethod, @class, property.Name, property.Type);
}
PopBlock();
}
private void GeneratePropertySetter<T>(T decl, Class @class)
private void GeneratePropertySetter<T>(T decl, Class @class, string name, Type type)
where T : Declaration, ITypedDecl
{
if (decl == null)
return;
WriteLine("void {0}::{1}::set({2} value)", QualifiedIdentifier(@class),
decl.Name, decl.Type);
name, type);
WriteStartBraceIndent();
if (decl is Function)
{
var func = decl as Function;
if(func.Parameters[0].Name != "value")
WriteLine("auto {0} = value;", func.Parameters[0].Name);
GenerateFunctionCall(func, @class);
}
else
{
var param = new Parameter
{
Name = "value",
@ -281,18 +300,29 @@ namespace CppSharp.Generators.CLI @@ -281,18 +300,29 @@ namespace CppSharp.Generators.CLI
Write(marshal.Context.SupportBefore);
WriteLine("{0} = {1};", variable, marshal.Context.Return);
}
WriteCloseBraceIndent();
NewLine();
}
private void GeneratePropertyGetter<T>(T decl, Class @class)
private void GeneratePropertyGetter<T>(T decl, Class @class, string name, Type type)
where T : Declaration, ITypedDecl
{
WriteLine("{0} {1}::{2}::get()", decl.Type, QualifiedIdentifier(@class),
decl.Name);
if (decl == null)
return;
WriteLine("{0} {1}::{2}::get()", type, QualifiedIdentifier(@class),
name);
WriteStartBraceIndent();
if (decl is Function)
{
var func = decl as Function;
GenerateFunctionCall(func, @class);
}
else
{
string variable;
if (decl is Variable)
variable = string.Format("::{0}::{1}",
@ -315,6 +345,8 @@ namespace CppSharp.Generators.CLI @@ -315,6 +345,8 @@ namespace CppSharp.Generators.CLI
Write(marshal.Context.SupportBefore);
WriteLine("return {0};", marshal.Context.Return);
}
WriteCloseBraceIndent();
NewLine();
@ -428,10 +460,10 @@ namespace CppSharp.Generators.CLI @@ -428,10 +460,10 @@ namespace CppSharp.Generators.CLI
private void GenerateVariable(Variable variable, Class @class)
{
GeneratePropertyGetter(variable, @class);
GeneratePropertyGetter(variable, @class, variable.Name, variable.Type);
if (!variable.QualifiedType.Qualifiers.IsConst)
GeneratePropertySetter(variable, @class);
GeneratePropertySetter(variable, @class, variable.Name, variable.Type);
}
private void GenerateClassConstructor(Class @class, bool isIntPtr)

Loading…
Cancel
Save