eclipse-jdt / eclipse-jdt/eclipse.jdt.core
Type Inference in builder pattern is inconsistent with javac
- Dominant language
- Java
- Stars
- 237
- Forks
- 195
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 47
Description
```java
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.function.Function;
public class BuilderTest {
public static void main(String[] args) {
// passed.
Builder builder1 = builderOfStage(e -> CompletableFuture.completedFuture("test1"));
// failed. Type mismatch: cannot convert from Builder to Builder
Builder builder2 = builderOfStage(e -> CompletableFuture.completedFuture("test2")).withAsync();
}
@SuppressWarnings({ "unchecked", "rawtypes" })
static Builder builderOfStage(Function> fallback) {
return new Builder(fallback);
}
}
class Builder {
boolean async;
Builder(Function> fallbackStage) {
}
public Builder withAsync() {
async = true;
return this;
}
}
```
In javac, both "builder1" and "builder2" compile fine.
In ecj, "builder1" passed, but "builder2" failed with error message "Type mismatch: cannot convert from Builder\ to Builder\".
Contributor guide
Assessment
This issue has not been assessed yet.