You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2015/03/23 16:43:31 UTC

tapestry-5 git commit: TAP5-2268: @Property may generate a method that conflicts with an existing one, without error, and with unpredictable results

Repository: tapestry-5
Updated Branches:
  refs/heads/master 8380211bc -> 6c7c090ea


TAP5-2268: @Property may generate a method that conflicts with an existing one, without error, and with unpredictable results


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/6c7c090e
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/6c7c090e
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/6c7c090e

Branch: refs/heads/master
Commit: 6c7c090eafa1c59972f9e28536ba9c2991fd701e
Parents: 8380211
Author: Felix Scheffer <ma...@felix-scheffer.de>
Authored: Mon Mar 23 15:55:53 2015 +0100
Committer: Jochen Kemnade <jo...@eddyson.de>
Committed: Mon Mar 23 16:43:04 2015 +0100

----------------------------------------------------------------------
 .../tapestry5/internal/plastic/InheritanceData.java  | 10 ++++++++--
 .../plastic/FieldPropertyMethodCreation.groovy       | 15 +++++++++++++++
 .../testsubjects/AccessorsAlreadyExistSubject2.java  | 15 +++++++++++++++
 3 files changed, 38 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/6c7c090e/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InheritanceData.java
----------------------------------------------------------------------
diff --git a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InheritanceData.java b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InheritanceData.java
index 44c1734..a9dc87d 100644
--- a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InheritanceData.java
+++ b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InheritanceData.java
@@ -137,9 +137,15 @@ public class InheritanceData
      * Combines a method name and its desc (which describes parameter types and return value) to form
      * a value, which is how methods are tracked.
      */
-    private String toValue(String name, String desc)
+    private static String toValue(String name, String desc)
     {
-        return name + ":" + desc;
+        // TAP5-2268: ignore return-type to avoid methods with the same number (and type) of parameters but different
+        //            return-types which is illegal in Java.
+        // desc is something like "(I)Ljava/lang/String;", which means: takes an int, returns a String. We strip
+        // everything after the parameter list.
+        int endOfParameterSpecIdx = desc.indexOf(')');
+
+        return name + ":" + desc.substring(0, endOfParameterSpecIdx+1);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/6c7c090e/plastic/src/test/groovy/org/apache/tapestry5/plastic/FieldPropertyMethodCreation.groovy
----------------------------------------------------------------------
diff --git a/plastic/src/test/groovy/org/apache/tapestry5/plastic/FieldPropertyMethodCreation.groovy b/plastic/src/test/groovy/org/apache/tapestry5/plastic/FieldPropertyMethodCreation.groovy
index 98b3121..62627d8 100644
--- a/plastic/src/test/groovy/org/apache/tapestry5/plastic/FieldPropertyMethodCreation.groovy
+++ b/plastic/src/test/groovy/org/apache/tapestry5/plastic/FieldPropertyMethodCreation.groovy
@@ -1,7 +1,9 @@
 package org.apache.tapestry5.plastic
 
+import spock.lang.Issue
 import testannotations.Property
 import testsubjects.AccessorsAlreadyExistSubject
+import testsubjects.AccessorsAlreadyExistSubject2;
 import testsubjects.CreateAccessorsSubject
 import testsubjects.GenericCreateAccessorsSubject
 
@@ -88,6 +90,19 @@ class FieldPropertyMethodCreation extends AbstractPlasticSpecification
         assert e.message == "Unable to create new accessor method public java.lang.String getValue() on class testsubjects.AccessorsAlreadyExistSubject as the method is already implemented."
     }
 
+    @Issue('https://issues.apache.org/jira/browse/TAP5-2268')
+    def "create getter that already exists with different return type"() {
+      when:
+
+      withAccessors(AccessorsAlreadyExistSubject2, PropertyAccessType.READ_ONLY)
+
+      then:
+
+      def e = thrown(IllegalArgumentException)
+
+      assert e.message == "Unable to create new accessor method public int getValue() on class testsubjects.AccessorsAlreadyExistSubject2 as the method is already implemented."
+    }
+
     def "create setter that already exists"() {
         when:
 

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/6c7c090e/plastic/src/test/java/testsubjects/AccessorsAlreadyExistSubject2.java
----------------------------------------------------------------------
diff --git a/plastic/src/test/java/testsubjects/AccessorsAlreadyExistSubject2.java b/plastic/src/test/java/testsubjects/AccessorsAlreadyExistSubject2.java
new file mode 100644
index 0000000..ba25fb4
--- /dev/null
+++ b/plastic/src/test/java/testsubjects/AccessorsAlreadyExistSubject2.java
@@ -0,0 +1,15 @@
+package testsubjects;
+
+import testannotations.Property;
+
+public class AccessorsAlreadyExistSubject2
+{
+    @Property
+    private int value;
+
+    public String getValue()
+    {
+        return String.valueOf(value);
+    }
+
+}