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.