Browse Source

Add `IgnoreConversionToProperty(pattern)` and `ForceConversionToProperty(pattern)`.

pull/1028/head
Rokas Kupstys 8 years ago
parent
commit
a03a0ea0c5
  1. 5
      src/AST/Method.cs
  2. 50
      src/Generator/Library.cs
  3. 5
      src/Generator/Passes/GetterSetterToPropertyPass.cs

5
src/AST/Method.cs

@ -105,6 +105,7 @@ namespace CppSharp.AST @@ -105,6 +105,7 @@ namespace CppSharp.AST
SynthKind = method.SynthKind;
AdjustedOffset = method.AdjustedOffset;
OverriddenMethods.AddRange(method.OverriddenMethods);
ConvertToProperty = method.ConvertToProperty;
}
public Method(Function function)
@ -172,6 +173,8 @@ namespace CppSharp.AST @@ -172,6 +173,8 @@ namespace CppSharp.AST
public List<Method> OverriddenMethods { get; } = new List<Method>();
public bool ConvertToProperty { get; set; }
public Method GetRootBaseMethod()
{
return BaseMethod == null || BaseMethod.BaseMethod == null ?
@ -185,4 +188,4 @@ namespace CppSharp.AST @@ -185,4 +188,4 @@ namespace CppSharp.AST
private bool? isOverride;
}
}
}

50
src/Generator/Library.cs

@ -4,6 +4,7 @@ using System.Globalization; @@ -4,6 +4,7 @@ using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using CppSharp.AST;
using CppSharp.Passes;
namespace CppSharp
{
@ -351,6 +352,53 @@ namespace CppSharp @@ -351,6 +352,53 @@ namespace CppSharp
}
}
private static IEnumerable<Class> GetClasses(DeclarationContext decl)
{
foreach (var @class in decl.Classes)
{
yield return @class;
foreach (var class2 in GetClasses(@class))
yield return class2;
}
foreach (var ns in decl.Namespaces)
{
foreach (var @class in GetClasses(ns))
yield return @class;
}
}
public static void IgnoreConversionToProperty(this ASTContext context, string pattern)
{
foreach (var unit in context.TranslationUnits)
{
foreach (var @class in GetClasses(unit))
{
foreach (var method in @class.Methods)
{
if (Regex.Match(method.QualifiedLogicalOriginalName, pattern).Success)
method.ExcludeFromPasses.Add(typeof(GetterSetterToPropertyPass));
}
}
}
}
public static void ForceConversionToProperty(this ASTContext context, string pattern)
{
foreach (var unit in context.TranslationUnits)
{
foreach (var @class in GetClasses(unit))
{
foreach (var method in @class.Methods)
{
if (Regex.Match(method.QualifiedLogicalOriginalName, pattern).Success)
method.ConvertToProperty = true;
}
}
}
}
#endregion
#region Module Helpers
@ -379,4 +427,4 @@ namespace CppSharp @@ -379,4 +427,4 @@ namespace CppSharp
#endregion
}
}
}

5
src/Generator/Passes/GetterSetterToPropertyPass.cs

@ -25,7 +25,8 @@ namespace CppSharp.Passes @@ -25,7 +25,8 @@ namespace CppSharp.Passes
{
this.useHeuristics = useHeuristics;
foreach (var method in @class.Methods.Where(
m => !m.IsConstructor && !m.IsDestructor && !m.IsOperator && m.IsGenerated))
m => !m.IsConstructor && !m.IsDestructor && !m.IsOperator && m.IsGenerated &&
!m.ExcludeFromPasses.Contains(typeof(GetterSetterToPropertyPass))))
DistributeMethod(method);
}
@ -261,7 +262,7 @@ namespace CppSharp.Passes @@ -261,7 +262,7 @@ namespace CppSharp.Passes
}
else
{
if (IsGetter(method))
if (method.ConvertToProperty || IsGetter(method))
getters.Add(method);
if (method.Parameters.All(p => p.Kind == ParameterKind.IndirectReturnType))
nonSetters.Add(method);

Loading…
Cancel
Save