Bug 28703 - Program crashes 1.1 beta 2
Summary: Program crashes 1.1 beta 2
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows XP
: P3 blocker (vote)
Target Milestone: ---   Edit
Assignee: Jim Hugunin CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2002-12-19 18:00 EST by Ron Bodkin CLA
Modified: 2003-01-07 15:34 EST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ron Bodkin CLA 2002-12-19 18:00:23 EST
class Base {
     /** extend when overriding - must call Base.lockResource() */
      public void lockResource() { /* ... */ }
}

class Derived extends Base {
      boolean isLocked;

      public void lockResource() {
              // Whoops: didn't call super.lockResource()
              super.lockResource();
          isLocked = true;
      }
}
 
public aspect EnsureOverriding pertarget(mustExtend()) {
    boolean calledSuper = false;
    pointcut mustExtend() : 
        execution(void Base+.lockResource(..)) && !within(Base);
 
    after () returning: mustExtend() {
            System.err.println
("returning: "+calledSuper+"from "+thisJoinPoint+" at "+this);
        assert(calledSuper);
            if (!calledSuper) { throw new RuntimeException("bad"); }
    }
 
    after(Base a, Base b) returning: 
            cflow(mustExtend() && target(a)) && execution(void 
Base.lockResource(..)) && target(b) {
        if (a == b) {
                System.err.println("made call");
            calledSuper = true;
        }
    }
 
     public static void main(String args[]) {
         (new Derived()).lockResource();
     }
}
 

error output:

 

D:\devel\test>ajc -1.4 EnsureOverriding.aj

trouble in:

public class EnsureOverriding extends java.lang.Object implements EnsureOverrid

ng$ajcMightHaveAspect:

  boolean calledSuper

  static final boolean $assertionsDisabled [Synthetic]

  static Class class$0 [Synthetic]

  private transient EnsureOverriding ajc$EnsureOverriding$perObjectField

  public static final org.aspectj.runtime.internal.CFlowStack ajc$cflowStack$0

  static void <clinit>():

                    GETSTATIC EnsureOverriding.class$0 Ljava/lang/Class;   (lin

 16)

                    DUP

                    IFNONNULL L0

                    POP

    catch java.lang.ClassNotFoundException -> E0

    |               LDC "EnsureOverriding"

    |               INVOKESTATIC java.lang.Class.forName (Ljava/lang/String;)Lj

va/lang/Class;

    catch java.lang.ClassNotFoundException -> E0

                    DUP

                    PUTSTATIC EnsureOverriding.class$0 Ljava/lang/Class;

                    GOTO L0

                E0: NEW java.lang.NoClassDefFoundError

                    DUP_X1

                    SWAP

                    INVOKEVIRTUAL java.lang.Throwable.getMessage ()Ljava/lang/S

ring;

                    INVOKESPECIAL java.lang.NoClassDefFoundError.<init> (Ljava/

ang/String;)V

                    ATHROW

                L0: INVOKEVIRTUAL java.lang.Class.desiredAssertionStatus ()Z

                    IFNE L1

                    ICONST_1

                    GOTO L2

                L1: ICONST_0

                L2: PUTSTATIC EnsureOverriding.$assertionsDisabled Z

                    RETURN

  end static void <clinit>()

 

  public void <init>():

                    ALOAD_0     // EnsureOverriding this   (line 16)

                    INVOKESPECIAL java.lang.Object.<init> ()V

                    ALOAD_0     // EnsureOverriding this   (line 17)

                    ICONST_0

                    PUTFIELD EnsureOverriding.calledSuper Z

                    RETURN   (line 16)

  end public void <init>()

 

  public void ajc$afterReturning$EnsureOverriding$21b(org.aspectj.lang.JoinPoin

)    AdviceAttribute(afterReturning, mustExtend(), 2, 539)

:

                    GETSTATIC java.lang.System.err Ljava/io/PrintStream;   (lin

 22)

                    NEW java.lang.StringBuffer

                    DUP

                    LDC "returning: "

                    INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/Str

