annotationType = annotationType.resolve(scope.getWorld());
String cleanname = annotationType.getClassName(); annotationType = scope.getWorld().resolve(annotationType,true);   if (annotationType == ResolvedTypeX.MISSING) { TypeX type = null; 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); } annotationType = scope.getWorld().resolve(type,true); }
	public AnnotationTypePattern resolveBindings(IScope scope,			Bindings bindings, boolean allowBinding) {		if (resolved) return this;		resolved = true;		if (formalName != null) {			FormalBinding formalBinding = scope.lookupFormal(formalName);			if (formalBinding != null) {				if (bindings == null) {					scope.message(IMessage.ERROR, this, "negation doesn't allow binding");					return this;				}				if (!allowBinding) {					scope.message(IMessage.ERROR, this, 						"name binding only allowed in @pcds, args, this, and target");					return this;				}				verifyIsAnnotationType(formalBinding.getType(),scope);				BindingAnnotationTypePattern binding = new BindingAnnotationTypePattern(formalBinding);				binding.copyLocationFrom(this);				bindings.register(binding, scope);				binding.resolveBinding(scope.getWorld());								return binding;			} else {				scope.message(IMessage.ERROR,this,"unbound formal " + formalName);				return this;			}		} else {			annotationType = annotationType.resolve(scope.getWorld());			verifyIsAnnotationType(annotationType,scope);			return this;		}	}