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()
                 {

Reply via email to