return null;
if (!couldMatch(shadow)) return Literal.FALSE; boolean alwaysMatches = match(shadow).alwaysTrue(); Var var = isThis ? shadow.getThisVar() : shadow.getTargetVar(); Var annVar = null; TypeX annotationType = annotationTypePattern.annotationType; if (annotationTypePattern instanceof BindingAnnotationTypePattern) { BindingAnnotationTypePattern btp = (BindingAnnotationTypePattern)annotationTypePattern; annotationType = btp.annotationType; annVar = isThis ? shadow.getThisAnnotationVar(annotationType) : shadow.getTargetAnnotationVar(annotationType); if (annVar == null) return Literal.TRUE;  if (state.get(btp.getFormalIndex())!=null) { ISourceLocation pcdSloc = getSourceLocation(); ISourceLocation shadowSloc = shadow.getSourceLocation(); Message errorMessage = new Message( "Cannot use @pointcut to match at this location and bind a formal to type '"+annVar.getType()+ "' - the formal is already bound to type '"+state.get(btp.getFormalIndex()).getType()+"'"+ ".  The secondary source location points to the problematic binding.", shadowSloc,true,new ISourceLocation[]{pcdSloc}); shadow.getIWorld().getMessageHandler().handleMessage(errorMessage); state.setErroneousVar(btp.getFormalIndex()); } state.set(btp.getFormalIndex(),annVar); }  if (alwaysMatches && (annVar == null)) { return Literal.TRUE; } else { if (annVar != null) {  return Literal.FALSE; } else { ResolvedTypeX rType = annotationType.resolve(shadow.getIWorld()); return Test.makeHasAnnotation(var,rType); } }
	public Test findResidue(Shadow shadow, ExposedState state) {		// TODO Auto-generated method stub		return null;	}