| package org.checkerframework.framework.testchecker.compound; |
| |
| import com.sun.source.tree.Tree; |
| import java.lang.annotation.Annotation; |
| import java.util.Arrays; |
| import java.util.HashSet; |
| import java.util.Set; |
| import org.checkerframework.common.aliasing.AliasingChecker; |
| import org.checkerframework.common.basetype.BaseAnnotatedTypeFactory; |
| import org.checkerframework.common.basetype.BaseTypeChecker; |
| import org.checkerframework.common.value.ValueChecker; |
| import org.checkerframework.framework.testchecker.compound.qual.ACCBottom; |
| import org.checkerframework.framework.testchecker.compound.qual.ACCTop; |
| import org.checkerframework.framework.type.AnnotatedTypeMirror; |
| import org.checkerframework.framework.type.GenericAnnotatedTypeFactory; |
| import org.checkerframework.framework.type.treeannotator.ListTreeAnnotator; |
| import org.checkerframework.framework.type.treeannotator.TreeAnnotator; |
| |
| public class AnotherCompoundCheckerAnnotatedTypeFactory extends BaseAnnotatedTypeFactory { |
| |
| public AnotherCompoundCheckerAnnotatedTypeFactory(BaseTypeChecker checker) { |
| super(checker); |
| this.postInit(); |
| } |
| |
| @Override |
| protected Set<Class<? extends Annotation>> createSupportedTypeQualifiers() { |
| return new HashSet<Class<? extends Annotation>>(Arrays.asList(ACCTop.class, ACCBottom.class)); |
| } |
| |
| @Override |
| protected TreeAnnotator createTreeAnnotator() { |
| return new ListTreeAnnotator( |
| super.createTreeAnnotator(), |
| new TreeAnnotator(this) { |
| @Override |
| protected Void defaultAction(Tree node, AnnotatedTypeMirror p) { |
| // Just access the subchecker type factories to make |
| // sure they were created properly |
| GenericAnnotatedTypeFactory<?, ?, ?, ?> aliasingATF = |
| getTypeFactoryOfSubchecker(AliasingChecker.class); |
| @SuppressWarnings("unused") |
| AnnotatedTypeMirror aliasing = aliasingATF.getAnnotatedType(node); |
| GenericAnnotatedTypeFactory<?, ?, ?, ?> valueATF = |
| getTypeFactoryOfSubchecker(ValueChecker.class); |
| @SuppressWarnings("unused") |
| AnnotatedTypeMirror value = valueATF.getAnnotatedType(node); |
| return super.defaultAction(node, p); |
| } |
| }); |
| } |
| } |