Repository: groovy Updated Branches: refs/heads/GROOVY_2_6_X 6e47e6df4 -> ddebbeca2
Revert "GROOVY-7721: Static type checking fails when compiling against a Java interface call (closes #599)" This reverts commit 34df6cf461a5ecce66f2c2c0f14489cf96feaf34. (cherry picked from commit 695b7af) Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/22635dac Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/22635dac Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/22635dac Branch: refs/heads/GROOVY_2_6_X Commit: 22635dac48a84152fecc887e5a919efdd52009be Parents: 6e47e6d Author: sunlan <sun...@apache.org> Authored: Wed Sep 13 22:35:50 2017 +0800 Committer: sunlan <sun...@apache.org> Committed: Wed Sep 13 22:47:48 2017 +0800 ---------------------------------------------------------------------- .../stc/StaticTypeCheckingSupport.java | 11 +-- src/test/groovy/bugs/Groovy7721Bug.groovy | 80 -------------------- 2 files changed, 2 insertions(+), 89 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/22635dac/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java ---------------------------------------------------------------------- diff --git a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java index eb208fe..98fb157 100644 --- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java +++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java @@ -1149,20 +1149,13 @@ public abstract class StaticTypeCheckingSupport { private static void removeMethodWithSuperReturnType(List<MethodNode> toBeRemoved, MethodNode one, MethodNode two) { ClassNode oneRT = one.getReturnType(); ClassNode twoRT = two.getReturnType(); - if (isCovariant(oneRT, twoRT)) { + if (oneRT.isDerivedFrom(twoRT) || oneRT.implementsInterface(twoRT)) { toBeRemoved.add(two); - } else if (isCovariant(twoRT, oneRT)) { + } else if (twoRT.isDerivedFrom(oneRT) || twoRT.implementsInterface(oneRT)) { toBeRemoved.add(one); } } - private static boolean isCovariant(ClassNode left, ClassNode right) { - if (left.isArray() && right.isArray()) { - return isCovariant(left.getComponentType(), right.getComponentType()); - } - return left.isDerivedFrom(right) || left.implementsInterface(right); - } - private static boolean areOverloadMethodsInSameClass(MethodNode one, MethodNode two) { return one.getName().equals(two.getName()) && one.getDeclaringClass() == two.getDeclaringClass(); } http://git-wip-us.apache.org/repos/asf/groovy/blob/22635dac/src/test/groovy/bugs/Groovy7721Bug.groovy ---------------------------------------------------------------------- diff --git a/src/test/groovy/bugs/Groovy7721Bug.groovy b/src/test/groovy/bugs/Groovy7721Bug.groovy deleted file mode 100644 index f316a2a..0000000 --- a/src/test/groovy/bugs/Groovy7721Bug.groovy +++ /dev/null @@ -1,80 +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 groovy.bugs - -import org.codehaus.groovy.control.CompilerConfiguration -import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit - -class Groovy7721Bug extends GroovyTestCase { - void testCovariantArrayAtOverriding() { - def config = new CompilerConfiguration() - config.with { - targetDirectory = createTempDir() - jointCompilationOptions = [stubDir: createTempDir()] - } - - File parentDir = createTempDir() - try { - def a = new File(parentDir, 'A.java') - a.write ''' - package pack; - interface A { - Object[] bar(); - } - - ''' - def b = new File(parentDir, 'B.java') - b.write ''' - package pack; - interface B extends A { - @Override - String[] bar(); - } - ''' - - def c = new File(parentDir, 'C.groovy') - c.write ''' - import groovy.transform.CompileStatic - - @CompileStatic - class C { - static def bar(pack.B b) { - b.bar() - } - } - ''' - def loader = new GroovyClassLoader(this.class.classLoader) - def cu = new JavaAwareCompilationUnit(config, loader) - cu.addSources([a, b, c] as File[]) - cu.compile() - } finally { - parentDir.deleteDir() - config.targetDirectory?.deleteDir() - config.jointCompilationOptions.stubDir?.deleteDir() - } - - } - - private static File createTempDir() { - File.createTempDir("groovyTest${System.currentTimeMillis()}", "") - } - -}