@@ -181,21 +181,76 @@ public static void Verify_Generic_AccessFieldClass()
181
181
}
182
182
}
183
183
184
+ class AmbiguousMethodName
185
+ {
186
+ private void M ( ) { }
187
+ private void M < T > ( ) { }
188
+ private void N ( ) { }
189
+
190
+ private static void SM ( ) { }
191
+ private static void SM < U > ( ) { }
192
+ private static void SN ( ) { }
193
+ }
194
+
195
+ static class AccessorsAmbiguousMethodName
196
+ {
197
+ [ UnsafeAccessor ( UnsafeAccessorKind . Method , Name = "M" ) ]
198
+ public extern static void CallM ( AmbiguousMethodName a ) ;
199
+
200
+ [ UnsafeAccessor ( UnsafeAccessorKind . Method , Name = "M" ) ]
201
+ public extern static void CallM < T > ( AmbiguousMethodName a ) ;
202
+
203
+ [ UnsafeAccessor ( UnsafeAccessorKind . Method , Name = "N" ) ]
204
+ public extern static void CallN_MissingMethod < T > ( AmbiguousMethodName a ) ;
205
+
206
+ [ UnsafeAccessor ( UnsafeAccessorKind . StaticMethod , Name = "SM" ) ]
207
+ public extern static void CallSM ( AmbiguousMethodName a ) ;
208
+
209
+ [ UnsafeAccessor ( UnsafeAccessorKind . StaticMethod , Name = "SM" ) ]
210
+ public extern static void CallSM < U > ( AmbiguousMethodName a ) ;
211
+
212
+ [ UnsafeAccessor ( UnsafeAccessorKind . StaticMethod , Name = "SN" ) ]
213
+ public extern static void CallSN_MissingMethod < T > ( AmbiguousMethodName a ) ;
214
+ }
215
+
216
+ [ Fact ]
217
+ public static void Verify_Generic_AmbiguousMethodName ( )
218
+ {
219
+ Console . WriteLine ( $ "Running { nameof ( Verify_Generic_AmbiguousMethodName ) } ") ;
220
+
221
+ {
222
+ AmbiguousMethodName a = new ( ) ;
223
+ AccessorsAmbiguousMethodName . CallM ( a ) ;
224
+ AccessorsAmbiguousMethodName . CallM < int > ( a ) ;
225
+ AccessorsAmbiguousMethodName . CallM < string > ( a ) ;
226
+ AccessorsAmbiguousMethodName . CallM < Guid > ( a ) ;
227
+ Assert . Throws < MissingMethodException > ( ( ) => AccessorsAmbiguousMethodName . CallN_MissingMethod < int > ( a ) ) ;
228
+ }
229
+
230
+ {
231
+ AccessorsAmbiguousMethodName . CallSM ( null ) ;
232
+ AccessorsAmbiguousMethodName . CallSM < int > ( null ) ;
233
+ AccessorsAmbiguousMethodName . CallSM < string > ( null ) ;
234
+ AccessorsAmbiguousMethodName . CallSM < Guid > ( null ) ;
235
+ Assert . Throws < MissingMethodException > ( ( ) => AccessorsAmbiguousMethodName . CallSN_MissingMethod < int > ( null ) ) ;
236
+ }
237
+ }
238
+
184
239
class Base
185
240
{
186
- protected virtual string CreateMessageGeneric < T > ( T t ) => $ "{ nameof ( Base ) } :{ t } ";
241
+ protected virtual string CreateMessage < T > ( T t ) => $ "{ nameof ( Base ) } <> :{ t } ";
187
242
}
188
243
189
- class GenericBase < T > : Base
244
+ class GenericBase < U > : Base
190
245
{
191
- protected virtual string CreateMessage ( T t ) => $ "{ nameof ( GenericBase < T > ) } :{ t } ";
192
- protected override string CreateMessageGeneric < U > ( U u ) => $ "{ nameof ( GenericBase < T > ) } : { u } ";
246
+ protected virtual string CreateMessage ( U u ) => $ "{ nameof ( GenericBase < U > ) } :{ u } ";
247
+ protected override string CreateMessage < V > ( V v ) => $ "{ nameof ( GenericBase < U > ) } <>: { v } ";
193
248
}
194
249
195
250
sealed class Derived1 : GenericBase < string >
196
251
{
197
252
protected override string CreateMessage ( string u ) => $ "{ nameof ( Derived1 ) } :{ u } ";
198
- protected override string CreateMessageGeneric < U > ( U t ) => $ "{ nameof ( Derived1 ) } : { t } ";
253
+ protected override string CreateMessage < W > ( W w ) => $ "{ nameof ( Derived1 ) } <>: { w } ";
199
254
}
200
255
201
256
sealed class Derived2 : GenericBase < string >
@@ -209,33 +264,33 @@ public static void Verify_Generic_InheritanceMethodResolution()
209
264
Console . WriteLine ( $ "Running { nameof ( Verify_Generic_InheritanceMethodResolution ) } ") ;
210
265
{
211
266
Base a = new ( ) ;
212
- Assert . Equal ( $ "{ nameof ( Base ) } :1", CreateMessage < int > ( a , 1 ) ) ;
213
- Assert . Equal ( $ "{ nameof ( Base ) } :{ expect } ", CreateMessage < string > ( a , expect ) ) ;
214
- Assert . Equal ( $ "{ nameof ( Base ) } :{ nameof ( Struct ) } ", CreateMessage < Struct > ( a , new Struct ( ) ) ) ;
267
+ Assert . Equal ( $ "{ nameof ( Base ) } <> :1", CreateMessage < int > ( a , 1 ) ) ;
268
+ Assert . Equal ( $ "{ nameof ( Base ) } <> :{ expect } ", CreateMessage < string > ( a , expect ) ) ;
269
+ Assert . Equal ( $ "{ nameof ( Base ) } <> :{ nameof ( Struct ) } ", CreateMessage < Struct > ( a , new Struct ( ) ) ) ;
215
270
}
216
271
{
217
272
GenericBase < int > a = new ( ) ;
218
- Assert . Equal ( $ "{ nameof ( GenericBase < int > ) } :1", CreateMessage < int > ( a , 1 ) ) ;
219
- Assert . Equal ( $ "{ nameof ( GenericBase < int > ) } :{ expect } ", CreateMessage < string > ( a , expect ) ) ;
220
- Assert . Equal ( $ "{ nameof ( GenericBase < int > ) } :{ nameof ( Struct ) } ", CreateMessage < Struct > ( a , new Struct ( ) ) ) ;
273
+ Assert . Equal ( $ "{ nameof ( GenericBase < int > ) } <> :1", CreateMessage < int > ( a , 1 ) ) ;
274
+ Assert . Equal ( $ "{ nameof ( GenericBase < int > ) } <> :{ expect } ", CreateMessage < string > ( a , expect ) ) ;
275
+ Assert . Equal ( $ "{ nameof ( GenericBase < int > ) } <> :{ nameof ( Struct ) } ", CreateMessage < Struct > ( a , new Struct ( ) ) ) ;
221
276
}
222
277
{
223
278
GenericBase < string > a = new ( ) ;
224
- Assert . Equal ( $ "{ nameof ( GenericBase < string > ) } :1", CreateMessage < int > ( a , 1 ) ) ;
225
- Assert . Equal ( $ "{ nameof ( GenericBase < string > ) } :{ expect } ", CreateMessage < string > ( a , expect ) ) ;
226
- Assert . Equal ( $ "{ nameof ( GenericBase < string > ) } :{ nameof ( Struct ) } ", CreateMessage < Struct > ( a , new Struct ( ) ) ) ;
279
+ Assert . Equal ( $ "{ nameof ( GenericBase < string > ) } <> :1", CreateMessage < int > ( a , 1 ) ) ;
280
+ Assert . Equal ( $ "{ nameof ( GenericBase < string > ) } <> :{ expect } ", CreateMessage < string > ( a , expect ) ) ;
281
+ Assert . Equal ( $ "{ nameof ( GenericBase < string > ) } <> :{ nameof ( Struct ) } ", CreateMessage < Struct > ( a , new Struct ( ) ) ) ;
227
282
}
228
283
{
229
284
GenericBase < Struct > a = new ( ) ;
230
- Assert . Equal ( $ "{ nameof ( GenericBase < Struct > ) } :1", CreateMessage < int > ( a , 1 ) ) ;
231
- Assert . Equal ( $ "{ nameof ( GenericBase < Struct > ) } :{ expect } ", CreateMessage < string > ( a , expect ) ) ;
232
- Assert . Equal ( $ "{ nameof ( GenericBase < Struct > ) } :{ nameof ( Struct ) } ", CreateMessage < Struct > ( a , new Struct ( ) ) ) ;
285
+ Assert . Equal ( $ "{ nameof ( GenericBase < Struct > ) } <> :1", CreateMessage < int > ( a , 1 ) ) ;
286
+ Assert . Equal ( $ "{ nameof ( GenericBase < Struct > ) } <> :{ expect } ", CreateMessage < string > ( a , expect ) ) ;
287
+ Assert . Equal ( $ "{ nameof ( GenericBase < Struct > ) } <> :{ nameof ( Struct ) } ", CreateMessage < Struct > ( a , new Struct ( ) ) ) ;
233
288
}
234
289
{
235
290
Derived1 a = new ( ) ;
236
- Assert . Equal ( $ "{ nameof ( Derived1 ) } :1", CreateMessage < int > ( a , 1 ) ) ;
237
- Assert . Equal ( $ "{ nameof ( Derived1 ) } :{ expect } ", CreateMessage < string > ( a , expect ) ) ;
238
- Assert . Equal ( $ "{ nameof ( Derived1 ) } :{ nameof ( Struct ) } ", CreateMessage < Struct > ( a , new Struct ( ) ) ) ;
291
+ Assert . Equal ( $ "{ nameof ( Derived1 ) } <> :1", CreateMessage < int > ( a , 1 ) ) ;
292
+ Assert . Equal ( $ "{ nameof ( Derived1 ) } <> :{ expect } ", CreateMessage < string > ( a , expect ) ) ;
293
+ Assert . Equal ( $ "{ nameof ( Derived1 ) } <> :{ nameof ( Struct ) } ", CreateMessage < Struct > ( a , new Struct ( ) ) ) ;
239
294
}
240
295
{
241
296
// Verify resolution of generic override logic.
@@ -245,7 +300,7 @@ public static void Verify_Generic_InheritanceMethodResolution()
245
300
Assert . Equal ( $ "{ nameof ( GenericBase < string > ) } :{ expect } ", Accessors < string > . CreateMessage ( a2 , expect ) ) ;
246
301
}
247
302
248
- [ UnsafeAccessor ( UnsafeAccessorKind . Method , Name = "CreateMessageGeneric " ) ]
303
+ [ UnsafeAccessor ( UnsafeAccessorKind . Method , Name = "CreateMessage " ) ]
249
304
extern static string CreateMessage < W > ( Base b , W w ) ;
250
305
}
251
306
0 commit comments