Thanks for investigating.  What's strange is I'm using IntelliJ on a Mac
(using the Maven project) and I get the compilation error.

On Wed, Nov 1, 2017 at 10:59 AM, Andy Clement <andrew.clem...@gmail.com>
wrote:

> Thanks for the test project. It compiled fine for me on Mac but then I
> thought I’d try windows and sure enough over there it fails. It may be the
> order of the processing of the files (which can vary across OS), digging
> into it now.
>
> Andy
>
> On Oct 31, 2017, at 4:41 PM, Jason Britton <jbritto...@gmail.com> wrote:
>
> 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 <andrew.clem...@gmail.com>
> 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 <jbritto...@gmail.com> 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
>> aspectj-users@eclipse.org
>> 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
>> aspectj-users@eclipse.org
>> 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
> aspectj-users@eclipse.org
> 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
> aspectj-users@eclipse.org
> 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
aspectj-users@eclipse.org
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to