From 845bf5b7f17c7a6c673b48963622cc704dd2bf2b Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Thu, 27 Jul 2017 23:28:40 +0300 Subject: [PATCH] Based if a method is an override exclusively on if it has any overridden methods. Signed-off-by: Dimitar Dobrev --- src/AST/Method.cs | 9 +------- .../GenerateAbstractImplementationsPass.cs | 23 ++++++++++--------- src/Generator/Passes/ObjectOverridesPass.cs | 7 +++--- 3 files changed, 16 insertions(+), 23 deletions(-) diff --git a/src/AST/Method.cs b/src/AST/Method.cs index 742fed09..f424b706 100644 --- a/src/AST/Method.cs +++ b/src/AST/Method.cs @@ -94,7 +94,6 @@ namespace CppSharp.AST Access = method.Access; IsVirtual = method.IsVirtual; IsConst = method.IsConst; - IsOverride = method.IsOverride; IsFinal = method.IsFinal; IsProxy = method.IsProxy; IsStatic = method.IsStatic; @@ -118,11 +117,7 @@ namespace CppSharp.AST public bool IsStatic { get; set; } public bool IsConst { get; set; } public bool IsExplicit { get; set; } - public bool IsOverride - { - get { return isOverride ?? OverriddenMethods.Any(); } - set { isOverride = value; } - } + public bool IsOverride => OverriddenMethods.Any(); // True if the method is final / sealed. public bool IsFinal { get; set; } @@ -174,7 +169,5 @@ namespace CppSharp.AST { return visitor.VisitMethodDecl(this); } - - private bool? isOverride; } } \ No newline at end of file diff --git a/src/Generator/Passes/GenerateAbstractImplementationsPass.cs b/src/Generator/Passes/GenerateAbstractImplementationsPass.cs index 450a662d..37aadc5c 100644 --- a/src/Generator/Passes/GenerateAbstractImplementationsPass.cs +++ b/src/Generator/Passes/GenerateAbstractImplementationsPass.cs @@ -57,17 +57,18 @@ namespace CppSharp.Passes var internalImpl = GetInternalImpl(@class); var abstractMethods = GetRelevantAbstractMethods(@class); - - internalImpl.Methods.AddRange( - from method in abstractMethods - select new Method(method) - { - Namespace = internalImpl, - OriginalFunction = method, - IsPure = false, - IsOverride = true, - SynthKind = FunctionSynthKind.AbstractImplCall - }); + foreach (var abstractMethod in abstractMethods) + { + var impl = new Method(abstractMethod) + { + Namespace = internalImpl, + OriginalFunction = abstractMethod, + IsPure = false, + SynthKind = FunctionSynthKind.AbstractImplCall + }; + impl.OverriddenMethods.Add(abstractMethod); + internalImpl.Methods.Add(impl); + } internalImpl.Layout = @class.Layout; diff --git a/src/Generator/Passes/ObjectOverridesPass.cs b/src/Generator/Passes/ObjectOverridesPass.cs index 8cb5b32f..3b610035 100644 --- a/src/Generator/Passes/ObjectOverridesPass.cs +++ b/src/Generator/Passes/ObjectOverridesPass.cs @@ -127,10 +127,9 @@ namespace CppSharp Namespace = @class, ReturnType = new QualifiedType(stringType), SynthKind = FunctionSynthKind.ComplementOperator, - IsOverride = true, IsProxy = true }; - + toStringMethod.OverriddenMethods.Add(new Method { Name = "Equals" }); @class.Methods.Add(toStringMethod); Diagnostics.Debug("Function converted to ToString: {0}::{1}", @@ -152,9 +151,9 @@ namespace CppSharp ReturnType = new QualifiedType(new BuiltinType(PrimitiveType.Bool)), Parameters = new List { methodEqualsParam }, SynthKind = FunctionSynthKind.ComplementOperator, - IsOverride = true, IsProxy = true }; + methodEquals.OverriddenMethods.Add(new Method { Name = "Equals" }); @class.Methods.Add(methodEquals); var methodHashCode = new Method @@ -163,9 +162,9 @@ namespace CppSharp Namespace = @class, ReturnType = new QualifiedType(new BuiltinType(PrimitiveType.Int)), SynthKind = FunctionSynthKind.ComplementOperator, - IsOverride = true, IsProxy = true }; + methodHashCode.OverriddenMethods.Add(new Method { Name = "GetHashCode" }); @class.Methods.Add(methodHashCode); return true;