/*
 * All elements must be Serializable only because the this$0 field for anonymous classes is final (and
 * pre-Java-5-JVMs prevent setting any final fields, including instance ones, even by reflection). This affects all
 * HashSets and TreeSets because their implementation in the Sun JRE is backed by a Map which has a keySet field
 * which is assigned an anonymous class.
 */
public class WithSetFields extends NotCommonJavaObject {

  private Set set = new TreeSet(new ToStringComparator());

  {
    set.add(Triangulate.anyInteger());
    set.add(Triangulate.anyString());
    set.add(Triangulate.anyInteger());
  }

  private Set customSet = new OrderedToStringHashSet();

  {
    customSet.add(Triangulate.anyString());
    customSet.add(Triangulate.anyInteger());
    customSet.add(Triangulate.anyString());
  }

  private Set empty = Collections.EMPTY_SET;
  private Set unmodifiable = Collections.unmodifiableSet(set);
  private Set synchronizedSet = Collections.synchronizedSet(set);
  private Set singelton = Collections.singleton(Triangulate.anyInteger());

  private static class ToStringComparator implements Comparator, Serializable {
    public int compare(Object o1, Object o2) {
      return o1.toString().compareTo(o2.toString());
    }
  }

  private static class OrderedToStringHashSet extends HashSet {
    public String toString() {
      List presentationList = new ArrayList(this);
      Collections.sort(presentationList, new ToStringComparator());
      return presentationList.toString();
    }
  }
}
 {
   customSet.add(Triangulate.anyString());
   customSet.add(Triangulate.anyInteger());
   customSet.add(Triangulate.anyString());
 }
 {
   set.add(Triangulate.anyInteger());
   set.add(Triangulate.anyString());
   set.add(Triangulate.anyInteger());
 }