A Oracle anunciou no início de julho que o método sun.reflect.Reflection.getCallerClass() seria descontinuado. Mas recentemente a empresa reverteu a decisão, como indicado no tweet do arquiteto-chefe da plataforma Java na Oracle, Mark Reinhold (com menção a Cedric Champeu e Guillaume Laforge):
Vamos reincluir o getCallerClass(int) no 7u40. O destino desse método no 8 ainda será decidido.
Cédric Champeau retuitou Reinhold com o seguinte comentário:
Boas notícias: o pessoal do JDK decidiu reverter o comportamento do getCallerClass no 1.7u40 e 1.8. O Groovy e sistemas de logging não serão quebrados.
Champeau é o principal committer da linguagem Groovy e Laforge é Líder de Desenvolvimento Groovy na SpringSource (mantenedora do Groovy).
O método sun.reflect.Reflection.getCallerClass() funciona retornando a instância da classe do método certo número de frames acima na pilha de chamadas (call stack), sendo que a própria classe Reflect representa a posição zero.
O método getCallerClass() oferece um mecanismo para determinar a classe do chamador, possibilitando implementar comportamentos "sensíveis ao chamador". Com isso, aplicações podem variar seu comportamento de acordo com a classe chamadora, ou classes acima na pilha de chamadas.
A Oracle alertou que chamadas como o getCallerClass() e muitas outras no pacote sun.* podem se mostrar frágeis e inconsistentes, por razões descritas em seu artigo "Por que desenvolvedores não devem escrever programas que chamam o pacote 'sun'". A notícia da alteração para deprecated estava sendo acompanhada no issue tracker da OTN.
Cédric Champeau alertou antecipadamente para a mudança do método para deprecated pois o Groovy depende deste método. E não é apenas o Groovy que é impactado; o Grails também. A equipe do Grails informou um bug relacionado em seu issue tracker.
O problema ia além. Usando-se ferramentas de pesquisa de código-fonte público, encontram-se dependências para o getCallerClass() em vários projetos, incluindo alguns da própria Oracle como o Jigsaw e o Lambda, e outros projetos de terceiros como o IntelliJ IDEA.
Substituto
by Fernando Xavier,
Substituto
by Fernando Xavier,
Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!
Geralmente se faz algo melhor antes de depreciar alguma coisa, anunciaram um substituto pra esse método?