package flowexpression;

import org.checkerframework.framework.testchecker.flowexpression.qual.FlowExp;

public class ClassLiterals {
  static class String {}

  void method(
      @FlowExp("String.class") Object p1,
      @FlowExp("String.class") Object p2,
      @FlowExp("java.lang.String.class") Object p3) {
    @FlowExp("String.class") Object l1 = p1;
    @FlowExp("String.class") Object l2 = p2;
    // :: error: (assignment)
    @FlowExp("String.class") Object l3 = p3;
    // :: error: (assignment)
    @FlowExp("java.lang.String.class") Object l4 = p1;
    // :: error: (assignment)
    @FlowExp("java.lang.String.class") Object l5 = p2;
    @FlowExp("java.lang.String.class") Object l6 = p3;
  }

  @FlowExp("void.class") String s0;

  @FlowExp("int.class") String s1;

  @FlowExp("int[].class") String s2;

  @FlowExp("String[].class") String s3;

  @FlowExp("java.lang.String[].class") String s4;
}
