Hi Andy - Thanks for looking into. I've created a public github repo with a maven project that recreates the issue here: https://github.com/JOBritton/aspectj-generics-issue
Let me know if you are able to reproduce. Thanks! Jason On Tue, Oct 31, 2017 at 1:19 PM, Andy Clement <[email protected]> wrote: > I recall in the early days of AspectJ 5 we had a mountain of issues like > this, but I thought they’d all been ironed out ! > > 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 > > On Oct 30, 2017, at 2:11 PM, Jason Britton <[email protected]> wrote: > > 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 > [email protected] > To change your delivery options, retrieve your password, or unsubscribe > from this list, visit > https://dev.eclipse.org/mailman/listinfo/aspectj-users > > > > _______________________________________________ > aspectj-users mailing list > [email protected] > To change your delivery options, retrieve your password, or unsubscribe > from this list, visit > https://dev.eclipse.org/mailman/listinfo/aspectj-users >
_______________________________________________ aspectj-users mailing list [email protected] To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://dev.eclipse.org/mailman/listinfo/aspectj-users
