eclipse-jdt / eclipse-jdt/eclipse.jdt.core

Type Inference in builder pattern is inconsistent with javac

Open
#494 2 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.