Skip to content

Commit 0c8baa2

Browse files
authored
Use constant ids for RoArrayType GetMethodsCore (#61177)
1 parent b67f978 commit 0c8baa2

File tree

3 files changed

+17
-7
lines changed

3 files changed

+17
-7
lines changed

src/libraries/System.Reflection.MetadataLoadContext/src/System/Reflection/TypeLoading/Methods/RoSyntheticMethod.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,6 @@ public sealed override bool Equals([NotNullWhen(true)] object? obj)
7575
if (DeclaringType != other.DeclaringType)
7676
return false;
7777

78-
if (ReturnType != other.ReturnType)
79-
return false;
80-
8178
if (_uniquifier != other._uniquifier)
8279
return false;
8380

src/libraries/System.Reflection.MetadataLoadContext/src/System/Reflection/TypeLoading/Types/RoArrayType.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ internal sealed override IEnumerable<MethodInfo> GetMethodsCore(NameFilter? filt
151151
{
152152
int rank = _rank;
153153

154-
int uniquifier = 0;
155154
RoType systemInt32 = Loader.GetCoreType(CoreType.Int32);
156155
RoType elementType = GetRoElementType();
157156
RoType systemVoid = Loader.GetCoreType(CoreType.Void);
@@ -163,7 +162,7 @@ internal sealed override IEnumerable<MethodInfo> GetMethodsCore(NameFilter? filt
163162
{
164163
getParameters[i] = systemInt32;
165164
}
166-
yield return new RoSyntheticMethod(this, uniquifier++, "Get", elementType, getParameters);
165+
yield return new RoSyntheticMethod(this, 0, "Get", elementType, getParameters);
167166
}
168167

169168
if (filter == null || filter.Matches("Set"))
@@ -174,7 +173,7 @@ internal sealed override IEnumerable<MethodInfo> GetMethodsCore(NameFilter? filt
174173
setParameters[i] = systemInt32;
175174
}
176175
setParameters[rank] = elementType;
177-
yield return new RoSyntheticMethod(this, uniquifier++, "Set", systemVoid, setParameters);
176+
yield return new RoSyntheticMethod(this, 1, "Set", systemVoid, setParameters);
178177
}
179178

180179
if (filter == null || filter.Matches("Address"))
@@ -184,7 +183,7 @@ internal sealed override IEnumerable<MethodInfo> GetMethodsCore(NameFilter? filt
184183
{
185184
addressParameters[i] = systemInt32;
186185
}
187-
yield return new RoSyntheticMethod(this, uniquifier++, "Address", elementType.GetUniqueByRefType(), addressParameters);
186+
yield return new RoSyntheticMethod(this, 2, "Address", elementType.GetUniqueByRefType(), addressParameters);
188187
}
189188
}
190189
}

src/libraries/System.Reflection.MetadataLoadContext/tests/src/Tests/Type/TypeTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,20 @@ void testEqual(Type type1, Type type2)
251251
testEqual(typeof(long[]).Project(), typeof(long[]).Project());
252252
}
253253

254+
[Fact]
255+
static void TestArrayGetMethodsResultEqualsFilteredGetMethod()
256+
{
257+
Type type = typeof(int[]).Project();
258+
259+
Assert.Equal(type.GetMethod("Get"), type.GetMethods().First(m => m.Name == "Get"));
260+
Assert.Equal(type.GetMethod("Set"), type.GetMethods().First(m => m.Name == "Set"));
261+
Assert.Equal(type.GetMethod("Address"), type.GetMethods().First(m => m.Name == "Address"));
262+
263+
Assert.NotEqual(type.GetMethod("Get"), type.GetMethods().First(m => m.Name == "Set"));
264+
Assert.NotEqual(type.GetMethod("Set"), type.GetMethods().First(m => m.Name == "Address"));
265+
Assert.NotEqual(type.GetMethod("Address"), type.GetMethods().First(m => m.Name == "Get"));
266+
}
267+
254268
[Fact]
255269
public static void TestArrayAddressMethod()
256270
{

0 commit comments

Comments
 (0)