diff options
author | Paul Duffin <paulduffin@google.com> | 2016-08-05 12:48:49 +0100 |
---|---|---|
committer | Paul Duffin <paulduffin@google.com> | 2016-08-09 14:43:45 +0100 |
commit | cb6e5223823f9f9ad04da51c63548659062a4f43 (patch) | |
tree | 391da51d2dc825e9730b96376873d8713841491a /dexmaker/src | |
parent | c3ebe2312233ea0c80bf0bbd282778022bd3582e (diff) | |
download | dexmaker-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.java | 9 | ||||
-rw-r--r-- | dexmaker/src/test/java/com/google/dexmaker/stock/ProxyBuilderTest.java | 16 |
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) |