Assert that interfaces do not have final methods
Bug: 120121669
Change-Id: Iba21fb5c72ebd0b38a53f4d4bfa1c43c0fad33c3
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 6d00ebb..7f77c6b 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexApplication;
import com.android.tools.r8.graph.DexCallSite;
+import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.GraphLense;
@@ -527,6 +528,8 @@
return;
}
+ assert application.classes().stream().allMatch(DexClass::isValid);
+
// Generate the resulting application resources.
writeApplication(
executorService,
diff --git a/src/main/java/com/android/tools/r8/graph/DexClass.java b/src/main/java/com/android/tools/r8/graph/DexClass.java
index d79276e..5a4b204 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClass.java
@@ -524,4 +524,9 @@
return getKotlinInfo() != null;
}
+ public boolean isValid() {
+ assert !isInterface()
+ || Arrays.stream(virtualMethods()).noneMatch(method -> method.accessFlags.isFinal());
+ return true;
+ }
}