Revert "Adaptresources when using repackaging"

This reverts commit 0aedfb95ccc918a7feba5eabc12aaedb5ea2edbd.

Reason for revert: Build failed

Change-Id: Ibad9d6dd3fb14b7d72e6616ad1517ac13f2a61f1
diff --git a/src/main/java/com/android/tools/r8/dex/ResourceAdapter.java b/src/main/java/com/android/tools/r8/dex/ResourceAdapter.java
index 29987e7..84459b4 100644
--- a/src/main/java/com/android/tools/r8/dex/ResourceAdapter.java
+++ b/src/main/java/com/android/tools/r8/dex/ResourceAdapter.java
@@ -304,8 +304,7 @@
       if (getClassNameSeparator() != '/') {
         javaPackage = javaPackage.replace(getClassNameSeparator(), '/');
       }
-      String packageName = appView.graphLens().lookupPackageName(javaPackage);
-      String minifiedJavaPackage = namingLens.lookupPackageName(packageName);
+      String minifiedJavaPackage = namingLens.lookupPackageName(javaPackage);
       if (!javaPackage.equals(minifiedJavaPackage)) {
         outputRangeFromInput(outputFrom, from);
         outputJavaType(
diff --git a/src/main/java/com/android/tools/r8/graph/GraphLens.java b/src/main/java/com/android/tools/r8/graph/GraphLens.java
index 8e29bfc..c15db19 100644
--- a/src/main/java/com/android/tools/r8/graph/GraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/GraphLens.java
@@ -363,8 +363,6 @@
     return false;
   }
 
-  public abstract String lookupPackageName(String pkg);
-
   public abstract DexType lookupClassType(DexType type);
 
   public abstract DexType lookupType(DexType type);
@@ -699,11 +697,6 @@
     }
 
     @Override
-    public String lookupPackageName(String pkg) {
-      return pkg;
-    }
-
-    @Override
     public final DexType lookupType(DexType type) {
       if (type.isPrimitiveType() || type.isVoidType() || type.isNullValueType()) {
         return type;
@@ -820,11 +813,6 @@
     }
 
     @Override
-    public String lookupPackageName(String pkg) {
-      return pkg;
-    }
-
-    @Override
     public DexType lookupType(DexType type) {
       return type;
     }
diff --git a/src/main/java/com/android/tools/r8/repackaging/Repackaging.java b/src/main/java/com/android/tools/r8/repackaging/Repackaging.java
index eb8f41b..cdfa649 100644
--- a/src/main/java/com/android/tools/r8/repackaging/Repackaging.java
+++ b/src/main/java/com/android/tools/r8/repackaging/Repackaging.java
@@ -33,6 +33,7 @@
 import com.google.common.collect.HashBiMap;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
@@ -129,11 +130,11 @@
     }
 
     BiMap<DexType, DexType> mappings = HashBiMap.create();
-    BiMap<String, String> packageMappings = HashBiMap.create();
+    Set<String> seenPackageDescriptors = new HashSet<>();
     ProgramPackageCollection packages =
         SortedProgramPackageCollection.createWithAllProgramClasses(appView);
-    processPackagesInDesiredLocation(packages, mappings, packageMappings);
-    processRemainingPackages(packages, mappings, packageMappings, executorService);
+    processPackagesInDesiredLocation(packages, mappings, seenPackageDescriptors);
+    processRemainingPackages(packages, mappings, seenPackageDescriptors, executorService);
     mappings.entrySet().removeIf(entry -> entry.getKey() == entry.getValue());
     if (mappings.isEmpty()) {
       return null;
@@ -145,7 +146,7 @@
         new ArrayList<>(
             repackagingTreeFixer.fixupClasses(appView.appInfo().classesWithDeterministicOrder()));
     appBuilder.replaceProgramClasses(newProgramClasses);
-    RepackagingLens lens = lensBuilder.build(appView, packageMappings);
+    RepackagingLens lens = lensBuilder.build(appView);
     new AnnotationFixer(lens).run(appBuilder.getProgramClasses());
     return lens;
   }
