Hey Team,

When deprecating a symbol, like class or method, please included a reference to 
the replacement in the java docs. Also please include an example of converting 
from the old API to the new. I am finding many many places in the source where 
deprecated code has no hints at all. As many of us don’t take the effort to 
immediately convert old tests over to the new APIs the context is lost when 
someone finally does get around to it. For public APIs this is extremely 
important so that users know how to migrate their code with as few roadblocks 
as possible.

Here is an example of something that is much better than most of what I am 
seeing. 

/**
 * @deprecated Replaced with something better and safer.
 * Replaced by {@link Bar}.
 */
@Deprecated
class Foo {
  /**
   * Do something.
   *
   * @deprecated Replaced with something better.
   * Replaced by {@link Bar#doSomethingBetter()}
   */
  @Deprecated
  public void doSomething() {}

  /**
   * Do something.
   *
   * @deprecated Implementation is not safe.
   * Replaced with {@link Bar#doSomethingBetter()} and {@link 
Bar#doSomethingElse()}.
   * Migration example, replace:
   * <pre>{@code
   *   Foo foo = new Foo();
   *   foo.doSomethingAndSomethingElse();
   * }</pre>
   * with:
   * <pre>{@code
   *   Bar bar = Bar();
   *   bar.doSomethingBetter();
   *   bar.doSomethingElse();
   * }</pre>
   */
  @Deprecated
  public void doSomethingAndSomethingElse() {}
}

class Bar {
  public void doSomethingBetter() {}
  public void doSomethingElse() {}
}

-Jake

Reply via email to