本文整理汇总了C#中IMessageSink.Warning方法的典型用法代码示例。如果您正苦于以下问题:C# IMessageSink.Warning方法的具体用法?C# IMessageSink.Warning怎么用?C# IMessageSink.Warning使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IMessageSink
的用法示例。
在下文中一共展示了IMessageSink.Warning方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BackingField
public static LNode BackingField(LNode prop, IMessageSink sink)
{
LNode propType, propName, propArgs, body;
if (prop.ArgCount != 4 || !(body = prop.Args[3]).Calls(S.Braces))
return null;
// Look for an attribute of the form [field], [field name] or [field Type name]
LNode fieldAttr = null, fieldName;
bool autoType = false;
int i;
for (i = 0; i < prop.Attrs.Count; i++) {
LNode attr = prop.Attrs[i];
if (attr.IsIdNamed(_field)) {
fieldAttr = attr;
break;
} else if (attr.Calls(S.Var, 2)) {
LNode fieldVarAttr = null;
attr = attr.WithoutAttrNamed(__field, out fieldVarAttr);
if (fieldVarAttr != null && fieldVarAttr.IsId || (autoType = attr.Args[0].IsIdNamed(_field))) {
fieldAttr = attr;
break;
}
}
}
if (fieldAttr == null)
return null;
// Extract the type and name of the backing field, if specified
LNode field = fieldAttr;
propType = prop.Args[0];
propName = prop.Args[1];
propArgs = prop.Args[2];
if (field.IsId) {
fieldName = F.Id(ChooseFieldName(Loyc.Ecs.EcsNodePrinter.KeyNameComponentOf(propName)));
field = F.Call(S.Var, propType, fieldName).WithAttrs(fieldAttr.Attrs);
} else {
fieldName = field.Args[1];
if (fieldName.Calls(S.Assign, 2))
fieldName = fieldName.Args[0];
}
if (autoType)
field = field.WithArgChanged(0, propType);
// Construct the new backing field, fill in the property getter and/or setter
if (body.ArgCount == 0)
body = body.WithArgs(LNode.Id(S.get));
LNode newBody = body.WithArgs(body.Args.SmartSelect(stmt =>
{
var fieldAccessExpr = fieldName;
if (propArgs.ArgCount > 0) {
// Special case: the property has arguments,
// e.g. [field List<T> L] T this[int x] { get; set; }
// ==> List<T> L; T this[int x] { get { return L[x]; } set { L[x] = value; } }
var argList = GetArgNamesFromFormalArgList(propArgs, formalArg =>
sink.Error(formalArg, "'field' macro expected a variable declaration here"));
fieldAccessExpr = F.Call(S.IndexBracks, argList.Insert(0, fieldName));
}
var attrs = stmt.Attrs;
if (stmt.IsIdNamed(S.get)) {
stmt = F.Call(stmt.WithoutAttrs(), F.Braces(F.Call(S.Return, fieldAccessExpr))).WithAttrs(attrs);
stmt.BaseStyle = NodeStyle.Special;
}
if (stmt.IsIdNamed(S.set)) {
stmt = F.Call(stmt.WithoutAttrs(), F.Braces(F.Call(S.Assign, fieldAccessExpr, F.Id(S.value)))).WithAttrs(attrs);
stmt.BaseStyle = NodeStyle.Special;
}
return stmt;
}));
if (newBody == body)
sink.Warning(fieldAttr, "The body of the property does not contain a 'get;' or 'set;' statement without a body, so no code was generated to get or set the backing field.");
prop = prop.WithAttrs(prop.Attrs.RemoveAt(i)).WithArgChanged(3, newBody);
prop.Style &= ~NodeStyle.OneLiner; // avoid collapsing output to one line
return F.Call(S.Splice, new VList<LNode>(field, prop));
}
示例2: VisitInput
public virtual LNode VisitInput(LNode stmt, IMessageSink sink)
{
LNode aliasSet;
if ((stmt.Calls(_alias, 1) || stmt.CallsMin(S.Alias, 1)) &&
(aliasSet = stmt.Args[0]).Calls(S.Assign, 2))
{
IEnumerable<KeyValuePair<LNode, LNode>> q;
LNode alias = aliasSet.Args[0], replacement = aliasSet.Args[1], old;
if (_definedAliases.TryGetValue(alias, out old)) {
if (stmt.AttrNamed(S.Partial) == null || !old.Equals(replacement))
sink.Warning(alias, "Redefinition of alias '{0}'", alias);
} else if ((q = _definedAliases.Where(pair => replacement.Equals(pair.Value))).Any())
sink.Warning(replacement, "Aliases '{0}' and '{1}' have the same replacement value", q.First().Key, alias);
_definedAliases[alias] = replacement;
return LNode.Call(S.Splice, VList<LNode>.Empty); // erase alias from output
}
return null;
}
示例3: WarnAboutUnknownOptions
public static void WarnAboutUnknownOptions(BMultiMap<string, string> options, IMessageSink sink, IDictionary<string, Pair<string, string>> knownOptions)
{
foreach (var opt in options.Keys) {
if (!knownOptions.ContainsKey(opt))
sink.Warning("Command line", "Unrecognized option '--{0}'", opt);
}
}