blob: 6a5413fcaa9d88823440a3838c555e1d34eae3a4 [file] [log] [blame]
# 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) {