001package daikon.chicory;
002
003import java.util.AbstractList;
004import java.util.List;
005import org.checkerframework.checker.lock.qual.GuardSatisfied;
006import org.checkerframework.dataflow.qual.Pure;
007import org.checkerframework.dataflow.qual.SideEffectFree;
008
009/**
010 * NonsensicalList is similar to NonsensicalObject but it is used for arrays whose value is
011 * nonsensical.
012 */
013// It's problematic to make this generic:  what would "get" return?
014public class NonsensicalList extends AbstractList<Object> implements List<Object> {
015
016  private NonsensicalList() {
017    super();
018  }
019
020  public static NonsensicalList getInstance() {
021    return theList;
022  }
023
024  @Pure
025  @Override
026  public Object get(@GuardSatisfied NonsensicalList this, int index) {
027    return NonsensicalObject.getInstance();
028  }
029
030  @Pure
031  @Override
032  public int size(@GuardSatisfied NonsensicalList this) {
033    return 0;
034  }
035
036  @SideEffectFree
037  @Override
038  public String toString(@GuardSatisfied NonsensicalList this) {
039    return "NonsensicalList";
040  }
041
042  public static boolean isNonsensicalList(Object obj) {
043    return (obj instanceof NonsensicalList);
044  }
045
046  private static final NonsensicalList theList = new NonsensicalList();
047}