GROOVY-7879: Groovy calls wrong method if there is a static method on an interface (minor refactor - closes #521)
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/57fb455f Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/57fb455f Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/57fb455f Branch: refs/heads/parrot Commit: 57fb455f5e65a92bfff4c0c80a18ca1d597fe19f Parents: 840f6b6 Author: paulk <[email protected]> Authored: Fri Apr 21 13:49:29 2017 +1000 Committer: paulk <[email protected]> Committed: Fri Apr 21 13:49:29 2017 +1000 ---------------------------------------------------------------------- .../runtime/methoddispatching/FooOne.java | 31 ------------ .../runtime/methoddispatching/FooThree.java | 53 -------------------- .../runtime/methoddispatching/FooTwo.java | 45 ----------------- ...StaticMethodOverloadCompileStaticTest.groovy | 45 ----------------- .../StaticMethodOverloadTest.groovy | 42 ---------------- .../runtime/methoddispatching/vm8/FooOne.java | 31 ++++++++++++ .../runtime/methoddispatching/vm8/FooThree.java | 53 ++++++++++++++++++++ .../runtime/methoddispatching/vm8/FooTwo.java | 45 +++++++++++++++++ ...StaticMethodOverloadCompileStaticTest.groovy | 45 +++++++++++++++++ .../vm8/StaticMethodOverloadTest.groovy | 42 ++++++++++++++++ 10 files changed, 216 insertions(+), 216 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/57fb455f/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 deleted file mode 100644 index 25e11c1..0000000 --- a/src/test/org/codehaus/groovy/runtime/methoddispatching/FooOne.java +++ /dev/null @@ -1,31 +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; - -interface FooOne { - static String foo() { - return "FooOne.foo()"; - } -} - -class BarOne implements FooOne { - static String foo() { - return "BarOne.foo()"; - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/57fb455f/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 deleted file mode 100644 index 5c0c7cb..0000000 --- a/src/test/org/codehaus/groovy/runtime/methoddispatching/FooThree.java +++ /dev/null @@ -1,53 +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; - -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 "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 a) { - return String.format("BarThree.foo(%1$d)", a); - } - - static String foo(int a, int b) { - return String.format("BarThree.foo(%1$d, %2$d)", a, b); - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/57fb455f/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 deleted file mode 100644 index ec54c49..0000000 --- a/src/test/org/codehaus/groovy/runtime/methoddispatching/FooTwo.java +++ /dev/null @@ -1,45 +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; - -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 "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 a) { - return String.format("BarTwo.foo(%1$d)", a); - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/57fb455f/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 deleted file mode 100644 index ba4e1d1..0000000 --- a/src/test/org/codehaus/groovy/runtime/methoddispatching/StaticMethodOverloadCompileStaticTest.groovy +++ /dev/null @@ -1,45 +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 - -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/57fb455f/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 deleted file mode 100644 index e12af7a..0000000 --- a/src/test/org/codehaus/groovy/runtime/methoddispatching/StaticMethodOverloadTest.groovy +++ /dev/null @@ -1,42 +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 StaticMethodOverloadTest 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/57fb455f/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/FooOne.java ---------------------------------------------------------------------- diff --git a/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/FooOne.java b/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/FooOne.java new file mode 100644 index 0000000..7e50432 --- /dev/null +++ b/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/FooOne.java @@ -0,0 +1,31 @@ +/* + * 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.vm8; + +interface FooOne { + static String foo() { + return "FooOne.foo()"; + } +} + +class BarOne implements FooOne { + static String foo() { + return "BarOne.foo()"; + } +} http://git-wip-us.apache.org/repos/asf/groovy/blob/57fb455f/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/FooThree.java ---------------------------------------------------------------------- diff --git a/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/FooThree.java b/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/FooThree.java new file mode 100644 index 0000000..d74871b --- /dev/null +++ b/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/FooThree.java @@ -0,0 +1,53 @@ +/* + * 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.vm8; + +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 "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 a) { + return String.format("BarThree.foo(%1$d)", a); + } + + static String foo(int a, int b) { + return String.format("BarThree.foo(%1$d, %2$d)", a, b); + } +} http://git-wip-us.apache.org/repos/asf/groovy/blob/57fb455f/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/FooTwo.java ---------------------------------------------------------------------- diff --git a/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/FooTwo.java b/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/FooTwo.java new file mode 100644 index 0000000..f91e9d8 --- /dev/null +++ b/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/FooTwo.java @@ -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.vm8; + +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 "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 a) { + return String.format("BarTwo.foo(%1$d)", a); + } +} http://git-wip-us.apache.org/repos/asf/groovy/blob/57fb455f/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/StaticMethodOverloadCompileStaticTest.groovy ---------------------------------------------------------------------- diff --git a/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/StaticMethodOverloadCompileStaticTest.groovy b/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/StaticMethodOverloadCompileStaticTest.groovy new file mode 100644 index 0000000..b62b978 --- /dev/null +++ b/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/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.vm8 + +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/57fb455f/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/StaticMethodOverloadTest.groovy ---------------------------------------------------------------------- diff --git a/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/StaticMethodOverloadTest.groovy b/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/StaticMethodOverloadTest.groovy new file mode 100644 index 0000000..1442421 --- /dev/null +++ b/src/test/org/codehaus/groovy/runtime/methoddispatching/vm8/StaticMethodOverloadTest.groovy @@ -0,0 +1,42 @@ +/* + * 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.vm8 + +class StaticMethodOverloadTest 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)" + } +}
