[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[aspectj-users] problem with inter-type declaration - inserting a method override
|
Problem: I want to statically add a toString method into a specified set of
classes but
I'm having a problem with the ajc 1.2.1 compiler in the case where the
baseclass already
defines a toString method. It says there is a conflict with an existing
member.
I've created a simplified test case below to concretely illustrate the
problem.
So is this some kind of correct limitation in the aspectj language that I've
missed? It seems like this is a natural way of injecting method overrides
for
any superclass method implementation(s)...
Thanks for any help.
=========== ajc 1.2.1 compiler messages ==================
[iajc] Extending interface set for type 'SubclassData'
(SubclassData.java) to include 'ToStringInjector$IToString'
(ToStringInjector.aj)
[iajc]
[iajc]
C:\Projects\AspectJ\ToStringInjectorBug\src\ToStringInjector.aj:8 [error]
inter-type declaration from ToStringInjector conflicts with existing member:
java.lang.String BaseClass.toString()
[iajc] public String IToString.toString() {
[iajc] ^^^^^
[iajc] MessageHolder: (1 weaveinfo) (1 error)
[iajc] [error 0]: error at public String IToString.toString() {
[iajc] ^^^^^
[iajc]
C:\Projects\AspectJ\ToStringInjectorBug\src\ToStringInjector.aj:8:0
inter-type declaration from ToStringInjector conflicts with existing member:
java.lang.String BaseClass.toString()
=========== ToStringInjector.aj ==================
aspect ToStringInjector {
private interface IToString {};
declare parents: (SubclassData) implements IToString;
public String IToString.toString() {
return "eliminated commons-lang dependency for testcase";
}
};
=========== BaseClass.java ==================
public class BaseClass {
public void foo() {}
public String toString() {
return "BaseClass";
}
};
=========== SubclassData.java ==================
public class SubclassData extends BaseClass {
public void bar() {}
};