JDK 12 RFR of JDK-8146726 : Refactor AbstractProcessor to use Set.of and related methods
joe darcy
joe.darcy at oracle.com
Thu Nov 29 02:09:32 UTC 2018
Hi Ron,
Adding Stuart for a collections consult; Stuart, what is the currently
recommended idiom to construct a unmodifiable collection with the same
elements as a existing collection? In particular, for a set of Strings
is something like
Set.of(stringSet(new String[0]))
preferred over
Collections.unmodifiableSet(stringSet);
Assume serialization is not a concern.
On 11/27/2018 1:23 PM, Ron Shapiro wrote:
> Set.of() throws if there are duplicate elements - but arrayToSet()
> didn't do so. Is it intended to throw if either of these take duplicates?
>
Good catch.
After some pondering, I think it is preferable for AbstractProcessor to
not treat duplicates as an error, but to issue a warning in if
duplicates are found. Arguably, it would have been reasonable to treat
such condition as an error initially when the API was introduced, but
adding such a check now could have some unnecessary behavioral
compatibility impact. The case to add an erroneous check for options is
stronger than for supported annotations because supported annotations
have some additional processing if modules are not present. In more
detail, with modules to fully specify an annotation type, the module
name needs to be used: "mod1/foo.bar" vs "mod2/foo.bar". If such a
processor is run when modules are not used, then the names are stripped
to "foo.bar" in both cases and that should not be treated as an error.
Revised webrev:
http://cr.openjdk.java.net/~darcy/8146726.3/
Will possibly update based on guidance from Stuart on the collections
usage question.
Thanks,
-Joe
More information about the compiler-dev
mailing list