Browse Source

Code cleanup

pull/1926/head
duckdoom5 4 months ago
parent
commit
c016d47745
  1. 170
      src/Generator/Passes/RenamePass.cs

170
src/Generator/Passes/RenamePass.cs

@ -43,27 +43,33 @@ namespace CppSharp.Passes @@ -43,27 +43,33 @@ namespace CppSharp.Passes
public virtual bool Rename(Declaration decl, out string newName)
{
if (decl is Method method && !method.IsStatic)
switch (decl)
{
Method rootBaseMethod;
if (method.OriginalNamespace is Class @class && @class.IsInterface)
rootBaseMethod = (Method)method.OriginalFunction;
else
rootBaseMethod = method.GetRootBaseMethod();
if (rootBaseMethod != null && rootBaseMethod != method)
case Method { IsStatic: false } method:
{
newName = rootBaseMethod.Name;
return true;
}
}
Method rootBaseMethod;
if (method.OriginalNamespace is Class { IsInterface: true })
rootBaseMethod = (Method)method.OriginalFunction;
else
rootBaseMethod = method.GetRootBaseMethod();
if (rootBaseMethod != null && rootBaseMethod != method)
{
newName = rootBaseMethod.Name;
return true;
}
if (decl is Property property && !property.IsStatic)
{
var rootBaseProperty = ((Class)property.Namespace).GetBasePropertyByName(property);
if (rootBaseProperty != null && rootBaseProperty != property)
break;
}
case Property { IsStatic: false } property:
{
newName = rootBaseProperty.Name;
return true;
var rootBaseProperty = ((Class)property.Namespace).GetBasePropertyByName(property);
if (rootBaseProperty != null && rootBaseProperty != property)
{
newName = rootBaseProperty.Name;
return true;
}
break;
}
}
@ -73,62 +79,46 @@ namespace CppSharp.Passes @@ -73,62 +79,46 @@ namespace CppSharp.Passes
public bool IsRenameableDecl(Declaration decl)
{
if (decl is Class)
return Targets.HasFlag(RenameTargets.Class);
var method = decl as Method;
if (method != null)
switch (decl)
{
return Targets.HasFlag(RenameTargets.Method) &&
method.Kind == CXXMethodKind.Normal &&
method.Name != "dispose";
}
var function = decl as Function;
if (function != null)
{
// Special case the IDisposable.Dispose method.
return Targets.HasFlag(RenameTargets.Function) &&
(!function.IsOperator && function.Name != "dispose");
}
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 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 Targets.HasFlag(RenameTargets.Namespace);
if (decl is Variable)
return Targets.HasFlag(RenameTargets.Variable);
var field = decl as Field;
if (field != null)
{
if (!Targets.HasFlag(RenameTargets.Field))
case Class:
return Targets.HasFlag(RenameTargets.Class);
case Method method:
return Targets.HasFlag(RenameTargets.Method) &&
method.Kind == CXXMethodKind.Normal &&
method.Name != "dispose";
case Function function:
// Special case the IDisposable.Dispose method.
return Targets.HasFlag(RenameTargets.Function) &&
(!function.IsOperator && function.Name != "dispose");
case Parameter:
return Targets.HasFlag(RenameTargets.Parameter);
case Enumeration.Item:
return Targets.HasFlag(RenameTargets.EnumItem);
case Enumeration:
return Targets.HasFlag(RenameTargets.Enum);
case Property property:
return Targets.HasFlag(RenameTargets.Property) && !property.IsIndexer;
case Event:
return Targets.HasFlag(RenameTargets.Event);
case TypedefDecl:
return Targets.HasFlag(RenameTargets.Delegate);
case Namespace when !(decl is TranslationUnit):
return Targets.HasFlag(RenameTargets.Namespace);
case Variable:
return Targets.HasFlag(RenameTargets.Variable);
case Field when !Targets.HasFlag(RenameTargets.Field):
return false;
case Field field:
{
var fieldProperty = ((Class)field.Namespace).Properties.FirstOrDefault(
p => p.Field == field);
return (fieldProperty != null &&
fieldProperty.IsInRefTypeAndBackedByValueClassField());
}
default:
return false;
var fieldProperty = ((Class)field.Namespace).Properties.FirstOrDefault(
p => p.Field == field);
return (fieldProperty != null &&
fieldProperty.IsInRefTypeAndBackedByValueClassField());
}
return false;
}
public override bool VisitDeclaration(Declaration decl)
@ -148,8 +138,7 @@ namespace CppSharp.Passes @@ -148,8 +138,7 @@ namespace CppSharp.Passes
private bool Rename(Declaration decl)
{
string newName;
if (!Rename(decl, out newName) || AreThereConflicts(decl, newName))
if (!Rename(decl, out var newName) || AreThereConflicts(decl, newName))
return false;
decl.Name = newName;
@ -167,8 +156,7 @@ namespace CppSharp.Passes @@ -167,8 +156,7 @@ namespace CppSharp.Passes
declarations.AddRange(decl.Namespace.Events);
declarations.Add(decl.Namespace);
var function = decl as Function;
if (function != null)
if (decl is Function function)
// account for overloads
declarations.AddRange(GetFunctionsWithTheSameParams(function));
else
@ -177,11 +165,10 @@ namespace CppSharp.Passes @@ -177,11 +165,10 @@ namespace CppSharp.Passes
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
where pointerType?.GetFinalPointee() is FunctionType
select typedefDecl);
var specialization = decl as ClassTemplateSpecialization;
if (specialization != null)
if (decl is ClassTemplateSpecialization specialization)
declarations.RemoveAll(d => specialization.TemplatedDecl.TemplatedDecl == d);
var @class = decl.Namespace as Class;
@ -201,8 +188,7 @@ namespace CppSharp.Passes @@ -201,8 +188,7 @@ namespace CppSharp.Passes
if (decl is Method && decl.IsGenerated)
return @class.GetPropertyByName(newName) != null;
var property = decl as Property;
if (property != null)
if (decl is Property property)
{
Property existingProperty = @class.Properties.Find(
p => p != decl && p.Name == newName);
@ -216,8 +202,7 @@ namespace CppSharp.Passes @@ -216,8 +202,7 @@ namespace CppSharp.Passes
}
}
var enumItem = decl as Enumeration.Item;
if (enumItem != null)
if (decl is Enumeration.Item enumItem)
return ((Enumeration)enumItem.Namespace).Items.Any(
i => i != decl && i.Name == newName);
@ -226,8 +211,7 @@ namespace CppSharp.Passes @@ -226,8 +211,7 @@ namespace CppSharp.Passes
private static IEnumerable<Function> GetFunctionsWithTheSameParams(Function function)
{
var method = function as Method;
if (method != null)
if (function is Method method)
{
return ((Class)method.Namespace).Methods.Where(
m => !m.Ignore && m.Parameters.SequenceEqual(function.Parameters, new ParameterComparer()));
@ -391,14 +375,12 @@ namespace CppSharp.Passes @@ -391,14 +375,12 @@ namespace CppSharp.Passes
if (decl.Name.All(c => !char.IsLetter(c)))
return decl.Name;
var typedef = decl as TypedefDecl;
if (typedef != null && typedef.IsSynthetized)
return decl.Name;
var property = decl as Property;
if (property != null && property.GetMethod != null &&
property.GetMethod.SynthKind == FunctionSynthKind.InterfaceInstance)
return decl.Name;
switch (decl)
{
case TypedefDecl { IsSynthetized: true }:
case Property { GetMethod.SynthKind: FunctionSynthKind.InterfaceInstance }:
return decl.Name;
}
var sb = new StringBuilder(decl.Name);
// check if it's been renamed to avoid a keyword
@ -412,14 +394,14 @@ namespace CppSharp.Passes @@ -412,14 +394,14 @@ namespace CppSharp.Passes
{
case RenameCasePattern.UpperCamelCase:
// ensure separation in enum items by not ending up with more capitals in a row than before
if (sb.Length == 1 || !char.IsUpper(sb[1]) || !(decl is Enumeration.Item))
if (sb.Length == 1 || !char.IsUpper(sb[1]) || decl is not Enumeration.Item)
sb[0] = char.ToUpperInvariant(sb[0]);
if (@class != null && @class.Type == ClassType.Interface)
if (@class is { Type: ClassType.Interface })
sb[1] = char.ToUpperInvariant(sb[1]);
break;
case RenameCasePattern.LowerCamelCase:
sb[0] = char.ToLowerInvariant(sb[0]);
if (@class != null && @class.Type == ClassType.Interface)
if (@class is { Type: ClassType.Interface })
sb[1] = char.ToLowerInvariant(sb[1]);
break;
}

Loading…
Cancel
Save