You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2017/04/21 03:49:46 UTC

[2/3] groovy git commit: GROOVY-7879 Groovy calls wrong method if there is a static method on an interface * @CompileStatic test cases added * Test with more than two methods changed so it's valid Java code (JLS8, 8.4.8 Inheritance, Overriding, and Hidin

GROOVY-7879 Groovy calls wrong method if there is a static method on an interface * @CompileStatic test cases added * Test with more than two methods changed so it's valid Java code (JLS8, 8.4.8 Inheritance, Overriding, and Hiding)


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/840f6b65
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/840f6b65
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/840f6b65

Branch: refs/heads/master
Commit: 840f6b65d9bc115ff149bbce79886c02f64c094e
Parents: 0768016
Author: Dmitrii Kahmitov <kh...@gmail.com>
Authored: Sun Apr 9 00:18:47 2017 +0300
Committer: paulk <pa...@asert.com.au>
Committed: Fri Apr 21 13:14:46 2017 +1000

----------------------------------------------------------------------
 .../runtime/methoddispatching/BarOne.java       | 25 -----------
 .../runtime/methoddispatching/BarThree.java     | 25 -----------
 .../runtime/methoddispatching/BarTwo.java       | 25 -----------
 .../runtime/methoddispatching/FooOne.java       | 10 ++++-
 .../runtime/methoddispatching/FooThree.java     | 32 +++++++++++---
 .../runtime/methoddispatching/FooTwo.java       | 24 +++++++++--
 ...StaticMethodOverloadCompileStaticTest.groovy | 45 ++++++++++++++++++++
 .../StaticMethodOverloadTest.groovy             | 26 +++++------
 8 files changed, 112 insertions(+), 100 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/840f6b65/src/test/org/codehaus/groovy/runtime/methoddispatching/BarOne.java
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/runtime/methoddispatching/BarOne.java b/src/test/org/codehaus/groovy/runtime/methoddispatching/BarOne.java
deleted file mode 100644
index 56daeeb..0000000
--- a/src/test/org/codehaus/groovy/runtime/methoddispatching/BarOne.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.runtime.methoddispatching;
-
-class BarOne implements FooOne {
-    static String foo() {
-        return "I'm Bar";
-    }
-}

http://git-wip-us.apache.org/repos/asf/groovy/blob/840f6b65/src/test/org/codehaus/groovy/runtime/methoddispatching/BarThree.java
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/runtime/methoddispatching/BarThree.java b/src/test/org/codehaus/groovy/runtime/methoddispatching/BarThree.java
deleted file mode 100644
index 63686b3..0000000
--- a/src/test/org/codehaus/groovy/runtime/methoddispatching/BarThree.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.runtime.methoddispatching;
-
-class BarThree implements FooThree {
-    static String foo() {
-        return "I'm Bar";
-    }
-}

http://git-wip-us.apache.org/repos/asf/groovy/blob/840f6b65/src/test/org/codehaus/groovy/runtime/methoddispatching/BarTwo.java
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/runtime/methoddispatching/BarTwo.java b/src/test/org/codehaus/groovy/runtime/methoddispatching/BarTwo.java
deleted file mode 100644
index 84a8f02..0000000
--- a/src/test/org/codehaus/groovy/runtime/methoddispatching/BarTwo.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.runtime.methoddispatching;
-
-class BarTwo implements FooTwo {
-    static String foo() {
-        return "I'm Bar";
-    }
-}

