You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Robert Papp (JIRA)" <ji...@apache.org> on 2018/01/10 00:21:00 UTC
[jira] [Created] (GROOVY-8439) @CompileStatic cannot compile
generic class's static method
Robert Papp created GROOVY-8439:
-----------------------------------
Summary: @CompileStatic cannot compile generic class's static method
Key: GROOVY-8439
URL: https://issues.apache.org/jira/browse/GROOVY-8439
Project: Groovy
Issue Type: Bug
Components: Static compilation
Affects Versions: 2.4.12
Environment: Windows 10, IRL @CompileStatic applied via groovyOptions.configurationScript:
withConfig(configuration) { ast(groovy.transform.CompileStatic) }
Reporter: Robert Papp
Priority: Blocker
Below code is a simplification of a Gradle API + Android Gradle Plugin consuming code:
{code}
@CompileStatic
class Test<T extends Task> {
static def something(Task task, Collection<BaseVariant> variants) {
variants
.collectMany {it.sourceFolders}
.collect {ConfigurableFileTree tree ->
task.buildDir.toPath().relativize(tree.dir.toPath()).toString() + File.separator
}
}
}
interface BaseVariant {
List<ConfigurableFileTree> getSourceFolders()
}
interface ConfigurableFileTree {
File getDir()
}
interface Task {
File getBuildDir()
}
{code}
Removing {{<T extends Task>}} makes it compile, otherwise:
{code}
test\src\main\groovy\Test.groovy: 8: Expected parameter of type Task but got ConfigurableFileTree
@ line 8, column 15.
.collect {ConfigurableFileTree tree ->
^
test\src\main\groovy\Test.groovy: 9: [Static type checking] - No such property: dir for class: Task
@ line 9, column 38.
task.buildDir.toPath().relativize(tree.dir.toPath()).toString() + File.separator
^
test\src\main\groovy\Test.groovy: 9: [Static type checking] - Cannot find matching method java.nio.file.Path#relativize(java.lang.Object). Please check if the declared type is right and if the method exists.
@ line 9, column 4.
task.buildDir.toPath().relativize(tree.dir.toPath()).toString() + File.separator
^
3 errors
:checkstyle:compileGroovy FAILED
{code}
So far I haven't found a workaround other than removing generics!
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)