Always stripped out nestHost/nestMembers attributes regardless member reference

#java11 #desugar

- Stripped out these Java8-unknown attribute to unconfuse tools.

PiperOrigin-RevId: 291277852
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);
     }