Browse Source

Based if a method is an override exclusively on if it has any overridden methods.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/904/head
Dimitar Dobrev 8 years ago
parent
commit
845bf5b7f1
  1. 9
      src/AST/Method.cs
  2. 23
      src/Generator/Passes/GenerateAbstractImplementationsPass.cs
  3. 7
      src/Generator/Passes/ObjectOverridesPass.cs

9
src/AST/Method.cs

@ -94,7 +94,6 @@ namespace CppSharp.AST
Access = method.Access; Access = method.Access;
IsVirtual = method.IsVirtual; IsVirtual = method.IsVirtual;
IsConst = method.IsConst; IsConst = method.IsConst;
IsOverride = method.IsOverride;
IsFinal = method.IsFinal; IsFinal = method.IsFinal;
IsProxy = method.IsProxy; IsProxy = method.IsProxy;
IsStatic = method.IsStatic; IsStatic = method.IsStatic;
@ -118,11 +117,7 @@ namespace CppSharp.AST
public bool IsStatic { get; set; } public bool IsStatic { get; set; }
public bool IsConst { get; set; } public bool IsConst { get; set; }
public bool IsExplicit { get; set; } public bool IsExplicit { get; set; }
public bool IsOverride public bool IsOverride => OverriddenMethods.Any();
{
get { return isOverride ?? OverriddenMethods.Any(); }
set { isOverride = value; }
}
// True if the method is final / sealed. // True if the method is final / sealed.
public bool IsFinal { get; set; } public bool IsFinal { get; set; }
@ -174,7 +169,5 @@ namespace CppSharp.AST
{ {
return visitor.VisitMethodDecl(this); return visitor.VisitMethodDecl(this);
} }
private bool? isOverride;
} }
} }

23
src/Generator/Passes/GenerateAbstractImplementationsPass.cs

@ -57,17 +57,18 @@ namespace CppSharp.Passes
var internalImpl = GetInternalImpl(@class); var internalImpl = GetInternalImpl(@class);
var abstractMethods = GetRelevantAbstractMethods(@class); var abstractMethods = GetRelevantAbstractMethods(@class);
foreach (var abstractMethod in abstractMethods)
internalImpl.Methods.AddRange( {
from method in abstractMethods var impl = new Method(abstractMethod)
select new Method(method) {
{ Namespace = internalImpl,
Namespace = internalImpl, OriginalFunction = abstractMethod,
OriginalFunction = method, IsPure = false,
IsPure = false, SynthKind = FunctionSynthKind.AbstractImplCall
IsOverride = true, };
SynthKind = FunctionSynthKind.AbstractImplCall impl.OverriddenMethods.Add(abstractMethod);
}); internalImpl.Methods.Add(impl);
}
internalImpl.Layout = @class.Layout; internalImpl.Layout = @class.Layout;

7
src/Generator/Passes/ObjectOverridesPass.cs

@ -127,10 +127,9 @@ namespace CppSharp
Namespace = @class, Namespace = @class,
ReturnType = new QualifiedType(stringType), ReturnType = new QualifiedType(stringType),
SynthKind = FunctionSynthKind.ComplementOperator, SynthKind = FunctionSynthKind.ComplementOperator,
IsOverride = true,
IsProxy = true IsProxy = true
}; };
toStringMethod.OverriddenMethods.Add(new Method { Name = "Equals" });
@class.Methods.Add(toStringMethod); @class.Methods.Add(toStringMethod);
Diagnostics.Debug("Function converted to ToString: {0}::{1}", Diagnostics.Debug("Function converted to ToString: {0}::{1}",
@ -152,9 +151,9 @@ namespace CppSharp
ReturnType = new QualifiedType(new BuiltinType(PrimitiveType.Bool)), ReturnType = new QualifiedType(new BuiltinType(PrimitiveType.Bool)),
Parameters = new List<Parameter> { methodEqualsParam }, Parameters = new List<Parameter> { methodEqualsParam },
SynthKind = FunctionSynthKind.ComplementOperator, SynthKind = FunctionSynthKind.ComplementOperator,
IsOverride = true,
IsProxy = true IsProxy = true
}; };
methodEquals.OverriddenMethods.Add(new Method { Name = "Equals" });
@class.Methods.Add(methodEquals); @class.Methods.Add(methodEquals);
var methodHashCode = new Method var methodHashCode = new Method
@ -163,9 +162,9 @@ namespace CppSharp
Namespace = @class, Namespace = @class,
ReturnType = new QualifiedType(new BuiltinType(PrimitiveType.Int)), ReturnType = new QualifiedType(new BuiltinType(PrimitiveType.Int)),
SynthKind = FunctionSynthKind.ComplementOperator, SynthKind = FunctionSynthKind.ComplementOperator,
IsOverride = true,
IsProxy = true IsProxy = true
}; };
methodHashCode.OverriddenMethods.Add(new Method { Name = "GetHashCode" });
@class.Methods.Add(methodHashCode); @class.Methods.Add(methodHashCode);
return true; return true;

Loading…
Cancel
Save