http://git-wip-us.apache.org/repos/asf/groovy/blob/840f6b65/src/test/org/codehaus/groovy/runtime/methoddispatching/FooOne.java
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/runtime/methoddispatching/FooOne.java b/src/test/org/codehaus/groovy/runtime/methoddispatching/FooOne.java
index f1bac0f..25e11c1 100644
--- a/src/test/org/codehaus/groovy/runtime/methoddispatching/FooOne.java
+++ b/src/test/org/codehaus/groovy/runtime/methoddispatching/FooOne.java
@@ -20,6 +20,12 @@ package org.codehaus.groovy.runtime.methoddispatching;
 
 interface FooOne {
     static String foo() {
-        return "I'm Foo";
+        return "FooOne.foo()";
     }
-}
\ No newline at end of file
+}
+
+class BarOne implements FooOne {
+    static String foo() {
+        return "BarOne.foo()";
+    }
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/840f6b65/src/test/org/codehaus/groovy/runtime/methoddispatching/FooThree.java
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/runtime/methoddispatching/FooThree.java b/src/test/org/codehaus/groovy/runtime/methoddispatching/FooThree.java
index 9f897ea..5c0c7cb 100644
--- a/src/test/org/codehaus/groovy/runtime/methoddispatching/FooThree.java
+++ b/src/test/org/codehaus/groovy/runtime/methoddispatching/FooThree.java
@@ -18,16 +18,36 @@
  */
 package org.codehaus.groovy.runtime.methoddispatching;
 
+import org.codehaus.groovy.runtime.metaclass.MetaMethodIndex;
+
+/**
+ * To test the case when we call a static method on a class and while we load all the methods from its interface,
+ * {@link MetaMethodIndex.Entry} contains more than one method from interface already
+ */
 interface FooThree {
     static String foo() {
-        return "I'm Foo";
+        return "FooThree.foo()";
+    }
+
+    static String foo(int a) {
+        return String.format("FooThree.foo(%1$d)", a);
+    }
+
+    static String foo(int a, int b) {
+        return String.format("FooThree.foo(%1$d, %2$d)", a, b);
+    }
+}
+
+class BarThree implements FooThree {
+    static String foo() {
+        return "BarThree.foo()";
     }
 
-    static String foo(int num) {
-        return String.valueOf(num);
+    static String foo(int a) {
+        return String.format("BarThree.foo(%1$d)", a);
     }
 
-    static String foo(boolean bool) {
-        return String.valueOf(bool);
+    static String foo(int a, int b) {
+        return String.format("BarThree.foo(%1$d, %2$d)", a, b);
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/840f6b65/src/test/org/codehaus/groovy/runtime/methoddispatching/FooTwo.java
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/runtime/methoddispatching/FooTwo.java b/src/test/org/codehaus/groovy/runtime/methoddispatching/FooTwo.java
index b7b315b..ec54c49 100644
--- a/src/test/org/codehaus/groovy/runtime/methoddispatching/FooTwo.java
+++ b/src/test/org/codehaus/groovy/runtime/methoddispatching/FooTwo.java
@@ -18,12 +18,28 @@
  */
 package org.codehaus.groovy.runtime.methoddispatching;
 
+import org.codehaus.groovy.runtime.metaclass.MetaMethodIndex;
+
+/**
+ * To test the case when we call a static method on a class and {@link MetaMethodIndex.Entry}
+ * contains more than one method from interface already
+ */
 interface FooTwo {
     static String foo() {
-        return "I'm Foo";
+        return "FooTwo.foo()";
+    }
+
+    static String foo(int a) {
+        return String.format("FooTwo.foo(%1$d)", a);
+    }
+}
+
+class BarTwo implements FooTwo {
+    static String foo() {
+        return "BarTwo.foo()";
     }
 
-    static String foo(int num) {
-        return String.valueOf(num);
+    static String foo(int a) {
+        return String.format("BarTwo.foo(%1$d)", a);
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/840f6b65/src/test/org/codehaus/groovy/runtime/methoddispatching/StaticMethodOverloadCompileStaticTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/runtime/methoddispatching/StaticMethodOverloadCompileStaticTest.groovy b/src/test/org/codehaus/groovy/runtime/methoddispatching/StaticMethodOverloadCompileStaticTest.groovy
new file mode 100644
index 0000000..ba4e1d1
--- /dev/null
+++ b/src/test/org/codehaus/groovy/runtime/methoddispatching/StaticMethodOverloadCompileStaticTest.groovy
@@ -0,0 +1,45 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.codehaus.groovy.runtime.methoddispatching
+
+import groovy.transform.CompileStatic
+
+@CompileStatic
+class StaticMethodOverloadCompileStaticTest extends GroovyTestCase {
+    void testOneStaticMethod() {
+        assert FooOne.foo() == "FooOne.foo()"
+        assert BarOne.foo() == "BarOne.foo()"
+    }
+
+    void testTwoStaticMethods() {
+        assert FooTwo.foo() == "FooTwo.foo()"
+        assert FooTwo.foo(0) == "FooTwo.foo(0)"
+        assert BarTwo.foo() == "BarTwo.foo()"
+        assert BarTwo.foo(0) == "BarTwo.foo(0)"
+    }
+
+    void testMoreThanTwoStaticMethods() {
+        assert FooThree.foo() == "FooThree.foo()"
+        assert FooThree.foo(0) == "FooThree.foo(0)"
+        assert FooThree.foo(0, 1) == "FooThree.foo(0, 1)"
+        assert BarThree.foo() == "BarThree.foo()"
+        assert BarThree.foo(0) == "BarThree.foo(0)"
+        assert BarThree.foo(0, 1) == "BarThree.foo(0, 1)"
+    }
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/840f6b65/src/test/org/codehaus/groovy/runtime/methoddispatching/StaticMethodOverloadTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/runtime/methoddispatching/StaticMethodOverloadTest.groovy b/src/test/org/codehaus/groovy/runtime/methoddispatching/StaticMethodOverloadTest.groovy
index 2df115f..e12af7a 100644
--- a/src/test/org/codehaus/groovy/runtime/methoddispatching/StaticMethodOverloadTest.groovy
+++ b/src/test/org/codehaus/groovy/runtime/methoddispatching/StaticMethodOverloadTest.groovy
@@ -19,24 +19,24 @@
 package org.codehaus.groovy.runtime.methoddispatching
 
 class StaticMethodOverloadTest extends GroovyTestCase {
-    void testOneStaticMethod() throws Exception {
-        assert FooOne.foo() == "I'm Foo"
-        assert BarOne.foo() == "I'm Bar"
+    void testOneStaticMethod() {
+        assert FooOne.foo() == "FooOne.foo()"
+        assert BarOne.foo() == "BarOne.foo()"
     }
 
     void testTwoStaticMethods() {
-        assert FooTwo.foo(42) == '42'
-        assert FooTwo.foo() == "I'm Foo"
-        assert BarTwo.foo(42) == '42'
-        assert BarTwo.foo() == "I'm Bar"
+        assert FooTwo.foo() == "FooTwo.foo()"
+        assert FooTwo.foo(0) == "FooTwo.foo(0)"
+        assert BarTwo.foo() == "BarTwo.foo()"
+        assert BarTwo.foo(0) == "BarTwo.foo(0)"
     }
 
     void testMoreThanTwoStaticMethods() {
-        assert FooThree.foo(42) == '42'
-        assert FooThree.foo() == "I'm Foo"
-        assert FooThree.foo(true) == 'true'
-        assert BarThree.foo(42) == '42'
-        assert BarThree.foo() == "I'm Bar"
-        assert BarThree.foo(true) == 'true'
+        assert FooThree.foo() == "FooThree.foo()"
+        assert FooThree.foo(0) == "FooThree.foo(0)"
+        assert FooThree.foo(0, 1) == "FooThree.foo(0, 1)"
+        assert BarThree.foo() == "BarThree.foo()"
+        assert BarThree.foo(0) == "BarThree.foo(0)"
+        assert BarThree.foo(0, 1) == "BarThree.foo(0, 1)"
     }
 }