Skip to content

Commit b4b64ff

Browse files
Merge pull request #469 from Optano-Dev/280-sequence-contains-no-matching-element-when-building-the-architecture
fix: Refine iterator and async method body scanning
2 parents 312f823 + 1cfa42f commit b4b64ff

1 file changed

Lines changed: 23 additions & 7 deletions

File tree

‎ArchUnitNET/Loader/TypeProcessor.cs‎

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -864,9 +864,20 @@ private static void HandleIterator(
864864
DomainResolver domainResolver
865865
)
866866
{
867-
var compilerGeneratedGeneratorObject = (
868-
(MethodReference)methodBody.Instructions.First(inst => inst.IsNewObjectOp()).Operand
869-
).DeclaringType.Resolve();
867+
var compilerGeneratedGeneratorObject = methodBody
868+
.Instructions.Where(inst => inst.IsNewObjectOp())
869+
.Select(inst => ((MethodReference)inst.Operand).DeclaringType.Resolve())
870+
.FirstOrDefault(type =>
871+
type != null
872+
&& type.Methods.Any(method => method.Name == nameof(IEnumerator.MoveNext))
873+
);
874+
875+
if (compilerGeneratedGeneratorObject == null)
876+
{
877+
methodDefinition = methodBody.Method;
878+
return;
879+
}
880+
870881
methodDefinition = compilerGeneratedGeneratorObject.Methods.First(method =>
871882
method.Name == nameof(IEnumerator.MoveNext)
872883
);
@@ -898,10 +909,15 @@ private static void HandleAsync(
898909
DomainResolver domainResolver
899910
)
900911
{
901-
var compilerGeneratedGeneratorObject = (
902-
(MethodReference)
903-
methodBody.Instructions.FirstOrDefault(inst => inst.IsNewObjectOp())?.Operand
904-
)?.DeclaringType.Resolve();
912+
var compilerGeneratedGeneratorObject = methodBody
913+
.Instructions.Where(inst => inst.IsNewObjectOp())
914+
.Select(inst => ((MethodReference)inst.Operand).DeclaringType.Resolve())
915+
.FirstOrDefault(type =>
916+
type != null
917+
&& type.Methods.Any(method =>
918+
method.Name == nameof(IAsyncStateMachine.MoveNext)
919+
)
920+
);
905921

906922
if (compilerGeneratedGeneratorObject == null)
907923
{

0 commit comments

Comments
 (0)