aboutsummaryrefslogtreecommitdiff
path: root/dexmaker/src
diff options
context:
space:
mode:
authorPaul Duffin <paulduffin@google.com>2016-08-05 12:48:49 +0100
committerPaul Duffin <paulduffin@google.com>2016-08-09 14:43:45 +0100
commitcb6e5223823f9f9ad04da51c63548659062a4f43 (patch)
tree391da51d2dc825e9730b96376873d8713841491a /dexmaker/src
parentc3ebe2312233ea0c80bf0bbd282778022bd3582e (diff)
downloaddexmaker-cb6e5223823f9f9ad04da51c63548659062a4f43.tar.gz
Revert "Revert upstream change 924bb5b1c1718ac4c49d94e435739a6fd26dc986"
This reverts commit fa15287abbfcd141938d562b79377063c75e4b23. The following commit will fix the problem that caused this to be reverted. The fix will be done separately to this so that it is easier to push upstream at a later date. Bug: 30683723 Change-Id: Ieb0107b85f232d883efec9be2c61f413bf3687d7 Test: Run the dexmaker-tests as described in the Android.mk file
Diffstat (limited to 'dexmaker/src')
-rw-r--r--dexmaker/src/main/java/com/google/dexmaker/stock/ProxyBuilder.java9
-rw-r--r--dexmaker/src/test/java/com/google/dexmaker/stock/ProxyBuilderTest.java16
2 files changed, 21 insertions, 4 deletions
diff --git a/dexmaker/src/main/java/com/google/dexmaker/stock/ProxyBuilder.java b/dexmaker/src/main/java/com/google/dexmaker/stock/ProxyBuilder.java
index 49d1224..9b2545a 100644
--- a/dexmaker/src/main/java/com/google/dexmaker/stock/ProxyBuilder.java
+++ b/dexmaker/src/main/java/com/google/dexmaker/stock/ProxyBuilder.java
@@ -622,6 +622,11 @@ public final class ProxyBuilder<T> {
for (Class<?> c = baseClass; c != null; c = c.getSuperclass()) {
getMethodsToProxy(methodsToProxy, seenFinalMethods, c);
}
+ for (Class<?> c = baseClass; c != null; c = c.getSuperclass()) {
+ for (Class<?> i : c.getInterfaces()) {
+ getMethodsToProxy(methodsToProxy, seenFinalMethods, i);
+ }
+ }
for (Class<?> c : interfaces) {
getMethodsToProxy(methodsToProxy, seenFinalMethods, c);
}
@@ -688,10 +693,6 @@ public final class ProxyBuilder<T> {
}
sink.add(entry);
}
-
- for (Class<?> i : c.getInterfaces()) {
- getMethodsToProxy(sink, seenFinalMethods, i);
- }
}
private static <T> String getMethodNameForProxyOf(Class<T> clazz) {
diff --git a/dexmaker/src/test/java/com/google/dexmaker/stock/ProxyBuilderTest.java b/dexmaker/src/test/java/com/google/dexmaker/stock/ProxyBuilderTest.java
index 2dfac5e..5c499c8 100644
--- a/dexmaker/src/test/java/com/google/dexmaker/stock/ProxyBuilderTest.java
+++ b/dexmaker/src/test/java/com/google/dexmaker/stock/ProxyBuilderTest.java
@@ -882,6 +882,22 @@ public class ProxyBuilderTest extends TestCase {
assertEquals("no proxy", proxyFor(ExtenstionOfFinalInterfaceImpl.class).build().foo());
}
+ // https://code.google.com/p/dexmaker/issues/detail?id=9
+ public interface DeclaresMethodLate {
+ void thisIsTheMethod();
+ }
+
+ public static class MakesMethodFinalEarly {
+ public final void thisIsTheMethod() {}
+ }
+
+ public static class YouDoNotChooseYourFamily
+ extends MakesMethodFinalEarly implements DeclaresMethodLate {}
+
+ public void testInterfaceMethodMadeFinalBeforeActualInheritance() throws Exception {
+ proxyFor(YouDoNotChooseYourFamily.class).build();
+ }
+
/** Simple helper to add the most common args for this test to the proxy builder. */
private <T> ProxyBuilder<T> proxyFor(Class<T> clazz) throws Exception {
return ProxyBuilder.forClass(clazz)