diff --git a/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java b/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
index d13cc3b..d0240e9 100644
--- a/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
@@ -13,7 +13,6 @@
 import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexEncodedField;
 import com.android.tools.r8.graph.DexEncodedMethod;
-import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.DexProto;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
@@ -25,14 +24,12 @@
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.InternalOptions.PackageObfuscationMode;
-import com.android.tools.r8.utils.IteratorUtils;
 import com.android.tools.r8.utils.Timing;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -135,15 +132,7 @@
     timing.end();
 
     timing.begin("rename-generic");
-    new GenericSignatureRewriter(appView, renaming)
-        .run(
-            new Iterable<DexProgramClass>() {
-              @Override
-              public Iterator<DexProgramClass> iterator() {
-                return IteratorUtils.<DexClass, DexProgramClass>filter(
-                    classes.iterator(), DexClass::isProgramClass);
-              }
-            });
+    new GenericSignatureRewriter(appView, renaming).run(classes);
     timing.end();
 
     timing.begin("rename-arrays");
diff --git a/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureAction.java b/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureAction.java
index 947b6d4..6753e06 100644
--- a/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureAction.java
+++ b/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureAction.java
@@ -9,16 +9,11 @@
  */
 public interface GenericSignatureAction<T> {
 
-  enum ParserPosition {
-    TOP_LEVEL,
-    INNER_ENCLOSING_OR_TYPE_ARGUMENT
-  }
-
   public void parsedSymbol(char symbol);
 
   public void parsedIdentifier(String identifier);
 
-  public T parsedTypeName(String name, ParserPosition isTopLevel);
+  public T parsedTypeName(String name);
 
   public T parsedInnerTypeName(T enclosingType, String name);
 
diff --git a/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureParser.java b/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureParser.java
index 5ef9de9..c1f6a7d 100644
--- a/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureParser.java
+++ b/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureParser.java
@@ -4,7 +4,6 @@
 
 package com.android.tools.r8.naming.signature;
 
-import com.android.tools.r8.naming.signature.GenericSignatureAction.ParserPosition;
 import java.lang.reflect.GenericSignatureFormatError;
 import java.nio.CharBuffer;
 
@@ -51,7 +50,7 @@
  */
 public class GenericSignatureParser<T> {
 
-  private GenericSignatureAction<T> actions;
+  private final GenericSignatureAction<T> actions;
 
   /*
    * Parser:
@@ -111,7 +110,7 @@
     try {
       actions.start();
       setInput(signature);
-      parseFieldTypeSignature(ParserPosition.TOP_LEVEL);
+      parseFieldTypeSignature();
       actions.stop();
     } catch (GenericSignatureFormatError e) {
       throw e;
@@ -142,11 +141,11 @@
     parseOptFormalTypeParameters();
 
     // SuperclassSignature ::= ClassTypeSignature.
-    parseClassTypeSignature(ParserPosition.TOP_LEVEL);
+    parseClassTypeSignature();
 
     while (symbol > 0) {
       // SuperinterfaceSignature ::= ClassTypeSignature.
-      parseClassTypeSignature(ParserPosition.TOP_LEVEL);
+      parseClassTypeSignature();
     }
   }
 
@@ -179,28 +178,28 @@
     expect(':');
 
     if (symbol == 'L' || symbol == '[' || symbol == 'T') {
-      parseFieldTypeSignature(ParserPosition.INNER_ENCLOSING_OR_TYPE_ARGUMENT);
+      parseFieldTypeSignature();
     }
 
     while (symbol == ':') {
       // InterfaceBound ::= ":" FieldTypeSignature.
       actions.parsedSymbol(symbol);
       scanSymbol();
-      parseFieldTypeSignature(ParserPosition.TOP_LEVEL);
+      parseFieldTypeSignature();
     }
   }
 
-  private void parseFieldTypeSignature(ParserPosition parserPosition) {
+  private void parseFieldTypeSignature() {
     // FieldTypeSignature ::= ClassTypeSignature | ArrayTypeSignature | TypeVariableSignature.
     switch (symbol) {
       case 'L':
-        parseClassTypeSignature(parserPosition);
+        parseClassTypeSignature();
         break;
       case '[':
-        // ArrayTypeSignature ::= "[" TypeSignature.
+        // ArrayTypeSignature ::= "[" TypSignature.
         actions.parsedSymbol(symbol);
         scanSymbol();
-        updateTypeSignature(parserPosition);
+        updateTypeSignature();
         break;
       case 'T':
         updateTypeVariableSignature();
@@ -210,7 +209,7 @@
     }
   }
 
-  private void parseClassTypeSignature(ParserPosition parserPosition) {
+  private void parseClassTypeSignature() {
     // ClassTypeSignature ::= "L" {Ident "/"} Ident OptTypeArguments {"." Ident OptTypeArguments}
     //  ";".
     actions.parsedSymbol(symbol);
@@ -227,22 +226,18 @@
     }
 
     qualIdent.append(this.identifier);
-    T parsedEnclosingType = actions.parsedTypeName(qualIdent.toString(), parserPosition);
+    T parsedEnclosingType = actions.parsedTypeName(qualIdent.toString());
 
-    if (parsedEnclosingType != null) {
-      // We should only parse any optional type arguments and member classes if we have not merged
-      // the class into the current subtype.
+    updateOptTypeArguments();
+
+    while (symbol == '.') {
+      // Deal with Member Classes:
+      actions.parsedSymbol(symbol);
+      scanSymbol();
+      scanIdentifier();
+      assert identifier != null;
+      parsedEnclosingType = actions.parsedInnerTypeName(parsedEnclosingType, identifier);
       updateOptTypeArguments();
-
-      while (symbol == '.') {
-        // Deal with Member Classes.
-        actions.parsedSymbol(symbol);
-        scanSymbol();
-        scanIdentifier();
-        assert identifier != null;
-        parsedEnclosingType = actions.parsedInnerTypeName(parsedEnclosingType, identifier);
-        updateOptTypeArguments();
-      }
     }
 
     actions.parsedSymbol(symbol);
@@ -273,13 +268,13 @@
     } else if (symbol == '+') {
       actions.parsedSymbol(symbol);
       scanSymbol();
-      parseFieldTypeSignature(ParserPosition.INNER_ENCLOSING_OR_TYPE_ARGUMENT);
+      parseFieldTypeSignature();
     } else if (symbol == '-') {
       actions.parsedSymbol(symbol);
       scanSymbol();
-      parseFieldTypeSignature(ParserPosition.INNER_ENCLOSING_OR_TYPE_ARGUMENT);
+      parseFieldTypeSignature();
     } else {
-      parseFieldTypeSignature(ParserPosition.INNER_ENCLOSING_OR_TYPE_ARGUMENT);
+      parseFieldTypeSignature();
     }
   }
 
@@ -296,7 +291,7 @@
     expect(';');
   }
 
-  private void updateTypeSignature(ParserPosition parserPosition) {
+  private void updateTypeSignature() {
     switch (symbol) {
       case 'B':
       case 'C':
@@ -311,7 +306,7 @@
         break;
       default:
         // Not an elementary type, but a FieldTypeSignature.
-        parseFieldTypeSignature(parserPosition);
+        parseFieldTypeSignature();
     }
   }
 
@@ -324,7 +319,7 @@
     expect('(');
 
     while (symbol != ')' && (symbol > 0)) {
-      updateTypeSignature(ParserPosition.TOP_LEVEL);
+      updateTypeSignature();
     }
 
     actions.parsedSymbol(symbol);
@@ -341,7 +336,7 @@
         if (symbol == 'T') {
           updateTypeVariableSignature();
         } else {
-          parseClassTypeSignature(ParserPosition.TOP_LEVEL);
+          parseClassTypeSignature();
         }
       } while (symbol == '^');
     }
@@ -350,7 +345,7 @@
   private void updateReturnType() {
     // ReturnType ::= TypeSignature | "V".
     if (symbol != 'V') {
-      updateTypeSignature(ParserPosition.TOP_LEVEL);
+      updateTypeSignature();
     } else {
       actions.parsedSymbol(symbol);
       scanSymbol();
diff --git a/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureRewriter.java b/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureRewriter.java
index 6a8d460..c3b7188 100644
--- a/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureRewriter.java
+++ b/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureRewriter.java
@@ -10,8 +10,8 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexAnnotation;
 import com.android.tools.r8.graph.DexAnnotationSet;
+import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexDefinition;
-import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.origin.Origin;
@@ -43,16 +43,15 @@
     this.reporter = appView.options().reporter;
   }
 
-  public void run(Iterable<? extends DexProgramClass> classes) {
+  public void run(Iterable<? extends DexClass> classes) {
     final GenericSignatureCollector genericSignatureCollector = new GenericSignatureCollector();
     final GenericSignatureParser<DexType> genericSignatureParser =
         new GenericSignatureParser<>(genericSignatureCollector);
-    // Classes may not be the same as appInfo().classes() if applymapping is used on classpath
+    // classes may not be the same as appInfo().classes() if applymapping is used on classpath
     // arguments. If that is the case, the ProguardMapMinifier will pass in all classes that is
     // either ProgramClass or has a mapping. This is then transitively called inside the
     // ClassNameMinifier.
-    for (DexProgramClass clazz : classes) {
-      genericSignatureCollector.setCurrentClassContext(clazz);
+    for (DexClass clazz : classes) {
       clazz.annotations =
           rewriteGenericSignatures(
               clazz.annotations,
@@ -153,22 +152,13 @@
 
   private class GenericSignatureCollector implements GenericSignatureAction<DexType> {
     private StringBuilder renamedSignature;
-    private DexProgramClass currentClassContext;
 
-    String getRenamedSignature() {
+    public String getRenamedSignature() {
       return renamedSignature.toString();
     }
 
-    void setCurrentClassContext(DexProgramClass clazz) {
-      currentClassContext = clazz;
-    }
-
     @Override
     public void parsedSymbol(char symbol) {
-      if (symbol == ';' && renamedSignature.charAt(renamedSignature.length() - 1) == ';') {
-        // The type was never written (maybe because it was merged with it's subtype)
-        return;
-      }
       renamedSignature.append(symbol);
     }
 
@@ -178,20 +168,13 @@
     }
 
     @Override
-    public DexType parsedTypeName(String name, ParserPosition parserPosition) {
+    public DexType parsedTypeName(String name) {
       DexType type = appView.dexItemFactory().createType(getDescriptorFromClassBinaryName(name));
       type = appView.graphLense().lookupType(type);
       if (appView.appInfo().wasPruned(type)) {
         type = appView.dexItemFactory().objectType;
       }
       DexString renamedDescriptor = renaming.getOrDefault(type, type.descriptor);
-      if (parserPosition == ParserPosition.TOP_LEVEL
-          && currentClassContext != null
-          && renamedDescriptor.equals(currentClassContext.type.descriptor)) {
-        // We are renaming an interface to the class where it was merged down.
-        renamedSignature.deleteCharAt(renamedSignature.length() - 1);
-        return null;
-      }
       renamedSignature.append(getClassBinaryNameFromDescriptor(renamedDescriptor.toString()));
       return type;
     }
@@ -214,7 +197,6 @@
       type = appView.graphLense().lookupType(type);
       DexString renamedDescriptor = renaming.get(type);
       if (renamedDescriptor != null) {
-        // TODO(b/147504070): If this is a merged class equal to the class context, do not add.
         // Pick the renamed inner class from the fully renamed binary name.
         String fullRenamedBinaryName =
             getClassBinaryNameFromDescriptor(renamedDescriptor.toString());
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index ab32bd5..ae8eb7e 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -383,7 +383,7 @@
       }
     }
     if (clazz.getEnclosingMethod() != null || !clazz.getInnerClasses().isEmpty()) {
-      // TODO(b/147504070): Consider merging of enclosing-method and inner-class attributes.
+      // TODO(herhut): Consider supporting merging of enclosing-method and inner-class attributes.
       if (Log.ENABLED) {
         AbortReason.UNSUPPORTED_ATTRIBUTES.printLogMessageForClass(clazz);
       }
@@ -440,7 +440,7 @@
       return false;
     }
     if (targetClass.getEnclosingMethod() != null || !targetClass.getInnerClasses().isEmpty()) {
-      // TODO(b/147504070): Consider merging of enclosing-method and inner-class attributes.
+      // TODO(herhut): Consider supporting merging of enclosing-method and inner-class attributes.
       if (Log.ENABLED) {
         AbortReason.UNSUPPORTED_ATTRIBUTES.printLogMessageForClass(clazz);
       }
diff --git a/src/main/java/com/android/tools/r8/utils/IteratorUtils.java b/src/main/java/com/android/tools/r8/utils/IteratorUtils.java
index f38c02a..7ffce35 100644
--- a/src/main/java/com/android/tools/r8/utils/IteratorUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/IteratorUtils.java
@@ -16,8 +16,7 @@
 
 public class IteratorUtils {
 
-  public static <T, S extends T> Iterator<S> filter(
-      Iterator<? extends T> iterator, Predicate<T> predicate) {
+  public static <T, S extends T> Iterator<S> filter(Iterator<T> iterator, Predicate<T> predicate) {
     return new Iterator<S>() {
 
       private S next = advance();
diff --git a/src/test/java/com/android/tools/r8/naming/GenericSignatureParserTest.java b/src/test/java/com/android/tools/r8/naming/GenericSignatureParserTest.java
index 4489b75..b264ef5 100644
--- a/src/test/java/com/android/tools/r8/naming/GenericSignatureParserTest.java
+++ b/src/test/java/com/android/tools/r8/naming/GenericSignatureParserTest.java
@@ -22,7 +22,6 @@
 import org.junit.Test;
 
 public class GenericSignatureParserTest extends TestBase {
-
   private static class ReGenerateGenericSignatureRewriter
       implements GenericSignatureAction<String> {
 
@@ -43,7 +42,7 @@
     }
 
     @Override
-    public String parsedTypeName(String name, ParserPosition parserPosition) {
+    public String parsedTypeName(String name) {
       renamedSignature.append(name);
       return name;
     }
@@ -390,7 +389,7 @@
       }
 
       @Override
-      public String parsedTypeName(String name, ParserPosition parserPosition) {
+      public String parsedTypeName(String name) {
         throw exceptionSupplier.get();
       }
     }
diff --git a/src/test/java/com/android/tools/r8/naming/signature/SignatureOfMergedClassesTest.java b/src/test/java/com/android/tools/r8/naming/signature/SignatureOfMergedClassesTest.java
deleted file mode 100644
index a9fc20f..0000000
--- a/src/test/java/com/android/tools/r8/naming/signature/SignatureOfMergedClassesTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.naming.signature;
-
-import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.TestBase;
-import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.naming.signature.merging.I;
-import com.android.tools.r8.naming.signature.merging.ImplI;
-import com.android.tools.r8.naming.signature.merging.ImplK;
-import com.android.tools.r8.naming.signature.merging.InterfaceToKeep;
-import com.android.tools.r8.naming.signature.merging.J;
-import com.android.tools.r8.naming.signature.merging.K;
-import java.io.IOException;
-import java.lang.invoke.LambdaConversionException;
-import java.lang.reflect.Type;
-import java.util.concurrent.ExecutionException;
-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 SignatureOfMergedClassesTest extends TestBase {
-
-  private final TestParameters parameters;
-
-  @Parameters(name = "{0}")
-  public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimesAndApiLevels().build();
-  }
-
-  public SignatureOfMergedClassesTest(TestParameters parameters) {
-    this.parameters = parameters;
-  }
-
-  @Test
-  public void testRemovalOfMergedInterfaceOnSameClass()
-      throws IOException, CompilationFailedException, ExecutionException,
-          LambdaConversionException {
-    testForR8(parameters.getBackend())
-        .addProgramClasses(
-            ImplI.class, ImplK.class, I.class, J.class, InterfaceToKeep.class, K.class, Main.class)
-        .addKeepMainRule(Main.class)
-        .addKeepClassRules(InterfaceToKeep.class)
-        .addKeepAttributes("Signature, InnerClasses, EnclosingMethod, *Annotation*")
-        .setMinApi(parameters.getApiLevel())
-        .noMinification()
-        .addOptionsModification(
-            internalOptions -> {
-              internalOptions.enableUnusedInterfaceRemoval = false;
-            })
-        .run(parameters.getRuntime(), Main.class)
-        .assertSuccessWithOutputLines(
-            "ImplI.foo",
-            "ImplI: com.android.tools.r8.naming.signature.merging.InterfaceToKeep<java.lang.Void>",
-            "K: com.android.tools.r8.naming.signature.merging.InterfaceToKeep<java.lang.Void>",
-            "ImplK.foo",
-            "ImplK.bar",
-            "ImplK: interface com.android.tools.r8.naming.signature.merging.K")
-        .inspect(
-            codeInspector -> {
-              assertThat(codeInspector.clazz(I.class), not(isPresent()));
-              assertThat(codeInspector.clazz(J.class), not(isPresent()));
-            });
-  }
-
-  @Test
-  public void testKeepingOneSelfOnInterface()
-      throws ExecutionException, CompilationFailedException, IOException {
-    testForR8(parameters.getBackend())
-        .addProgramClasses(Foo.class, InterfaceToKeep.class)
-        .addKeepMainRule(Foo.class)
-        .addKeepClassRules(InterfaceToKeep.class)
-        .addKeepAttributes("Signature, InnerClasses, EnclosingMethod, *Annotation*")
-        .setMinApi(parameters.getApiLevel())
-        .noMinification()
-        .addOptionsModification(
-            internalOptions -> {
-              internalOptions.enableUnusedInterfaceRemoval = false;
-            })
-        .run(parameters.getRuntime(), Foo.class)
-        .assertSuccessWithOutputLines(
-            "com.android.tools.r8.naming.signature.merging.InterfaceToKeep"
-                + "<com.android.tools.r8.naming.signature.SignatureOfMergedClassesTest$Foo>");
-  }
-
-  public static class Foo implements InterfaceToKeep<Foo> {
-
-    public static void main(String[] args) {
-      for (Type genericInterface : Foo.class.getGenericInterfaces()) {
-        System.out.println(genericInterface);
-      }
-    }
-  }
-
-  public static class Main {
-
-    public static void main(String[] args) {
-      new ImplI().foo();
-      for (Type genericInterface : ImplI.class.getGenericInterfaces()) {
-        System.out.println("ImplI: " + genericInterface);
-      }
-      for (Type genericInterface : K.class.getGenericInterfaces()) {
-        System.out.println("K: " + genericInterface);
-      }
-      K k = new ImplK();
-      k.foo();
-      k.bar();
-      for (Type genericInterface : ImplK.class.getGenericInterfaces()) {
-        System.out.println("ImplK: " + genericInterface);
-      }
-    }
-  }
-}
diff --git a/src/test/java/com/android/tools/r8/naming/signature/merging/I.java b/src/test/java/com/android/tools/r8/naming/signature/merging/I.java
deleted file mode 100644
index 237786c..0000000
--- a/src/test/java/com/android/tools/r8/naming/signature/merging/I.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.naming.signature.merging;
-
-public interface I {
-  void foo();
-}
diff --git a/src/test/java/com/android/tools/r8/naming/signature/merging/ImplI.java b/src/test/java/com/android/tools/r8/naming/signature/merging/ImplI.java
deleted file mode 100644
index b842386..0000000
--- a/src/test/java/com/android/tools/r8/naming/signature/merging/ImplI.java
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.naming.signature.merging;
-
-public class ImplI implements InterfaceToKeep<Void>, I {
-
-  @Override
-  public void foo() {
-    System.out.println("ImplI.foo");
-  }
-}
diff --git a/src/test/java/com/android/tools/r8/naming/signature/merging/ImplK.java b/src/test/java/com/android/tools/r8/naming/signature/merging/ImplK.java
deleted file mode 100644
index 3c23d56..0000000
--- a/src/test/java/com/android/tools/r8/naming/signature/merging/ImplK.java
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.naming.signature.merging;
-
-public class ImplK implements K {
-
-  @Override
-  public void foo() {
-    System.out.println("ImplK.foo");
-  }
-
-  @Override
-  public void bar() {
-    System.out.println("ImplK.bar");
-  }
-}
diff --git a/src/test/java/com/android/tools/r8/naming/signature/merging/InterfaceToKeep.java b/src/test/java/com/android/tools/r8/naming/signature/merging/InterfaceToKeep.java
deleted file mode 100644
index 6bebcd0..0000000
--- a/src/test/java/com/android/tools/r8/naming/signature/merging/InterfaceToKeep.java
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.naming.signature.merging;
-
-public interface InterfaceToKeep<T> {}
diff --git a/src/test/java/com/android/tools/r8/naming/signature/merging/J.java b/src/test/java/com/android/tools/r8/naming/signature/merging/J.java
deleted file mode 100644
index 444a5e8..0000000
--- a/src/test/java/com/android/tools/r8/naming/signature/merging/J.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.naming.signature.merging;
-
-public interface J {
-  void foo();
-}
diff --git a/src/test/java/com/android/tools/r8/naming/signature/merging/K.java b/src/test/java/com/android/tools/r8/naming/signature/merging/K.java
deleted file mode 100644
index 4b8ed50..0000000
--- a/src/test/java/com/android/tools/r8/naming/signature/merging/K.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.naming.signature.merging;
-
-public interface K extends InterfaceToKeep<Void>, J {
-  void bar();
-}
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java b/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
index 1a4dcc16..4aec544 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
@@ -423,7 +423,7 @@
     }
 
     @Override
-    public String parsedTypeName(String name, ParserPosition parserPosition) {
+    public String parsedTypeName(String name) {
       String type = name;
       if (obfuscatedToOriginalMapping != null) {
         String original = mapType(obfuscatedToOriginalMapping, name);
