/// <summary>
 ///   指定した型に限定して,指定した要素の最初の子要素を取得します.
 /// </summary>
 /// <typeparam name="T"> </typeparam>
 /// <param name="element"> </param>
 /// <param name="dummyForInference"> </param>
 /// <returns> </returns>
 public static T FirstElement <T>(
     this UnifiedElement element, T dummyForInference = null)
     where T : class
 {
     Contract.Requires(element != null);
     return(element.Elements <T>().FirstOrDefault());
 }
Ejemplo n.º 2
0
        /// <summary>
        ///   深さ優先で指定した要素の子孫を列挙します.
        /// </summary>
        /// <param name="element"> </param>
        /// <returns> </returns>
        public static IEnumerable <UnifiedElement> Descendants(
            this UnifiedElement element)
        {
            Contract.Requires(element != null);
            var children = element.Elements()
                           .Where(e => e != null);

            foreach (var child in children)
            {
                yield return(child);

                foreach (var grandchild in child.Descendants())
                {
                    yield return(grandchild);
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        ///   深さ優先で指定した要素の子孫を列挙します. ただし条件に一致する要素を見つけたとき,その要素の探索を中止し次の要素の探索に移ります.
        /// </summary>
        /// <param name="element"> </param>
        /// <param name="predicate"> </param>
        /// <returns> </returns>
        public static IEnumerable <UnifiedElement> DescendantsUntil(
            this UnifiedElement element,
            Func <UnifiedElement, bool> predicate)
        {
            Contract.Requires(element != null);
            var children = element.Elements()
                           .Where(e => e != null && !predicate(e));

            foreach (var child in children)
            {
                yield return(child);

                foreach (var grandchild in child.DescendantsUntil(predicate))
                {
                    yield return(grandchild);
                }
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 親要素に不適切な要素がないかソースコードを指定して検査します。
        /// </summary>
        /// <param name="codeObject"> 検査対象のモデル </param>
        /// <param name="message"> アサーションに違反した際のエラーメッセージ </param>
        private static void AssertParentProperty(
				UnifiedElement codeObject, string message)
        {
            foreach (var element in codeObject.Elements()) {
                if (element != null) {
                    Assert.That(element.Parent, Is.SameAs(codeObject), message);
                    AssertParentProperty(element, message);
                }
            }
        }
Ejemplo n.º 5
0
 private static void InitializeCounter(
         UnifiedElement model,
         IDictionary<string, int> counter)
 {
     var outers = model.Elements()
             .Where(
                     e => e is UnifiedClassLikeDefinition ||
                          e is UnifiedFunctionDefinition);
     foreach (var e in outers) {
         var outerStr = GetOutersString(e);
         counter[outerStr] = 0;
     }
 }