if (bindings.directlyInAdvice() && bindings.getEnclosingAdvice()==null) {   inAspect.getWorld().showMessage(IMessage.ERROR, "if() pointcut designator cannot be used directly in a per clause (compiler limitation).  Create a named pointcut containing the if() and refer to it", this.getSourceLocation(),null); return Pointcut.makeMatchesNothing(Pointcut.CONCRETE); }
	public Pointcut concretize1(ResolvedTypeX inAspect, IntMap bindings) {		//System.err.println("concretize: " + this + " already: " + partiallyConcretized);				if (isDeclare(bindings.getEnclosingAdvice())) {			// Enforce rule about which designators are supported in declare			inAspect.getWorld().showMessage(IMessage.ERROR,			  "if() pointcut designator cannot be used in declare statement",			  bindings.getEnclosingAdvice().getSourceLocation(),			  null);			return Pointcut.makeMatchesNothing(Pointcut.CONCRETE);		}				if (partiallyConcretized != null) {			return partiallyConcretized;		}		IfPointcut ret = new IfPointcut(testMethod, extraParameterFlags);		partiallyConcretized = ret;		if (bindings.directlyInAdvice()) {			ShadowMunger advice = bindings.getEnclosingAdvice();			if (advice instanceof Advice) {				ret.baseArgsCount = ((Advice)advice).getBaseParameterCount();			} else {				ret.baseArgsCount = 0;			}			ret.residueSource = advice.getPointcut().concretize(inAspect, ret.baseArgsCount, advice);		} else {			ResolvedPointcutDefinition def = bindings.peekEnclosingDefinitition();			if (def == CflowPointcut.CFLOW_MARKER) {				inAspect.getWorld().showMessage(IMessage.ERROR,					"if not supported lexically within cflow (compiler limitation)",					getSourceLocation(), null);				return Pointcut.makeMatchesNothing(Pointcut.CONCRETE);			}			ret.baseArgsCount = def.getParameterTypes().length;						IntMap newBindings = IntMap.idMap(ret.baseArgsCount);			newBindings.copyContext(bindings);			ret.residueSource = def.getPointcut().concretize(inAspect, newBindings);		}				return ret;	}