getSourceLocation(), bindings.getEnclosingAdvice().getSourceLocation());
getSourceLocation(), (null == enclosingAdvice) ? null : enclosingAdvice.getSourceLocation());
	public Pointcut concretize1(ResolvedTypeX searchStart, IntMap bindings) {		if (concretizing) {			//Thread.currentThread().dumpStack();			searchStart.getWorld().getMessageHandler().handleMessage(				MessageUtil.error("circular pointcut declaration involving: " + this,									getSourceLocation()));			return Pointcut.makeMatchesNothing(Pointcut.CONCRETE);		}				try {			concretizing = true;					ResolvedPointcutDefinition pointcutDec;			if (onType != null) {				searchStart = onType.resolve(searchStart.getWorld());				if (searchStart == ResolvedTypeX.MISSING) {					return Pointcut.makeMatchesNothing(Pointcut.CONCRETE);				}			}			pointcutDec = searchStart.findPointcut(name);			if (pointcutDec == null) {				searchStart.getWorld().getMessageHandler().handleMessage(					MessageUtil.error("can't find pointcut \'" + name + "\' on " + searchStart.getName(), 									getSourceLocation())				);				return Pointcut.makeMatchesNothing(Pointcut.CONCRETE);			}						if (pointcutDec.isAbstract()) {				//Thread.currentThread().dumpStack();				searchStart.getWorld().showMessage(IMessage.ERROR,					pointcutDec + " is abstract", 					getSourceLocation(), bindings.getEnclosingAdvice().getSourceLocation());				return Pointcut.makeMatchesNothing(Pointcut.CONCRETE);			}								//System.err.println("start: " + searchStart);			ResolvedTypeX[] parameterTypes = searchStart.getWorld().resolve(pointcutDec.getParameterTypes());						TypePatternList arguments = this.arguments.resolveReferences(bindings);						IntMap newBindings = new IntMap();			for (int i=0,len=arguments.size(); i < len; i++) {				TypePattern p = arguments.get(i);				//we are allowed to bind to pointcuts which use subtypes as this is type safe				if (!p.matchesSubtypes(parameterTypes[i])  && 					!p.getExactType().equals(TypeX.OBJECT))				{					throw new BCException("illegal change to pointcut declaration: " + this);				}							    if (p instanceof BindingTypePattern) {			    	newBindings.put(i, ((BindingTypePattern)p).getFormalIndex());			    }			}						newBindings.copyContext(bindings);			newBindings.pushEnclosingDefinition(pointcutDec);			try {				return pointcutDec.getPointcut().concretize1(searchStart, newBindings);			} finally {				newBindings.popEnclosingDefinitition();			}					} finally {			concretizing = false;		}	}