private String bindingName;
public BindingTypePattern(UnresolvedType type, int index, boolean isVarArgs) {
- super(type, false, isVarArgs);
+ super(type, false, isVarArgs, null);
this.formalIndex = index;
}
public TypePattern remapAdviceFormals(IntMap bindings) {
if (!bindings.hasKey(formalIndex)) {
- return new ExactTypePattern(type, false, isVarArgs);
+ return new ExactTypePattern(type, false, isVarArgs, null);
} else {
int newFormalIndex = bindings.get(formalIndex);
return new BindingTypePattern(type, newFormalIndex, isVarArgs);
if (type.isArray() && this.type.isArray()) {
ResolvedType componentType = type.getComponentType().resolve(type.getWorld());
UnresolvedType newPatternType = this.type.getComponentType();
- ExactTypePattern etp = new ExactTypePattern(newPatternType, includeSubtypes, false);
+ ExactTypePattern etp = new ExactTypePattern(newPatternType, includeSubtypes, false, typeParameters);
return etp.matchesSubtypes(componentType, type);
}
return match;
}
- public ExactTypePattern(UnresolvedType type, boolean includeSubtypes, boolean isVarArgs) {
- super(includeSubtypes, isVarArgs);
+ public ExactTypePattern(UnresolvedType type, boolean includeSubtypes, boolean isVarArgs, TypePatternList typeParams) {
+ super(includeSubtypes, isVarArgs, typeParams);
this.type = type;
}
if (version > EXACT_VERSION) {
throw new BCException("ExactTypePattern was written by a more recent version of AspectJ");
}
- TypePattern ret = new ExactTypePattern(s.isAtLeast169() ? s.readSignatureAsUnresolvedType() : UnresolvedType.read(s), s
- .readBoolean(), s.readBoolean());
+ TypePattern ret = new ExactTypePattern(
+ s.isAtLeast169() ? s.readSignatureAsUnresolvedType() : UnresolvedType.read(s),
+ s.readBoolean(),
+ s.readBoolean(),
+ null // set null first, use 'setTypeParameters' below
+ );
ret.setAnnotationTypePattern(AnnotationTypePattern.read(s, context));
ret.setTypeParameters(TypePatternList.read(s, context));
ret.readLocation(context, s);
}
public static TypePattern readTypePatternOldStyle(DataInputStream s, ISourceContext context) throws IOException {
- TypePattern ret = new ExactTypePattern(UnresolvedType.read(s), s.readBoolean(), false);
+ TypePattern ret = new ExactTypePattern(UnresolvedType.read(s), s.readBoolean(), false, null);
ret.readLocation(context, s);
return ret;
}
} else if (type.isParameterizedType()) {
newType = w.resolve(type).parameterize(typeVariableMap);
}
- ExactTypePattern ret = new ExactTypePattern(newType, includeSubtypes, isVarArgs);
+ ExactTypePattern ret = new ExactTypePattern(newType, includeSubtypes, isVarArgs, typeParameters);
ret.annotationPattern = annotationPattern.parameterizeWith(typeVariableMap, w);
ret.copyLocationFrom(this);
return ret;
return visitor.visit(this, data);
}
+ @Override
public Object traverse(PatternNodeVisitor visitor, Object data) {
Object ret = accept(visitor, data);
+ super.traverse(visitor, ret);
if (this.signaturePattern != null)
this.signaturePattern.traverse(visitor, ret);
return ret;
return false;
}
+ @Override
+ public Object traverse(PatternNodeVisitor visitor, Object data) {
+ Object ret = accept(visitor, data);
+ if (annotationPattern != null)
+ annotationPattern.traverse(visitor, ret);
+ if (typeParameters != null)
+ typeParameters.traverse(visitor, ret);
+ return ret;
+ }
}
*/
public TypeVariablePattern(String variableName) {
this.name = variableName;
- this.upperBound = new ExactTypePattern(UnresolvedType.OBJECT, false, false);
+ this.upperBound = new ExactTypePattern(UnresolvedType.OBJECT, false, false, null);
this.lowerBound = null;
this.interfaceBounds = null;
}
this.name = variableName;
this.upperBound = upperLimit;
if (upperBound == null) {
- upperBound = new ExactTypePattern(UnresolvedType.OBJECT, false, false);
+ upperBound = new ExactTypePattern(UnresolvedType.OBJECT, false, false, null);
}
this.interfaceBounds = interfaceBounds;
this.lowerBound = lowerBound;
return visitor.visit(this, data);
}
- public String getName() {
+ public Object traverse(PatternNodeVisitor visitor, Object data) {
+ Object ret = accept(visitor, data);
+ if (lowerBound != null)
+ lowerBound.traverse(visitor, ret);
+ if (upperBound != null)
+ upperBound.traverse(visitor, ret);
+ if (interfaceBounds != null) {
+ for (TypePattern pattern : interfaceBounds) {
+ pattern.traverse(visitor, ret);
+ }
+ }
+ return ret;
+ }
+
+ public String getName() {
return name;
}
return visitor.visit(this, data);
}
+ @Override
public Object traverse(PatternNodeVisitor visitor, Object data) {
Object ret = accept(visitor, data);
if (patterns != null) {
if (fullyQualifiedName != null && fullyQualifiedName.contains(".")) {
ResolvedType resolvedType = world.resolve(UnresolvedType.forName(fullyQualifiedName));
if (resolvedType != null && !resolvedType.isMissing()) {
- typePattern = new ExactTypePattern(resolvedType, false, false);
+ typePattern = new ExactTypePattern(resolvedType, false, false, null);
}
}
}
if (dim != 0) {
aType = UnresolvedType.makeArray(aType, dim);
}
- ret = new ExactTypePattern(aType, includeSubtypes, isVarArgs);
+ ret = new ExactTypePattern(aType, includeSubtypes, isVarArgs, typeParameters);
}
ret.setAnnotationTypePattern(annotationPattern);
ret.copyLocationFrom(this);
}
if (canBeExact) {
// might have changed if we find out include subtypes is set on one of the bounds...
- return new ExactTypePattern(type, includeSubtypes, isVarArgs);
+ return new ExactTypePattern(type, includeSubtypes, isVarArgs, typeParameters);
}
}
if (dim != 0) {
type = ResolvedType.makeArray(type, dim);
}
- return new ExactTypePattern(type, includeSubtypes, isVarArgs);
+ return new ExactTypePattern(type, includeSubtypes, isVarArgs, typeParameters);
} else {
// AMC... just leave it as a wild type pattern then?
importedPrefixes = scope.getImportedPrefixes();
if (dim != 0) {
rType = ResolvedType.makeArray(rType, dim);
}
- return new ExactTypePattern(rType, includeSubtypes, isVarArgs);
+ return new ExactTypePattern(rType, includeSubtypes, isVarArgs, typeParameters);
} else {
// we have to set bounds on the TypeVariable held by tvrType before resolving it
boolean canCreateExactTypePattern = true;
if (dim != 0) {
rType = ResolvedType.makeArray(rType, dim);
}
- return new ExactTypePattern(rType, includeSubtypes, isVarArgs);
+ return new ExactTypePattern(rType, includeSubtypes, isVarArgs, typeParameters);
}
return this; // leave as wild type pattern then
}
public void testParseAllowedSuperInTypeVariable() {
PatternParser parser = new PatternParser("T super Number+");
TypeVariablePattern tv = parser.parseTypeVariable();
- TypeVariablePattern expected = new TypeVariablePattern("T", new ExactTypePattern(UnresolvedType.OBJECT, false, false),
+ TypeVariablePattern expected = new TypeVariablePattern("T", new ExactTypePattern(UnresolvedType.OBJECT, false, false, null),
null, new PatternParser("Number+").parseTypePattern());
assertEquals("Expected type variable T super Number+", expected, tv);
}