Example #1
0
 public static <T extends EObject> void refreshList(
     @Nullable List<? super T> oldElements, @Nullable List<? extends T> newElements) {
   if (oldElements == null) {
     return; // Never happens but avoids need for null validation in caller
   }
   if (newElements == null) {
     if (oldElements.size() > 0) {
       oldElements.clear();
     }
     return;
   }
   for (int k = newElements.size(); k-- > 0; ) {
     T newElement = newElements.get(k);
     if ((newElement != null) && newElement.eIsProxy()) {
       oldElements.remove(newElement); // Lose oldContent before adding possible 'duplicates'
     }
   }
   for (int k = oldElements.size(); k-- > 0; ) {
     Object oldElement = oldElements.get(k);
     if (!newElements.contains(oldElement)) {
       oldElements.remove(k); // Lose oldContent before adding possible 'duplicates'
     }
   }
   int newMax = newElements.size();
   for (int i = 0; i < newMax; i++) { // Invariant: lists are equal up to index i
     T newElement = newElements.get(i);
     int oldMax = oldElements.size();
     boolean reused = false;
     ;
     for (int j = i; j < oldMax; j++) {
       Object oldElement = oldElements.get(j);
       if (oldElement == newElement) {
         if (j != i) {
           oldElements.remove(j);
           oldElements.add(i, newElement);
         }
         reused = true;
         break;
       }
     }
     if (!reused) {
       if (i < oldMax) {
         oldElements.add(i, newElement);
       } else {
         oldElements.add(newElement);
       }
     }
     assert newElements.get(i) == oldElements.get(i);
   }
   for (int k = oldElements.size(); k > newMax; ) {
     oldElements.remove(--k);
   }
   assert newElements.size() == oldElements.size();
 }
Example #2
0
 public static <T extends EObject> void refreshSet(
     List<? super T> oldElements, Collection<? extends T> newElements) {
   for (int i = oldElements.size(); i-- > 0; ) { // Remove any oldElements not in newElements
     Object oldElement = oldElements.get(i);
     if (!newElements.contains(oldElement)) {
       oldElements.remove(i);
     }
   }
   for (T newElement : newElements) { // Add any newElements not in oldElements
     if (!newElement.eIsProxy() && !oldElements.contains(newElement)) {
       oldElements.add(newElement);
     }
   }
 }
Example #3
0
 public static <T extends EObject> void refreshList(
     List<? super T> elements, List<? extends T> newElements) {
   for (int k = newElements.size(); k-- > 0; ) {
     T newElement = newElements.get(k);
     if (newElement.eIsProxy()) {
       elements.remove(newElement); // Lose oldContent before adding possible 'duplicates'
     }
   }
   for (int k = elements.size(); k-- > 0; ) {
     Object oldElement = elements.get(k);
     if (!newElements.contains(oldElement)) {
       elements.remove(k); // Lose oldContent before adding possible 'duplicates'
     }
   }
   int newMax = newElements.size();
   for (int i = 0; i < newMax; i++) { // Invariant: lists are equal up to index i
     T newElement = newElements.get(i);
     int oldMax = elements.size();
     boolean reused = false;
     ;
     for (int j = i; j < oldMax; j++) {
       Object oldElement = elements.get(j);
       if (oldElement == newElement) {
         if (j != i) {
           elements.remove(j);
           elements.add(i, newElement);
         }
         reused = true;
         break;
       }
     }
     if (!reused) {
       if (i < oldMax) {
         elements.add(i, newElement);
       } else {
         elements.add(newElement);
       }
     }
     assert newElements.get(i) == elements.get(i);
   }
   for (int k = elements.size(); k > newMax; ) {
     elements.remove(--k);
   }
   assert newElements.size() == elements.size();
 }
Example #4
0
 public static <T extends EObject> void refreshSet(
     @Nullable List<? super T> oldElements, @Nullable Collection<? extends T> newElements) {
   if (oldElements == null) {
     return; // Never happens but avoids need for null validation in caller
   }
   if (newElements == null) {
     oldElements.clear();
     return;
   }
   for (int i = oldElements.size(); i-- > 0; ) { // Remove any oldElements not in newElements
     Object oldElement = oldElements.get(i);
     if (!newElements.contains(oldElement)) {
       oldElements.remove(i);
     }
   }
   for (T newElement : newElements) { // Add any newElements not in oldElements
     if (!newElement.eIsProxy() && !oldElements.contains(newElement)) {
       oldElements.add(newElement);
     }
   }
 }