Ejemplo n.º 1
0
        internal static ImmutableArray <ManagedActiveStatementDebugInfo> GetActiveStatementDebugInfos(
            string[] markedSources,
            string extension             = ".cs",
            int[] methodRowIds           = null,
            Guid[] modules               = null,
            int[] methodVersions         = null,
            int[] ilOffsets              = null,
            ActiveStatementFlags[] flags = null)
        {
            IEnumerable <(TextSpan Span, int Id, SourceText Text, string DocumentName, DocumentId DocumentId)> EnumerateAllSpans()
            {
                var sourceIndex = 0;

                foreach (var markedSource in markedSources)
                {
                    var documentName = TestWorkspace.GetDefaultTestSourceDocumentName(sourceIndex, extension);
                    var documentId   = DocumentId.CreateNewId(ProjectId.CreateNewId(), documentName);
                    var text         = SourceText.From(markedSource);

                    foreach (var(span, id) in ActiveStatementsDescription.GetActiveSpans(markedSource))
                    {
                        yield return(span, id, text, documentName, documentId);
                    }

                    sourceIndex++;
                }
            }

            IEnumerable <ManagedActiveStatementDebugInfo> Enumerate()
            {
                var moduleId = new Guid("00000000-0000-0000-0000-000000000001");
                var threadId = new Guid("00000000-0000-0000-0000-000000000010");

                var index = 0;

                foreach (var(span, id, text, documentName, documentId) in EnumerateAllSpans().OrderBy(s => s.Id))
                {
                    yield return(new ManagedActiveStatementDebugInfo(
                                     new ManagedInstructionId(
                                         new ManagedMethodId(
                                             (modules != null) ? modules[index] : moduleId,
                                             new ManagedModuleMethodId(
                                                 token: 0x06000000 | (methodRowIds != null ? methodRowIds[index] : index + 1),
                                                 version: (methodVersions != null) ? methodVersions[index] : 1)),
                                         ilOffset: (ilOffsets != null) ? ilOffsets[index] : 0),
                                     documentName: documentName,
                                     sourceSpan: text.Lines.GetLinePositionSpan(span).ToSourceSpan(),
                                     flags: (flags != null) ? flags[index] : ((id == 0 ? ActiveStatementFlags.IsLeafFrame : ActiveStatementFlags.IsNonLeafFrame) | ActiveStatementFlags.MethodUpToDate)));

                    index++;
                }
            }

            return(Enumerate().ToImmutableArray());
        }