Community
Participate
Working Groups
With the following program I get a NullPointerException during compiling and a warning that the source code of Object is not available for weaving: public class NullPtr { public static void main(String args[]) { NullPtr np = new NullPtr(); np = null; } public void finalize() throws Throwable { } } aspect FinalizeContract { pointcut finalizeCall(Object o): this(Object+) && this(o) && execution(void finalize()); void around(Object o) throws Throwable: finalizeCall(o) { o.finalize(); // error ((NullPtr) o).finalize(); // ok proceed(o); } } It works if I comment out the line indicated by the // error comment or if I declare the aspect as privileged.
The correct behavior is for the compiler to signal that the finalize method is not visible to the aspect because its a protected method on Object. This is the behavior that I observe for 1.1beta4. Can you confirm that you're seeing it with the latest version of the compiler, and if so include the text of the stack trace and warning?
The compiler claims to be AspectJ Compiler 1.1beta4 Below is what I get when compiling and running the program: robert@Knochenmehl:~/daten/text/publications/aspecttesting/code> make NullPtr CLASSPATH=.:/opt/java/junit3.8.1/junit.jar:/home/robert/programme/aspectj1.1b4/lib/aspectjrt.jar:/home/robert/programme/aspectj1.1b4/lib/aspectjtools.jar /home/robert/programme/aspectj1.1b4/bin/ajc -Xlint -XnoInline -warn:constructorName,packageDefaultMethod,deprecation,maskedCatchBlocks,unusedImports,syntheticAccess NullPtr.java java.lang.NullPointerException at org.aspectj.ajdt.internal.compiler.lookup.EclipseWorld.fromBinding(EclipseWorld.java:142) at org.aspectj.ajdt.internal.compiler.lookup.EclipseWorld.makeResolvedMember(EclipseWorld.java:166) at org.aspectj.ajdt.internal.compiler.lookup.PrivilegedHandler.getPrivilegedAccessMethod(PrivilegedHandler.java:44) at org.aspectj.ajdt.internal.compiler.ast.AccessForInlineVisitor.endVisit(AccessForInlineVisitor.java:70) at org.eclipse.jdt.internal.compiler.ast.MessageSend.traverse(MessageSend.java:319) at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.traverse(MethodDeclaration.java:98) at org.aspectj.ajdt.internal.compiler.ast.AdviceDeclaration.resolveStatements(AdviceDeclaration.java:153) at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:325) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:922) at org.aspectj.ajdt.internal.compiler.ast.AspectDeclaration.resolve(AspectDeclaration.java:63) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:954) at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:235) at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:536) at org.aspectj.ajdt.internal.compiler.AjCompiler.process(AjCompiler.java:63) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:340) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:232) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:171) at org.aspectj.ajdt.internal.core.builder.AjBuildManager$BatchBuilder.run(AjBuildManager.java:612) at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:102) at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:54) at org.aspectj.tools.ajc.Main.run(Main.java:199) at org.aspectj.tools.ajc.Main.runMain(Main.java:138) at org.aspectj.tools.ajc.Main.main(Main.java:58) /home/robert/daten/text/publications/aspecttesting/code/NullPtr.java:0: Internal compiler error java.lang.NullPointerException at org.aspectj.ajdt.internal.compiler.lookup.EclipseWorld.fromBinding(EclipseWorld.java:142) at org.aspectj.ajdt.internal.compiler.lookup.EclipseWorld.makeResolvedMember(EclipseWorld.java:166) at org.aspectj.ajdt.internal.compiler.lookup.PrivilegedHandler.getPrivilegedAccessMethod(PrivilegedHandler.java:44) at org.aspectj.ajdt.internal.compiler.ast.AccessForInlineVisitor.endVisit(AccessForInlineVisitor.java:70) at org.eclipse.jdt.internal.compiler.ast.MessageSend.traverse(MessageSend.java:319) at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.traverse(MethodDeclaration.java:98) at org.aspectj.ajdt.internal.compiler.ast.AdviceDeclaration.resolveStatements(AdviceDeclaration.java:153) at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:325) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:922) at org.aspectj.ajdt.internal.compiler.ast.AspectDeclaration.resolve(AspectDeclaration.java:63) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:954) at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:235) at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:536) at org.aspectj.ajdt.internal.compiler.AjCompiler.process(AjCompiler.java:63) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:340) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:232) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:171) at org.aspectj.ajdt.internal.core.builder.AjBuildManager$BatchBuilder.run(AjBuildManager.java:612) at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:102) at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:54) at org.aspectj.tools.ajc.Main.run(Main.java:199) at org.aspectj.tools.ajc.Main.runMain(Main.java:138) at org.aspectj.tools.ajc.Main.main(Main.java:58) !! no source information available !! /home/robert/daten/text/publications/aspecttesting/code/NullPtr.java:16: The method finalize() from the type java.lang.Object is not visible o.finalize(); // error ^^^^^^^^ Exception thrown from AspectJ 1.1beta4 This might be logged as a bug already -- see the bug database at http://dev.eclipse.org (product: AspectJ, component: compiler) Bugs for exceptions thrown have titles File:line from the top stack, e.g., "SomeFile.java:243" If you don't find the exception below in a bug, please add a new bug To make the bug a priority, please include a test program that can reproduce this exception. null java.lang.NullPointerException at org.aspectj.ajdt.internal.compiler.lookup.EclipseWorld.fromBinding(EclipseWorld.java:142) at org.aspectj.ajdt.internal.compiler.lookup.EclipseWorld.makeResolvedMember(EclipseWorld.java:166) at org.aspectj.ajdt.internal.compiler.lookup.PrivilegedHandler.getPrivilegedAccessMethod(PrivilegedHandler.java:44) at org.aspectj.ajdt.internal.compiler.ast.AccessForInlineVisitor.endVisit(AccessForInlineVisitor.java:70) at org.eclipse.jdt.internal.compiler.ast.MessageSend.traverse(MessageSend.java:319) at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.traverse(MethodDeclaration.java:98) at org.aspectj.ajdt.internal.compiler.ast.AdviceDeclaration.resolveStatements(AdviceDeclaration.java:153) at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:325) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:922) at org.aspectj.ajdt.internal.compiler.ast.AspectDeclaration.resolve(AspectDeclaration.java:63) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:954) at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:235) at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:536) at org.aspectj.ajdt.internal.compiler.AjCompiler.process(AjCompiler.java:63) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:340) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:232) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:171) at org.aspectj.ajdt.internal.core.builder.AjBuildManager$BatchBuilder.run(AjBuildManager.java:612) at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:102) at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:54) at org.aspectj.tools.ajc.Main.run(Main.java:199) at org.aspectj.tools.ajc.Main.runMain(Main.java:138) at org.aspectj.tools.ajc.Main.main(Main.java:58) 1 fail|abort, 2 errors make: *** [NullPtr] Fehler 255
fixed in current cvs tree, test case in bugs/Finalizer.java thanks for confirming that this bug was found in 1.1beta4. it is now fixed in the current cvs tree.