Try replacing DomainProperties+ with DomainProperties in your declarations
(e.g., public boolean DomainProperties.listenersZapped =
false;)
Even in AspectJ 1.0.x, writing an inter-type declaration on Type+ is
redundant: if you define a member on Type, any subtype will also have the same
member.
------------Original Message-------------
From: "DiFrango, Ron" <ron.difrango@xxxxxxxxxxxxxx>
To: "'aspectj-users@xxxxxxxxxxx'" <aspectj-users@xxxxxxxxxxx>
Date: Wed, Aug-27-2003 5:45 AM
Subject: [aspectj-users] Inter-type problems
All,
I am
trying to upgrade from 1.0.6 of aspectj to 1.1 and I ran into some compile
problems with an inter-type aspect that we created. The aspect code is
as follows:
public aspect DomainPropertiesAspect
{
// define a point cut in the
set account method of IncidentProperties
pointcut
IncidentPropertiesPointcut(AccountProperties ap) :
call(public void IncidentProperties.setAccount(AccountProperties))
&& args(ap);
// define a point cut in the set
account method of ContactPartyModel
pointcut
contactPartyPointcut(ContactPartyModel cpm) : target(cpm) && call(void
setAccount(AccountProperties));
// apply the advise to remove all the listeners from an account when the next
account
// is retrieved.
before(AccountProperties ap) : IncidentPropertiesPointcut(ap) &&
args(ap) {
ap.removeAllListeners();
}
before(ContactPartyModel cpm) :
contactPartyPointcut(cpm) && args(cpm)
{
cpm.getAccount().removeAllListeners();
}
// Add a boolean field to all
instances of DomainProperties
public boolean
DomainProperties+.listenersZapped = false;
// Add a method to recursively
remove DomainProperty listeners from any
// instance of
DomainProperties
public void
DomainProperties+.removeAllListeners(){
// to
prevent the same object from being called
twice.
if(listenersZapped){
return;
}
try{
this.getAllChangeListeners().clear();
this.listenersZapped = true;
// get all fields defined in
this class. For each field that is an
//
instance of DomainProperties call the remove all listeners
method.
Field[] allFields =
this.getClass().getDeclaredFields();
if(allFields.length == 0)
{
return;
} // if
for(int i=0;i<allFields.length;i++)
{
Object theObject =
allFields[i].get(this);
if(theObject ==
null){
return;
}
if(theObject.getClass().isArray()){
for(int a =
0;a<Array.getLength(theObject);a++){
Object arrayObject =
Array.get(theObject,a);
if(theObject instanceof
DomainProperties){
callRemove(theObject);
} else
{
break;
} //
if
} //
for
} else if(theObject instanceof
DomainProperties){
callRemove(theObject);
} else if(theObject instanceof
Collection){
Collection aCollection = (Collection)
theObject;
Iterator iter =
aCollection.iterator();
while(iter.hasNext()){
Object collectionObject =
iter.next();
if(collectionObject instanceof
DomainProperties){
callRemove(collectionObject);
} else
{
break;
} //
if
} //
while
} // if/else
if
} //
for
} catch(Exception
e){
} //
try
} //
method
// utility method to cast from
Object to DomainProperties and call removeAllListeners
private void DomainProperties+.callRemove(Object
theObject){
DomainProperties
value = (DomainProperties)
theObject;
value.removeAllListeners();
}
}
The
error I get is the following:
[echo] Compiling all java
classes.
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:26
ap cannot be resolved
[iajc]
ap.removeAllListeners();
[iajc]
^^
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:30
cpm cannot be resolved
[iajc]
cpm.getAccount().removeAllListeners();
[iajc]
^^^
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:34
Duplicate field
DomainPropertiesAspec
.DomainProperties
[iajc]
public boolean DomainProperties+.listenersZapped =
false;
[iajc]
^^^^^^^^^^^^^^^^
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:34
Syntax error on token "+", ";", "," e
pected
[iajc] public boolean DomainProperties+.listenersZapped =
false;
[iajc]
^
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:39
Duplicate field
DomainPropertiesAspec
.DomainProperties
[iajc]
public void
DomainProperties+.removeAllListeners(){
[iajc]
^^^^^^^^^^^^^^^^
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:39
Return type for the method is missing
[iajc]
public void
DomainProperties+.removeAllListeners(){
[iajc]
^^^^^^^^^^^^^^^^^^^^
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:41
listenersZapped cannot be resolved
[iajc]
if(listenersZapped){
[iajc]
^^^^^^^^^^^^^^^
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:45
The method getAllChangeListeners() is
undefined for the type
DomainPropertiesAspect
[iajc]
this.getAllChangeListeners().clear();
[iajc]
^^^^^^^^^^^^^^^^^^^^^
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:46
listenersZapped cannot be resolved or
is not a
field
[iajc] this.listenersZapped =
true;
[iajc]
^^^^^^^^^^^^^^^^^^^^
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:63
The method callRemove(Object) is unde
ined for the type
DomainPropertiesAspect
[iajc]
callRemove(theObject);
[iajc]
^^^^^^^^^^
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:69
The method callRemove(Object) is unde
ined for the type
DomainPropertiesAspect
[iajc]
callRemove(theObject);
[iajc]
^^^^^^^^^^
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:76
The method callRemove(Object) is unde
ined for the type
DomainPropertiesAspect
[iajc]
callRemove(collectionObject);
[iajc]
^^^^^^^^^^
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:89
Duplicate field
DomainPropertiesAspec
.DomainProperties
[iajc]
private void DomainProperties+.callRemove(Object
theObject){
[iajc]
^^^^^^^^^^^^^^^^
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:89
Return type for the method is missing
[iajc]
private void DomainProperties+.callRemove(Object
theObject){
[iajc]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[iajc]
C:\view$\rdifrang_aspectjUpgrade_NT\discovery\dev\src\com\capitalon
\risk\domain\DomainPropertiesAspect.aj:91
The method removeAllListeners() is un
efined for the type
DomainProperties
[iajc]
value.removeAllListeners();
[iajc]
^^^^^^^^^^^^^^^^^^
Thanks,
Ron DiFrango
**************************************************************************
The information transmitted herewith is sensitive information intended only
for use by the individual or entity to which it is addressed. If the reader of
this message is not the intended recipient, you are hereby notified that any
review, retransmission, dissemination, distribution, copying or other use of,
or taking of any action in reliance upon this information is strictly
prohibited. If you have received this communication in error, please contact
the sender and delete the material from your
computer.