Refactor all renaming pass declaration checking into IsRenameableDecl.

This commit is contained in:
Joao Matos 2017-03-07 15:30:59 +00:00
Родитель 10ac0a4865
Коммит 3b7199f61c
1 изменённых файлов: 48 добавлений и 94 удалений

Просмотреть файл

@ -74,29 +74,59 @@ namespace CppSharp.Passes
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;
if (function != null)
{
// special case the IDisposable.Dispose that could be added later
return !function.IsOperator && function.Name != "dispose";
// Special case the IDisposable.Dispose method.
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;
if (property != null) return !property.IsIndexer;
if (decl is Event) return true;
if (decl is TypedefDecl) return true;
if (property != null)
return Targets.HasFlag(RenameTargets.Property) && !property.IsIndexer;
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 Variable) return true;
if (decl is Variable)
return Targets.HasFlag(RenameTargets.Variable);
var field = decl as Field;
if (field != null)
{
if (!Targets.HasFlag(RenameTargets.Field))
return false;
var fieldProperty = ((Class) field.Namespace).Properties.FirstOrDefault(
p => p.Field == field);
return (fieldProperty != null &&
fieldProperty.IsInRefTypeAndBackedByValueClassField());
}
return false;
}
@ -119,6 +149,7 @@ namespace CppSharp.Passes
string newName;
if (Rename(decl, out newName) && !AreThereConflicts(decl, newName))
decl.Name = newName;
return true;
}
@ -128,6 +159,7 @@ namespace CppSharp.Passes
declarations.AddRange(decl.Namespace.Classes.Where(c => !c.IsIncomplete));
declarations.AddRange(decl.Namespace.Enums);
declarations.AddRange(decl.Namespace.Events);
var function = decl as Function;
if (function != null && function.SynthKind != FunctionSynthKind.AdjustedMethod)
{
@ -137,11 +169,13 @@ namespace CppSharp.Passes
}
else
declarations.AddRange(decl.Namespace.Functions);
declarations.AddRange(decl.Namespace.Variables);
declarations.AddRange(from typedefDecl in decl.Namespace.Typedefs
let pointerType = typedefDecl.Type.Desugar() as PointerType
where pointerType != null && pointerType.GetFinalPointee() is FunctionType
select typedefDecl);
var specialization = decl as ClassTemplateSpecialization;
if (specialization != null)
declarations.RemoveAll(d => specialization.TemplatedDecl.TemplatedDecl == d);
@ -177,21 +211,6 @@ namespace CppSharp.Passes
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)
{
var result = base.VisitClassDecl(@class);
@ -204,73 +223,6 @@ namespace CppSharp.Passes
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]
@ -313,7 +265,8 @@ namespace CppSharp.Passes
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);
@ -335,7 +288,7 @@ namespace CppSharp.Passes
}
/// <summary>
/// Renames a declaration based on a regular expression pattern.
/// Renames a declaration based on a pre-defined pattern.
/// </summary>
public class CaseRenamePass : RenamePass
{
@ -349,7 +302,8 @@ namespace CppSharp.Passes
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);
return true;