diff --git a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageConfiguration.java b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageConfiguration.java index 5dc4946c06b1..0371965e20ec 100644 --- a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageConfiguration.java +++ b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageConfiguration.java @@ -7,13 +7,13 @@ import java.util.Map; /** - * Configuration for a {@link CloudStorageFileSystem} instance. + * Configuration for {@link CloudStorageFileSystem} instances. */ @AutoValue public abstract class CloudStorageConfiguration { /** - * Returns path of the current working directory. This defaults to the root directory. + * Returns path of current working directory. This defaults to the root directory. */ public abstract String workingDirectory(); @@ -31,10 +31,14 @@ public abstract class CloudStorageConfiguration { */ public abstract boolean stripPrefixSlash(); - /** Return {@code true} if paths with a trailing slash should be treated as fake directories. */ + /** + * Returns {@code true} if paths with a trailing slash should be treated as fake directories. + */ public abstract boolean usePseudoDirectories(); - /** Returns the block size (in bytes) used when talking to the GCS HTTP server. */ + /** + * Returns block size (in bytes) used when talking to the GCS HTTP server. + */ public abstract int blockSize(); /** @@ -50,7 +54,8 @@ public static Builder builder() { return new Builder(); } - /** Builder for {@link CloudStorageConfiguration}. + /** + * Builder for {@link CloudStorageConfiguration}. */ public static final class Builder { @@ -61,8 +66,8 @@ public static final class Builder { private int blockSize = CloudStorageFileSystem.BLOCK_SIZE_DEFAULT; /** - * Changes the current working directory for a new filesystem. This cannot be changed once it's - * been set. You'll need to simply create another filesystem object. + * Changes current working directory for new filesystem. This cannot be changed once it's + * been set. You'll need to create another {@link CloudStorageFileSystem} object. * * @throws IllegalArgumentException if {@code path} is not absolute. */ @@ -92,7 +97,8 @@ public Builder stripPrefixSlash(boolean value) { return this; } - /** Configures if paths with a trailing slash should be treated as fake directories. + /** + * Configures if paths with a trailing slash should be treated as fake directories. */ public Builder usePseudoDirectories(boolean value) { usePseudoDirectories = value; @@ -109,7 +115,8 @@ public Builder blockSize(int value) { return this; } - /** Creates a new instance, but does not destroy the builder. + /** + * Creates new instance without destroying builder. */ public CloudStorageConfiguration build() { return new AutoValue_CloudStorageConfiguration( diff --git a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributeView.java b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributeView.java index 0a63363d4893..49e7079d84ab 100644 --- a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributeView.java +++ b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributeView.java @@ -12,7 +12,6 @@ import java.nio.file.attribute.FileTime; import java.util.Objects; -import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; /** @@ -59,7 +58,7 @@ public void setTimes(FileTime lastModifiedTime, FileTime lastAccessTime, FileTim } @Override - public boolean equals(@Nullable Object other) { + public boolean equals(Object other) { return this == other || other instanceof CloudStorageFileAttributeView && Objects.equals(storage, ((CloudStorageFileAttributeView) other).storage) diff --git a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributes.java b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributes.java index a384e1be2c73..61b7716455d6 100644 --- a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributes.java +++ b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributes.java @@ -7,53 +7,55 @@ import java.nio.file.attribute.BasicFileAttributes; import java.util.List; -/** Interface for attributes on a cloud storage file or pseudo-directory. */ +/** + * Interface for attributes on a Cloud Storage file or pseudo-directory. + */ public interface CloudStorageFileAttributes extends BasicFileAttributes { /** - * Returns the HTTP etag hash for this object. + * Returns HTTP etag hash of object contents. * * @see "https://developers.google.com/storage/docs/hashes-etags" */ Optional etag(); /** - * Returns the mime type (e.g. text/plain) if it was set for this object. + * Returns mime type (e.g. text/plain), if set. * * @see "http://en.wikipedia.org/wiki/Internet_media_type#List_of_common_media_types" */ Optional mimeType(); /** - * Returns the ACL value on this Cloud Storage object. + * Returns access control list. * * @see "https://developers.google.com/storage/docs/reference-headers#acl" */ Optional> acl(); /** - * Returns the {@code Cache-Control} HTTP header value, if set on this object. + * Returns {@code Cache-Control} HTTP header value, if set. * * @see "https://developers.google.com/storage/docs/reference-headers#cachecontrol" */ Optional cacheControl(); /** - * Returns the {@code Content-Encoding} HTTP header value, if set on this object. + * Returns {@code Content-Encoding} HTTP header value, if set. * * @see "https://developers.google.com/storage/docs/reference-headers#contentencoding" */ Optional contentEncoding(); /** - * Returns the {@code Content-Disposition} HTTP header value, if set on this object. + * Returns {@code Content-Disposition} HTTP header value, if set. * * @see "https://developers.google.com/storage/docs/reference-headers#contentdisposition" */ Optional contentDisposition(); /** - * Returns user-specified metadata associated with this object. + * Returns user-specified metadata. * * @see "https://developers.google.com/storage/docs/reference-headers#contentdisposition" */ diff --git a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystem.java b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystem.java index 50185974f924..88f66150e123 100644 --- a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystem.java +++ b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystem.java @@ -18,11 +18,10 @@ import java.util.Objects; import java.util.Set; -import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; /** - * Google Cloud Storage {@link FileSystem} + * Google Cloud Storage {@link FileSystem} implementation. * * @see * Concepts and Terminology @@ -33,7 +32,7 @@ public final class CloudStorageFileSystem extends FileSystem { /** - * Returns Google Cloud Storage {@link FileSystem} object for a given bucket name. + * Returns Google Cloud Storage {@link FileSystem} object for {@code bucket}. * *

NOTE: You may prefer to use Java's standard API instead:

   {@code
    *
@@ -52,7 +51,7 @@ public static CloudStorageFileSystem forBucket(String bucket) {
   }
 
   /**
-   * Creates a new filesystem for a particular bucket, with customizable settings.
+   * Creates new file system instance for {@code bucket}, with customizable settings.
    *
    * @see #forBucket(String)
    */
@@ -88,21 +87,21 @@ public CloudStorageFileSystemProvider provider() {
   }
 
   /**
-   * Returns the Cloud Storage bucket name being served by this file system.
+   * Returns Cloud Storage bucket name being served by this file system.
    */
   public String bucket() {
     return bucket;
   }
 
   /**
-   * Returns the configuration object for this filesystem instance.
+   * Returns configuration object for this file system instance.
    */
   public CloudStorageConfiguration config() {
     return config;
   }
 
   /**
-   * Converts a cloud storage object name to a {@link Path} object.
+   * Converts Cloud Storage object name to a {@link Path} object.
    */
   @Override
   public CloudStoragePath getPath(String first, String... more) {
@@ -186,7 +185,7 @@ public WatchService newWatchService() throws IOException {
   }
 
   @Override
-  public boolean equals(@Nullable Object other) {
+  public boolean equals(Object other) {
     return this == other
         || other instanceof CloudStorageFileSystem
             && Objects.equals(config, ((CloudStorageFileSystem) other).config)
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystemProvider.java b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystemProvider.java
index 44e0933bccc0..4c7acba98a96 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystemProvider.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystemProvider.java
@@ -57,7 +57,7 @@
 import javax.annotation.concurrent.ThreadSafe;
 
 /**
- * Google Cloud Storage {@link FileSystemProvider}.
+ * Google Cloud Storage {@link FileSystemProvider} implementation.
  */
 @ThreadSafe
 @AutoService(FileSystemProvider.class)
@@ -100,7 +100,7 @@ public String getScheme() {
   }
 
   /**
-   * Returns cloud storage file system, provided a URI with no path, e.g. {@code gs://bucket}.
+   * Returns Cloud Storage file system, provided a URI with no path, e.g. {@code gs://bucket}.
    */
   @Override
   public CloudStorageFileSystem getFileSystem(URI uri) {
@@ -108,7 +108,7 @@ public CloudStorageFileSystem getFileSystem(URI uri) {
   }
 
   /**
-   * Returns cloud storage file system, provided a URI with no path, e.g. {@code gs://bucket}.
+   * Returns Cloud Storage file system, provided a URI with no path, e.g. {@code gs://bucket}.
    */
   @Override
   public CloudStorageFileSystem newFileSystem(URI uri, Map env) {
@@ -537,7 +537,7 @@ public FileStore getFileStore(Path path) {
   }
 
   @Override
-  public boolean equals(@Nullable Object other) {
+  public boolean equals(Object other) {
     return this == other
         || other instanceof CloudStorageFileSystemProvider
             && Objects.equals(storage, ((CloudStorageFileSystemProvider) other).storage);
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageObjectAttributes.java b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageObjectAttributes.java
index f01ac387928a..405b507bdad1 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageObjectAttributes.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageObjectAttributes.java
@@ -14,11 +14,10 @@
 import java.util.Objects;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 import javax.annotation.concurrent.Immutable;
 
 /**
- * Metadata for a Google Cloud Storage object.
+ * Metadata for a Google Cloud Storage file.
  */
 @Immutable
 final class CloudStorageObjectAttributes implements CloudStorageFileAttributes {
@@ -47,67 +46,36 @@ public FileTime lastModifiedTime() {
     return creationTime();
   }
 
-  /**
-   * Returns the HTTP etag hash for this object.
-   */
   @Override
   public Optional etag() {
     return Optional.fromNullable(info.etag());
   }
 
-  /**
-   * Returns the mime type (e.g. text/plain) if it was set for this object.
-   */
   @Override
   public Optional mimeType() {
     return Optional.fromNullable(info.contentType());
   }
 
-  /**
-   * Returns the ACL value on this Cloud Storage object.
-   *
-   * @see "https://developers.google.com/storage/docs/reference-headers#acl"
-   */
   @Override
   public Optional> acl() {
     return Optional.fromNullable(info.acl());
   }
 
-  /**
-   * Returns the {@code Cache-Control} HTTP header value, if set on this object.
-   *
-   * @see "https://developers.google.com/storage/docs/reference-headers#cachecontrol"
-   */
   @Override
   public Optional cacheControl() {
     return Optional.fromNullable(info.cacheControl());
   }
 
-  /**
-   * Returns the {@code Content-Encoding} HTTP header value, if set on this object.
-   *
-   * @see "https://developers.google.com/storage/docs/reference-headers#contentencoding"
-   */
   @Override
   public Optional contentEncoding() {
     return Optional.fromNullable(info.contentEncoding());
   }
 
-  /**
-   * Returns the {@code Content-Disposition} HTTP header value, if set on this object.
-   *
-   * @see "https://developers.google.com/storage/docs/reference-headers#contentdisposition"
-   */
   @Override
   public Optional contentDisposition() {
     return Optional.fromNullable(info.contentDisposition());
   }
 
-  /**
-   * Returns user-specified metadata associated with this object.
-   *
-   * @see "https://developers.google.com/storage/docs/reference-headers#contentdisposition"
-   */
   @Override
   public ImmutableMap userMetadata() {
     if (null == info.metadata()) {
@@ -147,7 +115,7 @@ public Object fileKey() {
   }
 
   @Override
-  public boolean equals(@Nullable Object other) {
+  public boolean equals(Object other) {
     return this == other
         || other instanceof CloudStorageObjectAttributes
             && Objects.equals(info, ((CloudStorageObjectAttributes) other).info);
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageObjectImmutableException.java b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageObjectImmutableException.java
index e3b68aca9aec..a97eec9c72ee 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageObjectImmutableException.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageObjectImmutableException.java
@@ -1,7 +1,7 @@
 package com.google.gcloud.storage.contrib.nio;
 
 /**
- * Exception thrown to indicate we don't support a mutation of a cloud storage object.
+ * Exception reminding user that Cloud Storage objects can't be mutated.
  */
 public final class CloudStorageObjectImmutableException extends UnsupportedOperationException {
 
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStoragePath.java b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStoragePath.java
index 7a47e3c6b230..5fff71a4d7ee 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStoragePath.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStoragePath.java
@@ -274,7 +274,7 @@ public int compareTo(Path other) {
   }
 
   @Override
-  public boolean equals(@Nullable Object other) {
+  public boolean equals(Object other) {
     return this == other
         || other instanceof CloudStoragePath
             && Objects.equals(bucket(), ((CloudStoragePath) other).bucket())
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStoragePseudoDirectoryAttributes.java b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStoragePseudoDirectoryAttributes.java
index acb69710d346..cdd3191563d2 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStoragePseudoDirectoryAttributes.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStoragePseudoDirectoryAttributes.java
@@ -10,7 +10,7 @@
 import java.util.List;
 
 /**
- * Metadata for a cloud storage pseudo-directory.
+ * Metadata for a Cloud Storage pseudo-directory.
  */
 final class CloudStoragePseudoDirectoryAttributes implements CloudStorageFileAttributes {
 
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageUtil.java b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageUtil.java
index 136506a4c861..d342c2a2c8b9 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageUtil.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/CloudStorageUtil.java
@@ -30,7 +30,7 @@ static CloudStoragePath checkPath(Path path) {
     if (!(checkNotNull(path) instanceof CloudStoragePath)) {
       throw new ProviderMismatchException(
           String.format(
-              "Not a cloud storage path: %s (%s)", path, path.getClass().getSimpleName()));
+              "Not a Cloud Storage path: %s (%s)", path, path.getClass().getSimpleName()));
     }
     return (CloudStoragePath) path;
   }
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/UnixPath.java b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/UnixPath.java
index 7449a6956158..c603e4342b51 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/UnixPath.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/main/java/com/google/gcloud/storage/contrib/nio/UnixPath.java
@@ -58,7 +58,7 @@ private UnixPath(boolean permitEmptyComponents, String path) {
   }
 
   /**
-   * Returns new UnixPath of {@code first}.
+   * Returns new path of {@code first}.
    */
   public static UnixPath getPath(boolean permitEmptyComponents, String path) {
     if (path.isEmpty()) {
@@ -71,7 +71,7 @@ public static UnixPath getPath(boolean permitEmptyComponents, String path) {
   }
 
   /**
-   * Returns new UnixPath of {@code first} with {@code more} components resolved against it.
+   * Returns new path of {@code first} with {@code more} components resolved against it.
    *
    * @see #resolve(UnixPath)
    * @see java.nio.file.FileSystem#getPath(String, String...)
@@ -464,7 +464,7 @@ public Iterator splitReverse() {
   }
 
   @Override
-  public boolean equals(@Nullable Object other) {
+  public boolean equals(Object other) {
     return this == other || other instanceof UnixPath && path.equals(((UnixPath) other).path);
   }
 
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributeViewTest.java b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributeViewTest.java
index ce9f34cf94d3..71e35ab1745f 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributeViewTest.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributeViewTest.java
@@ -15,6 +15,7 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import java.io.IOException;
 import java.net.URI;
 import java.nio.file.Files;
 import java.nio.file.NoSuchFileException;
@@ -41,7 +42,7 @@ public void before() {
   }
 
   @Test
-  public void testReadAttributes() throws Exception {
+  public void testReadAttributes() throws IOException {
     Files.write(path, HAPPY, withCacheControl("potato"));
     CloudStorageFileAttributeView lazyAttributes =
         Files.getFileAttributeView(path, CloudStorageFileAttributeView.class);
@@ -49,7 +50,7 @@ public void testReadAttributes() throws Exception {
   }
 
   @Test
-  public void testReadAttributes_notFound_throwsNoSuchFileException() throws Exception {
+  public void testReadAttributes_notFound_throwsNoSuchFileException() throws IOException {
     CloudStorageFileAttributeView lazyAttributes =
         Files.getFileAttributeView(path, CloudStorageFileAttributeView.class);
     thrown.expect(NoSuchFileException.class);
@@ -57,7 +58,7 @@ public void testReadAttributes_notFound_throwsNoSuchFileException() throws Excep
   }
 
   @Test
-  public void testReadAttributes_pseudoDirectory() throws Exception {
+  public void testReadAttributes_pseudoDirectory() throws IOException {
     Path dir = Paths.get(URI.create("gs://red/rum/"));
     CloudStorageFileAttributeView lazyAttributes =
         Files.getFileAttributeView(dir, CloudStorageFileAttributeView.class);
@@ -66,7 +67,7 @@ public void testReadAttributes_pseudoDirectory() throws Exception {
   }
 
   @Test
-  public void testName() throws Exception {
+  public void testName() throws IOException {
     Files.write(path, HAPPY, withCacheControl("potato"));
     CloudStorageFileAttributeView lazyAttributes =
         Files.getFileAttributeView(path, CloudStorageFileAttributeView.class);
@@ -74,7 +75,7 @@ public void testName() throws Exception {
   }
 
   @Test
-  public void testEquals_equalsTester() throws Exception {
+  public void testEquals_equalsTester() {
     new EqualsTester()
         .addEqualityGroup(
             Files.getFileAttributeView(
@@ -88,8 +89,9 @@ public void testEquals_equalsTester() throws Exception {
   }
 
   @Test
-  public void testNullness() throws Exception {
+  public void testNullness() throws NoSuchMethodException, SecurityException {
     new NullPointerTester()
+        .ignore(CloudStorageFileAttributeView.class.getMethod("equals", Object.class))
         .setDefault(FileTime.class, FileTime.fromMillis(0))
         .testAllPublicInstanceMethods(
             Files.getFileAttributeView(path, CloudStorageFileAttributeView.class));
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributesTest.java b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributesTest.java
index 8ffeec985f6e..92f9acd1407b 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributesTest.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileAttributesTest.java
@@ -19,6 +19,7 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import java.io.IOException;
 import java.net.URI;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -35,7 +36,6 @@ public class CloudStorageFileAttributesTest {
   private Path path;
   private Path dir;
 
-  /** empty test storage and make sure we use it instead of the real GCS. Create a few paths. **/
   @Before
   public void before() {
     CloudStorageFileSystemProvider.setGCloudOptions(LocalGcsHelper.options());
@@ -44,21 +44,21 @@ public void before() {
   }
 
   @Test
-  public void testCacheControl() throws Exception {
+  public void testCacheControl() throws IOException {
     Files.write(path, HAPPY, withCacheControl("potato"));
     assertThat(Files.readAttributes(path, CloudStorageFileAttributes.class).cacheControl().get())
         .isEqualTo("potato");
   }
 
   @Test
-  public void testMimeType() throws Exception {
+  public void testMimeType() throws IOException {
     Files.write(path, HAPPY, withMimeType("text/potato"));
     assertThat(Files.readAttributes(path, CloudStorageFileAttributes.class).mimeType().get())
         .isEqualTo("text/potato");
   }
 
   @Test
-  public void testAcl() throws Exception {
+  public void testAcl() throws IOException {
     Acl acl = Acl.of(new Acl.User("serf@example.com"), Acl.Role.READER);
     Files.write(path, HAPPY, withAcl(acl));
     assertThat(Files.readAttributes(path, CloudStorageFileAttributes.class).acl().get())
@@ -66,7 +66,7 @@ public void testAcl() throws Exception {
   }
 
   @Test
-  public void testContentDisposition() throws Exception {
+  public void testContentDisposition() throws IOException {
     Files.write(path, HAPPY, withContentDisposition("crash call"));
     assertThat(
             Files.readAttributes(path, CloudStorageFileAttributes.class).contentDisposition().get())
@@ -74,14 +74,14 @@ public void testContentDisposition() throws Exception {
   }
 
   @Test
-  public void testContentEncoding() throws Exception {
+  public void testContentEncoding() throws IOException {
     Files.write(path, HAPPY, withContentEncoding("my content encoding"));
     assertThat(Files.readAttributes(path, CloudStorageFileAttributes.class).contentEncoding().get())
         .isEqualTo("my content encoding");
   }
 
   @Test
-  public void testUserMetadata() throws Exception {
+  public void testUserMetadata() throws IOException {
     Files.write(path, HAPPY, withUserMetadata("green", "bean"));
     assertThat(
             Files.readAttributes(path, CloudStorageFileAttributes.class)
@@ -91,7 +91,7 @@ public void testUserMetadata() throws Exception {
   }
 
   @Test
-  public void testIsDirectory() throws Exception {
+  public void testIsDirectory() throws IOException {
     Files.write(path, HAPPY);
     assertThat(Files.readAttributes(path, CloudStorageFileAttributes.class).isDirectory())
         .isFalse();
@@ -99,7 +99,7 @@ public void testIsDirectory() throws Exception {
   }
 
   @Test
-  public void testIsRegularFile() throws Exception {
+  public void testIsRegularFile() throws IOException {
     Files.write(path, HAPPY);
     assertThat(Files.readAttributes(path, CloudStorageFileAttributes.class).isRegularFile())
         .isTrue();
@@ -108,14 +108,14 @@ public void testIsRegularFile() throws Exception {
   }
 
   @Test
-  public void testIsOther() throws Exception {
+  public void testIsOther() throws IOException {
     Files.write(path, HAPPY);
     assertThat(Files.readAttributes(path, CloudStorageFileAttributes.class).isOther()).isFalse();
     assertThat(Files.readAttributes(dir, CloudStorageFileAttributes.class).isOther()).isFalse();
   }
 
   @Test
-  public void testIsSymbolicLink() throws Exception {
+  public void testIsSymbolicLink() throws IOException {
     Files.write(path, HAPPY);
     assertThat(Files.readAttributes(path, CloudStorageFileAttributes.class).isSymbolicLink())
         .isFalse();
@@ -124,7 +124,7 @@ public void testIsSymbolicLink() throws Exception {
   }
 
   @Test
-  public void testEquals_equalsTester() throws Exception {
+  public void testEquals_equalsTester() throws IOException {
     Files.write(path, HAPPY, withMimeType("text/plain"));
     CloudStorageFileAttributes a1 = Files.readAttributes(path, CloudStorageFileAttributes.class);
     CloudStorageFileAttributes a2 = Files.readAttributes(path, CloudStorageFileAttributes.class);
@@ -135,7 +135,7 @@ public void testEquals_equalsTester() throws Exception {
   }
 
   @Test
-  public void testFilekey() throws Exception {
+  public void testFilekey() throws IOException {
     Files.write(path, HAPPY, withMimeType("text/plain"));
     Path path2 = Paths.get(URI.create("gs://bucket/anotherrandompath"));
     Files.write(path2, HAPPY, withMimeType("text/plain"));
@@ -155,13 +155,14 @@ public void testFilekey() throws Exception {
   }
 
   @Test
-  public void testNullness() throws Exception {
+  public void testNullness() throws IOException, NoSuchMethodException, SecurityException {
     Files.write(path, HAPPY);
     CloudStorageFileAttributes pathAttributes =
         Files.readAttributes(path, CloudStorageFileAttributes.class);
     CloudStorageFileAttributes dirAttributes =
         Files.readAttributes(dir, CloudStorageFileAttributes.class);
     NullPointerTester tester = new NullPointerTester();
+    tester.ignore(CloudStorageObjectAttributes.class.getMethod("equals", Object.class));
     tester.testAllPublicInstanceMethods(pathAttributes);
     tester.testAllPublicInstanceMethods(dirAttributes);
   }
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystemProviderTest.java b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystemProviderTest.java
index f85bb087acb8..f38860aef1e6 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystemProviderTest.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystemProviderTest.java
@@ -26,6 +26,7 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URI;
@@ -83,19 +84,19 @@ public void before() {
   }
 
   @Test
-  public void testSize() throws Exception {
+  public void testSize() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/wat"));
     Files.write(path, SINGULARITY.getBytes(UTF_8));
     assertThat(Files.size(path)).isEqualTo(SINGULARITY.getBytes(UTF_8).length);
   }
 
   @Test
-  public void testSize_trailingSlash_returnsFakePseudoDirectorySize() throws Exception {
+  public void testSize_trailingSlash_returnsFakePseudoDirectorySize() throws IOException {
     assertThat(Files.size(Paths.get(URI.create("gs://bucket/wat/")))).isEqualTo(1);
   }
 
   @Test
-  public void testSize_trailingSlash_disablePseudoDirectories() throws Exception {
+  public void testSize_trailingSlash_disablePseudoDirectories() throws IOException {
     try (CloudStorageFileSystem fs = forBucket("doodle", usePseudoDirectories(false))) {
       Path path = fs.getPath("wat/");
       byte[] rapture = SINGULARITY.getBytes(UTF_8);
@@ -105,20 +106,20 @@ public void testSize_trailingSlash_disablePseudoDirectories() throws Exception {
   }
 
   @Test
-  public void testReadAllBytes() throws Exception {
+  public void testReadAllBytes() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/wat"));
     Files.write(path, SINGULARITY.getBytes(UTF_8));
     assertThat(new String(Files.readAllBytes(path), UTF_8)).isEqualTo(SINGULARITY);
   }
 
   @Test
-  public void testReadAllBytes_trailingSlash() throws Exception {
+  public void testReadAllBytes_trailingSlash() throws IOException {
     thrown.expect(CloudStoragePseudoDirectoryException.class);
     Files.readAllBytes(Paths.get(URI.create("gs://bucket/wat/")));
   }
 
   @Test
-  public void testNewByteChannelRead() throws Exception {
+  public void testNewByteChannelRead() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/wat"));
     byte[] data = SINGULARITY.getBytes(UTF_8);
     Files.write(path, data);
@@ -132,7 +133,7 @@ public void testNewByteChannelRead() throws Exception {
   }
 
   @Test
-  public void testNewByteChannelRead_seeking() throws Exception {
+  public void testNewByteChannelRead_seeking() throws IOException {
     Path path = Paths.get(URI.create("gs://lol/cat"));
     Files.write(path, "helloworld".getBytes(UTF_8));
     try (SeekableByteChannel input = Files.newByteChannel(path)) {
@@ -153,7 +154,7 @@ public void testNewByteChannelRead_seeking() throws Exception {
   }
 
   @Test
-  public void testNewByteChannelRead_seekBeyondSize_reportsEofOnNextRead() throws Exception {
+  public void testNewByteChannelRead_seekBeyondSize_reportsEofOnNextRead() throws IOException {
     Path path = Paths.get(URI.create("gs://lol/cat"));
     Files.write(path, "hellocat".getBytes(UTF_8));
     try (SeekableByteChannel input = Files.newByteChannel(path)) {
@@ -167,21 +168,21 @@ public void testNewByteChannelRead_seekBeyondSize_reportsEofOnNextRead() throws
   }
 
   @Test
-  public void testNewByteChannelRead_trailingSlash() throws Exception {
+  public void testNewByteChannelRead_trailingSlash() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/wat/"));
     thrown.expect(CloudStoragePseudoDirectoryException.class);
     Files.newByteChannel(path);
   }
 
   @Test
-  public void testNewByteChannelRead_notFound() throws Exception {
+  public void testNewByteChannelRead_notFound() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/wednesday"));
     thrown.expect(NoSuchFileException.class);
     Files.newByteChannel(path);
   }
 
   @Test
-  public void testNewByteChannelWrite() throws Exception {
+  public void testNewByteChannelWrite() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/tests"));
     try (SeekableByteChannel output = Files.newByteChannel(path, WRITE)) {
       assertThat(output.position()).isEqualTo(0);
@@ -199,7 +200,7 @@ public void testNewByteChannelWrite() throws Exception {
   }
 
   @Test
-  public void testNewInputStream() throws Exception {
+  public void testNewInputStream() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/wat"));
     Files.write(path, SINGULARITY.getBytes(UTF_8));
     try (InputStream input = Files.newInputStream(path)) {
@@ -210,7 +211,7 @@ public void testNewInputStream() throws Exception {
   }
 
   @Test
-  public void testNewInputStream_trailingSlash() throws Exception {
+  public void testNewInputStream_trailingSlash() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/wat/"));
     thrown.expect(CloudStoragePseudoDirectoryException.class);
     try (InputStream input = Files.newInputStream(path)) {
@@ -219,7 +220,7 @@ public void testNewInputStream_trailingSlash() throws Exception {
   }
 
   @Test
-  public void testNewInputStream_notFound() throws Exception {
+  public void testNewInputStream_notFound() throws IOException {
     Path path = Paths.get(URI.create("gs://cry/wednesday"));
     thrown.expect(NoSuchFileException.class);
     try (InputStream input = Files.newInputStream(path)) {
@@ -228,7 +229,7 @@ public void testNewInputStream_notFound() throws Exception {
   }
 
   @Test
-  public void testNewOutputStream() throws Exception {
+  public void testNewOutputStream() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/wat"));
     Files.write(path, SINGULARITY.getBytes(UTF_8));
     try (OutputStream output = Files.newOutputStream(path)) {
@@ -238,7 +239,7 @@ public void testNewOutputStream() throws Exception {
   }
 
   @Test
-  public void testNewOutputStream_truncateByDefault() throws Exception {
+  public void testNewOutputStream_truncateByDefault() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/wat"));
     Files.write(path, SINGULARITY.getBytes(UTF_8));
     Files.write(path, "hello".getBytes(UTF_8));
@@ -249,7 +250,7 @@ public void testNewOutputStream_truncateByDefault() throws Exception {
   }
 
   @Test
-  public void testNewOutputStream_truncateExplicitly() throws Exception {
+  public void testNewOutputStream_truncateExplicitly() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/wat"));
     Files.write(path, SINGULARITY.getBytes(UTF_8));
     Files.write(path, "hello".getBytes(UTF_8));
@@ -260,20 +261,20 @@ public void testNewOutputStream_truncateExplicitly() throws Exception {
   }
 
   @Test
-  public void testNewOutputStream_trailingSlash() throws Exception {
+  public void testNewOutputStream_trailingSlash() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/wat/"));
     thrown.expect(CloudStoragePseudoDirectoryException.class);
     Files.newOutputStream(path);
   }
 
   @Test
-  public void testNewOutputStream_createNew() throws Exception {
+  public void testNewOutputStream_createNew() throws IOException {
     Path path = Paths.get(URI.create("gs://cry/wednesday"));
     Files.newOutputStream(path, CREATE_NEW);
   }
 
   @Test
-  public void testNewOutputStream_createNew_alreadyExists() throws Exception {
+  public void testNewOutputStream_createNew_alreadyExists() throws IOException {
     Path path = Paths.get(URI.create("gs://cry/wednesday"));
     Files.write(path, SINGULARITY.getBytes(UTF_8));
     thrown.expect(FileAlreadyExistsException.class);
@@ -281,14 +282,14 @@ public void testNewOutputStream_createNew_alreadyExists() throws Exception {
   }
 
   @Test
-  public void testWrite_objectNameWithExtraSlashes_throwsIae() throws Exception {
+  public void testWrite_objectNameWithExtraSlashes_throwsIae() throws IOException {
     Path path = Paths.get(URI.create("gs://double/slash//yep"));
     thrown.expect(IllegalArgumentException.class);
     Files.write(path, FILE_CONTENTS, UTF_8);
   }
 
   @Test
-  public void testWrite_objectNameWithExtraSlashes_canBeNormalized() throws Exception {
+  public void testWrite_objectNameWithExtraSlashes_canBeNormalized() throws IOException {
     try (CloudStorageFileSystem fs = forBucket("greenbean", permitEmptyPathComponents(false))) {
       Path path = fs.getPath("adipose//yep").normalize();
       Files.write(path, FILE_CONTENTS, UTF_8);
@@ -298,7 +299,7 @@ public void testWrite_objectNameWithExtraSlashes_canBeNormalized() throws Except
   }
 
   @Test
-  public void testWrite_objectNameWithExtraSlashes_permitEmptyPathComponents() throws Exception {
+  public void testWrite_objectNameWithExtraSlashes_permitEmptyPathComponents() throws IOException {
     try (CloudStorageFileSystem fs = forBucket("greenbean", permitEmptyPathComponents(true))) {
       Path path = fs.getPath("adipose//yep");
       Files.write(path, FILE_CONTENTS, UTF_8);
@@ -308,7 +309,7 @@ public void testWrite_objectNameWithExtraSlashes_permitEmptyPathComponents() thr
   }
 
   @Test
-  public void testWrite_absoluteObjectName_prefixSlashGetsRemoved() throws Exception {
+  public void testWrite_absoluteObjectName_prefixSlashGetsRemoved() throws IOException {
     Path path = Paths.get(URI.create("gs://greenbean/adipose/yep"));
     Files.write(path, FILE_CONTENTS, UTF_8);
     assertThat(Files.readAllLines(path, UTF_8)).isEqualTo(FILE_CONTENTS);
@@ -316,7 +317,7 @@ public void testWrite_absoluteObjectName_prefixSlashGetsRemoved() throws Excepti
   }
 
   @Test
-  public void testWrite_absoluteObjectName_disableStrip_slashGetsPreserved() throws Exception {
+  public void testWrite_absoluteObjectName_disableStrip_slashGetsPreserved() throws IOException {
     try (CloudStorageFileSystem fs =
             forBucket(
                 "greenbean", CloudStorageConfiguration.builder().stripPrefixSlash(false).build())) {
@@ -328,14 +329,14 @@ public void testWrite_absoluteObjectName_disableStrip_slashGetsPreserved() throw
   }
 
   @Test
-  public void testWrite() throws Exception {
+  public void testWrite() throws IOException {
     Path path = Paths.get(URI.create("gs://greenbean/adipose"));
     Files.write(path, FILE_CONTENTS, UTF_8);
     assertThat(Files.readAllLines(path, UTF_8)).isEqualTo(FILE_CONTENTS);
   }
 
   @Test
-  public void testWriteOnClose() throws Exception {
+  public void testWriteOnClose() throws IOException {
     Path path = Paths.get(URI.create("gs://greenbean/adipose"));
     try (SeekableByteChannel chan = Files.newByteChannel(path, StandardOpenOption.WRITE)) {
       // writing lots of contents to defeat channel-internal buffering.
@@ -359,34 +360,34 @@ public void testWriteOnClose() throws Exception {
   }
 
   @Test
-  public void testWrite_trailingSlash() throws Exception {
+  public void testWrite_trailingSlash() throws IOException {
     thrown.expect(CloudStoragePseudoDirectoryException.class);
     Files.write(Paths.get(URI.create("gs://greenbean/adipose/")), FILE_CONTENTS, UTF_8);
   }
 
   @Test
-  public void testExists() throws Exception {
+  public void testExists() throws IOException {
     assertThat(Files.exists(Paths.get(URI.create("gs://military/fashion")))).isFalse();
     Files.write(Paths.get(URI.create("gs://military/fashion")), "(✿◕ ‿◕ )ノ".getBytes(UTF_8));
     assertThat(Files.exists(Paths.get(URI.create("gs://military/fashion")))).isTrue();
   }
 
   @Test
-  public void testExists_trailingSlash() throws Exception {
+  public void testExists_trailingSlash() {
     assertThat(Files.exists(Paths.get(URI.create("gs://military/fashion/")))).isTrue();
     assertThat(Files.exists(Paths.get(URI.create("gs://military/fashion/.")))).isTrue();
     assertThat(Files.exists(Paths.get(URI.create("gs://military/fashion/..")))).isTrue();
   }
 
   @Test
-  public void testExists_trailingSlash_disablePseudoDirectories() throws Exception {
+  public void testExists_trailingSlash_disablePseudoDirectories() {
     try (CloudStorageFileSystem fs = forBucket("military", usePseudoDirectories(false))) {
       assertThat(Files.exists(fs.getPath("fashion/"))).isFalse();
     }
   }
 
   @Test
-  public void testDelete() throws Exception {
+  public void testDelete() throws IOException {
     Files.write(Paths.get(URI.create("gs://love/fashion")), "(✿◕ ‿◕ )ノ".getBytes(UTF_8));
     assertThat(Files.exists(Paths.get(URI.create("gs://love/fashion")))).isTrue();
     Files.delete(Paths.get(URI.create("gs://love/fashion")));
@@ -394,19 +395,19 @@ public void testDelete() throws Exception {
   }
 
   @Test
-  public void testDelete_dotDirNotNormalized_throwsIae() throws Exception {
+  public void testDelete_dotDirNotNormalized_throwsIae() throws IOException {
     thrown.expect(IllegalArgumentException.class);
     Files.delete(Paths.get(URI.create("gs://love/fly/../passion")));
   }
 
   @Test
-  public void testDelete_trailingSlash() throws Exception {
+  public void testDelete_trailingSlash() throws IOException {
     thrown.expect(CloudStoragePseudoDirectoryException.class);
     Files.delete(Paths.get(URI.create("gs://love/passion/")));
   }
 
   @Test
-  public void testDelete_trailingSlash_disablePseudoDirectories() throws Exception {
+  public void testDelete_trailingSlash_disablePseudoDirectories() throws IOException {
     try (CloudStorageFileSystem fs = forBucket("pumpkin", usePseudoDirectories(false))) {
       Path path = fs.getPath("wat/");
       Files.write(path, FILE_CONTENTS, UTF_8);
@@ -417,25 +418,25 @@ public void testDelete_trailingSlash_disablePseudoDirectories() throws Exception
   }
 
   @Test
-  public void testDelete_notFound() throws Exception {
+  public void testDelete_notFound() throws IOException {
     thrown.expect(NoSuchFileException.class);
     Files.delete(Paths.get(URI.create("gs://loveh/passionehu")));
   }
 
   @Test
-  public void testDeleteIfExists() throws Exception {
+  public void testDeleteIfExists() throws IOException {
     Files.write(Paths.get(URI.create("gs://love/passionz")), "(✿◕ ‿◕ )ノ".getBytes(UTF_8));
     assertThat(Files.deleteIfExists(Paths.get(URI.create("gs://love/passionz")))).isTrue();
   }
 
   @Test
-  public void testDeleteIfExists_trailingSlash() throws Exception {
+  public void testDeleteIfExists_trailingSlash() throws IOException {
     thrown.expect(CloudStoragePseudoDirectoryException.class);
     Files.deleteIfExists(Paths.get(URI.create("gs://love/passion/")));
   }
 
   @Test
-  public void testCopy() throws Exception {
+  public void testCopy() throws IOException {
     Path source = Paths.get(URI.create("gs://military/fashion.show"));
     Path target = Paths.get(URI.create("gs://greenbean/adipose"));
     Files.write(source, "(✿◕ ‿◕ )ノ".getBytes(UTF_8));
@@ -446,7 +447,7 @@ public void testCopy() throws Exception {
   }
 
   @Test
-  public void testCopy_sourceMissing_throwsNoSuchFileException() throws Exception {
+  public void testCopy_sourceMissing_throwsNoSuchFileException() throws IOException {
     thrown.expect(NoSuchFileException.class);
     Files.copy(
         Paths.get(URI.create("gs://military/fashion.show")),
@@ -454,7 +455,7 @@ public void testCopy_sourceMissing_throwsNoSuchFileException() throws Exception
   }
 
   @Test
-  public void testCopy_targetExists_throwsFileAlreadyExistsException() throws Exception {
+  public void testCopy_targetExists_throwsFileAlreadyExistsException() throws IOException {
     Path source = Paths.get(URI.create("gs://military/fashion.show"));
     Path target = Paths.get(URI.create("gs://greenbean/adipose"));
     Files.write(source, "(✿◕ ‿◕ )ノ".getBytes(UTF_8));
@@ -464,7 +465,7 @@ public void testCopy_targetExists_throwsFileAlreadyExistsException() throws Exce
   }
 
   @Test
-  public void testCopyReplace_targetExists_works() throws Exception {
+  public void testCopyReplace_targetExists_works() throws IOException {
     Path source = Paths.get(URI.create("gs://military/fashion.show"));
     Path target = Paths.get(URI.create("gs://greenbean/adipose"));
     Files.write(source, "(✿◕ ‿◕ )ノ".getBytes(UTF_8));
@@ -473,14 +474,14 @@ public void testCopyReplace_targetExists_works() throws Exception {
   }
 
   @Test
-  public void testCopy_directory_doesNothing() throws Exception {
+  public void testCopy_directory_doesNothing() throws IOException {
     Path source = Paths.get(URI.create("gs://military/fundir/"));
     Path target = Paths.get(URI.create("gs://greenbean/loldir/"));
     Files.copy(source, target);
   }
 
   @Test
-  public void testCopy_atomic_throwsUnsupported() throws Exception {
+  public void testCopy_atomic_throwsUnsupported() throws IOException {
     Path source = Paths.get(URI.create("gs://military/fashion.show"));
     Path target = Paths.get(URI.create("gs://greenbean/adipose"));
     Files.write(source, "(✿◕ ‿◕ )ノ".getBytes(UTF_8));
@@ -489,7 +490,7 @@ public void testCopy_atomic_throwsUnsupported() throws Exception {
   }
 
   @Test
-  public void testMove() throws Exception {
+  public void testMove() throws IOException {
     Path source = Paths.get(URI.create("gs://military/fashion.show"));
     Path target = Paths.get(URI.create("gs://greenbean/adipose"));
     Files.write(source, "(✿◕ ‿◕ )ノ".getBytes(UTF_8));
@@ -500,14 +501,14 @@ public void testMove() throws Exception {
   }
 
   @Test
-  public void testCreateDirectory() throws Exception {
+  public void testCreateDirectory() throws IOException {
     Path path = Paths.get(URI.create("gs://greenbean/dir/"));
     Files.createDirectory(path);
     assertThat(Files.exists(path)).isTrue();
   }
 
   @Test
-  public void testMove_atomicMove_notSupported() throws Exception {
+  public void testMove_atomicMove_notSupported() throws IOException {
     Path source = Paths.get(URI.create("gs://military/fashion.show"));
     Path target = Paths.get(URI.create("gs://greenbean/adipose"));
     Files.write(source, "(✿◕ ‿◕ )ノ".getBytes(UTF_8));
@@ -516,7 +517,7 @@ public void testMove_atomicMove_notSupported() throws Exception {
   }
 
   @Test
-  public void testIsDirectory() throws Exception {
+  public void testIsDirectory() throws IOException {
     try (FileSystem fs = FileSystems.getFileSystem(URI.create("gs://doodle"))) {
       assertThat(Files.isDirectory(fs.getPath(""))).isTrue();
       assertThat(Files.isDirectory(fs.getPath("/"))).isTrue();
@@ -530,19 +531,19 @@ public void testIsDirectory() throws Exception {
   }
 
   @Test
-  public void testIsDirectory_trailingSlash_alwaysTrue() throws Exception {
+  public void testIsDirectory_trailingSlash_alwaysTrue() {
     assertThat(Files.isDirectory(Paths.get(URI.create("gs://military/fundir/")))).isTrue();
   }
 
   @Test
-  public void testIsDirectory_trailingSlash_pseudoDirectoriesDisabled_false() throws Exception {
+  public void testIsDirectory_trailingSlash_pseudoDirectoriesDisabled_false() {
     try (CloudStorageFileSystem fs = forBucket("doodle", usePseudoDirectories(false))) {
       assertThat(Files.isDirectory(fs.getPath("fundir/"))).isFalse();
     }
   }
 
   @Test
-  public void testCopy_withCopyAttributes_preservesAttributes() throws Exception {
+  public void testCopy_withCopyAttributes_preservesAttributes() throws IOException {
     Path source = Paths.get(URI.create("gs://military/fashion.show"));
     Path target = Paths.get(URI.create("gs://greenbean/adipose"));
     Files.write(
@@ -566,7 +567,7 @@ public void testCopy_withCopyAttributes_preservesAttributes() throws Exception {
   }
 
   @Test
-  public void testCopy_withoutOptions_doesntPreservesAttributes() throws Exception {
+  public void testCopy_withoutOptions_doesntPreservesAttributes() throws IOException {
     Path source = Paths.get(URI.create("gs://military/fashion.show"));
     Path target = Paths.get(URI.create("gs://greenbean/adipose"));
     Files.write(
@@ -587,7 +588,7 @@ public void testCopy_withoutOptions_doesntPreservesAttributes() throws Exception
   }
 
   @Test
-  public void testCopy_overwriteAttributes() throws Exception {
+  public void testCopy_overwriteAttributes() throws IOException {
     Path source = Paths.get(URI.create("gs://military/fashion.show"));
     Path target1 = Paths.get(URI.create("gs://greenbean/adipose"));
     Path target2 = Paths.get(URI.create("gs://greenbean/round"));
@@ -610,14 +611,14 @@ public void testCopy_overwriteAttributes() throws Exception {
   }
 
   @Test
-  public void testNullness() throws Exception {
+  public void testNullness() throws IOException, NoSuchMethodException, SecurityException {
     try (FileSystem fs = FileSystems.getFileSystem(URI.create("gs://blood"))) {
-      NullPointerTester tester =
-          new NullPointerTester()
-              .setDefault(URI.class, URI.create("gs://blood"))
-              .setDefault(Path.class, fs.getPath("and/one"))
-              .setDefault(OpenOption.class, StandardOpenOption.CREATE)
-              .setDefault(CopyOption.class, StandardCopyOption.COPY_ATTRIBUTES);
+      NullPointerTester tester = new NullPointerTester();
+      tester.ignore(CloudStorageFileSystemProvider.class.getMethod("equals", Object.class));
+      tester.setDefault(URI.class, URI.create("gs://blood"));
+      tester.setDefault(Path.class, fs.getPath("and/one"));
+      tester.setDefault(OpenOption.class, StandardOpenOption.CREATE);
+      tester.setDefault(CopyOption.class, StandardCopyOption.COPY_ATTRIBUTES);
       // can't do that, setGCloudOptions accepts a null argument.
       // TODO(jart): Figure out how to re-enable this.
       // tester.testAllPublicStaticMethods(CloudStorageFileSystemProvider.class);
@@ -626,7 +627,7 @@ public void testNullness() throws Exception {
   }
 
   @Test
-  public void testProviderEquals() throws Exception {
+  public void testProviderEquals() {
     Path path1 = Paths.get(URI.create("gs://bucket/tuesday"));
     Path path2 = Paths.get(URI.create("gs://blood/wednesday"));
     Path path3 = Paths.get("tmp");
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystemTest.java b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystemTest.java
index 0e019870c07d..3ef113e14744 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystemTest.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageFileSystemTest.java
@@ -12,6 +12,7 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import java.io.IOException;
 import java.net.URI;
 import java.nio.file.FileSystem;
 import java.nio.file.FileSystems;
@@ -40,7 +41,7 @@ public void before() {
   }
 
   @Test
-  public void testGetPath() throws Exception {
+  public void testGetPath() throws IOException {
     try (FileSystem fs = CloudStorageFileSystem.forBucket("bucket")) {
       assertThat(fs.getPath("/angel").toString()).isEqualTo("/angel");
       assertThat(fs.getPath("/angel").toUri().toString()).isEqualTo("gs://bucket/angel");
@@ -48,7 +49,7 @@ public void testGetPath() throws Exception {
   }
 
   @Test
-  public void testWrite() throws Exception {
+  public void testWrite() throws IOException {
     try (FileSystem fs = CloudStorageFileSystem.forBucket("bucket")) {
       Files.write(fs.getPath("/angel"), ALONE.getBytes(UTF_8));
     }
@@ -57,7 +58,7 @@ public void testWrite() throws Exception {
   }
 
   @Test
-  public void testRead() throws Exception {
+  public void testRead() throws IOException {
     Files.write(Paths.get(URI.create("gs://bucket/angel")), ALONE.getBytes(UTF_8));
     try (FileSystem fs = CloudStorageFileSystem.forBucket("bucket")) {
       assertThat(new String(Files.readAllBytes(fs.getPath("/angel")), UTF_8)).isEqualTo(ALONE);
@@ -65,14 +66,14 @@ public void testRead() throws Exception {
   }
 
   @Test
-  public void testExists_false() throws Exception {
+  public void testExists_false() throws IOException {
     try (FileSystem fs = FileSystems.getFileSystem(URI.create("gs://bucket"))) {
       assertThat(Files.exists(fs.getPath("/angel"))).isFalse();
     }
   }
 
   @Test
-  public void testExists_true() throws Exception {
+  public void testExists_true() throws IOException {
     Files.write(Paths.get(URI.create("gs://bucket/angel")), ALONE.getBytes(UTF_8));
     try (FileSystem fs = CloudStorageFileSystem.forBucket("bucket")) {
       assertThat(Files.exists(fs.getPath("/angel"))).isTrue();
@@ -80,7 +81,7 @@ public void testExists_true() throws Exception {
   }
 
   @Test
-  public void testGetters() throws Exception {
+  public void testGetters() throws IOException {
     try (FileSystem fs = CloudStorageFileSystem.forBucket("bucket")) {
       assertThat(fs.isOpen()).isTrue();
       assertThat(fs.isReadOnly()).isFalse();
@@ -92,7 +93,7 @@ public void testGetters() throws Exception {
   }
 
   @Test
-  public void testEquals() throws Exception {
+  public void testEquals() throws IOException {
     try (FileSystem bucket1 = CloudStorageFileSystem.forBucket("bucket");
         FileSystem bucket2 = FileSystems.getFileSystem(URI.create("gs://bucket"));
         FileSystem doge1 = CloudStorageFileSystem.forBucket("doge");
@@ -105,10 +106,11 @@ public void testEquals() throws Exception {
   }
 
   @Test
-  public void testNullness() throws Exception {
+  public void testNullness() throws IOException, NoSuchMethodException, SecurityException {
     try (FileSystem fs = FileSystems.getFileSystem(URI.create("gs://bucket"))) {
       NullPointerTester tester =
           new NullPointerTester()
+              .ignore(CloudStorageFileSystem.class.getMethod("equals", Object.class))
               .setDefault(CloudStorageConfiguration.class, CloudStorageConfiguration.DEFAULT);
       tester.testAllPublicStaticMethods(CloudStorageFileSystem.class);
       tester.testAllPublicInstanceMethods(fs);
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageOptionsTest.java b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageOptionsTest.java
index 5059eaa7e973..e852d4035a1a 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageOptionsTest.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageOptionsTest.java
@@ -19,6 +19,7 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import java.io.IOException;
 import java.net.URI;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -36,7 +37,7 @@ public void before() {
   }
 
   @Test
-  public void testWithoutCaching() throws Exception {
+  public void testWithoutCaching() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/path"));
     Files.write(path, "(✿◕ ‿◕ )ノ".getBytes(UTF_8), withoutCaching());
     assertThat(Files.readAttributes(path, CloudStorageFileAttributes.class).cacheControl().get())
@@ -44,7 +45,7 @@ public void testWithoutCaching() throws Exception {
   }
 
   @Test
-  public void testCacheControl() throws Exception {
+  public void testCacheControl() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/path"));
     Files.write(path, "(✿◕ ‿◕ )ノ".getBytes(UTF_8), withCacheControl("potato"));
     assertThat(Files.readAttributes(path, CloudStorageFileAttributes.class).cacheControl().get())
@@ -52,7 +53,7 @@ public void testCacheControl() throws Exception {
   }
 
   @Test
-  public void testWithAcl() throws Exception {
+  public void testWithAcl() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/path"));
     Acl acl = Acl.of(new Acl.User("king@example.com"), Acl.Role.OWNER);
     Files.write(path, "(✿◕ ‿◕ )ノ".getBytes(UTF_8), withAcl(acl));
@@ -61,7 +62,7 @@ public void testWithAcl() throws Exception {
   }
 
   @Test
-  public void testWithContentDisposition() throws Exception {
+  public void testWithContentDisposition() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/path"));
     Files.write(path, "(✿◕ ‿◕ )ノ".getBytes(UTF_8), withContentDisposition("bubbly fun"));
     assertThat(
@@ -70,7 +71,7 @@ public void testWithContentDisposition() throws Exception {
   }
 
   @Test
-  public void testWithContentEncoding() throws Exception {
+  public void testWithContentEncoding() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/path"));
     Files.write(path, "(✿◕ ‿◕ )ノ".getBytes(UTF_8), withContentEncoding("gzip"));
     assertThat(Files.readAttributes(path, CloudStorageFileAttributes.class).contentEncoding().get())
@@ -78,7 +79,7 @@ public void testWithContentEncoding() throws Exception {
   }
 
   @Test
-  public void testWithUserMetadata() throws Exception {
+  public void testWithUserMetadata() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/path"));
     Files.write(
         path,
@@ -96,7 +97,7 @@ public void testWithUserMetadata() throws Exception {
   }
 
   @Test
-  public void testWithMimeType_string() throws Exception {
+  public void testWithMimeType_string() throws IOException {
     Path path = Paths.get(URI.create("gs://bucket/path"));
     Files.write(path, "(✿◕ ‿◕ )ノ".getBytes(UTF_8), withMimeType("text/plain"));
     assertThat(Files.readAttributes(path, CloudStorageFileAttributes.class).mimeType().get())
@@ -104,7 +105,7 @@ public void testWithMimeType_string() throws Exception {
   }
 
   @Test
-  public void testNullness() throws Exception {
+  public void testNullness() {
     NullPointerTester tester = new NullPointerTester();
     tester.testAllPublicStaticMethods(CloudStorageOptions.class);
   }
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStoragePathTest.java b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStoragePathTest.java
index d8e964fbb11a..cc169c0929e1 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStoragePathTest.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStoragePathTest.java
@@ -15,11 +15,11 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import java.io.IOException;
 import java.net.URI;
 import java.nio.file.FileSystem;
 import java.nio.file.FileSystems;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.nio.file.ProviderMismatchException;
 
 /**
@@ -269,7 +269,6 @@ public void testNormalize_preserveTrailingSlash() {
   }
 
   @Test
-  @SuppressWarnings("null")
   public void testGetParent_preserveTrailingSlash() {
     try (CloudStorageFileSystem fs = forBucket("doodle")) {
       assertThat(fs.getPath("a/b/c").getParent().toString()).isEqualTo("a/b/");
@@ -282,7 +281,6 @@ public void testGetParent_preserveTrailingSlash() {
   }
 
   @Test
-  @SuppressWarnings("null")
   public void testGetRoot() {
     try (CloudStorageFileSystem fs = forBucket("doodle")) {
       assertThat(fs.getPath("/hello").getRoot().toString()).isEqualTo("/");
@@ -300,19 +298,21 @@ public void testRelativize() {
   }
 
   @Test
-  public void testRelativize_providerMismatch() {
-    try (CloudStorageFileSystem fs = forBucket("doodle")) {
+  public void testRelativize_providerMismatch() throws IOException {
+    try (CloudStorageFileSystem gcs = forBucket("doodle");
+        FileSystem local = FileSystems.getDefault()) {
       thrown.expect(ProviderMismatchException.class);
-      fs.getPath("/etc").relativize(Paths.get("/dog"));
+      gcs.getPath("/etc").relativize(local.getPath("/dog"));
     }
   }
 
   @Test
   @SuppressWarnings("ReturnValueIgnored") // testing that an Exception is thrown
-  public void testRelativize_providerMismatch2() {
-    try (CloudStorageFileSystem fs = forBucket("doodle")) {
+  public void testRelativize_providerMismatch2() throws IOException {
+    try (CloudStorageFileSystem gcs = forBucket("doodle");
+        FileSystem local = FileSystems.getDefault()) {
       thrown.expect(ProviderMismatchException.class);
-      Paths.get("/dog").relativize(fs.getPath("/etc"));
+      gcs.getPath("/dog").relativize(local.getPath("/etc"));
     }
   }
 
@@ -325,10 +325,11 @@ public void testResolve() {
   }
 
   @Test
-  public void testResolve_providerMismatch() {
-    try (CloudStorageFileSystem fs = forBucket("doodle")) {
+  public void testResolve_providerMismatch() throws IOException {
+    try (CloudStorageFileSystem gcs = forBucket("doodle");
+        FileSystem local = FileSystems.getDefault()) {
       thrown.expect(ProviderMismatchException.class);
-      fs.getPath("etc").resolve(Paths.get("/dog"));
+      gcs.getPath("etc").resolve(local.getPath("/dog"));
     }
   }
 
@@ -356,7 +357,6 @@ public void testToAbsolutePath_withWorkingDirectory() {
   }
 
   @Test
-  @SuppressWarnings("null")
   public void testGetFileName() {
     try (CloudStorageFileSystem fs = forBucket("doodle")) {
       assertThat(fs.getPath("/hi/there").getFileName().toString()).isEqualTo("there");
@@ -402,10 +402,9 @@ public void testEndsWith() {
     }
   }
 
-  /** @see "http://stackoverflow.com/a/10068306".
-   */
   @Test
-  public void testResolve_willWorkWithRecursiveCopy() throws Exception {
+  public void testResolve_willWorkWithRecursiveCopy() throws IOException {
+    // See: http://stackoverflow.com/a/10068306
     try (FileSystem fsSource = FileSystems.getFileSystem(URI.create("gs://hello"));
         FileSystem fsTarget = FileSystems.getFileSystem(URI.create("gs://cat"))) {
       Path targetPath = fsTarget.getPath("/some/folder/");
@@ -415,10 +414,9 @@ public void testResolve_willWorkWithRecursiveCopy() throws Exception {
     }
   }
 
-  /** @see "http://stackoverflow.com/a/10068306".
-   */
   @Test
-  public void testRelativize_willWorkWithRecursiveCopy() throws Exception {
+  public void testRelativize_willWorkWithRecursiveCopy() throws IOException {
+    // See: http://stackoverflow.com/a/10068306
     try (FileSystem fsSource = FileSystems.getFileSystem(URI.create("gs://hello"));
         FileSystem fsTarget = FileSystems.getFileSystem(URI.create("gs://cat"))) {
       Path targetPath = fsTarget.getPath("/some/folder/");
@@ -465,9 +463,11 @@ public void testEquals_currentDirectoryIsTakenIntoConsideration() {
   }
 
   @Test
-  public void testNullness() {
+  public void testNullness() throws NoSuchMethodException, SecurityException {
     try (CloudStorageFileSystem fs = forBucket("doodle")) {
-      NullPointerTester tester = new NullPointerTester().setDefault(Path.class, fs.getPath("sup"));
+      NullPointerTester tester = new NullPointerTester();
+      tester.ignore(CloudStoragePath.class.getMethod("equals", Object.class));
+      tester.setDefault(Path.class, fs.getPath("sup"));
       tester.testAllPublicStaticMethods(CloudStoragePath.class);
       tester.testAllPublicInstanceMethods(fs.getPath("sup"));
     }
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageReadChannelTest.java b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageReadChannelTest.java
index 49df66ef71eb..c2c7d50aa68c 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageReadChannelTest.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageReadChannelTest.java
@@ -22,6 +22,7 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.channels.ClosedChannelException;
 import java.nio.channels.NonWritableChannelException;
@@ -42,7 +43,7 @@ public class CloudStorageReadChannelTest {
   private final ReadChannel gcsChannel = mock(ReadChannel.class);
 
   @Before
-  public void before() throws Exception {
+  public void before() throws IOException {
     when(gcsStorage.get(file)).thenReturn(metadata);
     when(gcsStorage.reader(eq(file))).thenReturn(gcsChannel);
     when(gcsChannel.isOpen()).thenReturn(true);
@@ -52,7 +53,7 @@ public void before() throws Exception {
   }
 
   @Test
-  public void testRead() throws Exception {
+  public void testRead() throws IOException {
     ByteBuffer buffer = ByteBuffer.allocate(1);
     when(gcsChannel.read(eq(buffer))).thenReturn(1);
     assertThat(chan.position()).isEqualTo(0L);
@@ -64,26 +65,26 @@ public void testRead() throws Exception {
   }
 
   @Test
-  public void testRead_whenClosed_throwsCce() throws Exception {
+  public void testRead_whenClosed_throwsCce() throws IOException {
     when(gcsChannel.isOpen()).thenReturn(false);
     thrown.expect(ClosedChannelException.class);
     chan.read(ByteBuffer.allocate(1));
   }
 
   @Test
-  public void testWrite_throwsNonWritableChannelException() throws Exception {
+  public void testWrite_throwsNonWritableChannelException() throws IOException {
     thrown.expect(NonWritableChannelException.class);
     chan.write(ByteBuffer.allocate(1));
   }
 
   @Test
-  public void testTruncate_throwsNonWritableChannelException() throws Exception {
+  public void testTruncate_throwsNonWritableChannelException() throws IOException {
     thrown.expect(NonWritableChannelException.class);
     chan.truncate(0);
   }
 
   @Test
-  public void testIsOpen() throws Exception {
+  public void testIsOpen() throws IOException {
     when(gcsChannel.isOpen()).thenReturn(true).thenReturn(false);
     assertThat(chan.isOpen()).isTrue();
     chan.close();
@@ -94,7 +95,7 @@ public void testIsOpen() throws Exception {
   }
 
   @Test
-  public void testSize() throws Exception {
+  public void testSize() throws IOException {
     assertThat(chan.size()).isEqualTo(42L);
     verify(gcsChannel).isOpen();
     verifyZeroInteractions(gcsChannel);
@@ -102,35 +103,35 @@ public void testSize() throws Exception {
   }
 
   @Test
-  public void testSize_whenClosed_throwsCce() throws Exception {
+  public void testSize_whenClosed_throwsCce() throws IOException {
     when(gcsChannel.isOpen()).thenReturn(false);
     thrown.expect(ClosedChannelException.class);
     chan.size();
   }
 
   @Test
-  public void testPosition_whenClosed_throwsCce() throws Exception {
+  public void testPosition_whenClosed_throwsCce() throws IOException {
     when(gcsChannel.isOpen()).thenReturn(false);
     thrown.expect(ClosedChannelException.class);
     chan.position();
   }
 
   @Test
-  public void testSetPosition_whenClosed_throwsCce() throws Exception {
+  public void testSetPosition_whenClosed_throwsCce() throws IOException {
     when(gcsChannel.isOpen()).thenReturn(false);
     thrown.expect(ClosedChannelException.class);
     chan.position(0);
   }
 
   @Test
-  public void testClose_calledMultipleTimes_doesntThrowAnError() throws Exception {
+  public void testClose_calledMultipleTimes_doesntThrowAnError() throws IOException {
     chan.close();
     chan.close();
     chan.close();
   }
 
   @Test
-  public void testSetPosition() throws Exception {
+  public void testSetPosition() throws IOException {
     assertThat(chan.position()).isEqualTo(0L);
     assertThat(chan.size()).isEqualTo(42L);
     chan.position(1L);
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageWriteChannelTest.java b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageWriteChannelTest.java
index 837886a2e649..60f7d7febd0a 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageWriteChannelTest.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/CloudStorageWriteChannelTest.java
@@ -19,6 +19,7 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.channels.ClosedChannelException;
 import java.nio.channels.NonReadableChannelException;
@@ -40,13 +41,13 @@ public void before() {
   }
 
   @Test
-  public void testRead_throwsNonReadableChannelException() throws Exception {
+  public void testRead_throwsNonReadableChannelException() throws IOException {
     thrown.expect(NonReadableChannelException.class);
     chan.read(ByteBuffer.allocate(1));
   }
 
   @Test
-  public void testWrite() throws Exception {
+  public void testWrite() throws IOException {
     ByteBuffer buffer = ByteBuffer.allocate(1);
     buffer.put((byte) 'B');
     assertThat(chan.position()).isEqualTo(0L);
@@ -61,14 +62,14 @@ public void testWrite() throws Exception {
   }
 
   @Test
-  public void testWrite_whenClosed_throwsCce() throws Exception {
+  public void testWrite_whenClosed_throwsCce() throws IOException {
     when(gcsChannel.isOpen()).thenReturn(false);
     thrown.expect(ClosedChannelException.class);
     chan.write(ByteBuffer.allocate(1));
   }
 
   @Test
-  public void testIsOpen() throws Exception {
+  public void testIsOpen() throws IOException {
     when(gcsChannel.isOpen()).thenReturn(true).thenReturn(false);
     assertThat(chan.isOpen()).isTrue();
     chan.close();
@@ -79,28 +80,28 @@ public void testIsOpen() throws Exception {
   }
 
   @Test
-  public void testSize() throws Exception {
+  public void testSize() throws IOException {
     assertThat(chan.size()).isEqualTo(0L);
     verify(gcsChannel).isOpen();
     verifyZeroInteractions(gcsChannel);
   }
 
   @Test
-  public void testSize_whenClosed_throwsCce() throws Exception {
+  public void testSize_whenClosed_throwsCce() throws IOException {
     when(gcsChannel.isOpen()).thenReturn(false);
     thrown.expect(ClosedChannelException.class);
     chan.size();
   }
 
   @Test
-  public void testPosition_whenClosed_throwsCce() throws Exception {
+  public void testPosition_whenClosed_throwsCce() throws IOException {
     when(gcsChannel.isOpen()).thenReturn(false);
     thrown.expect(ClosedChannelException.class);
     chan.position();
   }
 
   @Test
-  public void testClose_calledMultipleTimes_doesntThrowAnError() throws Exception {
+  public void testClose_calledMultipleTimes_doesntThrowAnError() throws IOException {
     chan.close();
     chan.close();
     chan.close();
diff --git a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/UnixPathTest.java b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/UnixPathTest.java
index 8fc76455935a..4d6ee16a8c7f 100644
--- a/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/UnixPathTest.java
+++ b/gcloud-java-contrib/gcloud-java-nio/src/test/java/com/google/gcloud/storage/contrib/nio/UnixPathTest.java
@@ -360,7 +360,7 @@ public void testSeemsLikeADirectory() {
   }
 
   @Test
-  public void testEquals_equalsTester() throws Exception {
+  public void testEquals_equalsTester() {
     new EqualsTester()
         .addEqualityGroup(p("/lol"), p("/lol"))
         .addEqualityGroup(p("/lol//"), p("/lol//"))
@@ -369,8 +369,9 @@ public void testEquals_equalsTester() throws Exception {
   }
 
   @Test
-  public void testNullness() {
+  public void testNullness() throws Exception {
     NullPointerTester tester = new NullPointerTester();
+    tester.ignore(UnixPath.class.getMethod("equals", Object.class));
     tester.testAllPublicStaticMethods(UnixPath.class);
     tester.testAllPublicInstanceMethods(p("solo"));
   }