| package org.checkerframework.checker.index; |
| |
| import javax.lang.model.element.AnnotationMirror; |
| import javax.lang.model.element.ExecutableElement; |
| import org.checkerframework.checker.index.qual.HasSubsequence; |
| import org.checkerframework.common.basetype.BaseAnnotatedTypeFactory; |
| import org.checkerframework.common.basetype.BaseTypeChecker; |
| import org.checkerframework.javacutil.AnnotationUtils; |
| import org.checkerframework.javacutil.TreeUtils; |
| |
| /** |
| * A class for functionality common to multiple type-checkers that are used by the Index Checker. |
| */ |
| public abstract class BaseAnnotatedTypeFactoryForIndexChecker extends BaseAnnotatedTypeFactory { |
| |
| /** The from() element/field of a @HasSubsequence annotation. */ |
| protected final ExecutableElement hasSubsequenceFromElement = |
| TreeUtils.getMethod(HasSubsequence.class, "from", 0, processingEnv); |
| /** The to() element/field of a @HasSubsequence annotation. */ |
| protected final ExecutableElement hasSubsequenceToElement = |
| TreeUtils.getMethod(HasSubsequence.class, "to", 0, processingEnv); |
| /** The subsequence() element/field of a @HasSubsequence annotation. */ |
| protected final ExecutableElement hasSubsequenceSubsequenceElement = |
| TreeUtils.getMethod(HasSubsequence.class, "subsequence", 0, processingEnv); |
| |
| /** |
| * Creates a new BaseAnnotatedTypeFactoryForIndexChecker. |
| * |
| * @param checker the checker |
| */ |
| public BaseAnnotatedTypeFactoryForIndexChecker(BaseTypeChecker checker) { |
| super(checker); |
| } |
| |
| /** |
| * Gets the from() element/field out of a HasSubsequence annotation. |
| * |
| * @param anno a HasSubsequence annotation |
| * @return its from() element/field |
| */ |
| public String hasSubsequenceFromValue(AnnotationMirror anno) { |
| return AnnotationUtils.getElementValue(anno, hasSubsequenceFromElement, String.class); |
| } |
| |
| /** |
| * Gets the to() element/field out of a HasSubsequence annotation. |
| * |
| * @param anno a HasSubsequence annotation |
| * @return its to() element/field |
| */ |
| public String hasSubsequenceToValue(AnnotationMirror anno) { |
| return AnnotationUtils.getElementValue(anno, hasSubsequenceToElement, String.class); |
| } |
| |
| /** |
| * Gets the subsequence() element/field out of a HasSubsequence annotation. |
| * |
| * @param anno a HasSubsequence annotation |
| * @return its subsequence() element/field |
| */ |
| public String hasSubsequenceSubsequenceValue(AnnotationMirror anno) { |
| return AnnotationUtils.getElementValue(anno, hasSubsequenceSubsequenceElement, String.class); |
| } |
| } |