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);
}