private static Offsets getTextOffsets()

in analyzer/src/main/java/com/android/tools/sizereduction/analyzer/model/GroovyGradleParser.java [431:477]


  private static Offsets getTextOffsets(ASTNode node, String content) {
    if (node.getLastLineNumber() == -1 && node instanceof TupleExpression) {
      // Workaround: TupleExpressions yield bogus offsets, so use its
      // children instead
      TupleExpression exp = (TupleExpression) node;
      List<Expression> expressions = exp.getExpressions();
      if (!expressions.isEmpty()) {
        return Offsets.create(
            getTextOffsets(expressions.get(0), content).getStart(),
            getTextOffsets(expressions.get(expressions.size() - 1), content).getEnd());
      }
    }

    if (node instanceof ArgumentListExpression) {
      List<Expression> expressions = ((ArgumentListExpression) node).getExpressions();
      if (expressions.size() == 1) {
        return getTextOffsets(expressions.get(0), content);
      }
    }

    int start = 0;
    int end = content.length();
    int line = 1;
    int startLine = node.getLineNumber();
    int startColumn = node.getColumnNumber();
    int endLine = node.getLastLineNumber();
    int endColumn = node.getLastColumnNumber();
    int column = 1;
    for (int index = 0, len = end; index < len; index++) {
      if (line == startLine && column == startColumn) {
        start = index;
      }
      if (line == endLine && column == endColumn) {
        end = index;
        break;
      }

      char c = content.charAt(index);
      if (c == '\n') {
        line++;
        column = 1;
      } else {
        column++;
      }
    }
    return Offsets.create(start, end);
  }