Repository: tapestry-5 Updated Branches: refs/heads/master 4d75eace4 -> 46426d83e
TAP5-2588: not proxying interface static methods. Patch provided by Dmitrios Zenios Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/46426d83 Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/46426d83 Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/46426d83 Branch: refs/heads/master Commit: 46426d83edb8191e930f0f637d9e2a33859f42dd Parents: 4d75eac Author: Thiago H. de Paula Figueiredo <thi...@arsmachina.com.br> Authored: Wed Dec 5 21:26:05 2018 -0200 Committer: Thiago H. de Paula Figueiredo <thi...@arsmachina.com.br> Committed: Wed Dec 5 21:26:05 2018 -0200 ---------------------------------------------------------------------- .../internal/plastic/PlasticClassImpl.java | 19 +++++++++----- .../tapestry5/plastic/MethodProxying.groovy | 27 ++++++++++++++++++++ .../test/java/testinterfaces/WithStatic.java | 7 +++++ .../tapestry5/ioc/internal/ModuleImpl.java | 4 --- 4 files changed, 46 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/46426d83/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java ---------------------------------------------------------------------- diff --git a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java index 223109a..b86b8d0 100644 --- a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java +++ b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java @@ -619,15 +619,15 @@ public class PlasticClassImpl extends Lockable implements PlasticClass, Internal introduceInterface(interfaceType); // TAP5-2582: avoiding adding/delegating the same method more than once -// for (Method m : interfaceType.getMethods()) -// { -// introduceMethod(m).delegateTo(field); -// } - Map<MethodSignature, MethodDescription> map = createMethodSignatureMap(interfaceType); for (MethodSignature methodSignature : map.keySet()) { - introduceMethod(map.get(methodSignature)).delegateTo(field); + final MethodDescription description = map.get(methodSignature); + if(Modifier.isStatic(description.modifiers)) + { + continue; + } + introduceMethod(description).delegateTo(field); } return this; @@ -646,6 +646,11 @@ public class PlasticClassImpl extends Lockable implements PlasticClass, Internal Map<MethodSignature, MethodDescription> map = createMethodSignatureMap(interfaceType); for (MethodSignature methodSignature : map.keySet()) { + final MethodDescription description = map.get(methodSignature); + if(Modifier.isStatic(description.modifiers)) + { + continue; + } introduceMethod(map.get(methodSignature)).delegateTo(method); } @@ -1456,7 +1461,7 @@ public class PlasticClassImpl extends Lockable implements PlasticClass, Internal // MethodDescription description = new MethodDescription(m); final MethodDescription description = map.get(methodSignature); - if (!isMethodImplemented(description) && !isDefaultMethod(methodSignature.method)) + if (!isMethodImplemented(description) && !isDefaultMethod(methodSignature.method) && !Modifier.isStatic(description.modifiers)) { // introducedMethods.add(introduceMethod(m)); introducedMethods.add(introduceMethod(description)); http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/46426d83/plastic/src/test/groovy/org/apache/tapestry5/plastic/MethodProxying.groovy ---------------------------------------------------------------------- diff --git a/plastic/src/test/groovy/org/apache/tapestry5/plastic/MethodProxying.groovy b/plastic/src/test/groovy/org/apache/tapestry5/plastic/MethodProxying.groovy index 512508d..22e41b6 100644 --- a/plastic/src/test/groovy/org/apache/tapestry5/plastic/MethodProxying.groovy +++ b/plastic/src/test/groovy/org/apache/tapestry5/plastic/MethodProxying.groovy @@ -1,6 +1,7 @@ package org.apache.tapestry5.plastic import testsubjects.Memory +import testinterfaces.WithStatic class MethodProxying extends AbstractPlasticSpecification { @@ -29,6 +30,32 @@ class MethodProxying extends AbstractPlasticSpecification { 1 * mockRunnable.run() } + def "Proxying with static methods"() { + setup: + + def mockRunnable = Mock(Runnable.class) + + def o = mgr.createClass(Object, { PlasticClass pc -> + + def field = pc.introduceField(Runnable, "delegate").inject(mockRunnable) + + pc.proxyInterface(WithStatic, field) + } as PlasticClassTransformer).newInstance() + + expect: + + WithStatic.isInstance o + o.version() == 1 + + when: + + o.run() + + then: + + 1 * mockRunnable.run() + } + def "proxy method with arguments and return value"() { setup: http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/46426d83/plastic/src/test/java/testinterfaces/WithStatic.java ---------------------------------------------------------------------- diff --git a/plastic/src/test/java/testinterfaces/WithStatic.java b/plastic/src/test/java/testinterfaces/WithStatic.java new file mode 100644 index 0000000..e3150f3 --- /dev/null +++ b/plastic/src/test/java/testinterfaces/WithStatic.java @@ -0,0 +1,7 @@ +package testinterfaces; + +public interface WithStatic extends Runnable { + static int version() { + return 1; + } +} http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/46426d83/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ModuleImpl.java ---------------------------------------------------------------------- diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ModuleImpl.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ModuleImpl.java index 51f864c..37ce2bf 100644 --- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ModuleImpl.java +++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ModuleImpl.java @@ -510,10 +510,6 @@ public class ModuleImpl implements Module }); plasticClass.proxyInterface(serviceInterface, delegateMethod); -// for (Method m : serviceInterface.getMethods()) -// { -// plasticClass.introduceMethod(m).delegateTo(delegateMethod); -// } plasticClass.introduceMethod(WRITE_REPLACE).changeImplementation(new InstructionBuilderCallback() {