package org.checkerframework.framework.testchecker.reflection;

import javax.lang.model.element.AnnotationMirror;
import org.checkerframework.common.basetype.BaseAnnotatedTypeFactory;
import org.checkerframework.common.basetype.BaseTypeChecker;
import org.checkerframework.framework.qual.LiteralKind;
import org.checkerframework.framework.testchecker.reflection.qual.ReflectBottom;
import org.checkerframework.framework.type.treeannotator.ListTreeAnnotator;
import org.checkerframework.framework.type.treeannotator.LiteralTreeAnnotator;
import org.checkerframework.framework.type.treeannotator.PropagationTreeAnnotator;
import org.checkerframework.framework.type.treeannotator.TreeAnnotator;
import org.checkerframework.javacutil.AnnotationBuilder;

/**
 * AnnotatedTypeFactory with reflection resolution enabled. The used qualifier hierarchy is
 * straightforward and only intended for test purposes.
 */
public final class ReflectionTestAnnotatedTypeFactory extends BaseAnnotatedTypeFactory {
  public ReflectionTestAnnotatedTypeFactory(BaseTypeChecker checker) {
    super(checker);
    postInit();
  }

  @Override
  public TreeAnnotator createTreeAnnotator() {
    LiteralTreeAnnotator literalTreeAnnotator = new LiteralTreeAnnotator(this);
    AnnotationMirror bottom = AnnotationBuilder.fromClass(elements, ReflectBottom.class);
    literalTreeAnnotator.addLiteralKind(LiteralKind.INT, bottom);
    literalTreeAnnotator.addStandardLiteralQualifiers();

    return new ListTreeAnnotator(new PropagationTreeAnnotator(this), literalTreeAnnotator);
  }
}
