Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id EB51E200C82 for ; Sat, 22 Apr 2017 03:19:11 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id EA0B7160B97; Sat, 22 Apr 2017 01:19:11 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 2A25C160BC3 for ; Sat, 22 Apr 2017 03:19:10 +0200 (CEST) Received: (qmail 77330 invoked by uid 500); 22 Apr 2017 01:19:09 -0000 Mailing-List: contact commits-help@groovy.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@groovy.apache.org Delivered-To: mailing list commits@groovy.apache.org Received: (qmail 76443 invoked by uid 99); 22 Apr 2017 01:19:08 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 22 Apr 2017 01:19:08 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id D38EBF4A1F; Sat, 22 Apr 2017 01:19:08 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sunlan@apache.org To: commits@groovy.apache.org Date: Sat, 22 Apr 2017 01:19:38 -0000 Message-Id: <73e33574ccef4553afdfe8b7c65d38fe@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [31/40] 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 Hid archived-at: Sat, 22 Apr 2017 01:19:12 -0000 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/parrot Commit: 840f6b65d9bc115ff149bbce79886c02f64c094e Parents: 0768016 Author: Dmitrii Kahmitov Authored: Sun Apr 9 00:18:47 2017 +0300 Committer: paulk 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)" } }