* ******************************************************************/
package org.aspectj.weaver;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.Iterator;
+import java.util.Map;
import org.aspectj.bridge.ISourceLocation;
+import org.aspectj.weaver.patterns.Declare;
import org.aspectj.weaver.patterns.PerClause;
/**
ResolvedMember[] parameterizedFields = null;
ResolvedMember[] parameterizedPointcuts = null;
ResolvedType[] parameterizedInterfaces = null;
+ Collection parameterizedDeclares = null;
//??? should set delegate before any use
public ReferenceType(String signature, World world) {
public ResolvedMember[] getDeclaredPointcuts() {
if (parameterizedPointcuts != null) return parameterizedPointcuts;
- if (isParameterizedType() || isRawType()) {
+ if (isParameterizedType()) {
ResolvedMember[] delegatePointcuts = delegate.getDeclaredPointcuts();
parameterizedPointcuts = new ResolvedMember[delegatePointcuts.length];
for (int i = 0; i < delegatePointcuts.length; i++) {
}
}
- private UnresolvedType[] getTypesForMemberParameterization() {
+ private UnresolvedType[] getTypesForMemberParameterization() {
UnresolvedType[] parameters = null;
if (isParameterizedType()) {
parameters = getTypeParameters();
}
return parameters;
}
-
+
public UnresolvedType getRawType() {
return super.getRawType().resolve(getWorld());
}
}
public PerClause getPerClause() { return delegate.getPerClause(); }
- protected Collection getDeclares() { return delegate.getDeclares(); }
+
+
+ protected Collection getDeclares() {
+ if (parameterizedDeclares != null) return parameterizedDeclares;
+ if (isParameterizedType()) {
+ Collection genericDeclares = delegate.getDeclares();
+ parameterizedDeclares = new ArrayList();
+ Map parameterizationMap = getMemberParameterizationMap();
+ for (Iterator iter = genericDeclares.iterator(); iter.hasNext();) {
+ Declare declareStatement = (Declare) iter.next();
+ parameterizedDeclares.add(declareStatement.parameterizeWith(parameterizationMap));
+ }
+ return parameterizedDeclares;
+ } else {
+ return delegate.getDeclares();
+ }
+ }
+
protected Collection getTypeMungers() { return delegate.getTypeMungers(); }
protected Collection getPrivilegedAccesses() { return delegate.getPrivilegedAccesses(); }