Bug 42652 - Regression: Cannot compile complex weaving anymore
Summary: Regression: Cannot compile complex weaving anymore
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows XP
: P2 critical (vote)
Target Milestone: 1.1.1   Edit
Assignee: Jim Hugunin CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2003-09-05 18:42 EDT by Macneil Shonle CLA
Modified: 2003-09-08 11:32 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Macneil Shonle CLA 2003-09-05 18:42:55 EDT
My project uses some complex aspectual interactions. My sources work fine under 
ajc 1.0.6, however, if I compile with 1.1, I get verification errors in the 
generated bytecodes. My problem is even worse with 1.1.1rc1 because the 
compiler does not even get to finish. Here are the errors:

(cd "c:\Documents and Settings\Macneil Shonle\eclipse\workspace\Nebulous"; rm -
f -r bin/edu Nebulous.jar)
(cd "c:\Documents and Settings\Macneil 
Shonle\eclipse\workspace\Nebulous"; /cygdrive/c/aspectj1.1.1rc1/bin/ajc  -
classpath "c:\Documents and Settings\Macneil 
Shonle\eclipse\workspace\edu.ucsd.aspectbrowser\aspectbrowser.jar;c:\Documents 
and Settings\Macneil Shonle\eclipse\workspace\Nebulous\gnu-regexp-
1.1.4.jar;c:\Documents and Settings\Macneil 
Shonle\eclipse\plugins\org.eclipse.ui_2.1.1\ui.jar;c:\Documents and 
Settings\Macneil Shonle\eclipse\plugins\org.eclipse.swt.win32_2.1.1\ws\win32
\swt.jar;c:\Documents and Settings\Macneil 
Shonle\eclipse\plugins\org.eclipse.text_2.1.0\text.jar;c:\Documents and 
Settings\Macneil Shonle\eclipse\plugins\org.eclipse.jface_2.1.1
\jface.jar;c:\Documents and Settings\Macneil 
Shonle\eclipse\plugins\org.eclipse.jface.text_2.1.0\jfacetext.jar;c:\Documents 
and Settings\Macneil Shonle\eclipse\plugins\org.eclipse.ui.workbench_2.1.1
\workbench.jar;c:\Documents and Settings\Macneil 
Shonle\eclipse\plugins\org.eclipse.ui.workbench.texteditor_2.1.0
\texteditor.jar;c:\Documents and Settings\Macneil 
Shonle\eclipse\plugins\org.eclipse.ui.editors_2.1.0\editors.jar;c:\Documents 
and Settings\Macneil Shonle\eclipse\plugins\org.eclipse.core.resources_2.1.1
\resources.jar;c:\Documents and Settings\Macneil 
Shonle\eclipse\plugins\org.eclipse.core.runtime_2.1.1
\runtime.jar;c:\aspectj1.1.1rc1\lib\aspectjrt.jar" -d bin @default.lst)
trouble in: 
public class edu.ucsd.nebulous.ContainerCaching extends 
edu.ucsd.nebulous.AbstractCaching implements 
edu.ucsd.nebulous.ContainerCaching$ajcMightHaveAspect:
     declares: [declare parents: ExactTypePattern
(edu.ucsd.nebulous.ActiveContainer) extends (ExactTypePattern
(edu.ucsd.nebulous.AbstractCaching$Value));, declare parents: ExactTypePattern
(edu.ucsd.nebulous.ContainerDescriptor) extends (ExactTypePattern
(edu.ucsd.nebulous.AbstractCaching$Key));]
  private edu.ucsd.nebulous.ContainerLoader loader
  private transient edu.ucsd.nebulous.ContainerCaching 
ajc$edu_ucsd_nebulous_ContainerCaching$perObjectField
  public static final org.aspectj.runtime.internal.CFlowStack ajc$cflowStack$0
  public static final org.aspectj.runtime.internal.CFlowStack ajc$cflowStack$1
  public void <init>():
                    ALOAD_0     // edu.ucsd.nebulous.ContainerCaching this   
(line 36)
                    INVOKESPECIAL edu.ucsd.nebulous.AbstractCaching.<init> ()V
    constructor-execution(void edu.ucsd.nebulous.ContainerCaching.<init>())
    |               RETURN
    constructor-execution(void edu.ucsd.nebulous.ContainerCaching.<init>())
  end public void <init>()

  public static int getCacheSize(edu.ucsd.nebulous.ContainerLoader):
    method-execution(int edu.ucsd.nebulous.ContainerCaching.getCacheSize
(edu.ucsd.nebulous.ContainerLoader))
    |               ALOAD_0     // edu.ucsd.nebulous.ContainerLoader arg0   
(line 41)
    | method-call(edu.ucsd.nebulous.ContainerCaching 
edu.ucsd.nebulous.ContainerCaching.aspectOf(java.lang.Object))
    | |             INVOKESTATIC edu.ucsd.nebulous.ContainerCaching.aspectOf 
(Ljava/lang/Object;)Ledu/ucsd/nebulous/ContainerCaching;
    | method-call(edu.ucsd.nebulous.ContainerCaching 
edu.ucsd.nebulous.ContainerCaching.aspectOf(java.lang.Object))
    | method-call(int edu.ucsd.nebulous.AbstractCaching.getMaximumCacheSize())
    | |             INVOKEVIRTUAL 
edu.ucsd.nebulous.AbstractCaching.getMaximumCacheSize ()I
    | method-call(int edu.ucsd.nebulous.AbstractCaching.getMaximumCacheSize())
    |               IRETURN
    method-execution(int edu.ucsd.nebulous.ContainerCaching.getCacheSize
(edu.ucsd.nebulous.ContainerLoader))
  end public static int getCacheSize(edu.ucsd.nebulous.ContainerLoader)

  public static void setCacheSize(edu.ucsd.nebulous.ContainerLoader, int):
    method-execution(void edu.ucsd.nebulous.ContainerCaching.setCacheSize
(edu.ucsd.nebulous.ContainerLoader, int))
    |               ALOAD_0     // edu.ucsd.nebulous.ContainerLoader arg0   
(line 46)
    | method-call(edu.ucsd.nebulous.ContainerCaching 
edu.ucsd.nebulous.ContainerCaching.aspectOf(java.lang.Object))
    | |             INVOKESTATIC edu.ucsd.nebulous.ContainerCaching.aspectOf 
(Ljava/lang/Object;)Ledu/ucsd/nebulous/ContainerCaching;
    | method-call(edu.ucsd.nebulous.ContainerCaching 
edu.ucsd.nebulous.ContainerCaching.aspectOf(java.lang.Object))
    |               ILOAD_1     // int arg1
    | method-call(void edu.ucsd.nebulous.AbstractCaching.setMaximumCacheSize
(int))
    | |             INVOKEVIRTUAL 
edu.ucsd.nebulous.AbstractCaching.setMaximumCacheSize (I)V
    | method-call(void edu.ucsd.nebulous.AbstractCaching.setMaximumCacheSize
(int))
    |               RETURN   (line 47)
    method-execution(void edu.ucsd.nebulous.ContainerCaching.setCacheSize
(edu.ucsd.nebulous.ContainerLoader, int))
  end public static void setCacheSize(edu.ucsd.nebulous.ContainerLoader, int)

  private void dispatchGenerator(edu.ucsd.nebulous.Generator):
    method-execution(void edu.ucsd.nebulous.ContainerCaching.dispatchGenerator
(edu.ucsd.nebulous.Generator))
    |               ALOAD_0     // edu.ucsd.nebulous.ContainerCaching this   
(line 51)
    | method-call(java.util.Iterator 
edu.ucsd.nebulous.AbstractCaching.getCachedValues())
    | |             INVOKEVIRTUAL 
edu.ucsd.nebulous.AbstractCaching.getCachedValues ()Ljava/util/Iterator;
    | method-call(java.util.Iterator 
edu.ucsd.nebulous.AbstractCaching.getCachedValues())
    |               ASTORE_2
    |               GOTO L1   (line 52)
    |           L0: ALOAD_2     // java.util.Iterator i   (line 54)
    | method-call(java.lang.Object java.util.Iterator.next())
    | |             INVOKEINTERFACE java.util.Iterator.next ()Ljava/lang/Object;
    | method-call(java.lang.Object java.util.Iterator.next())
    |               CHECKCAST edu.ucsd.nebulous.ActiveContainer
    |               ASTORE_3
    |               ALOAD_3     // edu.ucsd.nebulous.ActiveContainer 
container   (line 55)
    |               ALOAD_1     // edu.ucsd.nebulous.Generator inGenerator
    | method-call(void edu.ucsd.nebulous.ActiveContainer.dispatchGenerator
(edu.ucsd.nebulous.Generator))
    | |             INVOKEVIRTUAL 
edu.ucsd.nebulous.ActiveContainer.dispatchGenerator 
(Ledu/ucsd/nebulous/Generator;)V
    | method-call(void edu.ucsd.nebulous.ActiveContainer.dispatchGenerator
(edu.ucsd.nebulous.Generator))
    |           L1: ALOAD_2     // java.util.Iterator i   (line 52)
    | method-call(boolean java.util.Iterator.hasNext())
    | |             INVOKEINTERFACE java.util.Iterator.hasNext ()Z
    | method-call(boolean java.util.Iterator.hasNext())
    |               IFNE L0
    |               RETURN   (line 57)
    method-execution(void edu.ucsd.nebulous.ContainerCaching.dispatchGenerator
(edu.ucsd.nebulous.Generator))
  end private void dispatchGenerator(edu.ucsd.nebulous.Generator)

  private static void debugPrint(edu.ucsd.nebulous.ContainerLoader):
                    ALOAD_0     // edu.ucsd.nebulous.ContainerLoader arg0   
(line 60)
                    INVOKESTATIC edu.ucsd.nebulous.ContainerCaching.aspectOf 
(Ljava/lang/Object;)Ledu/ucsd/nebulous/ContainerCaching;
                    INVOKESPECIAL edu.ucsd.nebulous.ContainerCaching.debugPrint 
()V
                    RETURN   (line 61)
  end private static void debugPrint(edu.ucsd.nebulous.ContainerLoader)

  private void debugPrint():
                    GETSTATIC java.lang.System.err Ljava/io/PrintStream;   
(line 65)
                    LDC "Cache Contents {"
                    INVOKEVIRTUAL java.io.PrintStream.println 
(Ljava/lang/String;)V
                    ALOAD_0     // edu.ucsd.nebulous.ContainerCaching this   
(line 67)
                    INVOKEVIRTUAL 
edu.ucsd.nebulous.AbstractCaching.getCachedKeys ()Ljava/util/Iterator;
                    ASTORE_1
                    GOTO L1   (line 68)
                L0: ALOAD_1     // java.util.Iterator keys   (line 70)
                    INVOKEINTERFACE java.util.Iterator.next ()Ljava/lang/Object;
                    CHECKCAST edu.ucsd.nebulous.ContainerDescriptor
                    ASTORE_2
                    GETSTATIC java.lang.System.err Ljava/io/PrintStream;   
(line 71)
                    NEW java.lang.StringBuffer
                    DUP
                    ALOAD_2     // edu.ucsd.nebulous.ContainerDescriptor 
containerDesc
                    INVOKEVIRTUAL edu.ucsd.nebulous.ContainerDescriptor.getName 
()Ljava/lang/String;
                    INVOKESTATIC java.lang.String.valueOf (Ljava/lang/Object;)
Ljava/lang/String;
                    INVOKESPECIAL java.lang.StringBuffer.<init> 
(Ljava/lang/String;)V
                    LDC "; "
                    INVOKEVIRTUAL java.lang.StringBuffer.append 
(Ljava/lang/String;)Ljava/lang/StringBuffer;
                    INVOKEVIRTUAL java.lang.StringBuffer.toString ()
Ljava/lang/String;
                    INVOKEVIRTUAL java.io.PrintStream.print (Ljava/lang/String;)
V
                L1: ALOAD_1     // java.util.Iterator keys   (line 68)
                    INVOKEINTERFACE java.util.Iterator.hasNext ()Z
                    IFNE L0
                    GETSTATIC java.lang.System.err Ljava/io/PrintStream;   
(line 74)
                    LDC "}"
                    INVOKEVIRTUAL java.io.PrintStream.println 
(Ljava/lang/String;)V
                    RETURN   (line 75)
  end private void debugPrint()

  protected void unload(edu.ucsd.nebulous.AbstractCaching$Value):
                    ALOAD_1     // edu.ucsd.nebulous.AbstractCaching$Value 
arg0   (line 82)
                    CHECKCAST edu.ucsd.nebulous.ActiveContainer
                    INVOKEVIRTUAL edu.ucsd.nebulous.ActiveContainer.delete ()V
                    RETURN   (line 83)
  end protected void unload(edu.ucsd.nebulous.AbstractCaching$Value)

  protected edu.ucsd.nebulous.AbstractCaching$Key getKey
(edu.ucsd.nebulous.AbstractCaching$Value):
                    ALOAD_1     // edu.ucsd.nebulous.AbstractCaching$Value 
arg0   (line 86)
                    CHECKCAST edu.ucsd.nebulous.ActiveContainer
                    INVOKEVIRTUAL 
edu.ucsd.nebulous.ActiveContainer.getDescriptor ()
Ledu/ucsd/nebulous/ContainerDescriptor;
                    ARETURN
  end protected edu.ucsd.nebulous.AbstractCaching$Key getKey
(edu.ucsd.nebulous.AbstractCaching$Value)

  private void dummy():
                    RETURN   (line 101)
  end private void dummy()

  public void ajc$after$edu_ucsd_nebulous_ContainerCaching$105a
(edu.ucsd.nebulous.ContainerLoader)    AdviceAttribute(after, (this
(BindingTypePattern(edu.ucsd.nebulous.ContainerLoader, 0)) && execution
(ExactTypePattern(edu.ucsd.nebulous.ContainerLoader).new(..))), 0, 4186)
:
                    ALOAD_0     // edu.ucsd.nebulous.ContainerCaching this   
(line 107)
                    ALOAD_1     // edu.ucsd.nebulous.ContainerLoader inLoader
                    PUTFIELD edu.ucsd.nebulous.ContainerCaching.loader 
Ledu/ucsd/nebulous/ContainerLoader;
                    RETURN   (line 108)
  end public void ajc$after$edu_ucsd_nebulous_ContainerCaching$105a
(edu.ucsd.nebulous.ContainerLoader)

  public void ajc$after$edu_ucsd_nebulous_ContainerCaching$10ea
(edu.ucsd.nebulous.ContainerLoader, edu.ucsd.nebulous.Generator)    
AdviceAttribute(after, edu.ucsd.nebulous.ContainerLoader.generatorDispatches
(BindingTypePattern(edu.ucsd.nebulous.ContainerLoader, 0), BindingTypePattern
(edu.ucsd.nebulous.Generator, 1)), 0, 4330)
:
                    ALOAD_0     // edu.ucsd.nebulous.ContainerCaching this   
(line 113)
                    ALOAD_2     // edu.ucsd.nebulous.Generator generator
                    INVOKESPECIAL 
edu.ucsd.nebulous.ContainerCaching.dispatchGenerator 
(Ledu/ucsd/nebulous/Generator;)V
                    RETURN   (line 114)
  end public void ajc$after$edu_ucsd_nebulous_ContainerCaching$10ea
(edu.ucsd.nebulous.ContainerLoader, edu.ucsd.nebulous.Generator)

  public static edu.ucsd.nebulous.ContainerCaching aspectOf(Object)    
org.aspectj.weaver.AjAttribute$AjSynthetic@1f489d9
:
                    ALOAD_0     // java.lang.Object arg0
                    INSTANCEOF 
edu.ucsd.nebulous.ContainerCaching$ajcMightHaveAspect
                    IFEQ L1
                    ALOAD_0     // java.lang.Object arg0
                    CHECKCAST 
edu.ucsd.nebulous.ContainerCaching$ajcMightHaveAspect
                    INVOKEINTERFACE 
edu.ucsd.nebulous.ContainerCaching$ajcMightHaveAspect.ajc$edu_ucsd_nebulous_Cont
ainerCaching$perObjectGet ()Ledu/ucsd/nebulous/ContainerCaching;
                    DUP
                    IFNULL L0
                    ARETURN
                L0: POP
                L1: NEW org.aspectj.lang.NoAspectBoundException
                    DUP
                    INVOKESPECIAL 
org.aspectj.lang.NoAspectBoundException.<init> ()V
                    ATHROW
  end public static edu.ucsd.nebulous.ContainerCaching aspectOf(Object)

  public static boolean hasAspect(Object)    
org.aspectj.weaver.AjAttribute$AjSynthetic@18637cc
:
                    ALOAD_0     // java.lang.Object arg0
                    INSTANCEOF 
edu.ucsd.nebulous.ContainerCaching$ajcMightHaveAspect
                    IFEQ L0
                    ALOAD_0     // java.lang.Object arg0
                    CHECKCAST 
edu.ucsd.nebulous.ContainerCaching$ajcMightHaveAspect
                    INVOKEINTERFACE 
edu.ucsd.nebulous.ContainerCaching$ajcMightHaveAspect.ajc$edu_ucsd_nebulous_Cont
ainerCaching$perObjectGet ()Ledu/ucsd/nebulous/ContainerCaching;
                    IFNULL L0
                    ICONST_1
                    IRETURN
                L0: ICONST_0
                    IRETURN
  end public static boolean hasAspect(Object)

  public static void ajc$perObjectBind(Object)    
org.aspectj.weaver.AjAttribute$AjSynthetic@b97275
:
                    ALOAD_0     // java.lang.Object arg0
                    INSTANCEOF 
edu.ucsd.nebulous.ContainerCaching$ajcMightHaveAspect
                    IFEQ L0
                    ALOAD_0     // java.lang.Object arg0
                    CHECKCAST 
edu.ucsd.nebulous.ContainerCaching$ajcMightHaveAspect
                    INVOKEINTERFACE 
edu.ucsd.nebulous.ContainerCaching$ajcMightHaveAspect.ajc$edu_ucsd_nebulous_Cont
ainerCaching$perObjectGet ()Ledu/ucsd/nebulous/ContainerCaching;
                    IFNONNULL L0
                    ALOAD_0     // java.lang.Object arg0
                    CHECKCAST 
edu.ucsd.nebulous.ContainerCaching$ajcMightHaveAspect
                    NEW edu.ucsd.nebulous.ContainerCaching
                    DUP
                    INVOKESPECIAL edu.ucsd.nebulous.ContainerCaching.<init> ()V
                    INVOKEINTERFACE 
edu.ucsd.nebulous.ContainerCaching$ajcMightHaveAspect.ajc$edu_ucsd_nebulous_Cont
ainerCaching$perObjectSet (Ledu/ucsd/nebulous/ContainerCaching;)V
                L0: RETURN
  end public static void ajc$perObjectBind(Object)

  public edu.ucsd.nebulous.ContainerCaching 
ajc$edu_ucsd_nebulous_ContainerCaching$perObjectGet():
                    ALOAD_0
                    GETFIELD 
edu.ucsd.nebulous.ContainerCaching.ajc$edu_ucsd_nebulous_ContainerCaching$perObj
ectField Ledu/ucsd/nebulous/ContainerCaching;
                    ARETURN
  end public edu.ucsd.nebulous.ContainerCaching 
ajc$edu_ucsd_nebulous_ContainerCaching$perObjectGet()

  public void ajc$edu_ucsd_nebulous_ContainerCaching$perObjectSet
(edu.ucsd.nebulous.ContainerCaching):
                    ALOAD_0
                    ALOAD_1
                    PUTFIELD 
edu.ucsd.nebulous.ContainerCaching.ajc$edu_ucsd_nebulous_ContainerCaching$perObj
ectField Ledu/ucsd/nebulous/ContainerCaching;
                    RETURN
  end public void ajc$edu_ucsd_nebulous_ContainerCaching$perObjectSet
(edu.ucsd.nebulous.ContainerCaching)

  static void ajc$preClinit():
                    NEW org.aspectj.runtime.internal.CFlowStack
                    DUP
                    INVOKESPECIAL 
org.aspectj.runtime.internal.CFlowStack.<init> ()V
                    PUTSTATIC 
edu.ucsd.nebulous.ContainerCaching.ajc$cflowStack$1 
Lorg/aspectj/runtime/internal/CFlowStack;
                    NEW org.aspectj.runtime.internal.CFlowStack
                    DUP
                    INVOKESPECIAL 
org.aspectj.runtime.internal.CFlowStack.<init> ()V
                    PUTSTATIC 
edu.ucsd.nebulous.ContainerCaching.ajc$cflowStack$0 
Lorg/aspectj/runtime/internal/CFlowStack;
                    RETURN
  end static void ajc$preClinit()

  static void <clinit>():
                    INVOKESTATIC 
edu.ucsd.nebulous.ContainerCaching.ajc$preClinit ()V
                    RETURN
  end static void <clinit>()
end public class edu.ucsd.nebulous.ContainerCaching
ABORT
Exception thrown from AspectJ 1.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.ResolvedTypeX.matches(ResolvedTypeX.java:245)
	at org.aspectj.weaver.ResolvedTypeX.lookupMemberNoSupers
(ResolvedTypeX.java:914)
	at org.aspectj.weaver.Member.walkUp(Member.java:502)
	at org.aspectj.weaver.Member.walkUp(Member.java:498)
	at org.aspectj.weaver.Member.getDeclaringTypes(Member.java:487)
	at org.aspectj.weaver.patterns.SignaturePattern.declaringTypeMatch
(SignaturePattern.java:143)
	at org.aspectj.weaver.patterns.SignaturePattern.matches
(SignaturePattern.java:124)
	at org.aspectj.weaver.patterns.KindedPointcut.match
(KindedPointcut.java:40)
	at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
	at org.aspectj.weaver.patterns.OrPointcut.match(OrPointcut.java:43)
	at org.aspectj.weaver.patterns.AndPointcut.match(AndPointcut.java:42)
	at org.aspectj.weaver.ShadowMunger.match(ShadowMunger.java:59)
	at org.aspectj.weaver.Advice.match(Advice.java:89)
	at org.aspectj.weaver.bcel.BcelClassWeaver.match
(BcelClassWeaver.java:985)
	at org.aspectj.weaver.bcel.BcelClassWeaver.match
(BcelClassWeaver.java:791)
	at org.aspectj.weaver.bcel.BcelClassWeaver.weave
(BcelClassWeaver.java:291)
	at org.aspectj.weaver.bcel.BcelClassWeaver.weave
(BcelClassWeaver.java:77)
	at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:417)
	at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:390)
	at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:316)
	at 
