[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] Inferred method having a generic as argument
|
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
>