palantir / palantir/conjure-java
Generated object builders don't guard against method name conflicts
Open
Nobody has claimed this yet.
bug
- Dominant language
- Java
- Stars
- 39
- Forks
- 49
- Avg merge
- 8h 22m
- Merged PRs (30d)
- 32
Description
Consider the following object definition:
types:
definitions:
objects:
ConflictedObject:
foo: list<string>
addAllFoo: list<string>
The generated Java implementation fails to compile, as the builder ends up with the following pair of methods:
public Builder addAllFoo(Iterable<String> foo) {
ConjureCollections.addAll(this.foo, Objects.requireNonNull(foo, "foo cannot be null"));
return this;
}
@JsonSetter("addAllFoo")
public Builder addAllFoo(Iterable<String> addAllFoo) {
this.addAllFoo.clear();
ConjureCollections.addAll(
this.addAllFoo, Objects.requireNonNull(addAllFoo, "addAllFoo cannot be null"));
return this;
}
It seems like the first method's name should be munged in some way to avoid the conflict, like addAllFoo_.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
No source file or test is named. Reproduce the ConflictedObject YAML example and inspect the generated Java builder methods; done means the generated implementation compiles without a method-name collision while retaining both object-field behaviors.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 48/100