java.lang.Object
com.github._1c_syntax.bsl.languageserver.utils.Trees

public final class Trees extends Object
  • Method Details

    • findAllRuleNodes

      public static Collection<ParseTree> findAllRuleNodes(ParseTree t, int ruleIndex)
      Обертки Trees
    • getChildren

      public static List<Tree> getChildren(Tree t)
    • getTokens

      public static List<Token> getTokens(ParseTree tree)
      Список токенов дерева разбора.

      Токены формируются на основании всех потомков вида TerminalNode переданного дерева.

      Parameters:
      tree - Дерево разбора
      Returns:
      Список токенов
    • findAllTokenNodes

      public static Collection<ParseTree> findAllTokenNodes(ParseTree t, int ttype)
    • getDescendants

      public static List<ParseTree> getDescendants(ParseTree t)
    • getAncestorByRuleIndex

      @Nullable public static BSLParserRuleContext getAncestorByRuleIndex(BSLParserRuleContext element, int type)
      Ищем предка элемента по указанному типу BSLParser Пример: BSLParserRuleContext parent = Trees.getAncestorByRuleIndex(ctx, BSLParser.RULE_statement);
    • treeContainsErrors

      public static boolean treeContainsErrors(ParseTree tnc)
      Проверяет среди всех дочерних элементов (рекурсивно) наличие узла с ошибкой
      Returns:
      true - если есть узел с ошибкой
    • nodeContainsErrors

      public static boolean nodeContainsErrors(ParseTree tnc)
      Проверяет среди дочерних элементов узла наличие узла с ошибкой
      Returns:
      true - если есть узел с ошибкой
    • getPreviousNode

      public static ParseTree getPreviousNode(ParseTree parent, ParseTree tnc, int ruleindex)
      Выполняет поиск предыдущей ноды нужного типа
      Parameters:
      parent - - родительская нода, среди дочерних которой производится поиск
      tnc - - нода, для которой ищем предыдущую
      ruleindex - - BSLParser.RULE_*
      Returns:
      tnc - если предыдущая нода не найдена, вернет текущую
    • getPreviousTokenFromDefaultChannel

      public static Optional<Token> getPreviousTokenFromDefaultChannel(List<Token> tokens, int tokenIndex, int tokenType)
      Parameters:
      tokens - - полный список токенов (см. DocumentContext.getTokens()
      tokenIndex - - индекс текущего токена в переданном списке токенов
      tokenType - - тип искомого токена (см. BSLParser
      Returns:
      предыдущий токен, если он был найден
    • getPreviousTokenFromDefaultChannel

      public static Optional<Token> getPreviousTokenFromDefaultChannel(List<Token> tokens, int tokenIndex)
      Parameters:
      tokens - - полный список токенов (см. DocumentContext.getTokens()
      tokenIndex - - индекс текущего токена в переданном списке токенов
      Returns:
      предыдущий токен, если он был найден
    • getNextNode

      public static ParseTree getNextNode(ParseTree parent, ParseTree tnc, int ruleindex)
      Выполняет поиск следующей ноды нужного типа
      Parameters:
      parent - - родительская нода, среди дочерних которой производится поиск
      tnc - - нода, для которой ищем следующую
      ruleindex - - BSLParser.RULE_*
      Returns:
      tnc - если следующая нода не найдена, вернет текущую
    • getRootParent

      public static BSLParserRuleContext getRootParent(BSLParserRuleContext tnc)
      Рекурсивно находит самого верхнего родителя текущей ноды
    • getRootParent

      @Nullable public static BSLParserRuleContext getRootParent(BSLParserRuleContext tnc, int ruleindex)
      Рекурсивно находит самого верхнего родителя текущей ноды нужного типа
      Parameters:
      tnc - - нода, для которой ищем родителя
      ruleindex - - BSLParser.RULE_*
      Returns:
      tnc - если родитель не найден, вернет null
    • getRootParent

      @Nullable public static BSLParserRuleContext getRootParent(BSLParserRuleContext tnc, Collection<Integer> indexes)
      Рекурсивно находит самого верхнего родителя текущей ноды одного из нужных типов
      Parameters:
      tnc - - нода, для которой ищем родителя
      indexes - - Collection of BSLParser.RULE_*
      Returns:
      tnc - если родитель не найден, вернет null
    • getChildren

      public static List<BSLParserRuleContext> getChildren(Tree t, Integer... ruleIndex)
      Получает детей с нужными типами
    • getFirstChild

      public static Optional<BSLParserRuleContext> getFirstChild(Tree t, Integer... ruleIndex)
      Получает первого ребенка с одним из нужных типов
      Parameters:
      t - - нода, для которой ищем ребенка
      ruleIndex - - arrays of BSLParser.RULE_*
      Returns:
      child - если первый ребенок не найден, вернет Optional
    • findAllRuleNodes

      public static Collection<ParserRuleContext> findAllRuleNodes(ParseTree t, Integer... index)
      Получает дочерние ноды с нужными типами
    • findAllRuleNodes

      public static Collection<ParserRuleContext> findAllRuleNodes(ParseTree t, Collection<Integer> indexes)
      Получает дочерние ноды с нужными типами
    • findAllTopLevelDescendantNodes

      public static Collection<ParserRuleContext> findAllTopLevelDescendantNodes(ParserRuleContext root, Collection<Integer> indexes)
      Получает "первые" дочерние ноды с нужными типами ВАЖНО: поиск вглубь найденной ноды с нужными индексами не выполняется Например, если указать RULE_codeBlock, то найдется только самый верхнеуровневый блок кода, все вложенные найдены не будут ВАЖНО: начальная нода не проверяется на условие, т.к. тогда она единственная и вернется в результате
      Parameters:
      root - - начальный узел дерева
      indexes - - коллекция индексов
      Returns:
      найденные узлы
    • nodeContains

      public static boolean nodeContains(ParseTree t, Integer... index)
      Проверяет наличие дочерней ноды с указанным типом
    • nodeContains

      public static boolean nodeContains(ParseTree t, ParseTree exclude, Integer... index)
      Проверяет наличие дочерней ноды с указанным типом исключая переданную
    • findTerminalNodeContainsPosition

      public static Optional<TerminalNode> findTerminalNodeContainsPosition(BSLParserRuleContext tree, Position position)
      Получение ноды в дереве по позиции в документе.
      Parameters:
      tree - - дерево, в котором ищем
      position - - искомая позиция
      Returns:
      терминальная нода на указанной позиции, если есть
    • getTrailingComment

      public static Optional<Token> getTrailingComment(List<Token> tokens, Token token)
      Parameters:
      tokens - - список токенов из DocumentContext
      token - - токен, на строке которого требуется найти висячий комментарий
      Returns:
      - токен с комментарием, если он найден
    • getComments

      public static List<Token> getComments(List<Token> tokens, Token token)
      Поиск комментариев назад от указанного токена
      Parameters:
      tokens - - список токенов DocumentContext
      token - - токен, для которого требуется найти комментарии
      Returns:
      - список найденных комментариев lines