ng;)V

                    ALOAD_0     // EnsureOverriding this

                    GETFIELD EnsureOverriding.calledSuper Z

                    INVOKEVIRTUAL java.lang.StringBuffer.append (Z)Ljava/lang/S

ringBuffer;

                    LDC " from "

                    INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Str

ng;)Ljava/lang/StringBuffer;

                    ALOAD_1     // org.aspectj.lang.JoinPoint arg0

                    INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Obj

ct;)Ljava/lang/StringBuffer;

                    LDC " at "

                    INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Str

ng;)Ljava/lang/StringBuffer;

                    ALOAD_0     // EnsureOverriding this

                    INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Obj

ct;)Ljava/lang/StringBuffer;

                    INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/

tring;

                    INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/Strin

;)V

                    GETSTATIC EnsureOverriding.$assertionsDisabled Z   (line 23

 

                    IFNE L0

                    ALOAD_0     // EnsureOverriding this

                    GETFIELD EnsureOverriding.calledSuper Z

                    IFNE L0

                    NEW java.lang.AssertionError

                    DUP

                    INVOKESPECIAL java.lang.AssertionError.<init> ()V

                    ATHROW

                L0: ALOAD_0     // EnsureOverriding this   (line 24)

                    GETFIELD EnsureOverriding.calledSuper Z

                    IFNE L1

                    NEW java.lang.RuntimeException

                    DUP

                    LDC "bad"

                    INVOKESPECIAL java.lang.RuntimeException.<init> (Ljava/lang

String;)V

                    ATHROW

                L1: RETURN   (line 25)

  end public void ajc$afterReturning$EnsureOverriding$21b(org.aspectj.lang.Join

oint)

 

  public void ajc$afterReturning$EnsureOverriding$2f9(Base, Base)    AdviceAttr

bute(afterReturning, (cflow((mustExtend() && target(BindingTypePattern(Base, 0)

)) && (execution(ExactTypePattern(void) ExactTypePattern(Base).lockResource(..)

 && target(BindingTypePattern(Base, 1)))), 0, 761)

:

                    ALOAD_1     // Base arg0   (line 29)

                    ALOAD_2     // Base b

                    IF_ACMPNE L0

                    GETSTATIC java.lang.System.err Ljava/io/PrintStream;   (lin

 30)

                    LDC "made call"

                    INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/Strin

;)V

                    ALOAD_0     // EnsureOverriding this   (line 31)

                    ICONST_1

                    PUTFIELD EnsureOverriding.calledSuper Z

                L0: RETURN   (line 33)

  end public void ajc$afterReturning$EnsureOverriding$2f9(Base, Base)

 

  public static void main(String[]):

                    NEW Derived   (line 36)

                    DUP

                    INVOKESPECIAL Derived.<init> ()V

                    INVOKEVIRTUAL Derived.lockResource ()V

                    RETURN   (line 37)

  end public static void main(String[])

 

  public static EnsureOverriding aspectOf(Object)    org.aspectj.weaver.AjAttri

ute$AjSynthetic@16546ef

:

                    ALOAD_0     // java.lang.Object arg0

                    INSTANCEOF EnsureOverriding$ajcMightHaveAspect

                    IFEQ L1

                    ALOAD_0     // java.lang.Object arg0

                    CHECKCAST EnsureOverriding$ajcMightHaveAspect

                    INVOKEINTERFACE EnsureOverriding$ajcMightHaveAspect.ajc$Ens

reOverriding$perObjectGet ()LEnsureOverriding;

                    DUP

                    IFNULL L0

                    ARETURN

                L0: POP

                L1: NEW org.aspectj.lang.NoAspectBoundException

                    DUP

                    INVOKESPECIAL org.aspectj.lang.NoAspectBoundException.<init

 ()V

                    ATHROW

  end public static EnsureOverriding aspectOf(Object)

 

  public static boolean hasAspect(Object)    org.aspectj.weaver.AjAttribute$AjS

nthetic@1428ea

:

                    ALOAD_0     // java.lang.Object arg0

                    INSTANCEOF EnsureOverriding$ajcMightHaveAspect

                    IFEQ L0

                    ALOAD_0     // java.lang.Object arg0

                    CHECKCAST EnsureOverriding$ajcMightHaveAspect

                    INVOKEINTERFACE EnsureOverriding$ajcMightHaveAspect.ajc$Ens

reOverriding$perObjectGet ()LEnsureOverriding;

                    IFNULL L0

                    ICONST_1

                    IRETURN

                L0: ICONST_0

                    IRETURN

  end public static boolean hasAspect(Object)

 

  public static void ajc$perObjectBind(Object)    org.aspectj.weaver.AjAttribut

$AjSynthetic@18a49e0

:

                    ALOAD_0     // java.lang.Object arg0

                    INSTANCEOF EnsureOverriding$ajcMightHaveAspect

                    IFEQ L0

                    ALOAD_0     // java.lang.Object arg0

                    CHECKCAST EnsureOverriding$ajcMightHaveAspect

                    INVOKEINTERFACE EnsureOverriding$ajcMightHaveAspect.ajc$Ens

reOverriding$perObjectGet ()LEnsureOverriding;

                    IFNONNULL L0

                    ALOAD_0     // java.lang.Object arg0

                    CHECKCAST EnsureOverriding$ajcMightHaveAspect

                    NEW EnsureOverriding

                    DUP

                    INVOKESPECIAL EnsureOverriding.<init> ()V

                    INVOKEINTERFACE EnsureOverriding$ajcMightHaveAspect.ajc$Ens

reOverriding$perObjectSet (LEnsureOverriding;)V

                L0: RETURN

  end public static void ajc$perObjectBind(Object)

 

  public EnsureOverriding ajc$EnsureOverriding$perObjectGet():

                    ALOAD_0

                    GETFIELD EnsureOverriding.ajc$EnsureOverriding$perObjectFie

d LEnsureOverriding;

                    ARETURN

  end public EnsureOverriding ajc$EnsureOverriding$perObjectGet()

 

  public void ajc$EnsureOverriding$perObjectSet(EnsureOverriding):

                    ALOAD_0

                    ALOAD_1

                    PUTFIELD EnsureOverriding.ajc$EnsureOverriding$perObjectFie

d LEnsureOverriding;

                    RETURN

  end public void ajc$EnsureOverriding$perObjectSet(EnsureOverriding)

end public class EnsureOverriding

Exception thrown from AspectJ 1.1b2

 

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.

unimplemented

unimplemented

java.lang.RuntimeException: unimplemented

        at org.aspectj.weaver.bcel.LazyClassGen.getAjcClinit(Unknown Source)

        at org.aspectj.weaver.bcel.BcelCflowStackFieldAdder.munge(Unknown Sourc

)

        at org.aspectj.weaver.bcel.BcelClassWeaver.weave(Unknown Source)

        at org.aspectj.weaver.bcel.BcelClassWeaver.weave(Unknown Source)

        at org.aspectj.weaver.bcel.BcelWeaver.weave(Unknown Source)

        at org.aspectj.weaver.bcel.BcelWeaver.weave(Unknown Source)

        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.weaveAndGenera

eClassFiles(Unknown Source)

        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(Unk

own Source)

        at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(Unknown Source)

        at org.aspectj.tools.ajc.Main.run(Unknown Source)

        at org.aspectj.tools.ajc.Main.runMain(Unknown Source)

        at org.aspectj.tools.ajc.Main.main(Unknown Source)

 

 

1 fail|abort
Comment 1 Jim Hugunin CLA 2003-01-07 15:34:39 EST
fixed in cvs tree, test case in tests/bugs/EnsureOverriding.java