コード例 #1
0
        private IDom CreateEndRegion(SyntaxTrivia trivia, IDom parent, OutputContext context)
        {
            if (!trivia.HasStructure)
            {
                return(null);
            }
            var structure       = trivia.GetStructure();
            var regionSyntax    = structure as EndRegionDirectiveTriviaSyntax;
            var startDirectives = regionSyntax
                                  .GetRelatedDirectives()
                                  .Where(x => x is RegionDirectiveTriviaSyntax);

            if (startDirectives.Count() != 1)
            {
                throw new NotImplementedException();
            }
            var startSyntax = startDirectives.Single();
            var container   = parent as IContainer;

            if (container == null)
            {
                throw new NotImplementedException();
            }
            var startBlock = container.GetMembers()
                             .OfType <RDomDetailBlockStart>()
                             .Where(x => MatchEndRegion(startSyntax, x.TypedTrivia))
                             .SingleOrDefault();
            var newItem = new RDomDetailBlockEnd(parent, trivia, startBlock);

            if (trivia.Token.LeadingTrivia.Any())
            {
                newItem.Whitespace2Set.Add(GetWhitespace(trivia.Token.LeadingTrivia.First()));
            }
            return(newItem);
        }
コード例 #2
0
        internal IDom CreateEndRegion(SyntaxTrivia trivia, IDom parent, OutputContext context)
        {
            if (!trivia.HasStructure)
            {
                return(null);
            }
            var structure    = trivia.GetStructure();
            var regionSyntax = structure as EndRegionDirectiveTriviaSyntax;
            //var startDirectives = regionSyntax
            //                        .GetRelatedDirectives()
            //                        .Where(x => x is RegionDirectiveTriviaSyntax);
            //if (startDirectives.Count() != 1) { throw new NotImplementedException(); }
            //var startSyntax = startDirectives.Single();
            //var startIDom = parent.DescendantsAndSelf
            //                .Where(x => (x.RawItem as SyntaxNode) != null
            //                           && x.RawItem == startSyntax)
            //                .OfType<IDetailBlockStart>()
            //                .First();
            //if (startIDom == null) throw new NotImplementedException();
            //var newItem = new RDomDetailBlockEnd(parent, trivia, startIDom, regionSyntax);
            var newItem = new RDomDetailBlockEnd(parent, trivia, null, regionSyntax);

            if (trivia.Token.LeadingTrivia.Any())
            {
                newItem.Whitespace2Set.Add(GetWhitespace(trivia.Token.LeadingTrivia.First()));
            }
            //var newParent = startIDom.Parent as IContainer;
            //newParent.AddOrMoveMember(newItem);
            //return null;
            return(newItem);
        }