Community
Participate
Working Groups
Hello, Sorry by my english. It´s very, very bad. The error is: when I try to compile my project I receive the following error: ------------------------------------------------------------------------------ [ajc] C:\GrupoStela\cgee\Integracao Continua\empresa\temp_src\br\org\cgee\inovacao\favoritos\controle\dao\favoritoRe sultado\FavoritoResultadoDAOImpl.java [error] Internal compiler error [ajc] java.lang.NullPointerException [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding.canBeSeenBy (FieldBinding.java:144) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding.getVisibleBind ing(FieldBinding.java:324) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Scope.findField (Scope.java:814) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findSi ngleStaticImport(CompilationUnitScope.java:482) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findSi ngleImport(CompilationUnitScope.java:465) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultI nImports(CompilationUnitScope.java:331) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultI nTypes(CompilationUnitScope.java:400) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process (Compiler.java:507) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile (Compiler.java:329) [ajc] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation (AjBuildManager.java:759) [ajc] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild (AjBuildManager.java:225) [ajc] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild (AjBuildManager.java:151) [ajc] at org.aspectj.ajdt.ajc.AjdtCommand.doCommand (AjdtCommand.java:112) [ajc] at org.aspectj.ajdt.ajc.AjdtCommand.runCommand (AjdtCommand.java:60) [ajc] at org.aspectj.tools.ajc.Main.run(Main.java:326) [ajc] at org.aspectj.tools.ant.taskdefs.Ajc10.spoon(Ajc10.java:598) [ajc] at org.aspectj.tools.ant.taskdefs.Ajc10.execute(Ajc10.java:484) [ajc] at org.apache.tools.ant.UnknownElement.execute (UnknownElement.java:275) [ajc] at org.apache.tools.ant.Task.perform(Task.java:364) [ajc] at org.apache.tools.ant.Target.execute(Target.java:341) [ajc] at org.apache.tools.ant.Target.performTasks(Target.java:369) [ajc] at org.apache.tools.ant.Project.executeSortedTargets (Project.java:1216) [ajc] at org.apache.tools.ant.Project.executeTarget(Project.java:1185) [ajc] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets (DefaultExecutor.java:40) [ajc] at org.apache.tools.ant.Project.executeTargets (Project.java:1068) [ajc] at org.apache.tools.ant.Main.runBuild(Main.java:668) [ajc] at org.apache.tools.ant.Main.startAnt(Main.java:187) [ajc] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246) [ajc] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67) [ajc] [ajc] (no source information available) [ajc] ABORT [ajc] [ajc] Exception thrown from AspectJ 1.5.0M4 [ajc] [ajc] This might be logged as a bug already -- find current bugs at [ajc] http://bugs.eclipse.org/bugs/buglist.cgi? product=AspectJ&component=Compiler [ajc] [ajc] Bugs for exceptions thrown have titles File:line from the top stack, [ajc] e.g., "SomeFile.java:243" [ajc] [ajc] If you don't find the exception below in a bug, please add a new bug [ajc] at http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ [ajc] To make the bug a priority, please include a test program [ajc] that can reproduce this exception. [ajc] [ajc] when processing compilation unit C:\GrupoStela\cgee\Integracao Continua\empresa\temp_src\br\org\cgee\inovacao\favoritos\controle\dao\favoritoRe sultado\FavoritoResultadoDAOImpl.java [ajc] when batch building with classpath: C:\Arquivos de programas\Java\jdk1.5.0_04\jre\lib\ext\dnsns.jar;C:\Arquivos de programas\Java\jdk1.5.0_04\jre\lib\ext\localedata.jar;C:\Arquivos de programas\Java\jdk1.5.0_04\jre\lib\ext\sunjce_provider.jar;C:\Arquivos de programas\Java\jdk1.5.0_04 \jre\lib\ext\sunpkcs11.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\AspectjLogger.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\CargaXMLEmpresa.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\FWStelaDataSet.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\FWStelaDynApi.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\StelaMail.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\StelaTextGenerator.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\activation.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\ajl.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\ant.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\aspectjrt.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\catalina-optional.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\catalina.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\classes12.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\commons-beanutils.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\commons-collections- 3.1.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\commons- collections.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\commons- dbcp-1.2.1.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\commons- digester.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\commons- el.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\commons- logging.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\commons- modeler.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\commons- pool-1.2.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\jakarta- regexp-1.3.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\jasper- compiler.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\jasper- runtime.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\jsp- api.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\logUsuario.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\mail.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\mini-concurrent.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\mini-j2ee.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\mx4j-jmx.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\naming-common.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\naming-factory.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\naming-java.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\naming-resources.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\ojdbc14.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\saxon8.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\servlet-api.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\servlets-common.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\servlets-default.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\servlets-invoker.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\tomcat-coyote.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\tomcat-http11.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\tomcat-jk2.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\tomcat-util.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\velocity-1.4.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\velocity-dep-1.4.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\winstone_v0.6.4.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\xalan.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\temp_lib\xml-apis.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\aspectjlogger\AspectjLogger.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\aspectjlogger\aspectjrt.jar;C:\GrupoStela\cgee\Integracao Continua\empresa\aspectjlogger\junit.jar; [ajc] null [ajc] java.lang.NullPointerException [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding.canBeSeenBy (FieldBinding.java:144) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding.getVisibleBind ing(FieldBinding.java:324) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Scope.findField (Scope.java:814) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findSi ngleStaticImport(CompilationUnitScope.java:482) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findSi ngleImport(CompilationUnitScope.java:465) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultI nImports(CompilationUnitScope.java:331) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultI nTypes(CompilationUnitScope.java:400) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process (Compiler.java:507) [ajc] at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile (Compiler.java:329) [ajc] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation (AjBuildManager.java:759) [ajc] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild (AjBuildManager.java:225) [ajc] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild (AjBuildManager.java:151) [ajc] at org.aspectj.ajdt.ajc.AjdtCommand.doCommand (AjdtCommand.java:112) [ajc] at org.aspectj.ajdt.ajc.AjdtCommand.runCommand (AjdtCommand.java:60) [ajc] at org.aspectj.tools.ajc.Main.run(Main.java:326) [ajc] at org.aspectj.tools.ant.taskdefs.Ajc10.spoon(Ajc10.java:598) [ajc] at org.aspectj.tools.ant.taskdefs.Ajc10.execute(Ajc10.java:484) [ajc] at org.apache.tools.ant.UnknownElement.execute (UnknownElement.java:275) [ajc] at org.apache.tools.ant.Task.perform(Task.java:364) [ajc] at org.apache.tools.ant.Target.execute(Target.java:341) [ajc] at org.apache.tools.ant.Target.performTasks(Target.java:369) [ajc] at org.apache.tools.ant.Project.executeSortedTargets (Project.java:1216) [ajc] at org.apache.tools.ant.Project.executeTarget(Project.java:1185) [ajc] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets (DefaultExecutor.java:40) [ajc] at org.apache.tools.ant.Project.executeTargets (Project.java:1068) [ajc] at org.apache.tools.ant.Main.runBuild(Main.java:668) [ajc] at org.apache.tools.ant.Main.startAnt(Main.java:187) [ajc] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246) [ajc] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67) ------------------------------------------------------------------------------ The code that launch de error is: ------------------------------------------------------------------------------ package br.org.cgee.inovacao.favoritos.controle.dao.favoritoResultado; import static br.org.cgee.inovacao.favoritos.controle.dao.favoritoResultado.FavoritoResultadoC onsts.SQL_DELETE_BY_PRIMARY_KEY; import static br.org.cgee.inovacao.favoritos.controle.dao.favoritoResultado.FavoritoResultadoC onsts.SQL_DELETE_BY_SEQ_ID_FAVORITO; import static br.org.cgee.inovacao.favoritos.controle.dao.favoritoResultado.FavoritoResultadoC onsts.SQL_INSERT; import static br.org.cgee.inovacao.favoritos.controle.dao.favoritoResultado.FavoritoResultadoC onsts.SQL_SELECT_BY_SEQ_ID_FAVORITO; import static br.org.cgee.inovacao.favoritos.controle.dao.favoritoResultado.FavoritoResultadoC onsts.SQL_UPDATE_BY_SEQ_ID_RESULTADO; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.LinkedList; import java.util.List; import br.org.cgee.inovacao.favoritos.modelo.Favorito; import br.org.cgee.inovacao.favoritos.modelo.FavoritoResultado; import br.org.cgee.inovacao.favoritos.util.ConnectionFactory; /** * <p>Title: Implementação da interface FavoritoResultadoDAO</p> * <p>Description: Classe que implementa a interface FavoritoResultadoDAO para realizar o CRUD (create, read, update e delete) na * entidade FavoritoResultado. Esta classe não deve ser instanciada diretamente, deve-se utilizar a interface * FavoritoResultadoDAO e obter uma implementação através da factory br.org.cgee.inovacao.favoritos.fao.DAOFactory. * </p> * Exemplo: * </p> * FavoritoResultadoDAO objFavoritoResultado = * DAOFactory.newInstance().getFavoritoResultadoDAO(); * * </p> * <p>Copyright: Copyright (c) 2005</p> * <p>Company: Institulo Stela</p> * @see Favorito * @author Alessandro * @version 1.0 */ public class FavoritoResultadoDAOImpl implements FavoritoResultadoDAO { private Connection conexao; private boolean isTx; /** * Construtor default */ public FavoritoResultadoDAOImpl(){ this.isTx = false; } /** * Construtor que aceita uma Connection. Deve ser usado quando for necessário controle de transação * * @param contTx uma conexão com "autoCommit" igual a false */ public FavoritoResultadoDAOImpl(Connection conTx){ this.conexao = conTx; this.isTx = true; } /** * Recupera uma instância da entidade FavoritoResultado a partir de seus * dois campos de identificação: seqIdFavorito e seqIdResultadoBusca * * @param seqIdFavorito um dos campos de identificação de FavoritoResultado * @param seqIdResultadoBusca um dos campos de identificação de FavoritoResultado * @return objeto que representa a entidade FavoritoResultado * @throws FavoritoResultadoDAOException qualquer erro ocorrido * @see FavoritoResultado */ public List<FavoritoResultado> read(int seqIdFavorito) throws FavoritoResultadoDAOException { List<FavoritoResultado> lista = new LinkedList<FavoritoResultado>(); PreparedStatement pst = null; ResultSet rs = null; try { this.carregarConexao(); pst = this.conexao.prepareStatement (SQL_SELECT_BY_SEQ_ID_FAVORITO); pst.setInt(1, seqIdFavorito); rs = pst.executeQuery(); while (rs.next()) lista.add(new FavoritoResultado(seqIdFavorito, rs.getInt("SEQ_ID_RESULTADO_BUSCA"))); } catch (Exception e){ throw new FavoritoResultadoDAOException("Erro em " + this.getClass().getName() + ".read(int seqIdFavorito): " + e.toString(), e); }finally { this.liberarRecursos(rs, pst); this.liberarConexao(); } return lista; } /** * Persiste uma instância da entidade FavoritoResultado * * @param entidade objeto que representa a entidade FavoritoResultado * @throws FavoritoResultadoDAOException qualquer erro ocorrido * @see FavoritoResultado */ public void create(FavoritoResultado entidade) throws FavoritoResultadoDAOException { PreparedStatement pst = null; try{ this.carregarConexao(); pst = this.conexao.prepareStatement(SQL_INSERT); pst.setInt(1, entidade.getSeqIdFavorito()); pst.setInt(2, entidade.getSeqIdResultadoBusca()); pst.executeUpdate(); this.commit(); }catch(Exception e){ this.rollBack(); throw new FavoritoResultadoDAOException("Erro em " + this.getClass().getName() + ".create(FavoritoResultado entidade)", e); }finally { this.liberarRecursos(pst); this.liberarConexao(); } } /** * Atualiza uma instância da entidade FavoritoResultado * * @param entidade objeto que representa a entidade FavoritoResultado * @throws FavoritoResultadoDAOException qualquer erro ocorrido * @see FavoritoResultado */ public void update(FavoritoResultado entidade) throws FavoritoResultadoDAOException { PreparedStatement pst = null; try{ this.carregarConexao(); pst = this.conexao.prepareStatement (SQL_UPDATE_BY_SEQ_ID_RESULTADO); pst.setInt(1, entidade.getSeqIdFavorito()); // Campo a ser atualizado pst.setInt(2, entidade.getSeqIdResultadoBusca()); // Campo usado para localizar o registro pst.executeUpdate(); this.commit(); }catch(Exception e){ throw new FavoritoResultadoDAOException(e); }finally { this.liberarRecursos(pst); this.liberarConexao(); } } /** * Exclui uma instância da entidade FavoritoResultado a partir de seus * dois campos de identificação: seqIdFavorito e seqIdResultadoBusca * * @param seqIdFavorito um dos campos de identificação de FavoritoResultado * @param seqIdResultadoBusca um dos campos de identificação de FavoritoResultado * @throws FavoritoResultadoDAOException qualquer erro ocorrido * @see FavoritoResultado */ public void delete(int seqIdFavorito, int seqIdResultadoBusca) throws FavoritoResultadoDAOException { PreparedStatement pst = null; try{ this.carregarConexao(); pst = this.conexao.prepareStatement (SQL_DELETE_BY_PRIMARY_KEY); pst.setInt(1, seqIdFavorito); pst.setInt(2, seqIdResultadoBusca); pst.executeUpdate(); this.commit(); }catch(Exception e){ throw new FavoritoResultadoDAOException("Erro em " + this.getClass().getName() + ".delete(int seqIdFavorito, int seqIdResultadoBusca)", e); }finally { this.liberarRecursos(pst); this.liberarConexao(); } } public void delete(int seqIdFavorito) throws FavoritoResultadoDAOException { PreparedStatement pst = null; try{ this.carregarConexao(); pst = this.conexao.prepareStatement (SQL_DELETE_BY_SEQ_ID_FAVORITO); pst.setInt(1, seqIdFavorito); pst.executeUpdate(); this.commit(); }catch(Exception e){ throw new FavoritoResultadoDAOException("Erro em " + this.getClass().getName() + ".delete(int seqIdFavorito)",e); }finally { this.liberarRecursos(pst); this.liberarConexao(); } } /** * Realiza o commit. Só realmente realizará o commit quando a operação realizada não fizer * parte uma transação. Isso ocorre quando um objeto desta classe é instanciado com o construtor default. * * @throws qualquer erro ocorrido */ private void commit() throws Exception { if (!this.isTx) this.conexao.commit(); } /** * Realiza o rollback. Só realmente realizará o rollback quando a operação realizada não fizer * parte uma transação. Isso ocorre quando um objeto desta classe é instanciado com o construtor default. * */ private void rollBack() { try { if (!this.isTx) this.conexao.rollback(); } catch (Exception e){} } /** * Carrega uma conexao do pool. Só realmente carregará essa conexao se operação a ser realizada não fizer * parte uma transação. Isso ocorre quando um objeto desta classe é instanciado com o construtor default. * * @throws qualquer erro ocorrido */ private void carregarConexao() throws Exception { if (!this.isTx) this.conexao = ConnectionFactory.getConnection(); } /** * Libera a conexao para o pool. Isso só realmente ocorrerá se a operação que está sendo realizada não fizer * parte uma transação. Isso ocorre quando um objeto desta classe é instanciado com o construtor default. */ private void liberarConexao() { try { if (!this.isTx) ConnectionFactory.liberarConnection(this.conexao); } catch (Exception e){} } /** * Libera os recursos utilizados no acesso ao banco de dados. * * @param rs objeto ResultSet * @param st objeto Statement * * @see java.sql.ResultSet * @see java.sql.Statement */ private void liberarRecursos(ResultSet rs, Statement st) { try { if(rs != null){ rs.close(); rs = null; } if(st != null){ st.close(); st = null; } } catch(Exception ex){} } /** * Libera o objeto statement utilizado no acesso ao banco de dados * * @param st objeto Statement * * @see Statement */ private void liberarRecursos(Statement st) { try { if(st != null){ st.close(); st = null; } } catch(Exception ex){} } } ------------------------------------------------------------------------------ Thanks, Lucas Nazário
i'll take a look
Tricky to work on when its a large source file that has multiple dependencies. Is there anyway you can narrow it down to a smaller case that fails, perhaps by commenting out your code whilst checking that the error still occurs? The line where the NPE occurs is: if (invocationType.fPackage != declaringClass.fPackage) return false; either of those *could* be null. What aspects do you have in the system, are you using inter-type declarations? It is also interesting that you use static imports, we haven't done a lot of testing with those.
Hello, I tried to narrow lucas' source code file. The bug appears when the constant has default, private or protected modifier. The following example exposes the bug: package a; import static a.Consts.A_CONST; public class TestNPE {} package a; public class Consts { static String A_CONST="bla"; } The consts could be made public as a possible workaround. Eduardo Piveta
I suspected static imports and Eduardo has done some great work there reducing the problem to a basic scenario. Based on that I've committed a fix in the compiler. At a static import location the invocationsite is null and the scope is the compilationunitscope (as the field reference is outside of any class). The JDT compiler allows for this but we hadn't upgraded our modifications to the compiler to allow for it. I've done it now, added Eduardo's testcase plus some similar ones that try different visibilities. waiting on build before closing.
fix available.