Не удалось получить местоположение регионов - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь получить все регионы в моем классе и получить все утверждения внутри него.Когда я пытаюсь получить доступ к местоположению объекта SyntaxTrivia, приложение выдает NullReferenceException

. Я создал словарь для хранения начального и конечного местоположения регионов.Я зацикливаюсь на каждом регионе и пытаюсь получить местоположение.

private static void Analyze(SyntaxNodeAnalysisContext context)
        {
            ClassDeclarationSyntax classDeclaration = (ClassDeclarationSyntax)context.Node;

            SyntaxTriviaList regions = classDeclaration.DescendantTrivia().ToImmutableList()
                .FindAll(x => x.Kind().Equals(SyntaxKind.RegionDirectiveTrivia) || x.Kind().Equals(SyntaxKind.EndRegionDirectiveTrivia))
                .ToSyntaxTriviaList();

            Dictionary<Location, Location> regionLocations = new Dictionary<Location, Location>();

            Location regionStart = classDeclaration.GetLocation();

            foreach (SyntaxTrivia region in regions)
            {
                if (regions.IndexOf(region) / 2 == 0)
                {
                    Location ll = region.GetLocation();
                    regionLocations.Add(region.GetLocation(), region.GetLocation());
                    regionStart = region.GetLocation();
                }
                else
                {
                    regionLocations.Add(regionStart, region.GetLocation());
                }
            }

        }

1 Ответ

0 голосов
/ 19 июня 2019

Проблема с ToSyntaxTriviaList.Полученные мелочи отделены от синтаксического дерева, что, в свою очередь, означает, что GetLocation выдает исключение, поскольку для работы ему требуется синтаксическое дерево.

У вас есть два основных варианта:

  1. Использовать span вместо местоположения
  2. Не использовать ToSyntaxTriviaList
...