public void AddMeta(ICilMetadata meta) { if (validMetadata.Contains(meta, PropertyComparer <ICilMetadata> .Default) || invalidMetadata.Contains(meta, PropertyComparer <ICilMetadata> .Default)) { return; } if (!meta.Validate(logging)) { invalidMetadata.Add(meta); return; } validMetadata.Add(meta); foreach (var matcher in meta.GetMatchers()) { AddMatcher(matcher); } foreach (var childMeta in meta.GetChildren()) { this.AddMeta(childMeta); } }
private static void GetMemberMetadata(ICilMetadata parent, List <ICilMetadata> result, MemberInfo member) { foreach (var attr in MetadataParser.EnumerateAndBind(parent, member)) { result.Add(attr); } var method = member as MethodInfo; if (method != null) { foreach (var attr in MetadataParser.EnumerateAndBind(method.ReturnType)) { result.Add(attr); } foreach (var param in method.GetParameters()) { foreach (var attr in MetadataParser.EnumerateAndBind(param.ParameterType)) { result.Add(attr); } } } }
public static IEnumerable<ICilMetadata> EnumerateAndBind(ICilMetadata parent, MemberInfo member) { var result = Attributes.All<ICilMetadata>(member); foreach (var m in result) { m.Bind(parent, member); } return result; }
public static IEnumerable <ICilMetadata> EnumerateAndBind(ICilMetadata parent, MemberInfo member) { var result = Attributes.All <ICilMetadata>(member); foreach (var m in result) { m.Bind(parent, member); } return(result); }
private IEnumerable <ICilMetadata> GetIndentedChildren(ICilMetadata parent) { int indent; if (!metaToIndent.TryGetValue(parent, out indent)) { indent = 0; } ++indent; foreach (var child in parent.GetChildren()) { metaToIndent[child] = indent; yield return(child); } }
public void AddProduction(ICilMetadata meta, CilProduction parseRule) { if (parseRule.Owner == meta || productions.Any(r => r.Owner == meta && r.Equals(parseRule))) { return; } parseRule.Owner = meta; productions.Add(parseRule); // Provide new tokens foreach (var part in parseRule.Pattern) { this.AddSymbol(part); } this.AddSymbol(parseRule.Outcome); }
private static void GetMemberMetadata(ICilMetadata parent, List<ICilMetadata> result, MemberInfo member) { foreach (var attr in MetadataParser.EnumerateAndBind(parent, member)) { result.Add(attr); } var method = member as MethodInfo; if (method != null) { foreach (var attr in MetadataParser.EnumerateAndBind(method.ReturnType)) { result.Add(attr); } foreach (var param in method.GetParameters()) foreach (var attr in MetadataParser.EnumerateAndBind(param.ParameterType)) { result.Add(attr); } } }
public static IEnumerable<ICilMetadata> GetTypeMetaChildren(ICilMetadata parent, Type type) { const BindingFlags flags = BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.Instance; var result = new List<ICilMetadata>(); foreach (var member in type.GetMembers(flags)) { GetMemberMetadata(parent, result, member); } if (type.BaseType != null) { result.AddRange(EnumerateAndBind(parent, type.BaseType)); } result.AddRange( type .GetInterfaces() .SelectMany(intf => MetadataParser.EnumerateAndBind(parent, intf))); return result; }
public static IEnumerable <ICilMetadata> GetTypeMetaChildren(ICilMetadata parent, Type type) { const BindingFlags flags = BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.Instance; var result = new List <ICilMetadata>(); foreach (var member in type.GetMembers(flags)) { GetMemberMetadata(parent, result, member); } if (type.BaseType != null) { result.AddRange(EnumerateAndBind(parent, type.BaseType)); } result.AddRange( type .GetInterfaces() .SelectMany(intf => MetadataParser.EnumerateAndBind(parent, intf))); return(result); }
public void AddMeta(ICilMetadata meta) { if (validMetadata.Contains(meta, PropertyComparer <ICilMetadata> .Default) || invalidMetadata.Contains(meta, PropertyComparer <ICilMetadata> .Default)) { return; } if (!meta.Validate(logging)) { invalidMetadata.Add(meta); return; } validMetadata.Add(meta); // Provide new explicitly used tokens foreach (var token in meta.GetSymbolsInCategory(SymbolCategory.ExplicitlyUsed)) { this.AddSymbol(token); } // Provide new rules var newParseRules = meta.GetProductions(EnumerateSnapshot(symbols)); foreach (var parseRule in newParseRules) { this.AddProduction(meta, parseRule); } // Provide new meta children foreach (var childMeta in meta.GetChildren()) { this.AddMeta(childMeta); } }
public virtual void Bind(ICilMetadata parent, MemberInfo member) { this.Parent = parent; this.Member = member; }
void ICilMetadata.Bind(ICilMetadata parent, MemberInfo member) { this.parent = parent; this.type = (Type)member; }
public void Bind(ICilMetadata parent, System.Reflection.MemberInfo member) { }
public void AddMeta(ICilMetadata meta) { if (validMetadata.Contains(meta, PropertyComparer<ICilMetadata>.Default) || invalidMetadata.Contains(meta, PropertyComparer<ICilMetadata>.Default)) { return; } if (!meta.Validate(logging)) { invalidMetadata.Add(meta); return; } validMetadata.Add(meta); foreach (var matcher in meta.GetMatchers()) { AddMatcher(matcher); } foreach (var childMeta in meta.GetChildren()) { this.AddMeta(childMeta); } }