Skip to content

Commit 26e07b0

Browse files
committed
- adds a distinct overloads methods to avoid generating similar overloads in Java
1 parent efacbea commit 26e07b0

File tree

6 files changed

+115
-2
lines changed

6 files changed

+115
-2
lines changed

src/GraphODataTemplateWriter/Extensions/OdcmModelExtensions.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -470,11 +470,20 @@ public static string[] GetLongDescriptionSegments(this OdcmObject odcmObject)
470470
/// Returns a List containing the supplied method plus its overloads
471471
public static List<OdcmMethod> WithOverloads(this OdcmMethod odcmMethod)
472472
{
473-
var methods = new List<OdcmMethod>();
474-
methods.Add(odcmMethod);
473+
var methods = new List<OdcmMethod>
474+
{
475+
odcmMethod
476+
};
475477
methods.AddRange(odcmMethod.Overloads);
476478
return methods;
477479
}
480+
private static readonly OdcmMethodEqualityComparer methodComparer = new OdcmMethodEqualityComparer();
481+
public static List<OdcmMethod> WithDistinctOverloads(this OdcmMethod odcmMethod)
482+
{
483+
var methods = odcmMethod.WithOverloads();
484+
485+
return methods.Distinct(methodComparer).ToList();
486+
}
478487

479488
/// Returns a List containing the supplied class' methods plus their overloads
480489
public static List<OdcmMethod> MethodsAndOverloads(this OdcmClass odcmClass)

src/GraphODataTemplateWriter/GraphODataTemplateWriter.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@
7676
<Compile Include="CodeHelpers\Python\CodeWriterPython.cs" />
7777
<Compile Include="CodeHelpers\Python\TypeHelperPython.cs" />
7878
<Compile Include="Extensions\FeatureExtensions.cs" />
79+
<Compile Include="OdcmMethodEqualityComparer.cs" />
80+
<Compile Include="OdcmParameterCollectionEqualityComparer.cs" />
81+
<Compile Include="OdcmParameterEqualityComparer.cs" />
82+
<Compile Include="OdcmTypeEqualityComparer.cs" />
7983
<Compile Include="PathWriters\AndroidPathWriter.cs" />
8084
<Compile Include="PathWriters\CSharpPathWriter.cs" />
8185
<Compile Include="PathWriters\TypeScriptPathWriter.cs" />
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Vipr.Core.CodeModel;
4+
5+
namespace Microsoft.Graph.ODataTemplateWriter
6+
{
7+
public class OdcmMethodEqualityComparer : IEqualityComparer<OdcmMethod>
8+
{
9+
private static readonly OdcmParameterCollectionEqualityComparer paramComparer = new OdcmParameterCollectionEqualityComparer();
10+
public bool Equals(OdcmMethod x, OdcmMethod y)
11+
{
12+
return x.FullName == y.FullName && paramComparer.Equals(y.Parameters, x.Parameters);
13+
}
14+
public int GetHashCode(OdcmMethod obj)
15+
{
16+
unchecked
17+
{
18+
return (obj?.FullName?.GetHashCode() ?? 0) * 23 + paramComparer.GetHashCode(obj?.Parameters);
19+
}
20+
}
21+
}
22+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using Vipr.Core.CodeModel;
5+
6+
namespace Microsoft.Graph.ODataTemplateWriter
7+
{
8+
public class OdcmParameterCollectionEqualityComparer : IEqualityComparer<IEnumerable<OdcmParameter>>
9+
{
10+
private static readonly OdcmParameterEqualityComparer paramComparer = new OdcmParameterEqualityComparer();
11+
public bool Equals(IEnumerable<OdcmParameter> x, IEnumerable<OdcmParameter> y)
12+
{
13+
if (x == null || y == null)
14+
return x == y;
15+
else
16+
{
17+
var orderedY = y.OrderBy(z => z.Name);
18+
return x.Count() == y.Count()
19+
&& x.OrderBy(z => z.Name).Select((z, idx) => paramComparer.Equals(z, orderedY.ElementAt(idx))).Aggregate((z, w) => z && w);
20+
}
21+
}
22+
23+
public int GetHashCode(IEnumerable<OdcmParameter> obj)
24+
{
25+
unchecked
26+
{
27+
return (obj?.Count() ?? 0) * 23 + (obj != null && obj.Any() ?
28+
(obj?.Select(x => paramComparer.GetHashCode(x))?.Aggregate((x, y) => x ^ y) ?? 0) :
29+
0);
30+
}
31+
}
32+
}
33+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Vipr.Core.CodeModel;
4+
5+
namespace Microsoft.Graph.ODataTemplateWriter
6+
{
7+
public class OdcmParameterEqualityComparer : IEqualityComparer<OdcmParameter>
8+
{
9+
private static OdcmTypeEqualityComparer typeComparer = new OdcmTypeEqualityComparer();
10+
public bool Equals(OdcmParameter x, OdcmParameter y)
11+
{
12+
return x?.Name == y?.Name && x?.IsCollection == y?.IsCollection && x?.IsNullable == y?.IsNullable && typeComparer.Equals(x?.Type, y?.Type);
13+
}
14+
15+
public int GetHashCode(OdcmParameter obj)
16+
{
17+
unchecked
18+
{
19+
return obj == null ? 0 : obj.Name.GetHashCode() * 23 + obj.IsCollection.GetHashCode() * 13 + obj.IsNullable.GetHashCode() * 11 + typeComparer.GetHashCode(obj.Type);
20+
}
21+
}
22+
}
23+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Vipr.Core.CodeModel;
4+
5+
namespace Microsoft.Graph.ODataTemplateWriter
6+
{
7+
public class OdcmTypeEqualityComparer : IEqualityComparer<OdcmType>
8+
{
9+
public bool Equals(OdcmType x, OdcmType y)
10+
{
11+
return x?.FullName == y?.FullName;
12+
}
13+
14+
public int GetHashCode(OdcmType obj)
15+
{
16+
unchecked
17+
{
18+
return obj?.FullName?.GetHashCode() ?? 0;
19+
}
20+
}
21+
}
22+
}

0 commit comments

Comments
 (0)