Some comments based on my limited testing (just recompiled existing code with 18.0rc1, not attempt at new APIs):
- Deprecation of Iterators.emptyIterator() results in more code than expected because the suggested replacement, ImmutableSet.of().iterator(), doesn't work well with Java's limited type inference. In practice I have to write ImmutableSet.<SomeType>of().iterator(). Still the deprecation seems sensible, it's a trivial utility and not terribly often used, maybe only improve the javadoc for replacement code so people won't copy-paste the suggested snippet then scratch their heads when it doesn't compile?
- Why not deprecating the entire Objects class already? Now with toStringHelper() moved to MoreObjects, every method here is deprecated or "should treat as deprecated", which is kinda painful but necessary since JDK 7 introduced its own Objects class. The current library already causes my project build to spit hundreds of warnings because I use ToStringHelper extensively, it can't get any uglier than that for non-migrated code / code that opts to run with v18 but keep build compatibility with 17.