Bug 32399

Summary: Incorrect binding of protected (marker) interfaces
Product: [Tools] AspectJ Reporter: Ron Bodkin <rbodkin+LISTS>
Component: CompilerAssignee: Jim Hugunin <jim-aj>
Status: RESOLVED FIXED QA Contact:
Severity: critical    
Priority: P2    
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Windows 2000   
Whiteboard:

Description Ron Bodkin CLA 2003-02-20 15:21:51 EST
The following test case fails to compile in AspectJ 1.1 beta 4, and works 
correctly in AspectJ 1.0. The only work around is to make interfaces public, 
which is a serious problem.

file TransactionControl.aj (default package):
import sub.ObserverProtocol;

aspect TransactionControl {
    void begin() {
        CommitObserver.aspectOf().add(this);
    }
    static aspect CommitObserver extends ObserverProtocol {
        declare parents: TransactionControl implements Observer;
    }
}

file sub/ObserverProtocol.aj
package sub;

public abstract aspect ObserverProtocol {  
    protected interface Observer { }
    public void add(Observer o) {}
}

Sample compilation:
C:\devel>ajc sub\ObserverProtocol.aj TransactionControl.aj
can't bind type name 'Observer'
C:/devel/TransactionControl.aj:5: The method add(sub.ObserverProtocol.Observer)
in the type sub.ObserverProtocol is not applicable for the arguments (Transactio
nControl)
CommitObserver.aspectOf().add(this);
                          ^^^

2 errors
Comment 1 Jim Hugunin CLA 2003-03-06 17:03:17 EST
fixed in current tree, test in bugs/interfaceNames/*