Bug 38212 - can not resolve this member warning
Summary: can not resolve this member warning
Status: RESOLVED WORKSFORME
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Jim Hugunin CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2003-05-28 16:33 EDT by Jim Hugunin CLA
Modified: 2003-05-28 16:37 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jim Hugunin CLA 2003-05-28 16:33:43 EDT
submitted on behalf of Vincenz Braun
------------------------

now I managed to track down this issue (a similar bug is in the jdk 1.2 
compiler from sun).

I have a class 

DefaultProducer 

it has a protected method 

revokeAllItems(InfoBus bus);

Then I have a class that extends DefaultProducer: AutoFetchConnector

AutoFetchConnector has inner classes (not static ones). 
In methods of these inner classes there are some calls like this one:

AutoFetchConnector.this.revokeAllItems(bus);
This leads to the "can not resolve this member" warning messages.

If I introduce the method

	protected void revokeAllItems(InfoBus bus) {
		super.revokeAllItems(bus);
	}

in AutoFetchConnector the messages disappear.

This is a similar bug in suns jdk 1.2 compiler that leads to NoSuchField 
Exceptions during runtime.

The clas AutoFetchConnector should not be affected by the aspect I tried to 
weave in.

I use suns jdk 1.3.1_04 for building.

I hope that helps a little bit,
Vincenz 

> -----Original Message-----
> From: Jim.Hugunin@parc.com [mailto:Jim.Hugunin@parc.com]
> Sent: Friday, May 23, 2003 6:53 PM
> To: vb@bigdot.de
> Subject: FW: [aspectj-users] can not resolve this member warning
> 
> 
> Did you ever manage to track down this bug?  If you can
> provide us more information in the next couple of days we 
> will hopefully be able to fix this for 1.1.0.  Otherwise it 
> might be a while before it gets resolved.
> 
> -Jim
> 
> -----Original Message-----
> From: Hugunin, Jim <Jim.Hugunin@parc.com>
> Sent: Wednesday, May 14, 2003 9:41 AM
> To: 'aspectj-users@eclipse.org'
> Subject: RE: [aspectj-users] can not resolve this member warning
> 
> Vincenz Braun wrote:
> > But the warning/error messages of missing members is
> > still a huge problem for me with rc2.
> >      [iajc] JdbcLogAspect.java:59 can not resolve this member: void
> > DefaultProducer.access$201(AutoFetcher, javax.infobus.InfoBus) 
> > [Xlint:unresolvableMember]
> > 
> > repeated with different line numbers in the Aspect and a second
> > access$301 method.
> > 
> > Is this a warning, a bug in our code or an error in the compiler?
> 
> The problem is that you have code which refers to generated
> methods for inner-class access, and for some reason these 
> methods either aren't around or the compiler is failing to 
> find them.  I don't have enough information to know whether 
> this is a bug in your build process or in the compiler.
> 
> This should be submitted to bugzilla as a bug for now and if
> it turns out to be a build issue we can pass that information 
> back to this list.  The best bug report is always a small 
> self-contained test case that we can use to reproduce and 
> understand the error.  If that's not possible, then the next 
> best thing would be to provide additional details about your 
> configuration and build process.  Exactly what files are 
> involved, what options are you passing to ajc, what can you 
> tell us about problem classes li ke DefaultProducer.
> 
> Thanks for your help tracking this issue down - Jim
Comment 1 Jim Hugunin CLA 2003-05-28 16:37:11 EDT
I can't duplicate this bug, so I'm marking it as WORKSFORME.  If you can give 
me step-by-step instructions for duplicating I'd like to reopen it.  My 
current test case (in bugs/accessMethods) is included below in case this gives 
you a useful starting point:.
-------------------------------------
package p1;

public class Base {
	protected int value=0;
	
	protected String getName() {
		return "Base";
	}
}
-------------------------------------
package p2;

public class Derived extends p1.Base {
	public static void main(String[] args) {
		Derived d = new Derived();
		Inner i = d.new Inner();
		System.out.println(i.getFullName());		
	}
	
	class Inner {
		public String getFullName() {
			return Derived.this.getName() + ":" + getName() + ":" +
				Derived.this.value + ":" + value;
		}
	}

	static aspect A {
		before(): withincode(* get*Name(..)) { }
	}
}
-------------------------------------

ajc p1/Base.java p2/Derived.java
-> No warnings or errors
java p2.Derived
-> Base:Base:0:0