diff --git a/src/test/java/com/google/devtools/build/android/desugar/nest/BUILD b/src/test/java/com/google/devtools/build/android/desugar/nest/BUILD
index ad89834..43f3eed 100644
--- a/src/test/java/com/google/devtools/build/android/desugar/nest/BUILD
+++ b/src/test/java/com/google/devtools/build/android/desugar/nest/BUILD
@@ -10,6 +10,35 @@
 licenses(["notice"])  # Apache 2.0
 
 java_test(
+    name = "ClassFileFormatTest",
+    size = "medium",
+    srcs = ["ClassFileFormatTest.java"],
+    data = [
+        "//src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/simpleunit/classfileformat",
+        "//src/tools/android/java/com/google/devtools/build/android/desugar/testing/junit:android_jar_for_testing",
+        "//src/tools/android/java/com/google/devtools/build/android/desugar/testing/junit:jacoco_agent_jar",
+    ],
+    jvm_flags = [
+        "-Dinput_srcs='$(locations //src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/simpleunit/classfileformat)'",
+        "-Djdk.internal.lambda.dumpProxyClasses=$$(mktemp -d)",
+        "-Dandroid_runtime_jar=$(location //src/tools/android/java/com/google/devtools/build/android/desugar/testing/junit:android_jar_for_testing)",
+        "-Djacoco_agent_jar=$(location //src/tools/android/java/com/google/devtools/build/android/desugar/testing/junit:jacoco_agent_jar)",
+    ],
+    test_class = "com.google.devtools.build.android.desugar.nest.ClassFileFormatTest",
+    deps = [
+        "//src/tools/android/java/com/google/devtools/build/android/desugar/testing/junit:desugar_rule",
+        "//third_party:asm",
+        "//third_party:asm-tree",
+        "//third_party:guava",
+        "//third_party:guava-testlib",
+        "//third_party:jsr330_inject",
+        "//third_party:junit4",
+        "//third_party:truth",
+        "//third_party:truth8",
+    ],
+)
+
+java_test(
     name = "NestAnalyzerTest",
     size = "medium",
     srcs = ["NestAnalyzerTest.java"],
@@ -188,6 +217,7 @@
         "//src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/complexcase:srcs",
         "//src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/nestanalyzer:srcs",
         "//src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/simpleunit/constructor:srcs",
+        "//src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/simpleunit/classfileformat:srcs",
         "//src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/simpleunit/field:srcs",
         "//src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/simpleunit/interfacemethod:srcs",
         "//src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/simpleunit/method:srcs",
diff --git a/src/test/java/com/google/devtools/build/android/desugar/nest/ClassFileFormatTest.java b/src/test/java/com/google/devtools/build/android/desugar/nest/ClassFileFormatTest.java
new file mode 100644
index 0000000..07701c6
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/android/desugar/nest/ClassFileFormatTest.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2020 The Bazel Authors. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.devtools.build.android.desugar.nest;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.base.Splitter;
+import com.google.devtools.build.android.desugar.testing.junit.AsmNode;
+import com.google.devtools.build.android.desugar.testing.junit.DesugarRule;
+import com.google.devtools.build.android.desugar.testing.junit.DesugarRunner;
+import com.google.devtools.build.android.desugar.testing.junit.JdkSuppress;
+import com.google.devtools.build.android.desugar.testing.junit.JdkVersion;
+import java.lang.invoke.MethodHandles;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.objectweb.asm.tree.ClassNode;
+
+/**
+ * Tests for accessing a series of private fields, constructors and methods from another class
+ * within a nest.
+ */
+@RunWith(DesugarRunner.class)
+@JdkSuppress(minJdkVersion = JdkVersion.V11)
+public final class ClassFileFormatTest {
+
+  private static final MethodHandles.Lookup lookup = MethodHandles.lookup();
+
+  @Rule
+  @SuppressWarnings("SplitterToStream") // Pending bazel guava update.
+  public final DesugarRule desugarRule =
+      DesugarRule.builder(this, lookup)
+          .addSourceInputs(getInputSourceFilesFromJvmOption("input_srcs"))
+          .addJavacOptions("-source 11", "-target 11")
+          .setWorkingJavaPackage(
+              "com.google.devtools.build.android.desugar.nest.testsrc.simpleunit.classfileformat")
+          .addCommandOptions("desugar_nest_based_private_access", "true")
+          .build();
+
+  private static Path[] getInputSourceFilesFromJvmOption(String jvmOptionKey) {
+    return Splitter.on(" ").trimResults().splitToList(System.getProperty(jvmOptionKey)).stream()
+        .map(Paths::get)
+        .toArray(Path[]::new);
+  }
+
+  @Test
+  public void classFileMajorVersions(
+      @AsmNode(className = "NestOuterInterfaceA", round = 0) ClassNode beforeDesugarClassNode,
+      @AsmNode(className = "NestOuterInterfaceA", round = 1) ClassNode afterDesugarClassNode) {
+    assertThat(beforeDesugarClassNode.version).isEqualTo(JdkVersion.V11);
+    assertThat(afterDesugarClassNode.version).isEqualTo(JdkVersion.V1_7);
+  }
+
+  @Test
+  public void nestMembersAttribute_strippedOutAfterDesugaring(
+      @AsmNode(className = "NestOuterInterfaceA", round = 0) ClassNode before,
+      @AsmNode(className = "NestOuterInterfaceA", round = 1) ClassNode after) {
+    assertThat(before.nestMembers).isNotEmpty();
+    assertThat(after.nestMembers).isNull();
+  }
+
+  @Test
+  public void nestHostAttribute_strippedOutAfterDesugaringForNestedClass(
+      @AsmNode(className = "NestOuterInterfaceA$NestedClassB", round = 0) ClassNode before,
+      @AsmNode(className = "NestOuterInterfaceA$NestedClassB", round = 1) ClassNode after) {
+    assertThat(before.nestHostClass).isNotEmpty();
+    assertThat(after.nestHostClass).isNull();
+  }
+
+  @Test
+  public void nestHostAttribute_strippedOutAfterDesugaringForNestedInterface(
+      @AsmNode(className = "NestOuterInterfaceA$NestedInterfaceC", round = 0) ClassNode before,
+      @AsmNode(className = "NestOuterInterfaceA$NestedInterfaceC", round = 1) ClassNode after) {
+    assertThat(before.nestHostClass).isNotEmpty();
+    assertThat(after.nestHostClass).isNull();
+  }
+
+  @Test
+  public void nestHostAttribute_strippedOutAfterDesugaringForNestedAnnotation(
+      @AsmNode(className = "NestOuterInterfaceA$NestedAnnotationD", round = 0) ClassNode before,
+      @AsmNode(className = "NestOuterInterfaceA$NestedAnnotationD", round = 1) ClassNode after) {
+    assertThat(before.nestHostClass).isNotEmpty();
+    assertThat(after.nestHostClass).isNull();
+  }
+
+  @Test
+  public void nestHostAttribute_strippedOutAfterDesugaringForNestedEnum(
+      @AsmNode(className = "NestOuterInterfaceA$NestedEnumE", round = 0) ClassNode before,
+      @AsmNode(className = "NestOuterInterfaceA$NestedEnumE", round = 1) ClassNode after) {
+    assertThat(before.nestHostClass).isNotEmpty();
+    assertThat(after.nestHostClass).isNull();
+  }
+}
diff --git a/src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/simpleunit/classfileformat/BUILD b/src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/simpleunit/classfileformat/BUILD
new file mode 100644
index 0000000..5376b5b
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/simpleunit/classfileformat/BUILD
@@ -0,0 +1,17 @@
+package(
+    default_testonly = 1,
+    default_visibility = ["//src/test/java/com/google/devtools/build/android/desugar:__subpackages__"],
+)
+
+licenses(["notice"])  # Apache 2.0
+
+filegroup(
+    name = "classfileformat",
+    srcs = glob(["*.java"]),
+)
+
+filegroup(
+    name = "srcs",
+    testonly = 0,
+    srcs = glob(["*"]),
+)
diff --git a/src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/simpleunit/classfileformat/NestOuterInterfaceA.java b/src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/simpleunit/classfileformat/NestOuterInterfaceA.java
new file mode 100644
index 0000000..6c65169
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/android/desugar/nest/testsrc/simpleunit/classfileformat/NestOuterInterfaceA.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2020 The Bazel Authors. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.devtools.build.android.desugar.nest.testsrc.simpleunit.classfileformat;
+
+/** A nest for testing the attributes in class file format. */
+@SuppressWarnings("InterfaceWithOnlyStatics") // Contrived class for nest-access based testing.
+public interface NestOuterInterfaceA {
+
+  /** A nested class. */
+  class NestedClassB {}
+
+  /** A nested interface. */
+  interface NestedInterfaceC {}
+
+  /** A nested annotation. */
+  @interface NestedAnnotationD {}
+
+  /** A nested enum. */
+  enum NestedEnumE {}
+}
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java b/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java
index 0f3992b..9d8ef00 100644
--- a/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java
@@ -1061,7 +1061,7 @@
       }
     }
 
-    if (options.desugarNestBasedPrivateAccess && classMemberRecord.hasAnyReason()) {
+    if (options.desugarNestBasedPrivateAccess) {
       visitor = new NestDesugaring(visitor, nestCompanions, classMemberRecord);
     }
 
