Thank you Andy,
However, this does not work on my end. Let me paste the entirety of
what I have in my toy example:
public aspect MyAspect
{
public interface MyInterface
{
}
declare parents: MyObject implements MyInterface;
public boolean MyInterface.instanceOf(Class<? extends Object>
c)
{
return c.isInstance(this);
}
}
class MyObject
{
}
class Main
{
public static void main(String[] args)
{
new MyObject().instanceOf(MyObject.class);
}
}
I get, at the same place, a new error: "The method
instanceOf(Class<Object>) from the type MyObject refers to the
missing type Object". Notice that it is declared as Class<?
extends Object> but during weaving becomes Class<Object>,
and that's from where the error emerges in this case. Also notice I
made a slight modification to the main, by passing instanceOf
the value MyObject.class. I did this to show that simply
changing the method argument's type from Class<? extends
Object> to Class<Object> would not be
sufficient to handle something other than Object.class.
-Michel
Andy Clement wrote:
As a simple workaround until it is fixed, you can remove the
declaration from the interface and just let the ITD do its work.
public aspect MyAspect
{
public interface MyInterface {}
declare parents: MyObject implements MyInterface;
public boolean MyInterface.instanceOf(Class<? extends Object> c)
{
return c.isInstance(this);
}
}
Andy
2009/12/30 Michel Parisien <codingkriggs@xxxxxxxxx>:
I have to say, this was not the response I was hoping for. :) But thanks.
The bug has been filed here:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=298665
-Michel
Andrew Eisenberg wrote:
This does appear to be a bug with generics. I am able to get your
program to compile by removing the type parameters on your method
declarations:
public aspect MyAspect
{
public interface MyInterface
{
public boolean instanceOf(Class c);
}
declare parents: MyObject implements MyInterface;
public boolean MyInterface.instanceOf(Class c)
{
return c.isInstance(this);
}
}
class MyObject
{
}
class Main
{
public static void main(String[] args)
{
new MyObject().instanceOf(Object.class);
}
}
I'd suggest that you raise a bug for this in bugzilla.
On Tue, Dec 29, 2009 at 11:40 PM, Michel Parisien
<codingkriggs@xxxxxxxxx> wrote:
Hello,
I have a problem that I tried boiling down to as small a code sample as
possible. The following gives me the error "The method instanceOf(Class<?
extends Object>) is ambiguous for the type MyObject" on the "instanceOf"
method call in the main method:
public aspect MyAspect
{
public interface MyInterface
{
public boolean instanceOf(Class<? extends Object> c);
}
declare parents: MyObject implements MyInterface;
public boolean MyInterface.instanceOf(Class<? extends Object> c)
{
return c.isInstance(this);
}
}
class MyObject
{
}
class Main
{
public static void main(String[] args)
{
new MyObject().instanceOf(Object.class);
}
}
First, I wonder if this fails to compile for everyone or if it is just me.
Second, since I suspect I may have a compatibility issue, here are my specs:
* Mac OS X 10.4 Tiger
* Eclipse Galileo
* Mac OS X JavaVM 1.5.0 (J2SE-1.5)
* AspectJ 1.6.6
If the problem is with the code, I'd like to know the "better" way to
accomplish the above.
I would appreciate any help you could give,
-Michel
_______________________________________________
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
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users
|