Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @SuppressWarnings("unchecked")
- private Set<JLPFlag> checkFlags() {
- Set<JLPFlag> flags = EnumSet.allOf(JLPFlag.class);
- // store the last state
- List<T> prev = new ArrayList<T>(backing);
- List<T> list = backing;
- if (list instanceof Cloneable) {
- // no promise this works, see Clonable javadocs
- Method clone;
- try {
- clone = list.getClass().getDeclaredMethod("clone");
- list = (List<T>) clone.invoke(list);
- } catch (Exception e) {
- System.err.println("No clone: " + e.getClass());
- }
- }
- if (list == backing && list instanceof Serializable) {
- list = (List<T>) cloneLikeSerial((Serializable) list);
- }
- boolean empty = list.isEmpty();
- try {
- if (!empty) {
- list.add(list.get(0));
- } else {
- // hope that list allows null
- list.add(null);
- }
- } catch (Exception e) {
- flags.remove(JLPFlag.ADD);
- }
- try {
- list.set(0, list.get(1));
- } catch (Exception e) {
- flags.remove(JLPFlag.SET);
- }
- try {
- list.remove(0);
- } catch (Exception e) {
- flags.remove(JLPFlag.REMOVE);
- }
- if (flags.contains(JLPFlag.REMOVE) && list == backing)
- list.clear();
- if (flags.contains(JLPFlag.ADD) && list == backing)
- list.addAll(prev);
- return flags;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement