105
104
_name = (const char *)0;
107
const SourceLoc *Repository::source_loc (JoinPointLoc &jpl) {
108
const SourceLoc *src = 0;
109
set<SourceLoc> &source_locs = (jpl.type () &
110
(JoinPointLoc::Method|JoinPointLoc::Construction|JoinPointLoc::Destruction)) ?
111
jpl.parent ()->source_locs () : jpl.source_locs ();
112
for (set<SourceLoc>::iterator i = source_locs.begin ();
113
i != source_locs.end (); ++i) {
114
if ((*i).kind () != SLK_DECL) {
108
122
Repository::REPO_ID Repository::consider (const Unit &unit) {
109
123
if (!unit.isFile ())
112
126
return _frepo.insert (unit.name (),
113
((Token*)unit.last ())->location ().line (), _primary);
127
((Token*)unit.last ())->location ().line (), _primary);
130
Repository::REPO_ID Repository::consider (const File &file) {
131
return _frepo.insert (file.name ().c_str (), file.len (), _primary);
116
134
Repository::REPO_ID Repository::consider (JoinPointLoc &jpl, int adv) {
117
REPO_ID file_id = consider (*jpl.unit ());
118
REPO_ID jp_id = _jprepo.insert (file_id, jpl.line (), jpl.signature (),
119
jpl.type_str (), adv, jpl.lines ());
135
const SourceLoc *src = source_loc (jpl);
138
REPO_ID file_id = consider (*(const File*)jpl.map (src->file_id()));
139
REPO_ID jp_id = _jprepo.insert (file_id, src->line (), jpl.signature (),
140
jpl.type_str (), adv, src->len ());
123
Repository::REPO_ID Repository::consider (AspectInfo &ai) {
124
REPO_ID file_id = consider (ai.unit ());
125
return _asprepo.insert (file_id, ai.line (), ai.name ());
144
Repository::REPO_ID Repository::consider (JPL_Aspect &jpl) {
145
const SourceLoc *src = source_loc (jpl);
148
REPO_ID file_id = consider (*(const File*)jpl.map (src->file_id()));
149
return _asprepo.insert (file_id, src->line (), jpl.signature ());
152
Repository::REPO_ID Repository::consider (JPL_Introduction &intro) {
153
const SourceLoc *src = source_loc (intro);
156
// remember aspect and advice information in the project repository
157
REPO_ID aspect_id = consider (*(JPL_Aspect*)intro.parent ());
158
REPO_ID file_id = consider (*(const File*)intro.map (src->file_id()));
159
REPO_ID advice_id = _advrepo.insert (file_id, src->line (),
160
intro.type_str (), aspect_id, src->len ());
128
164
void Repository::setup (Unit* prim_unit) {
143
179
_frepo.cleanup (_primary);
146
void Repository::update (IntroductionInfo &ii, PointCut &target) {
147
// remember aspect information in the project repository
148
REPO_ID aspect_id = consider (*ii.aspect ());
149
REPO_ID file_id = consider (ii.unit ());
150
REPO_ID advice_id = _advrepo.insert (file_id, ii.line (), ii.type_str (),
151
aspect_id, ii.lines ());
182
void Repository::update (JPL_Introduction &intro, JPL_Class &cls) {
183
// remember aspect information in the project repository
184
REPO_ID advice_id = consider (intro);
185
REPO_ID jp_id = consider (cls, advice_id);
186
cls.assigned_id (jp_id);
189
void Repository::update (AdviceInfo &ai, PointCut &target) {
190
// remember aspect information in the project repository
191
REPO_ID aspect_id = consider (ai.aspect ());
192
const SourceLoc *src = source_loc (ai.code ());
195
REPO_ID file_id = consider (*(const File*)ai.code ().map (src->file_id()));
196
REPO_ID advice_id = _advrepo.insert (file_id, src->line (),
197
ai.code ().type_str (), aspect_id, src->len ());
152
199
for (PointCut::iterator iter = target.begin ();
153
200
iter != target.end (); ++iter) {
154
201
JoinPointLoc &jpl = *((*iter).location ());
202
const SourceLoc *src = source_loc (jpl);
155
205
REPO_ID jp_id = consider (jpl, advice_id);
160
void Repository::update (AdviceInfo &ai, PointCut &target) {
161
// remember aspect information in the project repository
162
REPO_ID aspect_id = consider (*ai.aspect ());
163
REPO_ID file_id = consider (ai.code ().unit ());
164
REPO_ID advice_id = _advrepo.insert (file_id, ai.code ().line (),
165
ai.code ().type_str (), aspect_id, ai.code ().lines ());
167
for (PointCut::iterator iter = target.begin ();
168
iter != target.end (); ++iter) {
169
JoinPointLoc &jpl = *((*iter).location ());
170
if (!(jpl.type () == JoinPointLoc::Method &&
171
!((JPL_Method&)jpl).func_info ()->isDefined ()) &&
172
!(jpl.type () == JoinPointLoc::MethodCall &&
173
((JPL_Code&)jpl).is_pseudo ())) {
174
REPO_ID jp_id = consider (jpl, advice_id);
206
jpl.assigned_id (jp_id);
180
210
void Repository::update (OrderInfo &oi) {
181
211
// remember order advice information in the project repository
182
REPO_ID aspect_id = consider (*oi.aspect ());
183
REPO_ID file_id = consider (oi.unit ());
184
/* REPO_ID advice_id = */ _advrepo.insert (file_id, oi.line (),
185
"order", aspect_id, oi.lines ());
212
REPO_ID aspect_id = consider (oi.aspect ());
213
const SourceLoc *src = source_loc (oi.order ());
216
REPO_ID file_id = consider (*(const File*)oi.order ().map (src->file_id()));
217
/* REPO_ID advice_id = */ _advrepo.insert (file_id, src->line (),
218
"order", aspect_id, src->len ());