You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Lyuben Atanasov (Jira)" <ji...@apache.org> on 2021/04/23 14:56:00 UTC

[jira] [Updated] (GROOVY-10054) STC: Cannot infer lambda parameter types for a Stream Collector in a generic method

     [ https://issues.apache.org/jira/browse/GROOVY-10054?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Lyuben Atanasov updated GROOVY-10054:
-------------------------------------
    Description: 
This is a follow-up to GROOVY-10049. After the issue there had been fixed I was able to progress further with a chain of Stream method calls. However, the fix doesn't seem to cover the following case:
{code}
import java.util.stream.Collectors;

class Test {

	static interface Named {
		String getName();
	}

	<T extends Named> Map<String, List<T>> group(Set<T> namedObjects) {
		return namedObjects.stream()
			.collect(Collectors.groupingBy(named -> named.getName()));
	}
	
}
{code}
With static type checking enabled, an error is produced:
{noformat}
Script_ce61a645759c941d687680111f9bedbd.groovy: 11: [Static type checking] - Cannot find matching method java.lang.Object#getName(). Please check if the declared type is correct and if the method exists.
 @ line 11, column 44.
   ollectors.groupingBy(named -> named.getN
{noformat}

The difference between this issue and GROOVY-10049 is that the lambda passed here is not directly assigned to a Stream method. Of course, the issue is probably not limited to Collectors, but this is how I am able to reproduce it.
I've tested this against https://github.com/apache/groovy/commit/e07f0112c5eff8d9c6828bd0ddb69e4b7f7cc1d6

  was:
This is a follow-up for GROOVY-10049. After the issue there had been fixed I was able to progress further with a chain of Stream method calls. However, the fix doesn't seem to cover the following case:
{code}
import java.util.stream.Collectors;

class Test {

	static interface Named {
		String getName();
	}

	<T extends Named> Map<String, List<T>> group(Set<T> namedObjects) {
		return namedObjects.stream()
			.collect(Collectors.groupingBy(named -> named.getName()));
	}
	
}
{code}
With static type checking enabled, an error is produced:
{noformat}
Script_ce61a645759c941d687680111f9bedbd.groovy: 11: [Static type checking] - Cannot find matching method java.lang.Object#getName(). Please check if the declared type is correct and if the method exists.
 @ line 11, column 44.
   ollectors.groupingBy(named -> named.getN
{noformat}

The difference between this issue and GROOVY-10049 is that the lambda passed here is not directly assigned to a Stream method. Of course, the issue is probably not limited to Collectors, but this is how I am able to reproduce it.
I've tested this against https://github.com/apache/groovy/commit/e07f0112c5eff8d9c6828bd0ddb69e4b7f7cc1d6


> STC: Cannot infer lambda parameter types for a Stream Collector in a generic method
> -----------------------------------------------------------------------------------
>
>                 Key: GROOVY-10054
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10054
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static Type Checker
>         Environment: OpenJDK8
>            Reporter: Lyuben Atanasov
>            Priority: Major
>
> This is a follow-up to GROOVY-10049. After the issue there had been fixed I was able to progress further with a chain of Stream method calls. However, the fix doesn't seem to cover the following case:
> {code}
> import java.util.stream.Collectors;
> class Test {
> 	static interface Named {
> 		String getName();
> 	}
> 	<T extends Named> Map<String, List<T>> group(Set<T> namedObjects) {
> 		return namedObjects.stream()
> 			.collect(Collectors.groupingBy(named -> named.getName()));
> 	}
> 	
> }
> {code}
> With static type checking enabled, an error is produced:
> {noformat}
> Script_ce61a645759c941d687680111f9bedbd.groovy: 11: [Static type checking] - Cannot find matching method java.lang.Object#getName(). Please check if the declared type is correct and if the method exists.
>  @ line 11, column 44.
>    ollectors.groupingBy(named -> named.getN
> {noformat}
> The difference between this issue and GROOVY-10049 is that the lambda passed here is not directly assigned to a Stream method. Of course, the issue is probably not limited to Collectors, but this is how I am able to reproduce it.
> I've tested this against https://github.com/apache/groovy/commit/e07f0112c5eff8d9c6828bd0ddb69e4b7f7cc1d6



--
This message was sent by Atlassian Jira
(v8.3.4#803005)