Skip to main content

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

>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
>


Back to the top