package javaexpression;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.checkerframework.framework.testchecker.javaexpression.qual.FlowExp;

public class Complex {
  class DocCategory {
    public Map<String, String> fields = new HashMap<>();
  }

  protected DocCategory[] categories = new DocCategory[2];

  void test() {
    for (int c = 0; c < categories.length; c++) {

      for (@FlowExp("categories[c].fields") String field : sortedKeySet(categories[c].fields)) {
        @FlowExp("categories[c].fields") String f = field;
      }
    }
  }

  public static <K extends Comparable<? super K>, V> Collection<@FlowExp("#1") K> sortedKeySet(
      Map<K, V> m) {
    throw new RuntimeException();
  }

  private static Map<Integer, List<@FlowExp("succs1") Integer>> succs1 = new HashMap<>();

  void method() {
    Map<Integer, List<Integer>> dom1post = dominators(succs1);
  }

  public static <T> Map<T, List<T>> dominators(Map<T, List<@FlowExp("#1") T>> predecessors) {
    throw new RuntimeException();
  }
}
