@@ -1362,60 +1362,60 @@ private bool SkipExpressionBreakpointsSequences(MethodDefinition methodDefinitio
1362
1362
return false ;
1363
1363
}
1364
1364
1365
- public bool SkipInlineAssignedAutoProperty ( bool skipAutoProps , MethodDefinition methodDefinition , Instruction instruction )
1366
- {
1367
- if ( ! skipAutoProps || ! methodDefinition . IsConstructor ) return false ;
1368
-
1369
- return SkipGeneratedBackingFieldAssignment ( methodDefinition , instruction ) ||
1370
- SkipDefaultInitializationSystemObject ( instruction ) ;
1371
- }
1372
-
1373
- private static bool SkipGeneratedBackingFieldAssignment ( MethodDefinition methodDefinition , Instruction instruction )
1374
- {
1375
- /*
1376
- For inline initialization of properties the compiler generates a field that is set in the constructor of the class.
1377
- To skip this we search for compiler generated fields that are set in the constructor.
1378
-
1379
- .field private string '<SurName>k__BackingField'
1380
- .custom instance void [System.Runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = (
1381
- 01 00 00 00
1382
- )
1383
-
1384
- .method public hidebysig specialname rtspecialname
1385
- instance void .ctor () cil managed
1386
- {
1387
- IL_0000: ldarg.0
1388
- IL_0001: ldsfld string[System.Runtime] System.String::Empty
1389
- IL_0006: stfld string TestRepro.ClassWithPropertyInit::'<SurName>k__BackingField'
1390
- ...
1391
- }
1392
- ...
1393
- */
1394
- IEnumerable < FieldDefinition > autogeneratedBackingFields = methodDefinition . DeclaringType . Fields . Where ( x =>
1395
- x . CustomAttributes . Any ( ca => ca . AttributeType . FullName . Equals ( typeof ( CompilerGeneratedAttribute ) . FullName ) ) &&
1396
- x . FullName . EndsWith ( "k__BackingField" ) ) ;
1397
-
1398
- return instruction . OpCode == OpCodes . Ldarg &&
1399
- instruction . Next ? . Next ? . OpCode == OpCodes . Stfld &&
1400
- instruction . Next ? . Next ? . Operand is FieldReference fr &&
1401
- autogeneratedBackingFields . Select ( x => x . FullName ) . Contains ( fr . FullName ) ;
1402
- }
1403
-
1404
- private static bool SkipDefaultInitializationSystemObject ( Instruction instruction )
1405
- {
1406
- /*
1407
- A type always has a constructor with a default instantiation of System.Object. For record types these
1408
- instructions can have a own sequence point. This means that even the default constructor would be instrumented.
1409
- To skip this we search for call instructions with a method reference that declares System.Object.
1410
-
1411
- IL_0000: ldarg.0
1412
- IL_0001: call instance void [System.Runtime]System.Object::.ctor()
1413
- IL_0006: ret
1414
- */
1415
- return instruction . OpCode == OpCodes . Ldarg &&
1416
- instruction . Next ? . OpCode == OpCodes . Call &&
1417
- instruction . Next ? . Operand is MethodReference mr && mr . DeclaringType . FullName . Equals ( typeof ( System . Object ) . FullName ) ;
1418
- }
1365
+ // public bool SkipInlineAssignedAutoProperty(bool skipAutoProps, MethodDefinition methodDefinition, Instruction instruction)
1366
+ // {
1367
+ // if (!skipAutoProps || !methodDefinition.IsConstructor) return false;
1368
+
1369
+ // return SkipGeneratedBackingFieldAssignment(methodDefinition, instruction) ||
1370
+ // SkipDefaultInitializationSystemObject(instruction);
1371
+ // }
1372
+
1373
+ // private static bool SkipGeneratedBackingFieldAssignment(MethodDefinition methodDefinition, Instruction instruction)
1374
+ // {
1375
+ // /*
1376
+ // For inline initialization of properties the compiler generates a field that is set in the constructor of the class.
1377
+ // To skip this we search for compiler generated fields that are set in the constructor.
1378
+
1379
+ // .field private string '<SurName>k__BackingField'
1380
+ // .custom instance void [System.Runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = (
1381
+ // 01 00 00 00
1382
+ // )
1383
+
1384
+ // .method public hidebysig specialname rtspecialname
1385
+ // instance void .ctor () cil managed
1386
+ // {
1387
+ // IL_0000: ldarg.0
1388
+ // IL_0001: ldsfld string[System.Runtime] System.String::Empty
1389
+ // IL_0006: stfld string TestRepro.ClassWithPropertyInit::'<SurName>k__BackingField'
1390
+ // ...
1391
+ // }
1392
+ // ...
1393
+ // */
1394
+ // IEnumerable<FieldDefinition> autogeneratedBackingFields = methodDefinition.DeclaringType.Fields.Where(x =>
1395
+ // x.CustomAttributes.Any(ca => ca.AttributeType.FullName.Equals(typeof(CompilerGeneratedAttribute).FullName)) &&
1396
+ // x.FullName.EndsWith("k__BackingField"));
1397
+
1398
+ // return instruction.OpCode == OpCodes.Ldarg &&
1399
+ // instruction.Next?.Next?.OpCode == OpCodes.Stfld &&
1400
+ // instruction.Next?.Next?.Operand is FieldReference fr &&
1401
+ // autogeneratedBackingFields.Select(x => x.FullName).Contains(fr.FullName);
1402
+ // }
1403
+
1404
+ // private static bool SkipDefaultInitializationSystemObject(Instruction instruction)
1405
+ // {
1406
+ // /*
1407
+ // A type always has a constructor with a default instantiation of System.Object. For record types these
1408
+ // instructions can have a own sequence point. This means that even the default constructor would be instrumented.
1409
+ // To skip this we search for call instructions with a method reference that declares System.Object.
1410
+
1411
+ // IL_0000: ldarg.0
1412
+ // IL_0001: call instance void [System.Runtime]System.Object::.ctor()
1413
+ // IL_0006: ret
1414
+ // */
1415
+ // return instruction.OpCode == OpCodes.Ldarg &&
1416
+ // instruction.Next?.OpCode == OpCodes.Call &&
1417
+ // instruction.Next?.Operand is MethodReference mr && mr.DeclaringType.FullName.Equals(typeof(System.Object).FullName);
1418
+ // }
1419
1419
1420
1420
private static bool SkipBranchGeneratedExceptionFilter ( Instruction branchInstruction , MethodDefinition methodDefinition )
1421
1421
{
0 commit comments