blob: a9b934a04e52a957cf1a39fcc27c9fcfc3fa61e0 [file] [log] [blame]
package org.checkerframework.checker.index;
import com.sun.source.tree.ExpressionTree;
import com.sun.source.tree.MemberSelectTree;
import com.sun.source.tree.MethodInvocationTree;
import com.sun.source.tree.Tree;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import org.checkerframework.javacutil.TreeUtils;
import org.checkerframework.javacutil.TypesUtils;
/** A collection of utility functions used by several Index Checker subcheckers. */
public class IndexUtil {
/** Determines whether the type is a sequence supported by this checker. */
public static boolean isSequenceType(TypeMirror type) {
return type.getKind() == TypeKind.ARRAY || TypesUtils.isString(type);
}
/** Gets a sequence tree for a length access tree, or null if it is not a length access. */
public static ExpressionTree getLengthSequenceTree(
Tree lengthTree, IndexMethodIdentifier imf, ProcessingEnvironment processingEnv) {
if (TreeUtils.isArrayLengthAccess(lengthTree)) {
return ((MemberSelectTree) lengthTree).getExpression();
} else if (imf.isLengthOfMethodInvocation(lengthTree)) {
return TreeUtils.getReceiverTree((MethodInvocationTree) lengthTree);
}
return null;
}
}