if (!allowBinding) { scope.message(IMessage.ERROR, this, "name binding only allowed in target, this, and args pcds"); return this; }
	public TypePattern resolveBindings(IScope scope, Bindings bindings,     								boolean allowBinding, boolean requireExactType)    { 		    	if (isStar()) {			return TypePattern.ANY;  //??? loses source location		}		String simpleName = maybeGetSimpleName();		if (simpleName != null) {			FormalBinding formalBinding = scope.lookupFormal(simpleName);			if (formalBinding != null) {				if (!allowBinding || bindings == null) {					scope.message(IMessage.ERROR, this, "negation doesn't allow binding");					return this;				}				BindingTypePattern binding = new BindingTypePattern(formalBinding);				binding.copyLocationFrom(this);				bindings.register(binding, scope);								return binding;			}		}				String cleanName = maybeGetCleanName();		if (cleanName != null) {			TypeX type;						//System.out.println("resolve: " + cleanName);			//??? this loop has too many inefficiencies to count			while ((type = scope.lookupType(cleanName, this)) == ResolvedTypeX.MISSING) {				int lastDot = cleanName.lastIndexOf('.');				if (lastDot == -1) break;				cleanName = cleanName.substring(0, lastDot) + '$' + cleanName.substring(lastDot+1);			}			if (type == ResolvedTypeX.MISSING) {				if (requireExactType) {					if (!allowBinding) {						scope.getWorld().getMessageHandler().handleMessage(							MessageUtil.error("can't bind type name '" + cleanName + "'",											getSourceLocation()));					} else if (scope.getWorld().getLint().invalidAbsoluteTypeName.isEnabled()) {						scope.getWorld().getLint().invalidAbsoluteTypeName.signal(cleanName, getSourceLocation());					}					return NO;				} else if (scope.getWorld().getLint().invalidAbsoluteTypeName.isEnabled()) {					scope.getWorld().getLint().invalidAbsoluteTypeName.signal(cleanName, getSourceLocation());				}			} else {				if (dim != 0) type = TypeX.makeArray(type, dim);				TypePattern ret = new ExactTypePattern(type, includeSubtypes);				ret.copyLocationFrom(this);				return ret;			}		} else {			if (requireExactType) {				scope.getWorld().getMessageHandler().handleMessage(					MessageUtil.error("wildcard type pattern not allowed, must use type name",										getSourceLocation()));				return NO;			}			//XXX need to implement behavior for Lint.invalidWildcardTypeName		}				importedPrefixes = scope.getImportedPrefixes();		knownMatches = preMatch(scope.getImportedNames());				return this;	}