@@ -190,14 +191,14 @@
   private void processPackagesInDesiredLocation(
       ProgramPackageCollection packages,
       BiMap<DexType, DexType> mappings,
-      BiMap<String, String> packageMappings) {
+      Set<String> seenPackageDescriptors) {
     // For each package that is already in the desired location, record all the classes from the
     // package in the mapping for collision detection.
     Iterator<ProgramPackage> iterator = packages.iterator();
     while (iterator.hasNext()) {
       ProgramPackage pkg = iterator.next();
       String newPackageDescriptor =
-          repackagingConfiguration.getNewPackageDescriptor(pkg, packageMappings.values());
+          repackagingConfiguration.getNewPackageDescriptor(pkg, seenPackageDescriptors);
       if (pkg.getPackageDescriptor().equals(newPackageDescriptor)) {
         for (DexProgramClass alreadyRepackagedClass : pkg) {
           if (!appView.appInfo().isRepackagingAllowed(alreadyRepackagedClass)) {
@@ -207,7 +208,7 @@
         for (DexProgramClass alreadyRepackagedClass : pkg) {
           processClass(alreadyRepackagedClass, pkg, newPackageDescriptor, mappings);
         }
-        packageMappings.put(pkg.getPackageDescriptor(), newPackageDescriptor);
+        seenPackageDescriptors.add(newPackageDescriptor);
         iterator.remove();
       }
     }
@@ -216,7 +217,7 @@
   private void processRemainingPackages(
       ProgramPackageCollection packages,
       BiMap<DexType, DexType> mappings,
-      BiMap<String, String> packageMappings,
+      Set<String> seenPackageDescriptors,
       ExecutorService executorService)
       throws ExecutionException {
     // For each package, find the set of classes that can be repackaged, and move them to the
@@ -224,22 +225,16 @@
     for (ProgramPackage pkg : packages) {
       // Already processed packages should have been removed.
       String newPackageDescriptor =
-          repackagingConfiguration.getNewPackageDescriptor(pkg, packageMappings.values());
+          repackagingConfiguration.getNewPackageDescriptor(pkg, seenPackageDescriptors);
       assert !pkg.getPackageDescriptor().equals(newPackageDescriptor);
 
-      Collection<DexProgramClass> classesToRepackage =
+      Iterable<DexProgramClass> classesToRepackage =
           computeClassesToRepackage(pkg, executorService);
       for (DexProgramClass classToRepackage : classesToRepackage) {
         processClass(classToRepackage, pkg, newPackageDescriptor, mappings);
       }
-      // Package remapping is used for adapting resources. If we cannot repackage all classes in
-      // a package then we put in the original descriptor to ensure that resources are not
-      // rewritten.
-      packageMappings.put(
-          pkg.getPackageDescriptor(),
-          classesToRepackage.size() == pkg.classesInPackage().size()
-              ? newPackageDescriptor
-              : pkg.getPackageDescriptor());
+
+      seenPackageDescriptors.add(newPackageDescriptor);
       // TODO(b/165783399): Investigate if repackaging can lead to different dynamic dispatch. See,
       //  for example, CrossPackageInvokeSuperToPackagePrivateMethodTest.
     }
@@ -274,24 +269,12 @@
             classToRepackage, outerClass, newPackageDescriptor, mappings));
   }
 
-  public static class ComputeClassesToRepackageResult {
-
-    final boolean canRepackageAll;
-    final Iterable<DexProgramClass> classesToRepackage;
-
-    public ComputeClassesToRepackageResult(
-        boolean canRepackageAll, Iterable<DexProgramClass> classesToRepackage) {
-      this.canRepackageAll = canRepackageAll;
-      this.classesToRepackage = classesToRepackage;
-    }
-  }
-
-  private Collection<DexProgramClass> computeClassesToRepackage(
+  private Iterable<DexProgramClass> computeClassesToRepackage(
       ProgramPackage pkg, ExecutorService executorService) throws ExecutionException {
     RepackagingConstraintGraph constraintGraph = new RepackagingConstraintGraph(appView, pkg);
     boolean canRepackageAllClasses = constraintGraph.initializeGraph();
     if (canRepackageAllClasses) {
-      return pkg.classesInPackage();
+      return pkg;
     }
     constraintGraph.populateConstraints(executorService);
     return constraintGraph.computeClassesToRepackage();
diff --git a/src/main/java/com/android/tools/r8/repackaging/RepackagingConstraintGraph.java b/src/main/java/com/android/tools/r8/repackaging/RepackagingConstraintGraph.java
index dd6af4a..ab5b01b 100644
--- a/src/main/java/com/android/tools/r8/repackaging/RepackagingConstraintGraph.java
+++ b/src/main/java/com/android/tools/r8/repackaging/RepackagingConstraintGraph.java
@@ -18,7 +18,6 @@
 import com.android.tools.r8.utils.WorkList;
 import com.google.common.collect.Sets;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.IdentityHashMap;
 import java.util.List;
 import java.util.Map;
@@ -173,7 +172,7 @@
     }
   }
 
-  public Collection<DexProgramClass> computeClassesToRepackage() {
+  public Iterable<DexProgramClass> computeClassesToRepackage() {
     WorkList<Node> worklist = WorkList.newIdentityWorkList(pinnedNodes);
     while (worklist.hasNext()) {
       Node pinnedNode = worklist.next();
diff --git a/src/main/java/com/android/tools/r8/repackaging/RepackagingLens.java b/src/main/java/com/android/tools/r8/repackaging/RepackagingLens.java
index 09910bc..63b8d06 100644
--- a/src/main/java/com/android/tools/r8/repackaging/RepackagingLens.java
+++ b/src/main/java/com/android/tools/r8/repackaging/RepackagingLens.java
@@ -18,19 +18,16 @@
 import com.android.tools.r8.utils.collections.MutableBidirectionalOneToOneMap;
 import com.google.common.collect.BiMap;
 import com.google.common.collect.HashBiMap;
-import java.util.Map;
 
 public class RepackagingLens extends NestedGraphLens {
 
   private final BiMap<DexType, DexType> originalTypes;
-  private final Map<String, String> packageRenaming;
 
   private RepackagingLens(
       AppView<AppInfoWithLiveness> appView,
       BidirectionalOneToOneMap<DexField, DexField> newFieldSignatures,
       BidirectionalOneToOneMap<DexMethod, DexMethod> originalMethodSignatures,
-      BiMap<DexType, DexType> originalTypes,
-      Map<String, String> packageRenaming) {
+      BiMap<DexType, DexType> originalTypes) {
     super(
         originalTypes.inverse(),
         originalMethodSignatures.getInverseOneToOneMap().getForwardMap(),
@@ -39,12 +36,6 @@
         appView.graphLens(),
         appView.dexItemFactory());
     this.originalTypes = originalTypes;
-    this.packageRenaming = packageRenaming;
-  }
-
-  @Override
-  public String lookupPackageName(String pkg) {
-    return packageRenaming.getOrDefault(getPrevious().lookupPackageName(pkg), pkg);
   }
 
   @Override
@@ -106,11 +97,10 @@
       originalTypes.put(to, from);
     }
 
-    public RepackagingLens build(
-        AppView<AppInfoWithLiveness> appView, BiMap<String, String> packageRenamings) {
+    public RepackagingLens build(AppView<AppInfoWithLiveness> appView) {
       assert !originalTypes.isEmpty();
       return new RepackagingLens(
-          appView, newFieldSignatures, originalMethodSignatures, originalTypes, packageRenamings);
+          appView, newFieldSignatures, originalMethodSignatures, originalTypes);
     }
   }
 }
diff --git a/src/test/java/com/android/tools/r8/naming/AdaptResourceFileContentsTest.java b/src/test/java/com/android/tools/r8/naming/AdaptResourceFileContentsTest.java
index 3727423..fb89853 100644
--- a/src/test/java/com/android/tools/r8/naming/AdaptResourceFileContentsTest.java
+++ b/src/test/java/com/android/tools/r8/naming/AdaptResourceFileContentsTest.java
@@ -338,7 +338,6 @@
 
   static class B extends A {
 
-    @Override
     public void method() {
       System.out.println("In B.method()");
       super.method();
diff --git a/src/test/java/com/android/tools/r8/naming/AdaptResourceFileNamesTest.java b/src/test/java/com/android/tools/r8/naming/AdaptResourceFileNamesTest.java
index 85c8459..6a01e83 100644
--- a/src/test/java/com/android/tools/r8/naming/AdaptResourceFileNamesTest.java
+++ b/src/test/java/com/android/tools/r8/naming/AdaptResourceFileNamesTest.java
@@ -4,7 +4,6 @@
 
 package com.android.tools.r8.naming;
 
-import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
@@ -12,51 +11,50 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.DataDirectoryResource;
 import com.android.tools.r8.DataEntryResource;
 import com.android.tools.r8.DataResourceConsumer;
 import com.android.tools.r8.DataResourceProvider.Visitor;
-import com.android.tools.r8.R8FullTestBuilder;
-import com.android.tools.r8.R8TestBuilder;
-import com.android.tools.r8.R8TestCompileResult;
-import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ThrowableConsumer;
+import com.android.tools.r8.R8Command;
+import com.android.tools.r8.StringConsumer;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.shaking.forceproguardcompatibility.ProguardCompatibilityTestBase;
+import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.ArchiveResourceProvider;
 import com.android.tools.r8.utils.DataResourceConsumerForTesting;
 import com.android.tools.r8.utils.FileUtils;
+import com.android.tools.r8.utils.KeepingDiagnosticHandler;
 import com.android.tools.r8.utils.StringUtils;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import java.io.File;
+import java.io.IOException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.function.Consumer;
 import java.util.stream.Collectors;
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
 public class AdaptResourceFileNamesTest extends ProguardCompatibilityTestBase {
 
-  private final TestParameters parameters;
+  private Backend backend;
 
-  @Parameters(name = "{0}")
-  public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimesAndApiLevels().build();
+  @Parameterized.Parameters(name = "Backend: {0}")
+  public static Backend[] data() {
+    return ToolHelper.getBackends();
   }
 
-  public AdaptResourceFileNamesTest(TestParameters parameters) {
-    this.parameters = parameters;
+  public AdaptResourceFileNamesTest(Backend backend) {
+    this.backend = backend;
   }
 
   private static final Path CF_DIR =
@@ -65,6 +63,15 @@
       Paths.get(ToolHelper.EXAMPLES_BUILD_DIR)
           .resolve("adaptresourcefilenames" + FileUtils.JAR_EXTENSION);
 
+  private KeepingDiagnosticHandler diagnosticsHandler;
+  private ClassNameMapper mapper = null;
+
+  @Before
+  public void reset() {
+    diagnosticsHandler = new KeepingDiagnosticHandler();
+    mapper = null;
+  }
+
   private static String getProguardConfig(
       boolean enableAdaptResourceFileNames, String adaptResourceFileNamesPathFilter) {
     String adaptResourceFilenamesRule;
@@ -79,6 +86,7 @@
     return String.join(
         System.lineSeparator(),
         adaptResourceFilenamesRule,
+        "-keeppackagenames adaptresourcefilenames**",
         "-keep class adaptresourcefilenames.TestClass {",
         "  public static void main(...);",
         "}");
@@ -106,38 +114,30 @@
   }
 
   @Test
-  public void testEnabled() throws Throwable {
+  public void testEnabled() throws Exception {
     DataResourceConsumerForTesting dataResourceConsumer = new DataResourceConsumerForTesting();
     compileWithR8(
         getProguardConfigWithNeverInline(true, null),
         dataResourceConsumer,
-        R8TestBuilder::enableProguardTestOptions,
-        mapper -> {
-          checkR8Renamings(mapper);
-          // Check that the generated resources have the expected names.
-          for (DataEntryResource dataResource : getOriginalDataResources()) {
-            ImmutableList<String> object =
-                dataResourceConsumer.get(getExpectedRenamingFor(dataResource.getName(), mapper));
-            if (object == null) {
-              object =
-                  dataResourceConsumer.get(getExpectedRenamingFor(dataResource.getName(), mapper));
-            }
-            assertNotNull("Resource not renamed as expected: " + dataResource.getName(), object);
-          }
-        });
+        ToolHelper.consumeString(this::checkR8Renamings));
+    // Check that the generated resources have the expected names.
+    for (DataEntryResource dataResource : getOriginalDataResources()) {
+      assertNotNull(
+          "Resource not renamed as expected: " + dataResource.getName(),
+          dataResourceConsumer.get(getExpectedRenamingFor(dataResource.getName(), mapper)));
+    }
   }
 
   @Test
-  public void testEnabledWithFilter() throws Throwable {
+  public void testEnabledWithFilter() throws Exception {
     DataResourceConsumerForTesting dataResourceConsumer = new DataResourceConsumerForTesting();
     compileWithR8(
         getProguardConfigWithNeverInline(true, "**.md"),
         dataResourceConsumer,
-        R8TestBuilder::enableProguardTestOptions,
-        this::checkR8Renamings);
+        ToolHelper.consumeString(this::checkR8Renamings));
     // Check that the generated resources have the expected names.
     Map<String, String> expectedRenamings =
-        ImmutableMap.of("adaptresourcefilenames/B.md", "a/b.md");
+        ImmutableMap.of("adaptresourcefilenames/B.md", "adaptresourcefilenames/b.md");
     for (DataEntryResource dataResource : getOriginalDataResources()) {
       assertNotNull(
           "Resource not renamed as expected: " + dataResource.getName(),
@@ -147,12 +147,9 @@
   }
 
   @Test
-  public void testDisabled() throws Throwable {
+  public void testDisabled() throws Exception {
     DataResourceConsumerForTesting dataResourceConsumer = new DataResourceConsumerForTesting();
-    compileWithR8(
-        getProguardConfigWithNeverInline(false, null),
-        dataResourceConsumer,
-        R8TestBuilder::enableProguardTestOptions);
+    compileWithR8(getProguardConfigWithNeverInline(false, null), dataResourceConsumer);
     // Check that none of the resources were renamed.
     for (DataEntryResource dataResource : getOriginalDataResources()) {
       assertNotNull(
@@ -162,25 +159,22 @@
   }
 
   @Test
-  public void testCollisionBehavior() throws Throwable {
+  public void testCollisionBehavior() throws Exception {
     DataResourceConsumerForTesting dataResourceConsumer = new DataResourceConsumerForTesting();
-    R8TestCompileResult compileResult =
-        compileWithR8(
-            getProguardConfigWithNeverInline(true, null),
-            dataResourceConsumer,
-            builder -> {
-              builder.enableProguardTestOptions();
-              builder.allowDiagnosticWarningMessages();
-            },
-            this::checkR8Renamings,
-            ImmutableList.<DataEntryResource>builder()
-                .addAll(getOriginalDataResources())
-                .add(DataEntryResource.fromBytes(new byte[0], "a/b.txt", Origin.unknown()))
-                .build());
-    compileResult.inspectDiagnosticMessages(
-        diagnosticMessages ->
-            diagnosticMessages.assertWarningsMatch(
-                diagnosticMessage(containsString("Resource 'a/b.txt' already exists."))));
+    compileWithR8(
+        getProguardConfigWithNeverInline(true, null),
+        dataResourceConsumer,
+        ToolHelper.consumeString(this::checkR8Renamings),
+        ImmutableList.<DataEntryResource>builder()
+            .addAll(getOriginalDataResources())
+            .add(
+                DataEntryResource.fromBytes(
+                    new byte[0], "adaptresourcefilenames/b.txt", Origin.unknown()))
+            .build());
+    assertEquals(1, diagnosticsHandler.warnings.size());
+    assertThat(
+        diagnosticsHandler.warnings.get(0).getDiagnosticMessage(),
+        containsString("Resource 'adaptresourcefilenames/b.txt' already exists."));
     assertEquals(getOriginalDataResources().size(), dataResourceConsumer.size());
   }
 
@@ -249,59 +243,64 @@
             .count());
   }
 
-  private void compileWithR8(
-      String proguardConfig,
-      DataResourceConsumer dataResourceConsumer,
-      ThrowableConsumer<R8FullTestBuilder> builderConsumer)
-      throws Throwable {
-    compileWithR8(proguardConfig, dataResourceConsumer, builderConsumer, null);
+  private AndroidApp compileWithR8(String proguardConfig, DataResourceConsumer dataResourceConsumer)
+      throws CompilationFailedException, IOException {
+    return compileWithR8(proguardConfig, dataResourceConsumer, null);
   }
 
-  private void compileWithR8(
+  private AndroidApp compileWithR8(
       String proguardConfig,
       DataResourceConsumer dataResourceConsumer,
-      ThrowableConsumer<R8FullTestBuilder> builderConsumer,
-      Consumer<ClassNameMapper> proguardMapConsumer)
-      throws Throwable {
-    compileWithR8(
-        proguardConfig,
-        dataResourceConsumer,
-        builderConsumer,
-        proguardMapConsumer,
-        getOriginalDataResources());
+      StringConsumer proguardMapConsumer)
+      throws CompilationFailedException, IOException {
+    return compileWithR8(
+        proguardConfig, dataResourceConsumer, proguardMapConsumer, getOriginalDataResources());
   }
 
-  private R8TestCompileResult compileWithR8(
+  private AndroidApp compileWithR8(
       String proguardConfig,
       DataResourceConsumer dataResourceConsumer,
-      ThrowableConsumer<R8FullTestBuilder> builderConsumer,
-      Consumer<ClassNameMapper> proguardMapConsumer,
+      StringConsumer proguardMapConsumer,
       List<DataEntryResource> dataResources)
-      throws Throwable {
-    R8TestCompileResult compile =
-        testForR8(parameters.getBackend())
-            .addProgramFiles(ToolHelper.getClassFilesForTestDirectory(CF_DIR))
-            .addDataResources(dataResources)
-            .addKeepRules(proguardConfig)
-            .apply(builderConsumer)
-            .setMinApi(parameters.getApiLevel())
-            .addOptionsModification(options -> options.dataResourceConsumer = dataResourceConsumer)
-            .compile();
-    if (proguardMapConsumer != null) {
-      compile.inspectProguardMap(
-          map -> proguardMapConsumer.accept(ClassNameMapper.mapperFromString(map)));
-    }
-    return compile;
+      throws CompilationFailedException, IOException {
+    R8Command command =
+        ToolHelper.allowTestProguardOptions(
+                ToolHelper.prepareR8CommandBuilder(
+                        getAndroidApp(dataResources), emptyConsumer(backend), diagnosticsHandler)
+                    .addProguardConfiguration(ImmutableList.of(proguardConfig), Origin.unknown()))
+            .addLibraryFiles(runtimeJar(backend))
+            .build();
+    return ToolHelper.runR8(
+        command,
+        options -> {
+          options.dataResourceConsumer = dataResourceConsumer;
+          options.proguardMapConsumer = proguardMapConsumer;
+        });
   }
 
-  private void checkR8Renamings(ClassNameMapper mapper) {
-    // Check that the renamings are as expected. These exact renamings are not important as
-    // such, but the test expectations rely on them.
-    assertEquals(
-        "adaptresourcefilenames.TestClass",
-        mapper.deobfuscateClassName("adaptresourcefilenames.TestClass"));
-    assertEquals("adaptresourcefilenames.B", mapper.deobfuscateClassName("a.b"));
-    assertEquals("adaptresourcefilenames.B$Inner", mapper.deobfuscateClassName("a.a"));
+  private void checkR8Renamings(String proguardMap) {
+    try {
+      // Check that the renamings are as expected. These exact renamings are not important as
+      // such, but the test expectations rely on them.
+      mapper = ClassNameMapper.mapperFromString(proguardMap);
+      assertEquals(
+          "adaptresourcefilenames.TestClass",
+          mapper.deobfuscateClassName("adaptresourcefilenames.TestClass"));
+      assertEquals(
+          "adaptresourcefilenames.B", mapper.deobfuscateClassName("adaptresourcefilenames.b"));
+      assertEquals(
+          "adaptresourcefilenames.B$Inner",
+          mapper.deobfuscateClassName("adaptresourcefilenames.a"));
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  private AndroidApp getAndroidApp(List<DataEntryResource> dataResources) throws IOException {
+    AndroidApp.Builder builder = AndroidApp.builder();
+    builder.addProgramFiles(ToolHelper.getClassFilesForTestDirectory(CF_DIR));
+    dataResources.forEach(builder::addDataResource);
+    return builder.build();
   }
 
   private static List<DataEntryResource> getOriginalDataResources() {