Community
Participate
Working Groups
Version: AspectJ Compiler 1.1rc1 For very large source files, i.e number of lines exceeds 32762 lines (!) the ajc fails with a NullPointerException. One might ask if anyone would write such a large class but this could be the case with generated java code... To reproduce: 1: Create the aspect file: *** File: A.aj import org.aspectj.lang.JoinPoint; aspect A { pointcut executionAll() : (execution(* *.*(..))); Object around(): executionAll() { report("DEBUG TRACE:",thisJoinPoint); return proceed(); } private void report(String t, JoinPoint x) { System.out.println(t + x.toString()); } } *** End of A.aj 2. Create the Test.java file. Note you must insert an enormous amount of comment lines ... *** File: Test.java public class Test { // Line 2 // INSERT something line Short.MAX_VALUE (32767) comment lines here // ... // Line > 32768 public String getBug() { return "test"; } } *** End of Test.java 3. Compile ajc -sourceroots . Stack trace: trouble in: public class Test extends java.lang.Object: public static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_0 public void <init>(): ALOAD_0 // Test this (line 1) INVOKESPECIAL java.lang.Object.<init> ()V constructor-execution(void Test.<init>()) | RETURN constructor-execution(void Test.<init>()) end public void <init>() public String getBug(): GETSTATIC Test.ajc$tjp_0 Lorg/aspectj/lang/JoinPoint$StaticPart; ALOAD_0 ALOAD_0 BIPUSH 0 ANEWARRAY java.lang.Object ASTORE_2 ALOAD_2 INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object; [Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint; ASTORE_1 method-execution(java.lang.String Test.getBug()) | INVOKESTATIC A.aspectOf ()LA; | ACONST_NULL | ALOAD_1 | ASTORE 5 | ASTORE 4 | ASTORE_3 | advice-execution(java.lang.Object A.ajc$around$A$77 (org.aspectj.runtime.internal.AroundClosure, org.aspectj.lang.JoinPoint)) | | ALOAD_3 (line 7) | | LDC "DEBUG TRACE:" | | ALOAD 5 | | INVOKESTATIC A.ajc$inlineAccessMethod$A$A$report (LA;Ljava/lang/String;Lorg/aspectj/lang/JoinPoint;)V | | ALOAD 4 (line 8) | | ASTORE 6 | | ALOAD_0 | | ALOAD_1 | | INVOKESTATIC Test.getBug_aroundBody0 (LTest;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/String; | | GOTO L0 | advice-execution(java.lang.Object A.ajc$around$A$77 (org.aspectj.runtime.internal.AroundClosure, org.aspectj.lang.JoinPoint)) | L0: NOP | CHECKCAST java.lang.String | ARETURN method-execution(java.lang.String Test.getBug()) end public String getBug() static final String getBug_aroundBody0(Test, org.aspectj.lang.JoinPoint): LDC "HHHH" (line 32774) ARETURN end static final String getBug_aroundBody0(Test, org.aspectj.lang.JoinPoint) end public class Test ABORT Exception thrown from AspectJ 1.1rc1 This might be logged as a bug already -- find current bugs at http://bugs.eclipse.org/bugs/buglist.cgi?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 at http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ To make the bug a priority, please include a test program that can reproduce this exception. null java.lang.NullPointerException at org.aspectj.weaver.bcel.Utility.createConstant(Utility.java:334) at org.aspectj.weaver.bcel.LazyClassGen.initializeTjp (LazyClassGen.java:472) at org.aspectj.weaver.bcel.LazyClassGen.initializeAllTjps (LazyClassGen.java:443) at org.aspectj.weaver.bcel.LazyClassGen.addAjcInitializers (LazyClassGen.java:401) at org.aspectj.weaver.bcel.LazyClassGen.writeBack(LazyClassGen.java:155) at org.aspectj.weaver.bcel.LazyClassGen.getJavaClass (LazyClassGen.java:169) at org.aspectj.weaver.bcel.BcelWeaver.dump(BcelWeaver.java:376) at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:323) at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:302) at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:265) at org.aspectj.ajdt.internal.core.builder.AjBuildManager.weaveAndGenerateClassFiles (AjBuildManager.java:394) at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild (AjBuildManager.java:149) at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:55) at org.aspectj.tools.ajc.Main.run(Main.java:216) at org.aspectj.tools.ajc.Main.runMain(Main.java:155) at org.aspectj.tools.ajc.Main.main(Main.java:72) 1 fail|abort Signal 127 Reason: The org.aspectj.weaver.bcel.Utility.createConstant branches dependent on the source line number. When the number is greater than Short.MAX_VALUE a NullPointerException is thrown because of a null "fact.getClassGen()".
fixed in tree with test in bugs/LongFile.java