Pergunta

Eu estou tentando escrever regras para a detecção de alguns erros em anotada programas Java multi-threaded. Como um exemplo de brinquedo, eu gostaria de detectar se qualquer método anotado com @ThreadSafe chama um método sem uma anotação tal, sem sincronização. Eu estou procurando uma ferramenta que permita-me a escrever este teste a.

Eu olhei analisadores de origem, como CheckStyle e PMD, e eles realmente não têm capacidades de análise de classe cruz. analisadores de bytecode, como FindBugs e JLint parecer um pouco difícil estender.

Eu me contentaria com uma solução para algo ainda mais simples, mas colocando a mesma dificuldade: escrever um costume regra que verifica se cada método anulado é anotado com @Override.

Foi útil?

Solução

Você já tentou FindBugs ? É realmente suporta um conjunto de anotações para segurança do thread (o mesmo que os utilizados em Java Concurrency in Practice ). Além disso, você pode escrever suas próprias regras personalizadas. Eu não tenho certeza se você pode fazer uma análise de classe cruz, mas eu acredito que sim.

Peter Ventjeer tem um verificação de simultaneidade ferramenta (que usos ASM) para detectar coisas como esta. Eu não tenho certeza se ele está liberado publicamente, mas ele poderia capaz de ajudá-lo.

E eu acredito estática da Coverity / ferramentas de análise dinâmica para a segurança do thread que verificar como esta.

Outras dicas

Você pode fazer uma análise cross-classe em PMD (embora eu nunca tenha -lo usado para esse fim específico). Eu acho que é possível usar este padrão do visitante que eles documentam, embora Vou deixar os detalhes para você.

A ferramenta simples para Checkup anotações é apt ( http: //java.sun.com/j2se/1.5.0/docs/guide/apt/ também faz parte do Java 6 api em javax.annotation.processing) no entanto isso só tem informações de tipo (ou seja, eu não poderia encontrar uma maneira rápida de chegar à hierarquia de herança usando a API javax.lang.model, no entanto, se você pode carregar a classe você pode obter essa informação usando a reflexão).

Tente javap + expressões regulares (ex. Perl)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top