Oracle traz getCallerClass de volta no Java 7
Decisão foi divulgada por Mark Reinhold, arquiteto-chefe da plataforma Java na Oracle, no Twitter.
No início de julho, a Oracle anunciou que o método sun.reflect.Reflection.getCallerClass() seria descontinuado. Entretanto, a empresa reverteu a decisão recentemente, 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 à 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. Já 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 segundo a classe chamadora, ou classes acima na pilha de chamadas.
Segundo a Oracle, chamadas como 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 desse método. O Grails também é impactado, e sua equipe informou um bug relacionado em seu issue tracker.
O problema ia além: utilizando-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.
Com informações de InfoQ







