Repository: groovy Updated Branches: refs/heads/GROOVY_2_4_X 24519ec6a -> 96748cca8
GROOVY-8439: @CompileStatic cannot compile generic class's static method (cherry picked from commit 7b73c6a) Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/96748cca Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/96748cca Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/96748cca Branch: refs/heads/GROOVY_2_4_X Commit: 96748cca8ad94ff125b4b52768a73218ca13b21d Parents: 24519ec Author: danielsun1106 <realblue...@hotmail.com> Authored: Sat Mar 10 22:16:06 2018 +0800 Committer: danielsun1106 <realblue...@hotmail.com> Committed: Sat Mar 10 22:39:46 2018 +0800 ---------------------------------------------------------------------- src/test/groovy/bugs/Groovy8439Bug.groovy | 63 ++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/96748cca/src/test/groovy/bugs/Groovy8439Bug.groovy ---------------------------------------------------------------------- diff --git a/src/test/groovy/bugs/Groovy8439Bug.groovy b/src/test/groovy/bugs/Groovy8439Bug.groovy new file mode 100644 index 0000000..13af477 --- /dev/null +++ b/src/test/groovy/bugs/Groovy8439Bug.groovy @@ -0,0 +1,63 @@ +/* + * 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 + +class Groovy8439Bug extends GroovyTestCase { + void testSTCGenerics() { + assertScript ''' + import groovy.transform.CompileStatic + @CompileStatic + class Test<T extends Task> { + static def something(Task task, Collection<BaseVariant> variants) { + variants.collectMany { it.sourceFolders }.collect { ConfigurableFileTree tree -> + task.getBuildDir().toPath().relativize(tree.dir.toPath()).toString() + File.separator + } + } + } + + interface BaseVariant { + List<ConfigurableFileTree> getSourceFolders() + } + + interface ConfigurableFileTree { + File getDir() + } + + interface Task { + File getBuildDir() + } + + Test.something(null, []) + ''' + } + + void testSTCGenerics2() { + assertScript ''' + import groovy.transform.CompileStatic + @CompileStatic + class Test<T extends Map> { + static def something(List<String> strList) { + strList.collect { "hello,$it" } + } + } + + assert ["hello,Jochen", "hello,Paul", "hello,Daniel"] == Test.something(["Jochen", "Paul", "Daniel"]) + ''' + } +}