// Subclasses should implement whatever rule-guessing logic // they feel like; return null and report an error if // guessing fails. protected abstract TargetTemplate InferTemplate(TypeResolver res, IWarningLogger log);
public bool DoneRequesting (TypeResolver res, IWarningLogger log) { if (done_modifying) throw ExHelp.InvalidOp ("Cannot call DoneRequesting twice on a provider"); foreach (KeyValuePair<string,TargetBuilder> kvp in targets) { TargetValidity tv = kvp.Value.Validity; string fullname = Basis + kvp.Key; if (tv == TargetValidity.Referenced) { // FIXME: this error message sucks log.Error (2000, "A target was referenced from another provider " + "that was not formally allowed to request it, and the " + "target was not defined by its provider", fullname); return true; } if (tv == TargetValidity.Requested) { TargetTemplate tmpl; if (res.TryMatch (kvp.Key, MatcherKind.Dependency, out tmpl, log)) return true; if (tmpl == null) { log.Error (2027, "Could not guess a rule for a target " + "implicitly defined in a dependency. Do you " + "need to add a using [] line?", fullname); return true; } kvp.Value.Define (log); tmpl.ApplyTemplate (kvp.Value); } } done_modifying = true; return false; }
protected override TargetTemplate InferTemplate (TypeResolver res, IWarningLogger log) { TargetTemplate tmpl = null; string dtname = DirectTransformDep; if (dtname != null) { if (res.TryMatch (dtname, MatcherKind.DirectTransform, out tmpl, log)) return null; if (tmpl != null) return tmpl; } if (Rule == null) { if (res.TryMatch (Name, MatcherKind.Target, out tmpl, log)) return null; } if (tmpl == null) log.Error (2028, "Cannot guess the template or rule for this target", FullName); return tmpl; }