| # Run the following in both copies of the annotated JDK. For example, in: |
| cd $t/libraries/jdk-fork-mernst-branch-collection-object-parameters-may-be-null/src/java.base/share/classes |
| cd $t/checker-framework-fork-mernst-branch-collection-object-parameters-may-be-null/checker/jdk/nullness/src |
| |
| |
| rm -f *.txt |
| rg -H --no-heading --line-buffered -n 'public.* (containsKey|contains|containsValue|get|getOrDefault|indexOf|lastIndexOf|removeFirstOccurrence|removeLastOccurrence|remove|remove)\(.*\bObject\b' \ |
| > rg-output.txt |
| |
| grep -E '/(ArrayList|LinkedList|Vector|Stack|HashMap|LinkedHashMap|PrinterStateReasons|IdentityHashMap|WeakHashMap|HashSet|JobStateReasons|LinkedHashSet).java' rg-output.txt \ |
| > null-friendly.txt |
| |
| cat null-friendly.txt \ |
| | sed 's/@Nullable Object/Obj/g' \ |
| | grep Object \ |
| > null-friendly-errors.txt |
| |
| grep -E 'public.* (contains|containsKey|containsValue|remove|removeFirstOccurrence|removeLastOccurrence)\(' rg-output.txt \ |
| | grep -E '/(ArrayBlockingQueue|ArrayDeque|ConcurrentLinkedQueue|CopyOnWriteArrayList|CopyOnWriteArraySet|LinkedBlockingDeque|LinkedBlockingQueue|LinkedTransferQueue|PriorityBlockingQueue|PriorityQueue|EnumMap).java' \ |
| > contains-remove-friendly.txt |
| |
| cat contains-remove-friendly.txt \ |
| | sed 's/@Nullable Object/Obj/g' \ |
| | grep Object \ |
| > contains-remove-errors.txt |
| |
| diff --new-line-format="" --unchanged-line-format="" <(diff --new-line-format="" --unchanged-line-format="" rg-output.txt null-friendly.txt) contains-remove-friendly.txt > everything-else.txt |
| |
| grep -E '\(.*@Nullable' everything-else.txt \ |
| > everything-else-errors.txt |
| |
| |
| # Files *-errors.txt should be empty. |
| # This line will appear because it's an exception: |
| java/util/concurrent/ConcurrentLinkedDeque.java:1089: public boolean contains(@Nullable Object o) { |
| java/util/EnumMap.java:258: public @Nullable V get(@Nullable Object key) { |