Browse Source

Refactor all renaming pass declaration checking into IsRenameableDecl.

pull/787/head
Joao Matos 8 years ago
parent
commit
3b7199f61c
  1. 142
      src/Generator/Passes/RenamePass.cs

142
src/Generator/Passes/RenamePass.cs

@ -74,29 +74,59 @@ namespace CppSharp.Passes
public bool IsRenameableDecl(Declaration decl) public bool IsRenameableDecl(Declaration decl)
{ {
if (decl is Class) return true; if (decl is Class)
return true;
var method = decl as Method;
if (method != null)
{
return Targets.HasFlag(RenameTargets.Method) &&
method.Kind == CXXMethodKind.Normal;
}
var function = decl as Function; var function = decl as Function;
if (function != null) if (function != null)
{ {
// special case the IDisposable.Dispose that could be added later // Special case the IDisposable.Dispose method.
return !function.IsOperator && function.Name != "dispose"; return Targets.HasFlag(RenameTargets.Function) &&
(!function.IsOperator && function.Name != "dispose");
} }
if (decl is Parameter) return true;
if (decl is Enumeration) return true; if (decl is Parameter)
return Targets.HasFlag(RenameTargets.Parameter);
if (decl is Enumeration.Item)
return Targets.HasFlag(RenameTargets.EnumItem);
if (decl is Enumeration)
return Targets.HasFlag(RenameTargets.Enum);
var property = decl as Property; var property = decl as Property;
if (property != null) return !property.IsIndexer; if (property != null)
if (decl is Event) return true; return Targets.HasFlag(RenameTargets.Property) && !property.IsIndexer;
if (decl is TypedefDecl) return true;
if (decl is Event)
return Targets.HasFlag(RenameTargets.Event);
if (decl is TypedefDecl)
return Targets.HasFlag(RenameTargets.Delegate);
if (decl is Namespace && !(decl is TranslationUnit)) return true; if (decl is Namespace && !(decl is TranslationUnit)) return true;
if (decl is Variable) return true;
if (decl is Variable)
return Targets.HasFlag(RenameTargets.Variable);
var field = decl as Field; var field = decl as Field;
if (field != null) if (field != null)
{ {
if (!Targets.HasFlag(RenameTargets.Field))
return false;
var fieldProperty = ((Class) field.Namespace).Properties.FirstOrDefault( var fieldProperty = ((Class) field.Namespace).Properties.FirstOrDefault(
p => p.Field == field); p => p.Field == field);
return (fieldProperty != null && return (fieldProperty != null &&
fieldProperty.IsInRefTypeAndBackedByValueClassField()); fieldProperty.IsInRefTypeAndBackedByValueClassField());
} }
return false; return false;
} }
@ -119,6 +149,7 @@ namespace CppSharp.Passes
string newName; string newName;
if (Rename(decl, out newName) && !AreThereConflicts(decl, newName)) if (Rename(decl, out newName) && !AreThereConflicts(decl, newName))
decl.Name = newName; decl.Name = newName;
return true; return true;
} }
@ -128,6 +159,7 @@ namespace CppSharp.Passes
declarations.AddRange(decl.Namespace.Classes.Where(c => !c.IsIncomplete)); declarations.AddRange(decl.Namespace.Classes.Where(c => !c.IsIncomplete));
declarations.AddRange(decl.Namespace.Enums); declarations.AddRange(decl.Namespace.Enums);
declarations.AddRange(decl.Namespace.Events); declarations.AddRange(decl.Namespace.Events);
var function = decl as Function; var function = decl as Function;
if (function != null && function.SynthKind != FunctionSynthKind.AdjustedMethod) if (function != null && function.SynthKind != FunctionSynthKind.AdjustedMethod)
{ {
@ -137,11 +169,13 @@ namespace CppSharp.Passes
} }
else else
declarations.AddRange(decl.Namespace.Functions); declarations.AddRange(decl.Namespace.Functions);
declarations.AddRange(decl.Namespace.Variables); declarations.AddRange(decl.Namespace.Variables);
declarations.AddRange(from typedefDecl in decl.Namespace.Typedefs declarations.AddRange(from typedefDecl in decl.Namespace.Typedefs
let pointerType = typedefDecl.Type.Desugar() as PointerType let pointerType = typedefDecl.Type.Desugar() as PointerType
where pointerType != null && pointerType.GetFinalPointee() is FunctionType where pointerType != null && pointerType.GetFinalPointee() is FunctionType
select typedefDecl); select typedefDecl);
var specialization = decl as ClassTemplateSpecialization; var specialization = decl as ClassTemplateSpecialization;
if (specialization != null) if (specialization != null)
declarations.RemoveAll(d => specialization.TemplatedDecl.TemplatedDecl == d); declarations.RemoveAll(d => specialization.TemplatedDecl.TemplatedDecl == d);
@ -177,21 +211,6 @@ namespace CppSharp.Passes
f => !f.Ignore && f.Parameters.SequenceEqual(function.Parameters, new ParameterComparer())); f => !f.Ignore && f.Parameters.SequenceEqual(function.Parameters, new ParameterComparer()));
} }
public override bool VisitEnumItemDecl(Enumeration.Item item)
{
if (!Targets.HasFlag(RenameTargets.EnumItem))
return false;
string newName;
if (Rename(item, out newName))
{
item.Name = newName;
return true;
}
return true;
}
public override bool VisitClassDecl(Class @class) public override bool VisitClassDecl(Class @class)
{ {
var result = base.VisitClassDecl(@class); var result = base.VisitClassDecl(@class);
@ -204,73 +223,6 @@ namespace CppSharp.Passes
return result; return result;
} }
public override bool VisitFieldDecl(Field field)
{
if (!Targets.HasFlag(RenameTargets.Field))
return false;
return base.VisitFieldDecl(field);
}
public override bool VisitProperty(Property property)
{
if (!Targets.HasFlag(RenameTargets.Property))
return false;
return base.VisitProperty(property);
}
public override bool VisitTypedefDecl(TypedefDecl typedef)
{
if (!Targets.HasFlag(RenameTargets.Delegate))
return false;
return base.VisitTypedefDecl(typedef);
}
public override bool VisitMethodDecl(Method method)
{
if (!Targets.HasFlag(RenameTargets.Method))
return false;
if (method.Kind != CXXMethodKind.Normal)
return false;
return base.VisitMethodDecl(method);
}
public override bool VisitFunctionDecl(Function function)
{
if (!Targets.HasFlag(RenameTargets.Function))
return false;
return base.VisitFunctionDecl(function);
}
public override bool VisitParameterDecl(Parameter parameter)
{
if (!Targets.HasFlag(RenameTargets.Parameter))
return false;
return base.VisitParameterDecl(parameter);
}
public override bool VisitEvent(Event @event)
{
if (!Targets.HasFlag(RenameTargets.Event))
return false;
return base.VisitEvent(@event);
}
public override bool VisitVariableDecl(Variable variable)
{
if (!Targets.HasFlag(RenameTargets.Variable))
return false;
return base.VisitVariableDecl(variable);
}
} }
[Flags] [Flags]
@ -313,7 +265,8 @@ namespace CppSharp.Passes
public override bool Rename(Declaration decl, out string newName) public override bool Rename(Declaration decl, out string newName)
{ {
if (base.Rename(decl, out newName)) return true; if (base.Rename(decl, out newName))
return true;
var replace = Regex.Replace(decl.Name, Pattern, Replacement); var replace = Regex.Replace(decl.Name, Pattern, Replacement);
@ -335,7 +288,7 @@ namespace CppSharp.Passes
} }
/// <summary> /// <summary>
/// Renames a declaration based on a regular expression pattern. /// Renames a declaration based on a pre-defined pattern.
/// </summary> /// </summary>
public class CaseRenamePass : RenamePass public class CaseRenamePass : RenamePass
{ {
@ -349,7 +302,8 @@ namespace CppSharp.Passes
public override bool Rename(Declaration decl, out string newName) public override bool Rename(Declaration decl, out string newName)
{ {
if (base.Rename(decl, out newName)) return true; if (base.Rename(decl, out newName))
return true;
newName = ConvertCaseString(decl, Pattern); newName = ConvertCaseString(decl, Pattern);
return true; return true;

Loading…
Cancel
Save