@@ -105,51 +105,69 @@ void SwiftLangSupport::getExpressionContextInfo(
105
105
SwiftLangSupport::printTypeUSR (Item.ExpectedTy , OS);
106
106
unsigned TypeUSRLength = SS.size () - TypeUSRBegin;
107
107
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;
109
120
for (auto member : Item.ImplicitMembers ) {
121
+ ImplicitMembers.emplace_back ();
122
+ auto &memberElem = ImplicitMembers.back ();
110
123
111
124
// Name.
112
- unsigned DeclNameBegin = SS.size ();
125
+ memberElem. DeclNameBegin = SS.size ();
113
126
member->getFullName ().print (OS);
114
- unsigned DeclNameLength = SS.size () - DeclNameBegin;
115
- StringRef DeclNameStr (SS.begin () + DeclNameBegin, DeclNameLength);
127
+ memberElem.DeclNameLength = SS.size () - memberElem.DeclNameBegin ;
116
128
117
129
// Description.
118
- unsigned DescriptionBegin = SS.size ();
130
+ memberElem. DescriptionBegin = SS.size ();
119
131
SwiftLangSupport::printMemberDeclDescription (
120
132
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 ;
123
134
124
135
// Sourcetext.
125
- unsigned SourceTextBegin = SS.size ();
136
+ memberElem. SourceTextBegin = SS.size ();
126
137
SwiftLangSupport::printMemberDeclDescription (
127
138
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 ;
130
140
131
141
// DocBrief.
132
- StringRef BriefComment;
133
142
auto MaybeClangNode = member->getClangNode ();
134
143
if (MaybeClangNode) {
135
144
if (auto *D = MaybeClangNode.getAsDecl ()) {
136
145
const auto &ClangContext = D->getASTContext ();
137
146
if (const clang::RawComment *RC =
138
147
ClangContext.getRawCommentForAnyRedecl (D))
139
- BriefComment = RC->getBriefText (ClangContext);
148
+ memberElem. BriefComment = RC->getBriefText (ClangContext);
140
149
}
141
150
} else {
142
- BriefComment = member->getBriefComment ();
151
+ memberElem. BriefComment = member->getBriefComment ();
143
152
}
144
-
145
- ImplicitMembers.push_back (
146
- {DeclNameStr, Description, SourceText, BriefComment});
147
153
}
148
154
149
155
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
+
150
168
Info.TypeName = StringRef (SS.begin () + TypeNameBegin, TypeNameLength);
151
169
Info.TypeUSR = StringRef (SS.begin () + TypeUSRBegin, TypeUSRLength);
152
- Info.ImplicitMembers = ImplicitMembers ;
170
+ Info.ImplicitMembers = SKImplicitMembers ;
153
171
154
172
SKConsumer.handleResult (Info);
155
173
}
0 commit comments