blob: 6fe5fab27571ec9923cb6ff7d4087b25642f5a31 [file] [log] [blame]
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.CCBottom;
import org.checkerframework.framework.testchecker.compound.qual.CCTop;
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 CompoundCheckerAnnotatedTypeFactory extends BaseAnnotatedTypeFactory {
public CompoundCheckerAnnotatedTypeFactory(BaseTypeChecker checker) {
super(checker);
this.postInit();
}
@Override
protected Set<Class<? extends Annotation>> createSupportedTypeQualifiers() {
return new HashSet<Class<? extends Annotation>>(Arrays.asList(CCTop.class, CCBottom.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<?, ?, ?, ?> accATF =
getTypeFactoryOfSubchecker(AnotherCompoundChecker.class);
@SuppressWarnings("unused")
AnnotatedTypeMirror another = accATF.getAnnotatedType(node);
GenericAnnotatedTypeFactory<?, ?, ?, ?> aliasingATF =
getTypeFactoryOfSubchecker(AliasingChecker.class);
@SuppressWarnings("unused")
AnnotatedTypeMirror aliasing = aliasingATF.getAnnotatedType(node);
GenericAnnotatedTypeFactory<?, ?, ?, ?> valueATF =
getTypeFactoryOfSubchecker(ValueChecker.class);
assert valueATF == null : "Should not be able to access the ValueChecker annotations.";
return super.defaultAction(node, p);
}
});
}
}