Estou finalizando um sisteminha para geração de arquivos XML e gostaria de começar a preparar testes automatizados porque daqui a pouco começarei a receber os dados necessários para a geração do XML. Eu deveria ter feito este testes antes, mas enfim, nem sempre as coisas acontecem do jeito que a gente quer…
O ponto é que ao compilar pelo Ant eu recebo um erro:
Buildfile: C:\desenvolvimento\workspace\lalala\build.xml
init:
compile:
[javac] Compiling 129 source files to C:\desenvolvimento\workspace\lalala\build
[javac] The system is out of resources.
[javac] Consult the following stack trace for details.
[javac] java.lang.StackOverflowError
[javac] at com.sun.tools.javac.code.Types.adapt(Types.java:3014)
[javac] at com.sun.tools.javac.code.Types.adaptRecursive(Types.java:2977)
[javac] at com.sun.tools.javac.code.Types.adaptRecursive(Types.java:2986)
[javac] at com.sun.tools.javac.code.Types.adapt(Types.java:3016)
[javac] at com.sun.tools.javac.code.Types.adaptRecursive(Types.java:2977)
[javac] at com.sun.tools.javac.code.Types.adaptRecursive(Types.java:2986)
[javac] at com.sun.tools.javac.code.Types.adapt(Types.java:3016)
BUILD FAILED
C:\desenvolvimento\workspace\lalala\build.xml:13: Compile failed; see the compiler error output for details.
Já dei uma olhada no build.xml mas não consegui encontrar problemas:
Eu acabo de seguir a sua sugestão, embora não tenha resolvido o problema. De qualquer forma estou dando uma lida na documentação que vc me mandou.
Um detalhe que não mencionei: as três últimas linhas do stackTrace do erro se repetem indefinidamente. Isso provavelmente está ligado ou “out of resources”.
Hoje curiosamente o erro está diferente! Não fiz mudanças significativas no código, só adicionei testes automatizados e mudei algumas classes de pacote. Vejam:
[javac] The system is out of resources.
[javac] Consult the following stack trace for details.
[javac] java.lang.StackOverflowError
[javac] at com.sun.tools.javac.code.Types$1.visitWildcardType(Types.java:98)
[javac] at com.sun.tools.javac.code.Type$WildcardType.accept(Type.java:416)
[javac] at com.sun.tools.javac.code.Types$MapVisitor.visit(Types.java:3232)
[javac] at com.sun.tools.javac.code.Types.upperBound(Types.java:95)
[javac] at com.sun.tools.javac.code.Types.adaptRecursive(Types.java:2986)
[javac] at com.sun.tools.javac.code.Types.adapt(Types.java:3016)
[javac] at com.sun.tools.javac.code.Types.adaptRecursive(Types.java:2977)
[javac] at com.sun.tools.javac.code.Types.adaptRecursive(Types.java:2986)
[javac] at com.sun.tools.javac.code.Types.adapt(Types.java:3016)
[javac] at com.sun.tools.javac.code.Types.adaptRecursive(Types.java:2977)
[javac] at com.sun.tools.javac.code.Types.adaptRecursive(Types.java:2986)
[javac] at com.sun.tools.javac.code.Types.adapt(Types.java:3016)
Pelas primeiras linhas acredito que seja algo ligado a tipos genéricos mas não consegui identificar o que exatamente. Depois de mudar para o JDK 5 (Costumo usar JDK 6) eu consegui receber uma mensagem de erro um pouco melhor, informando problema relacionado a um cast na saída de um método que retorna um tipo genérico. Modifiquei o código para que não fosse mais necessário o cast mas recebi uma mensagem muito parecida com a anterior, tanto no JDK 5 como no JDK 6:
[javac] The system is out of resources.
[javac] Consult the following stack trace for details.
[javac] java.lang.StackOverflowError
[javac] at com.sun.tools.javac.code.Types$MapVisitor.visit(Types.java:3232)
[javac] at com.sun.tools.javac.code.Types.upperBound(Types.java:95)
[javac] at com.sun.tools.javac.code.Types.adaptRecursive(Types.java:2986)
[javac] at com.sun.tools.javac.code.Types.adapt(Types.java:3016)
[javac] at com.sun.tools.javac.code.Types.adaptRecursive(Types.java:2977)
[javac] at com.sun.tools.javac.code.Types.adaptRecursive(Types.java:2986)
[javac] at com.sun.tools.javac.code.Types.adapt(Types.java:3016)
Curiosamente, tentei novamente hj de manhã e agora foi exibido um erro mais específico!
Todos os problemas são muito parecidos, segue um exemplo abaixo:
[javac] C:\desenvolvimento\workspace\lalala\src\main\java\br\com\visagio\modelo\auxiliares\resultado\ResultadoQuadroResumo.java:191: inconvertible types
[javac] found : br.com.lalala.modelo.auxiliares.abstratas.Resultado<capture#479 of ?,capture#732 of ?,capture#356 of ?>
[javac] required: br.com.lalala.modelo.auxiliares.resultado.ResultadoTarifacao
[javac] adicionarTarifacao((ResultadoTarifacao) resultadoAdicionavel);
Vamos ao trecho de código especificado:
[code]
if (resultadoAdicionavel instanceof ResultadoTarifacao) {
Qual seria o problema aqui? Pensando apenas na linha do cast, eu até entenderia um problema em tempo de execução (ClassCastException), mas não na compilação. E se considerar o “if” logo acima, não vejo problema nem em tempo de execução, pois o objeto seria verificado antes.
Obs: Eu costumo evitar cast’s ao extremo, sempre uso tipos genéricos, mas no fim encontrei uma classe que fugia a regra e acabei optando por criar algo mais simples usando cast’s.