[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Inferred method having a generic as argument [ARGHHH SOLVED]

Hi All,
I solved the thing, but it is a bit strange how to solve it :

public <T> void TextComponent.setConverter(Converter<T> c) {


This is the way it is done in the AspectJ guide to java 5, they always
declare the <T> even if, being used just in one place, it is not needed
in a similar java-only method and <?> or nothing could be used instead.
So, I think this could be a fix in AspectJ, more than just a
clarification in the docs :)

Simone

Simone Gianni wrote:
> Hi Andy,
> Thanks for taking the time for reviewing my code!
>
> A couple of differences :
> - I inferred also the Converter field
> - TextComponent is a binary class i'm weaving without sources
>
> I'm not in office now, but will try it again later and see if i figure
> out by my self where is the difference.
>
> Simone
>
> Andy Clement wrote:
>   
>> >From your description it sounds like a bug, but I can't seem to
>> recreate it - this file compiles fine for me:
>>
>> ---
>> class TextComponent {
>>   Converter converter;
>> }
>>
>> interface Converter<T> {
>>   public T fromString(String value);
>>   public String toString(T value);
>> }
>>
>> class IntegerConverter implements Converter<Integer> {
>>   public Integer fromString(String value) { return null; }
>>   public String toString(Integer value) { return null; }
>> }
>>
>> aspect X {
>>   Object Converter.component;
>>
>>   public void TextComponent.setConverter(Converter c) {
>>      this.converter = c;
>>      c.component = this;
>>   }
>> }
>>
>>
>>
>> public class Test {
>>   public static void main(String []argv) {
>>    TextComponent tc = new TextComponent() ;
>>    IntegerConverter ic = new IntegerConverter();
>>    tc.setConverter(ic);
>>   }
>> }
>> ---
>>
>> Can you tell me what I have done differently to you?  Is your
>> TextComponent class generic by any chance?  Is it a binary weave into
>> a library or everything being compiled from source?
>>
>> Andy.
>>
>> On 11/04/2008, Simone Gianni <simoneg@xxxxxxxxxx> wrote:
>>   
>>     
>>> Hello all,
>>>  I'm moving my first steps in this beautiful world of AOPized Java, but
>>>  in the last 3 hours I've been facing a problem I don't know how to
>>>  solve. Probably it is just a stupid thing, but still ....
>>>
>>>  I have a class, called TextComponent, on which I'm trying to add via
>>>  AspectJ a field and a couple of methods. One of the methods is declared
>>>  this way in my aspect :
>>>
>>>     public void TextComponent.setConverter(Converter c) {
>>>         this.converter = c;
>>>         c.component = this;
>>>     }
>>>
>>>  Now, Converter is a generic interface :
>>>
>>>  public interface Converter<T> {
>>>
>>>     public T fromString(String value);
>>>
>>>     public String toString(T value);
>>>
>>>  }
>>>
>>>
>>>  Which then has an implementation :
>>>
>>>  public class IntegerConverter implements Converter<Integer> {
>>>  ....
>>>  }
>>>
>>>
>>>  Now, I weave the project containing TextComponent, i get the method
>>>  added, but then when i try to do :
>>>
>>>  TextComponent tc = new TextComponent();
>>>  IntegerConverter ic = new IntegerConverter();
>>>  tc.setConverter(ic);
>>>
>>>  I get an error, both from AJDT inside Eclipse and from ajc invoked in
>>>  the Maven build. The error is :
>>>
>>>  The method setConverter(Converter<T>) in the type TextComponent is not
>>>  applicable for the arguments (IntegerConverter)
>>>
>>>  Mh, I tried this on a plain class, instead than on an inferred method,
>>>  just to make sure I was not missing something in the generics field. I
>>>  also tried to declare the method differently (like
>>>  setConverter(Converter<?> c) etc..) .. but still it does not work.
>>>
>>>  Declaring it as setConverter(Object c) and then casting c to a Converter
>>>  (or Converter<?>) works perfectly.
>>>
>>>  I'm using version 1.5.4 or AspectJ.
>>>
>>>
>>>  Any idea?
>>>
>>>  Simone
>>>  _______________________________________________
>>>  aspectj-users mailing list
>>>  aspectj-users@xxxxxxxxxxx
>>>  https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>>
>>>     
>>>       
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>   
>>     
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>