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 9ab6c15..04bdf33 100644
--- a/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
@@ -344,8 +344,7 @@
     }
 
     @Override
-    public int incrementNameIndex(boolean isDirectMethodCall) {
-      assert !isDirectMethodCall;
+    public int incrementNameIndex() {
       return nameIndex++;
     }
   }
diff --git a/src/main/java/com/android/tools/r8/naming/FieldNamingState.java b/src/main/java/com/android/tools/r8/naming/FieldNamingState.java
index 35e3d3f..9e99065 100644
--- a/src/main/java/com/android/tools/r8/naming/FieldNamingState.java
+++ b/src/main/java/com/android/tools/r8/naming/FieldNamingState.java
@@ -114,8 +114,7 @@
     }
 
     @Override
-    public int incrementNameIndex(boolean isDirectMethodCall) {
-      assert !isDirectMethodCall;
+    public int incrementNameIndex() {
       return nextNameIndex++;
     }
   }
diff --git a/src/main/java/com/android/tools/r8/naming/InternalNamingState.java b/src/main/java/com/android/tools/r8/naming/InternalNamingState.java
index e5749c1..9cbacda 100644
--- a/src/main/java/com/android/tools/r8/naming/InternalNamingState.java
+++ b/src/main/java/com/android/tools/r8/naming/InternalNamingState.java
@@ -10,5 +10,5 @@
 
   int incrementDictionaryIndex();
 
-  int incrementNameIndex(boolean isDirectMethodCall);
+  int incrementNameIndex();
 }
diff --git a/src/main/java/com/android/tools/r8/naming/MethodNamingState.java b/src/main/java/com/android/tools/r8/naming/MethodNamingState.java
index 5aa368b..922c062 100644
--- a/src/main/java/com/android/tools/r8/naming/MethodNamingState.java
+++ b/src/main/java/com/android/tools/r8/naming/MethodNamingState.java
@@ -185,7 +185,7 @@
     }
 
     @Override
-    public int incrementNameIndex(boolean isDirectMethodCall) {
+    public int incrementNameIndex() {
       assert checkParentPublicNameCountIsLessThanOrEqual();
       return nameCount++;
     }
diff --git a/src/main/java/com/android/tools/r8/naming/Minifier.java b/src/main/java/com/android/tools/r8/naming/Minifier.java
index a542a2f..049b286 100644
--- a/src/main/java/com/android/tools/r8/naming/Minifier.java
+++ b/src/main/java/com/android/tools/r8/naming/Minifier.java
@@ -113,7 +113,7 @@
       assert obfuscationDictionary != null;
     }
 
-    String nextName(char[] packagePrefix, InternalNamingState state, boolean isDirectMethodCall) {
+    String nextName(char[] packagePrefix, InternalNamingState state) {
       StringBuilder nextName = new StringBuilder();
       nextName.append(packagePrefix);
       String nextString;
@@ -123,8 +123,7 @@
         } else {
           do {
             nextString =
-                SymbolGenerationUtils.numberToIdentifier(
-                    state.incrementNameIndex(isDirectMethodCall), mixedCasing);
+                SymbolGenerationUtils.numberToIdentifier(state.incrementNameIndex(), mixedCasing);
           } while (obfuscationDictionaryForLookup.contains(nextString));
         }
       } while (PRIMITIVE_TYPE_NAMES.contains(nextString));
@@ -153,7 +152,7 @@
       String candidate = null;
       String lastName = null;
       do {
-        String newName = nextName(packagePrefix, state, false) + ";";
+        String newName = nextName(packagePrefix, state) + ";";
         if (newName.equals(lastName)) {
           throw new CompilationError(
               "Generating same name '"
@@ -204,7 +203,7 @@
       // 3) this one removes 'L' at the beginning to make the return value a binary form.
       String nextPackageName;
       do {
-        nextPackageName = nextName(packagePrefix, state, false).substring(1);
+        nextPackageName = nextName(packagePrefix, state).substring(1);
       } while (isUsed.test(nextPackageName));
       return nextPackageName;
     }
@@ -230,10 +229,9 @@
         InternalNamingState internalState,
         BiPredicate<DexString, DexMethod> isAvailable) {
       assert checkAllowMemberRenaming(method.getHolderType());
-      boolean isDirectOrStatic = method.isDirectMethod() || method.isStatic();
       DexString candidate;
       do {
-        candidate = getNextName(internalState, isDirectOrStatic);
+        candidate = getNextName(internalState);
       } while (!isAvailable.test(candidate, method.getReference()));
       return candidate;
     }
@@ -246,13 +244,13 @@
       assert checkAllowMemberRenaming(field.getHolderType());
       DexString candidate;
       do {
-        candidate = getNextName(internalState, false);
+        candidate = getNextName(internalState);
       } while (!isAvailable.test(candidate, field));
       return candidate;
     }
 
-    private DexString getNextName(InternalNamingState internalState, boolean isDirectOrStatic) {
-      return factory.createString(nextName(EMPTY_CHAR_ARRAY, internalState, isDirectOrStatic));
+    private DexString getNextName(InternalNamingState internalState) {
+      return factory.createString(nextName(EMPTY_CHAR_ARRAY, internalState));
     }
 
     @Override