org.aspectj.ajdt.internal.core.builder.AjBuildManager.weaveAndGenerateClassFiles
(AjBuildManager.java:256)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild
(AjBuildManager.java:156)
	at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild
(AjBuildManager.java:70)
	at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:99)
	at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:53)
	at org.aspectj.tools.ajc.Main.run(Main.java:217)
	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
make: *** [neb] Error 255

*************************
The source for my project is available upon request. However, I cannot post it 
to any site or repository, it can only be emailed (or I could provide a private 
download link off of my web-site).
*************************

From: Jim Hugunin
Subject: Re: [aspectj-dev] java.lang.VerifyError                               
                                                                               
Please file this as a bug report.  That will make life easier for the          
developers.  It's always best to include a self-contained example, but         
if that's not possible, it's still good to get this into the bug               
database for tracking purposes.                                                
                                                                               
BTW - This bug appears to be a bad interaction between perthis/target          
aspects, intertype declarations and method signature matching in pcds --       
a classic kind of large system interaction issue.                              
                                                                               
-Jim
Comment 1 Jim Hugunin CLA 2003-09-08 11:32:10 EDT
This is fixed in the tree and will be fixed in the upcoming 1.1.1 release.  The
following short-test case (in bugs/InterPerCall.java) reproduces the bug:

----------------------------
public class InterPerCall {
    public static void main(String[] args) {
        new D().m();
    }
}

class C {
}

class D extends C {
    public void m() { }
}

aspect A perthis(p1()) {
    pointcut p1(): execution(void D.m());
    pointcut p2(): execution(void C.m());
    
    before(): p2() {
        System.out.println("hello");
    }
}
--------------------------------------------

The regression was caused by a fix to the method lookup rules for inter-type
declarations when matching call joinpoint signatures that interacted badly with
the implementation of perthis aspects.