diff --git a/user/super/com/google/gwt/emul/java/util/AbstractList.java b/user/super/com/google/gwt/emul/java/util/AbstractList.java
index 1455e86..9ec2487 100644
--- a/user/super/com/google/gwt/emul/java/util/AbstractList.java
+++ b/user/super/com/google/gwt/emul/java/util/AbstractList.java
@@ -22,6 +22,8 @@
 import static javaemul.internal.InternalPreconditions.checkPositionIndex;
 import static javaemul.internal.InternalPreconditions.checkState;
 
+import jsinterop.annotations.JsNonNull;
+
 /**
  * Skeletal implementation of the List interface. <a
  * href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/AbstractList.html">[Sun
@@ -281,6 +283,7 @@
   }
 
   @Override
+  @JsNonNull
   public List<E> subList(int fromIndex, int toIndex) {
     return new SubList<E>(this, fromIndex, toIndex);
   }
diff --git a/user/super/com/google/gwt/emul/java/util/AbstractMap.java b/user/super/com/google/gwt/emul/java/util/AbstractMap.java
index 03c0343..e8c317c 100644
--- a/user/super/com/google/gwt/emul/java/util/AbstractMap.java
+++ b/user/super/com/google/gwt/emul/java/util/AbstractMap.java
@@ -17,6 +17,8 @@
 
 import static javaemul.internal.InternalPreconditions.checkNotNull;
 
+import jsinterop.annotations.JsNonNull;
+
 /**
  * Skeletal implementation of the Map interface. <a
  * href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/AbstractMap.html">[Sun
@@ -191,6 +193,7 @@
   }
 
   @Override
+  @JsNonNull
   public Set<K> keySet() {
     return new AbstractSet<K>() {
       @Override
diff --git a/user/super/com/google/gwt/emul/java/util/AbstractNavigableMap.java b/user/super/com/google/gwt/emul/java/util/AbstractNavigableMap.java
index 2e7411c..219af93 100644
--- a/user/super/com/google/gwt/emul/java/util/AbstractNavigableMap.java
+++ b/user/super/com/google/gwt/emul/java/util/AbstractNavigableMap.java
@@ -15,6 +15,8 @@
  */
 package java.util;
 
+import jsinterop.annotations.JsNonNull;
+
 /**
  * Skeletal implementation of a NavigableMap.
  */
@@ -377,6 +379,7 @@
   }
 
   @Override
+  @JsNonNull
   public Set<K> keySet() {
     return navigableKeySet();
   }
diff --git a/user/super/com/google/gwt/emul/java/util/Collections.java b/user/super/com/google/gwt/emul/java/util/Collections.java
index 498b321..8ad6e6b 100644
--- a/user/super/com/google/gwt/emul/java/util/Collections.java
+++ b/user/super/com/google/gwt/emul/java/util/Collections.java
@@ -24,6 +24,8 @@
 import java.util.function.Predicate;
 import java.util.function.UnaryOperator;
 
+import jsinterop.annotations.JsNonNull;
+
 /**
  * Utility methods that operate on collections.
  * See <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html">
@@ -186,6 +188,7 @@
     }
 
     @Override
+    @JsNonNull
     public Set keySet() {
       return EMPTY_SET;
     }
@@ -458,6 +461,7 @@
     }
 
     @Override
+    @JsNonNull
     public List<T> subList(int fromIndex, int toIndex) {
       return new UnmodifiableList<T>(list.subList(fromIndex, toIndex));
     }
@@ -626,6 +630,7 @@
     }
 
     @Override
+    @JsNonNull
     public Set<K> keySet() {
       if (keySet == null) {
         keySet = new UnmodifiableSet<K>(map.keySet());
diff --git a/user/super/com/google/gwt/emul/java/util/Vector.java b/user/super/com/google/gwt/emul/java/util/Vector.java
index 5d510bf..a71b5e3 100644
--- a/user/super/com/google/gwt/emul/java/util/Vector.java
+++ b/user/super/com/google/gwt/emul/java/util/Vector.java
@@ -22,6 +22,8 @@
 import java.util.function.Predicate;
 import java.util.function.UnaryOperator;
 
+import jsinterop.annotations.JsNonNull;
+
 /**
  * To keep performance characteristics in line with Java community expectations,
  * <code>Vector</code> is a wrapper around <code>ArrayList</code>.
@@ -246,6 +248,7 @@
   }
 
   @Override
+  @JsNonNull
   public List<E> subList(int fromIndex, int toIndex) {
     return arrayList.subList(fromIndex, toIndex);
   }
