mensagem de erro javac não exibe todo o caminho de arquivo

Ao usar o javac (ou a tarefa ant), a mensagem de erro não inclui o caminho inteiro do arquivo, ele inclui apenas o nome do arquivo. Por exemplo,

$ javac src/path/to/Filename.java Filename.java:1: package foo.bar does not exist import foo.bar.Baz; ^ 

O que eu gostaria é que

 $ javac src/path/to/Filename.java src/path/to/Filename.java:1: package foo.bar does not exist import foo.bar.Baz; ^ 

Meu problema é que o vim quickfix não funciona se não for dado todo o caminho do arquivo, não apenas o nome do arquivo. Com apenas o nome do arquivo, um novo arquivo vazio é aberto após a execução: make.

Estou a usar:

  • Debian wheezy
  • openjdk-6-jdk v6b23 ~ pre7-1
  • javac v1.6.0_23

Eu não acho que haja uma maneira simples de fazer isso.

No entanto, acredito que há um caminho complicado. Basicamente, envolve escrever seu próprio executor de compilador que faz uso da capacidade de uma instalação do JDK para carregar e executar o compilador Java dentro de um programa em execução. Você precisa implementar muitas coisas, mas o principal é um processador de diagnóstico que formata as mensagens de erro do compilador da maneira que você precisa que elas sejam formatadas.

Aqui estão alguns links relevantes:

  • Pacote javax.tools – fornece interfaces para ferramentas que podem ser chamadas a partir de um programa, por exemplo, compiladores.
  • JavaCompiler – a interface implementada pelo compilador
  • FileObject – a interface que o compilador usa para representar arquivos de origem; por exemplo, em diagnósticos. Observe o método toUri() !