You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2021/04/25 22:06:01 UTC
[jira] [Resolved] (GROOVY-10053) STC: Wrong type inferred for
lambda parameter in a generic method
[ https://issues.apache.org/jira/browse/GROOVY-10053?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Eric Milles resolved GROOVY-10053.
----------------------------------
Fix Version/s: 4.0.0-beta-1
Resolution: Fixed
> STC: Wrong type inferred for lambda parameter in a generic method
> -----------------------------------------------------------------
>
> Key: GROOVY-10053
> URL: https://issues.apache.org/jira/browse/GROOVY-10053
> Project: Groovy
> Issue Type: Bug
> Components: Static Type Checker
> Environment: OpenJDK8
> Reporter: Lyuben Atanasov
> Assignee: Eric Milles
> Priority: Major
> Fix For: 4.0.0-beta-1
>
>
> Following the fix of GROOVY-10049, a new issue has appeared. Consider the following code example:
> {code}
> class Test {
> Set<Number> getNumbers() {
> // mock return value, needed to demonstrate the issue
> return Collections.emptySet();
> }
>
> <T extends Number> Set<T> filterNumbers(Class<T> numberType) {
> Set<T> filteredNumbers = new HashSet<>();
> getNumbers().stream()
> .filter(numberType::isInstance)
> .map(numberType::cast)
> .forEach(num -> {
> filteredNumbers.add(num);
> });
> return filteredNumbers;
> }
> }
> def test = new Test()'
> test.filterNumbers(Integer);
> {code}
> Compiling with static type checking enabled produces an error:
> {noformat}
> Script_de4295e2a5171ce6c5ecd73605504d73.groovy: 14: [Static type checking] - Cannot call java.util.Set#add(T) with arguments [R]
> @ line 14, column 5.
> filteredNumbers.add(num);
> {noformat}
> This used to work fine before applying the fix for GROOVY-10049. Tested against https://github.com/apache/groovy/commit/e07f0112c5eff8d9c6828bd0ddb69e4b7f7cc1d6
--
This message was sent by Atlassian Jira
(v8.3.4#803005)