Update isDefaultMethod to not include static methods
Change-Id: I6ae90439ed49383f083fd5d7a76904be7ad271e3
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index 348ed36..90de8ca 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -273,7 +273,7 @@
public boolean isDefaultMethod() {
// Assumes holder is an interface
- return !isAbstract() && !isPrivateMethod() && !isInstanceInitializer();
+ return !isStatic() && !isAbstract() && !isPrivateMethod() && !isInstanceInitializer();
}
/**
@@ -882,7 +882,7 @@
List<Pair<DexType, DexMethod>> extraDispatchCases,
AppView<?> appView) {
// TODO(134732760): Deal with overrides for correct dispatch to implementations of Interfaces
- assert isDefaultMethod();
+ assert isDefaultMethod() || isStatic();
DexEncodedMethod.Builder builder = DexEncodedMethod.builder(this);
builder.setMethod(newMethod);
builder.accessFlags.setSynthetic();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
index db8f582..1f049e5 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
@@ -139,6 +139,10 @@
initializeEmulatedInterfaceVariables();
}
+ private boolean isDefaultOrStatic(DexEncodedMethod method) {
+ return method.isDefaultMethod() || method.isStatic();
+ }
+
private void initializeEmulatedInterfaceVariables() {
Map<DexType, DexType> emulateLibraryInterface =
options.desugaredLibraryConfiguration.getEmulateLibraryInterface();
@@ -148,7 +152,7 @@
DexClass emulatedInterfaceClass = appView.definitionFor(interfaceType);
if (emulatedInterfaceClass != null) {
for (DexEncodedMethod encodedMethod :
- emulatedInterfaceClass.methods(DexEncodedMethod::isDefaultMethod)) {
+ emulatedInterfaceClass.methods(this::isDefaultOrStatic)) {
emulatedMethods.add(encodedMethod.method.name);
}
}
@@ -635,7 +639,7 @@
DexProgramClass theInterface, Map<DexType, List<DexType>> emulatedInterfacesHierarchy) {
List<DexEncodedMethod> emulationMethods = new ArrayList<>();
for (DexEncodedMethod method : theInterface.methods()) {
- if (method.isDefaultMethod()) {
+ if (isDefaultOrStatic(method)) {
DexMethod libraryMethod =
factory.createMethod(
emulatedInterfaces.get(theInterface.type), method.method.proto, method.method.name);