-
Bug
-
Resolution: Duplicate
-
P3
-
None
-
12
-
x86
-
os_x
ADDITIONAL SYSTEM INFORMATION :
OS: macOS High Siera 10.13.6
Java:
openjdk 12 2019-03-19
OpenJDK Runtime Environment (build 12+33)
OpenJDK 64-Bit Server VM (build 12+33, mixed mode, sharing)
A DESCRIPTION OF THE PROBLEM :
when executing "java TeeingCollector.java" on macOS I get a compilation error. Executing the same command with the same class on other OS (Ubuntu/Windows) yields no error
video:
https://drive.google.com/file/d/1MiPObqxz7M4yomkxuKSRLsrccubYHpa2/view
REGRESSION : Last worked in version 12
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
execute on macOS
java TeeingCollector.java
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
[[foo, bar], [hello, world]]
ACTUAL -
TeeingCollector.java:14: error: incompatible types: inferred type does not conform to equality constraint(s)
.collect(Collectors.teeing(
^
inferred: List<String>
equality constraints(s): List<Object>,R
where R,T,A are type-variables:
R extends Object declared in method <T,A,R>filtering(Predicate<? super T>,Collector<? super T,A,R>)
T extends Object declared in method <T,A,R>filtering(Predicate<? super T>,Collector<? super T,A,R>)
A extends Object declared in method <T,A,R>filtering(Predicate<? super T>,Collector<? super T,A,R>)
1 error
error: compilation failed
---------- BEGIN SOURCE ----------
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import static java.util.function.Predicate.not;
public class TeeingCollector {
public static void main(String[] args) {
//var strs = List.of("abc");
var dividedStrings = Stream.of("foo", "hello", "bar", "world")
.collect(Collectors.teeing(
Collectors.filtering((String s) -> s.length() <= 3, Collectors.toList()),
Collectors.filtering((String s) -> s.length() > 3, Collectors.toList()),
List::of
));
System.out.println(dividedStrings);
}
private static class Employee {
boolean isActive;
public Employee(boolean isActive) {
this.isActive = isActive;
}
public boolean isActive() {
return isActive;
}
@Override
public String toString() {
return "Employee{" +
"isActive=" + isActive +
'}';
}
}
private static class MaxMin {
int max;
int min;
MaxMin(int max, int min) {
this.max = max;
this.min = min;
}
@Override
public String toString() {
return "MaxMin{" +
"max=" + max +
", min=" + min +
'}';
}
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
uncomment "var strs = List.of("abc");"
or explicitly specify stream type "Stream.<String>of("foo", "hello", "bar", "world") ..."
or first compile the class (javac) then execute it (java)
FREQUENCY : always
OS: macOS High Siera 10.13.6
Java:
openjdk 12 2019-03-19
OpenJDK Runtime Environment (build 12+33)
OpenJDK 64-Bit Server VM (build 12+33, mixed mode, sharing)
A DESCRIPTION OF THE PROBLEM :
when executing "java TeeingCollector.java" on macOS I get a compilation error. Executing the same command with the same class on other OS (Ubuntu/Windows) yields no error
video:
https://drive.google.com/file/d/1MiPObqxz7M4yomkxuKSRLsrccubYHpa2/view
REGRESSION : Last worked in version 12
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
execute on macOS
java TeeingCollector.java
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
[[foo, bar], [hello, world]]
ACTUAL -
TeeingCollector.java:14: error: incompatible types: inferred type does not conform to equality constraint(s)
.collect(Collectors.teeing(
^
inferred: List<String>
equality constraints(s): List<Object>,R
where R,T,A are type-variables:
R extends Object declared in method <T,A,R>filtering(Predicate<? super T>,Collector<? super T,A,R>)
T extends Object declared in method <T,A,R>filtering(Predicate<? super T>,Collector<? super T,A,R>)
A extends Object declared in method <T,A,R>filtering(Predicate<? super T>,Collector<? super T,A,R>)
1 error
error: compilation failed
---------- BEGIN SOURCE ----------
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import static java.util.function.Predicate.not;
public class TeeingCollector {
public static void main(String[] args) {
//var strs = List.of("abc");
var dividedStrings = Stream.of("foo", "hello", "bar", "world")
.collect(Collectors.teeing(
Collectors.filtering((String s) -> s.length() <= 3, Collectors.toList()),
Collectors.filtering((String s) -> s.length() > 3, Collectors.toList()),
List::of
));
System.out.println(dividedStrings);
}
private static class Employee {
boolean isActive;
public Employee(boolean isActive) {
this.isActive = isActive;
}
public boolean isActive() {
return isActive;
}
@Override
public String toString() {
return "Employee{" +
"isActive=" + isActive +
'}';
}
}
private static class MaxMin {
int max;
int min;
MaxMin(int max, int min) {
this.max = max;
this.min = min;
}
@Override
public String toString() {
return "MaxMin{" +
"max=" + max +
", min=" + min +
'}';
}
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
uncomment "var strs = List.of("abc");"
or explicitly specify stream type "Stream.<String>of("foo", "hello", "bar", "world") ..."
or first compile the class (javac) then execute it (java)
FREQUENCY : always
- relates to
-
JDK-8222035 minimal inference context optimization is forcing resolution with incomplete constraints
-
- Resolved
-