Por que está lá em primeiro lugar?
Você verificou código instável na linha principal? Por quê?
O código instável não deve ser verificado no tronco / principal / mestre ou seja qual for o nome do tronco principal. Isso é considerado um desenvolvimento de alto risco e, em vez disso, deveria ter sido isolado em seu próprio ramo em que você trabalhou, em vez de fazer o check-in no main.
Eu o incentivaria fortemente (e o líder da sua equipe) a ler Estratégias avançadas de ramificação do SCM . Em particular, preste atenção ao papel do desenvolvimento e ao que ele diz sobre o que é considerado desenvolvimento de alto risco:
Em geral, considere o uso de ramificações separadas para cada projeto de alto risco. Projetos de alto risco são caracterizados por tamanho grande, grande número de pessoas, assuntos desconhecidos, assuntos altamente técnicos, prazos muito curtos, datas de entrega incertas, requisitos incompletos ou voláteis e equipes de projeto distribuídas geograficamente. Da mesma forma, considere designar uma única ramificação para desenvolvimento de baixo risco em cada release. Várias fontes, incluindo [WING98], recomendam o uso da linha principal para esse fim. Considere os fatores discutidos acima para a linha principal antes de se comprometer com este curso de ação. O desenvolvimento de baixo risco pode ter uma política diferente da linha principal, mesmo se você tiver vários membros de uma família de produtos coordenando a linha principal.
Permitir que as pessoas verifiquem código instável (ou não usado) na linha principal significa que você confundirá esforços futuros de desenvolvimento sobre a tentativa de manter esse código. Cada ramo e clone do representante a partir de agora até o final dos tempos conterá isso até que alguém diga "seu código morto" e o exclua.
Há quem diga "bem, se estiver em um ramo, ele será esquecido" e, embora isso possa ser verdade, ter esquecido o código morto (e instável) na linha principal é muitas vezes pior, pois confunde todo o desenvolvimento futuro até que seja removido - e então é ainda mais esquecido. Um ramo bem nomeado de "/ fooProject / branches / WeisBigIdea" (ou equivalente) é visível e mais fácil de se trabalhar no futuro - especialmente se funcionar.
@Deprecated
A primeira coisa é a @Deprecatedanotação. Isso vai além do javadoc e cospe avisos do compilador. javacfornece um -deprecationsinalizador descrito como:
Mostre uma descrição de cada uso ou substituição de um membro ou classe reprovada. Sem -deprecation, javacmostra um resumo dos arquivos de origem que usam ou substituem membros ou classes obsoletos. -preciação é uma abreviação de -Xlint:deprecation.
Como observado, isso vai além dos avisos padrão do compilador.
Em muitos IDEs, métodos e valores obsoletos são mostrados com um rasurado:
foo.bar();
E produziria saída como:
$ javac -Xlint:all Foo.java Bar.java
Bar.java:2: warning: [deprecation] Foo in unnamed package has been deprecated
interface Bar extends Foo { }
^
Dependendo da sua estrutura de construção, você pode receber avisos para interromper a construção. Isso apenas interromperia a compilação se uma de suas classes fosse usada (não se for simplesmente compilada).
@CustomAnnotation
Existem muitas abordagens para isso. Por exemplo, a anotação Lightweight javac @Warning, que fornece um processador de anotações que dispara um aviso no momento da compilação quando algo com essa anotação é usado ( um tutorial do netbeans sobre processadores de anotações personalizados, para que você possa ter uma idéia do que está acontecendo por trás do cenas).
A Oracle ainda descreve um exemplo de uso de anotações personalizadas para uma @Unfinishedanotação em Aproveitando ao máximo os metadados do Java, parte 2: anotações personalizadas .
Com o AnnotationProcessor , você pode executar código arbitrário em tempo de compilação. É realmente você quem decide o que deseja fazer. Aviso, quebre a construção quando algo for usado. Existem inúmeros tutoriais disponíveis na Web sobre como escrever esse tipo de código. Se você deseja gerar um erro quando ele é compilado (isso será irritante e leva à exclusão) ou se é usado (um pouco mais complexo de escrever).
Observe que tudo isso implica alterar as compilações para realmente usar o processador de anotações.