Hmm, I guess there must be a little more to it, here are my source files that simulate what you wrote:
import java.util.*;
interface A<T extends BaseT,I extends BaseI> {
T setInputs(List<I> inputs);
}
import java.util.*;
public class AlreadyImplementsA {
public ConcreteTImpl setInputs(List<ConcreteIImpl> inputs) {
return null;
}
}
---
interface BaseI {}
---
interface BaseT {}
---
class ConcreteIImpl implements BaseI {}
---
class ConcreteTImpl implements BaseT {}
---
public aspect BindInterfaceA {
declare parents: AlreadyImplementsA implements A<ConcreteTImpl, ConcreteIImpl>;
}
-> ajc -1.8 A.java BaseT.java AlreadyImplementsA.java BaseI.java ConcreteIImpl.java ConcreteTImpl.java -outjar code.jar
-> ajc -inpath code.jar -showWeaveInfo BindInterfaceA.java -outjar code2.jar
Extending interface set for type 'AlreadyImplementsA' (AlreadyImplementsA.java) to include 'A<ConcreteTImpl,ConcreteIImpl>' (BindInterfaceA.java)
-> javap -classpath code2.jar AlreadyImplementsA
Compiled from "AlreadyImplementsA.java"
public class AlreadyImplementsA implements A {
Are you applying the aspect via binary weaving? I do notice a difference in separate compilation vs all source:
-> ajc -1.8 *.java -showWeaveInfo -outjar foo.jar
Extending interface set for type 'AlreadyImplementsA' (AlreadyImplementsA.java) to include 'A<ConcreteTImpl,ConcreteIImpl>' (BindInterfaceA.java)
-> javap -classpath foo.jar AlreadyImplementsA
Compiled from "AlreadyImplementsA.java"
public class AlreadyImplementsA implements A<ConcreteTImpl, ConcreteIImpl> {
Note that in the binary weaving case the type parameters are missing on the implements clause.
How are you building it? Can you adapt my steps above to show the fault.
cheers,
Andy
Hi -
I'm running into a perplexing issue with AJC and I'm hoping someone else has seen this before.
The target of my aspect is the class AlreadyImplementsA, we are simply wanting to throw the 'implements A' onto this class. AlreadyImplementsA class already does indeed implement every method defined by the interface A but for whatever reason, AJC complains that AlreadyImplementsA does Not implement A because of the method
T setInputs(List<I> inputs);
I can have a whole multitude of other methods defined on the interface and AJC does not complain, it seems to have a problem with the fact that the argument to the method on the interface is an Interface (List) with a generic I. As I have other AJC issues where the method argument is a Map of a generic type and AJC blows up on it as well.
My aspect below
public aspect BindInterfaceA {
declare parents: AlreadyImplementsA implements A<ConcreteTImpl, ConcreteIImpl>;
}
My interface A referenced above has an interface method defined as shown below
public interface A<T extends BaseT, I extends BaseI> {
T setInputs(List<I> inputs);
}
The 'exact' AJC error message is
AlreadyImplementsA must implement the inherited abstract method A<ConcreteTImpl, ConcreteIImpl>.setInputs(Pjava/util/list<LConcreteIImpl;>;)
I am almost positive the problem all boils down to an interface with a generic being passed as a argument to the method (List<I> inputs) in our case, which is causing AJC problems.
Thanks for any advice you might have on getting past this.
Jason
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxxTo change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/aspectj-users