You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2016/07/13 13:33:41 UTC
[2/2] tapestry-5 git commit: TAP5-2449: PropertyConduitSource can't
see Java 8 default methods
TAP5-2449: PropertyConduitSource can't see Java 8 default methods
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/91af872e
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/91af872e
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/91af872e
Branch: refs/heads/master
Commit: 91af872e168718b6a719154674fb802b85d7ba20
Parents: d5e4c8f
Author: Jochen Kemnade <jo...@eddyson.de>
Authored: Wed Jul 13 15:27:38 2016 +0200
Committer: Jochen Kemnade <jo...@eddyson.de>
Committed: Wed Jul 13 15:27:38 2016 +0200
----------------------------------------------------------------------
.../internal/services/PropertyAccessImpl.java | 20 +++++++++++++-------
.../ioc/specs/PropertyAccessImplSpec.groovy | 14 ++++++++++++++
.../test/java/com/example/TestInterface.java | 7 +++++++
3 files changed, 34 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/91af872e/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImpl.java
----------------------------------------------------------------------
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImpl.java
index 8dd1e02..00d08e2 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImpl.java
@@ -101,10 +101,10 @@ public class PropertyAccessImpl implements PropertyAccess
List<PropertyDescriptor> descriptors = CollectionFactory.newList();
addAll(descriptors, info.getPropertyDescriptors());
-
- // TAP5-921 - Introspector misses interface methods not implemented in an abstract class
- if (forClass.isInterface() || Modifier.isAbstract(forClass.getModifiers()) )
- addPropertiesFromExtendedInterfaces(forClass, descriptors);
+ // Introspector misses:
+ // - interface methods not implemented in an abstract class (TAP5-921)
+ // - default methods (TAP5-2449)
+ addPropertiesFromExtendedInterfaces(forClass, descriptors);
addPropertiesFromScala(forClass, descriptors);
@@ -118,16 +118,22 @@ public class PropertyAccessImpl implements PropertyAccess
private <T> void addAll(List<T> list, T[] array)
{
- list.addAll(Arrays.asList(array));
+ if (array.length > 0){
+ list.addAll(Arrays.asList(array));
+ }
}
private void addPropertiesFromExtendedInterfaces(Class forClass, List<PropertyDescriptor> descriptors)
throws IntrospectionException
{
- LinkedList<Class> queue = CollectionFactory.newLinkedList();
+ Class[] interfaces = forClass.getInterfaces();
+ if (interfaces.length == 0){
+ return;
+ }
+ LinkedList<Class> queue = CollectionFactory.newLinkedList();
// Seed the queue
- addAll(queue, forClass.getInterfaces());
+ addAll(queue, interfaces);
while (!queue.isEmpty())
{
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/91af872e/tapestry-ioc/src/test/groovy/ioc/specs/PropertyAccessImplSpec.groovy
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/test/groovy/ioc/specs/PropertyAccessImplSpec.groovy b/tapestry-ioc/src/test/groovy/ioc/specs/PropertyAccessImplSpec.groovy
index c76817f..7fa6581 100644
--- a/tapestry-ioc/src/test/groovy/ioc/specs/PropertyAccessImplSpec.groovy
+++ b/tapestry-ioc/src/test/groovy/ioc/specs/PropertyAccessImplSpec.groovy
@@ -1,5 +1,6 @@
package ioc.specs
+import com.example.TestInterface
import java.awt.Image
import java.beans.*
import java.lang.reflect.Method
@@ -796,4 +797,17 @@ class PropertyAccessImplSpec extends Specification {
private Method findMethod(Class beanClass, String methodName) {
return beanClass.methods.find { it.name == methodName }
}
+
+
+ public static class TestData implements TestInterface {
+ }
+
+ // TAP5-2449
+ def "default method is recognized"(){
+ when:
+ def pa = getPropertyAdapter(TestData, 'testString')
+ then:
+ pa != null
+
+ }
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/91af872e/tapestry-ioc/src/test/java/com/example/TestInterface.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/test/java/com/example/TestInterface.java b/tapestry-ioc/src/test/java/com/example/TestInterface.java
new file mode 100644
index 0000000..b031857
--- /dev/null
+++ b/tapestry-ioc/src/test/java/com/example/TestInterface.java
@@ -0,0 +1,7 @@
+package com.example;
+
+public interface TestInterface {
+ public default String getTestString() {
+ return "Alpha";
+ }
+}