if (onType == null) {
if (pointcutDef == null && onType == null) {
	public void resolveBindings(IScope scope, Bindings bindings) {		if (onTypeSymbolic != null) {			onType = onTypeSymbolic.resolveExactType(scope, bindings);		}				ResolvedTypeX searchType;		if (onType != null) {			searchType = scope.getWorld().resolve(onType);		} else {			searchType = scope.getEnclosingType();		}						arguments.resolveBindings(scope, bindings, true, true);		//XXX ensure that arguments has no ..'s in it				// check that I refer to a real pointcut declaration and that I match				ResolvedPointcutDefinition pointcutDef = searchType.findPointcut(name);		// if we're not a static reference, then do a lookup of outers		if (onType == null) {			while (true) {				TypeX declaringType = searchType.getDeclaringType();				if (declaringType == null) break;				searchType = declaringType.resolve(scope.getWorld());				pointcutDef = searchType.findPointcut(name);				if (pointcutDef != null) {					// make this a static reference					onType = searchType;					break;				}			}		}				if (pointcutDef == null) {			scope.message(IMessage.ERROR, this, "can't find referenced pointcut");			return;		}				// check visibility		if (!pointcutDef.isVisible(scope.getEnclosingType())) {			scope.message(IMessage.ERROR, this, "pointcut declaration " + pointcutDef + " is not accessible");			return;		}				if (Modifier.isAbstract(pointcutDef.getModifiers())) {			if (onType != null) {				scope.message(IMessage.ERROR, this, 								"can't make static reference to abstract pointcut");				return;			} else if (!searchType.isAbstract()) {				scope.message(IMessage.ERROR, this,								"can't use abstract pointcut in concrete context");				return;			}		}						ResolvedTypeX[] parameterTypes = 			scope.getWorld().resolve(pointcutDef.getParameterTypes());				if (parameterTypes.length != arguments.size()) {			scope.message(IMessage.ERROR, this, "incompatible number of arguments to pointcut, expected " +						parameterTypes.length + " found " + arguments.size());			return;		}								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 == TypePattern.NO) {				scope.message(IMessage.ERROR, this,								"bad parameter to pointcut reference");				return;			}			if (!p.matchesSubtypes(parameterTypes[i]) && 				!p.getExactType().equals(TypeX.OBJECT))			{				scope.message(IMessage.ERROR, p, "incompatible type, expected " +						parameterTypes[i].getName() + " found " + p);				return;			}		}	}