@@ -105,51 +105,69 @@ void SwiftLangSupport::getExpressionContextInfo(
105105 SwiftLangSupport::printTypeUSR (Item.ExpectedTy , OS);
106106 unsigned TypeUSRLength = SS.size () - TypeUSRBegin;
107107
108- SmallVector<SourceKit::TypeContextInfoItem::Member, 8 > ImplicitMembers;
108+ struct MemberInfo {
109+ size_t DeclNameBegin = 0 ;
110+ size_t DeclNameLength = 0 ;
111+ size_t DescriptionBegin = 0 ;
112+ size_t DescriptionLength = 0 ;
113+ size_t SourceTextBegin = 0 ;
114+ size_t SourceTextLength = 0 ;
115+ StringRef BriefComment;
116+
117+ MemberInfo () {}
118+ };
119+ SmallVector<MemberInfo, 8 > ImplicitMembers;
109120 for (auto member : Item.ImplicitMembers ) {
121+ ImplicitMembers.emplace_back ();
122+ auto &memberElem = ImplicitMembers.back ();
110123
111124 // Name.
112- unsigned DeclNameBegin = SS.size ();
125+ memberElem. DeclNameBegin = SS.size ();
113126 member->getFullName ().print (OS);
114- unsigned DeclNameLength = SS.size () - DeclNameBegin;
115- StringRef DeclNameStr (SS.begin () + DeclNameBegin, DeclNameLength);
127+ memberElem.DeclNameLength = SS.size () - memberElem.DeclNameBegin ;
116128
117129 // Description.
118- unsigned DescriptionBegin = SS.size ();
130+ memberElem. DescriptionBegin = SS.size ();
119131 SwiftLangSupport::printMemberDeclDescription (
120132 member, Item.ExpectedTy , /* usePlaceholder=*/ false , OS);
121- unsigned DescriptionLength = SS.size () - DescriptionBegin;
122- StringRef Description (SS.begin () + DescriptionBegin, DescriptionLength);
133+ memberElem.DescriptionLength = SS.size () - memberElem.DescriptionBegin ;
123134
124135 // Sourcetext.
125- unsigned SourceTextBegin = SS.size ();
136+ memberElem. SourceTextBegin = SS.size ();
126137 SwiftLangSupport::printMemberDeclDescription (
127138 member, Item.ExpectedTy , /* usePlaceholder=*/ true , OS);
128- unsigned SourceTextLength = SS.size () - SourceTextBegin;
129- StringRef SourceText (SS.begin () + SourceTextBegin, SourceTextLength);
139+ memberElem.SourceTextLength = SS.size () - memberElem.SourceTextBegin ;
130140
131141 // DocBrief.
132- StringRef BriefComment;
133142 auto MaybeClangNode = member->getClangNode ();
134143 if (MaybeClangNode) {
135144 if (auto *D = MaybeClangNode.getAsDecl ()) {
136145 const auto &ClangContext = D->getASTContext ();
137146 if (const clang::RawComment *RC =
138147 ClangContext.getRawCommentForAnyRedecl (D))
139- BriefComment = RC->getBriefText (ClangContext);
148+ memberElem. BriefComment = RC->getBriefText (ClangContext);
140149 }
141150 } else {
142- BriefComment = member->getBriefComment ();
151+ memberElem. BriefComment = member->getBriefComment ();
143152 }
144-
145- ImplicitMembers.push_back (
146- {DeclNameStr, Description, SourceText, BriefComment});
147153 }
148154
149155 SourceKit::TypeContextInfoItem Info;
156+ SmallVector<SourceKit::TypeContextInfoItem::Member, 8 > SKImplicitMembers;
157+
158+ for (auto &info : ImplicitMembers) {
159+ StringRef Name (SS.begin () + info.DeclNameBegin , info.DeclNameLength );
160+ StringRef Description (SS.begin () + info.DescriptionBegin ,
161+ info.DescriptionLength );
162+ StringRef SourceText (SS.begin () + info.SourceTextBegin ,
163+ info.SourceTextLength );
164+ SKImplicitMembers.push_back (
165+ {Name, Description, SourceText, info.BriefComment });
166+ }
167+
150168 Info.TypeName = StringRef (SS.begin () + TypeNameBegin, TypeNameLength);
151169 Info.TypeUSR = StringRef (SS.begin () + TypeUSRBegin, TypeUSRLength);
152- Info.ImplicitMembers = ImplicitMembers ;
170+ Info.ImplicitMembers = SKImplicitMembers ;
153171
154172 SKConsumer.handleResult (Info);
155173 }
0 commit comments