110
126
m_pImageList->Add(bmp); // PARSER_IMG_PREPROCESSOR
111
127
bmp = cbLoadBitmap(prefix + _T("enum.png"), wxBITMAP_TYPE_PNG);
112
128
m_pImageList->Add(bmp); // PARSER_IMG_ENUM
129
bmp = cbLoadBitmap(prefix + _T("enum_private.png"), wxBITMAP_TYPE_PNG);
130
m_pImageList->Add(bmp); // PARSER_IMG_ENUM_PRIVATE
131
bmp = cbLoadBitmap(prefix + _T("enum_protected.png"), wxBITMAP_TYPE_PNG);
132
m_pImageList->Add(bmp); // PARSER_IMG_ENUM_PROTECTED
133
bmp = cbLoadBitmap(prefix + _T("enum_public.png"), wxBITMAP_TYPE_PNG);
134
m_pImageList->Add(bmp); // PARSER_IMG_ENUM_PUBLIC
113
135
bmp = cbLoadBitmap(prefix + _T("enumerator.png"), wxBITMAP_TYPE_PNG);
114
136
m_pImageList->Add(bmp); // PARSER_IMG_ENUMERATOR
115
137
bmp = cbLoadBitmap(prefix + _T("namespace.png"), wxBITMAP_TYPE_PNG);
116
138
m_pImageList->Add(bmp); // PARSER_IMG_NAMESPACE
117
139
bmp = cbLoadBitmap(prefix + _T("typedef.png"), wxBITMAP_TYPE_PNG);
118
140
m_pImageList->Add(bmp); // PARSER_IMG_TYPEDEF
141
bmp = cbLoadBitmap(prefix + _T("typedef_private.png"), wxBITMAP_TYPE_PNG);
142
m_pImageList->Add(bmp); // PARSER_IMG_TYPEDEF_PRIVATE
143
bmp = cbLoadBitmap(prefix + _T("typedef_protected.png"), wxBITMAP_TYPE_PNG);
144
m_pImageList->Add(bmp); // PARSER_IMG_TYPEDEF_PROTECTED
145
bmp = cbLoadBitmap(prefix + _T("typedef_public.png"), wxBITMAP_TYPE_PNG);
146
m_pImageList->Add(bmp); // PARSER_IMG_TYPEDEF_PUBLIC
119
147
bmp = cbLoadBitmap(prefix + _T("symbols_folder.png"), wxBITMAP_TYPE_PNG);
120
148
m_pImageList->Add(bmp); // PARSER_IMG_SYMBOLS_FOLDER
149
bmp = cbLoadBitmap(prefix + _T("vars_folder.png"), wxBITMAP_TYPE_PNG);
150
m_pImageList->Add(bmp); // PARSER_IMG_VARS_FOLDER
151
bmp = cbLoadBitmap(prefix + _T("funcs_folder.png"), wxBITMAP_TYPE_PNG);
152
m_pImageList->Add(bmp); // PARSER_IMG_FUNCS_FOLDER
121
153
bmp = cbLoadBitmap(prefix + _T("enums_folder.png"), wxBITMAP_TYPE_PNG);
122
154
m_pImageList->Add(bmp); // PARSER_IMG_ENUMS_FOLDER
123
155
bmp = cbLoadBitmap(prefix + _T("preproc_folder.png"), wxBITMAP_TYPE_PNG);
133
175
Parser::~Parser()
135
177
m_ShuttingDown = true;
136
if(m_pClassBrowser && m_pClassBrowser->GetParserPtr() == this)
178
if (m_pClassBrowser && m_pClassBrowser->GetParserPtr() == this)
137
179
m_pClassBrowser->UnlinkParser();
138
180
m_TreeBuildingStatus = 0;
139
m_pClassBrowser = NULL;
141
183
Clear(); // Clear also disconnects the events
142
184
#ifndef STANDALONE
143
185
Delete(m_pImageList);
144
Delete(m_pTempTokens);
186
Delete(m_pTempTokensTree);
187
Delete(m_pTokensTree);
146
188
#endif // STANDALONE
149
191
void Parser::ConnectEvents()
151
Connect(-1,-1,cbEVT_THREADTASK_ALLDONE,
193
Connect(-1, -1, cbEVT_THREADTASK_ALLDONE,
152
194
(wxObjectEventFunction)(wxEventFunction)(wxCommandEventFunction)
153
195
&Parser::OnAllThreadsDone);
154
Connect(TIMER_ID,-1, wxEVT_TIMER,(wxObjectEventFunction)
155
(wxEventFunction)(wxTimerEventFunction)&Parser::OnTimer);
156
Connect(BATCH_TIMER_ID,-1,wxEVT_TIMER,(wxObjectEventFunction)
157
(wxEventFunction)(wxTimerEventFunction)&Parser::OnBatchTimer);
196
Connect(TIMER_ID, -1, wxEVT_TIMER,
197
(wxObjectEventFunction)(wxEventFunction)(wxTimerEventFunction)
199
Connect(BATCH_TIMER_ID, -1, wxEVT_TIMER,
200
(wxObjectEventFunction)(wxEventFunction)(wxTimerEventFunction)
201
&Parser::OnBatchTimer);
160
204
void Parser::DisconnectEvents()
193
238
//m_Pool.SetConcurrentThreads(cfg->ReadInt(_T("/max_threads"), 1)); // Ignore it in the meanwhile
194
m_Options.followLocalIncludes = cfg->ReadBool(_T("/parser_follow_local_includes"), true);
240
m_Options.followLocalIncludes = cfg->ReadBool(_T("/parser_follow_local_includes"), true);
195
241
m_Options.followGlobalIncludes = cfg->ReadBool(_T("/parser_follow_global_includes"), true);
196
m_Options.caseSensitive = cfg->ReadBool(_T("/case_sensitive"), false);
197
m_Options.useSmartSense = cfg->ReadBool(_T("/use_SmartSense"), true);
198
m_Options.wantPreprocessor = cfg->ReadBool(_T("/want_preprocessor"), true);
242
m_Options.caseSensitive = cfg->ReadBool(_T("/case_sensitive"), false);
243
m_Options.useSmartSense = cfg->ReadBool(_T("/use_SmartSense"), true);
244
m_Options.whileTyping = cfg->ReadBool(_T("/while_typing"), true);
245
m_Options.wantPreprocessor = cfg->ReadBool(_T("/want_preprocessor"), true);
199
247
m_BrowserOptions.showInheritance = cfg->ReadBool(_T("/browser_show_inheritance"), false);
200
m_BrowserOptions.expandNS = cfg->ReadBool(_T("/browser_expand_ns"), false);
201
m_BrowserOptions.displayFilter = (BrowserDisplayFilter)cfg->ReadInt(_T("/browser_display_filter"), bdfWorkspace);
248
m_BrowserOptions.expandNS = cfg->ReadBool(_T("/browser_expand_ns"), false);
249
m_BrowserOptions.treeMembers = cfg->ReadBool(_T("/browser_tree_members"), true);
250
m_BrowserOptions.displayFilter = (BrowserDisplayFilter)cfg->ReadInt(_T("/browser_display_filter"), bdfWorkspace);
251
m_BrowserOptions.sortType = (BrowserSortType)cfg->ReadInt(_T("/browser_sort_type"), bstKind);
202
252
#endif // STANDALONE
207
257
#ifndef STANDALONE
208
258
ConfigManager* cfg = Manager::Get()->GetConfigManager(_T("code_completion"));
210
cfg->Write(_T("/max_threads"), (int)GetMaxThreads());
211
cfg->Write(_T("/parser_follow_local_includes"), m_Options.followLocalIncludes);
260
cfg->Write(_T("/max_threads"), (int)GetMaxThreads());
261
cfg->Write(_T("/parser_follow_local_includes"), m_Options.followLocalIncludes);
212
262
cfg->Write(_T("/parser_follow_global_includes"), m_Options.followGlobalIncludes);
213
cfg->Write(_T("/case_sensitive"), m_Options.caseSensitive);
214
cfg->Write(_T("/use_SmartSense"), m_Options.useSmartSense);
215
cfg->Write(_T("/want_preprocessor"), m_Options.wantPreprocessor);
216
cfg->Write(_T("/browser_show_inheritance"), m_BrowserOptions.showInheritance);
217
cfg->Write(_T("/browser_expand_ns"), m_BrowserOptions.expandNS);
218
cfg->Write(_T("/browser_display_filter"), m_BrowserOptions.displayFilter);
263
cfg->Write(_T("/case_sensitive"), m_Options.caseSensitive);
264
cfg->Write(_T("/use_SmartSense"), m_Options.useSmartSense);
265
cfg->Write(_T("/while_typing"), m_Options.whileTyping);
266
cfg->Write(_T("/want_preprocessor"), m_Options.wantPreprocessor);
268
cfg->Write(_T("/browser_show_inheritance"), m_BrowserOptions.showInheritance);
269
cfg->Write(_T("/browser_expand_ns"), m_BrowserOptions.expandNS);
270
cfg->Write(_T("/browser_tree_members"), m_BrowserOptions.treeMembers);
271
cfg->Write(_T("/browser_display_filter"), m_BrowserOptions.displayFilter);
272
cfg->Write(_T("/browser_sort_type"), m_BrowserOptions.sortType);
219
273
#endif // STANDALONE
273
327
switch (token->m_TokenKind)
275
case tkPreprocessor: return PARSER_IMG_PREPROCESSOR;
277
case tkEnum: return PARSER_IMG_ENUM;
279
case tkEnumerator: return PARSER_IMG_ENUMERATOR;
281
case tkClass: return PARSER_IMG_CLASS;
283
case tkNamespace: return PARSER_IMG_NAMESPACE;
285
case tkTypedef: return PARSER_IMG_TYPEDEF;
329
case tkPreprocessor: return PARSER_IMG_PREPROCESSOR;
332
switch (token->m_Scope)
334
case tsPublic: return PARSER_IMG_ENUM_PUBLIC;
335
case tsProtected: return PARSER_IMG_ENUM_PROTECTED;
336
case tsPrivate: return PARSER_IMG_ENUM_PRIVATE;
337
default: return PARSER_IMG_ENUM;
340
case tkEnumerator: return PARSER_IMG_ENUMERATOR;
343
switch (token->m_Scope)
345
case tsPublic: return PARSER_IMG_CLASS_PUBLIC;
346
case tsProtected: return PARSER_IMG_CLASS_PROTECTED;
347
case tsPrivate: return PARSER_IMG_CLASS_PRIVATE;
348
default: return PARSER_IMG_CLASS_PUBLIC;
351
case tkNamespace: return PARSER_IMG_NAMESPACE;
354
switch (token->m_Scope)
356
case tsPublic: return PARSER_IMG_TYPEDEF_PUBLIC;
357
case tsProtected: return PARSER_IMG_TYPEDEF_PROTECTED;
358
case tsPrivate: return PARSER_IMG_TYPEDEF_PRIVATE;
359
default: return PARSER_IMG_TYPEDEF;
363
switch (token->m_Scope)
365
case tsPublic: return PARSER_IMG_MACRO_PUBLIC;
366
case tsProtected: return PARSER_IMG_MACRO_PROTECTED;
367
case tsPrivate: return PARSER_IMG_MACRO_PRIVATE;
368
default: return PARSER_IMG_MACRO;
287
371
case tkConstructor:
288
372
switch (token->m_Scope)
290
374
case tsProtected: return PARSER_IMG_CTOR_PROTECTED;
291
case tsPrivate: return PARSER_IMG_CTOR_PRIVATE;
292
default: return PARSER_IMG_CTOR_PUBLIC;
375
case tsPrivate: return PARSER_IMG_CTOR_PRIVATE;
376
default: return PARSER_IMG_CTOR_PUBLIC;
295
379
case tkDestructor:
296
380
switch (token->m_Scope)
298
382
case tsProtected: return PARSER_IMG_DTOR_PROTECTED;
299
case tsPrivate: return PARSER_IMG_DTOR_PRIVATE;
300
default: return PARSER_IMG_DTOR_PUBLIC;
383
case tsPrivate: return PARSER_IMG_DTOR_PRIVATE;
384
default: return PARSER_IMG_DTOR_PUBLIC;
304
388
switch (token->m_Scope)
306
390
case tsProtected: return PARSER_IMG_FUNC_PROTECTED;
307
case tsPrivate: return PARSER_IMG_FUNC_PRIVATE;
308
default: return PARSER_IMG_FUNC_PUBLIC;
391
case tsPrivate: return PARSER_IMG_FUNC_PRIVATE;
392
default: return PARSER_IMG_FUNC_PUBLIC;
312
396
switch (token->m_Scope)
314
398
case tsProtected: return PARSER_IMG_VAR_PROTECTED;
315
case tsPrivate: return PARSER_IMG_VAR_PRIVATE;
316
default: return PARSER_IMG_VAR_PUBLIC;
399
case tsPrivate: return PARSER_IMG_VAR_PRIVATE;
400
default: return PARSER_IMG_VAR_PUBLIC;
319
default: return PARSER_IMG_NONE;
403
default: return PARSER_IMG_NONE;
322
406
#endif // STANDALONE
324
408
Token* Parser::FindTokenByName(const wxString& name, bool globalsOnly, short int kindMask) const
326
410
wxCriticalSectionLocker lock(s_MutexProtection);
327
int result = m_pTokens->TokenExists(name,-1,kindMask);
328
return m_pTokens->at(result);
411
int result = m_pTokensTree->TokenExists(name, -1, kindMask);
412
return m_pTokensTree->at(result);
331
415
Token* Parser::FindChildTokenByName(Token* parent, const wxString& name, bool useInheritance, short int kindMask) const
334
418
return FindTokenByName(name, false, kindMask);
335
420
Token* result = 0;
336
wxCriticalSectionLocker *lock = 0;
338
lock = new wxCriticalSectionLocker(s_MutexProtection);
339
result = m_pTokens->at(m_pTokens->TokenExists(name,parent->GetSelf(),kindMask));
422
wxCriticalSectionLocker lock(s_MutexProtection);
423
result = m_pTokensTree->at(m_pTokensTree->TokenExists(name, parent->GetSelf(), kindMask));
342
if(!result && useInheritance)
426
if (!result && useInheritance)
344
428
// no reason for a critical section here:
345
429
// it will only recurse to itself.
346
430
// the critical section above is sufficient
347
431
TokenIdxSet::iterator it;
348
for(it = parent->m_DirectAncestors.begin();it != parent->m_DirectAncestors.end();++it)
432
for (it = parent->m_DirectAncestors.begin(); it != parent->m_DirectAncestors.end(); ++it)
350
Token* ancestor = m_pTokens->at(*it);
434
Token* ancestor = m_pTokensTree->at(*it);
351
435
result = FindChildTokenByName(ancestor, name, true, kindMask);
359
size_t Parser::FindMatches(const wxString& s,TokenList& result,bool caseSensitive,bool is_prefix)
443
size_t Parser::FindMatches(const wxString& s, TokenList& result, bool caseSensitive, bool is_prefix)
362
446
TokenIdxSet tmpresult;
363
447
wxCriticalSectionLocker lock(s_MutexProtection);
364
if(!m_pTokens->FindMatches(s,tmpresult,caseSensitive,is_prefix))
448
if (!m_pTokensTree->FindMatches(s, tmpresult, caseSensitive, is_prefix))
367
451
TokenIdxSet::iterator it;
368
for(it = tmpresult.begin();it!=tmpresult.end();++it)
452
for (it = tmpresult.begin(); it != tmpresult.end(); ++it)
370
Token* token = m_pTokens->at(*it);
454
Token* token = m_pTokensTree->at(*it);
372
456
result.push_back(token);
374
458
return result.size();
461
size_t Parser::FindMatches(const wxString& s, TokenIdxSet& result, bool caseSensitive, bool is_prefix)
464
TokenIdxSet tmpresult;
465
wxCriticalSectionLocker lock(s_MutexProtection);
466
if (!m_pTokensTree->FindMatches(s, tmpresult, caseSensitive, is_prefix))
469
TokenIdxSet::iterator it;
470
for (it = tmpresult.begin(); it != tmpresult.end(); ++it)
472
Token* token = m_pTokensTree->at(*it);
474
//result.push_back(token);
477
return result.size();
377
480
void Parser::LinkInheritance(bool tempsOnly)
379
482
wxCriticalSectionLocker lock(s_MutexProtection);
380
(tempsOnly ? m_pTempTokens : m_pTokens)->RecalcData();
483
(tempsOnly ? m_pTempTokensTree : m_pTokensTree)->RecalcData();
383
486
void Parser::MarkFileTokensAsLocal(const wxString& filename, bool local, void* userData)
385
488
wxCriticalSectionLocker lock(s_MutexProtection);
386
m_pTokens->MarkFileTokensAsLocal(filename, local, userData);
489
m_pTokensTree->MarkFileTokensAsLocal(filename, local, userData);
389
492
bool Parser::ParseBuffer(const wxString& buffer, bool isLocal, bool bufferSkipBlocks, bool isTemp)
391
494
ParserThreadOptions opts;
392
opts.wantPreprocessor = m_Options.wantPreprocessor;
393
opts.followLocalIncludes = m_Options.followLocalIncludes;
495
opts.wantPreprocessor = m_Options.wantPreprocessor;
496
opts.followLocalIncludes = m_Options.followLocalIncludes;
394
497
opts.followGlobalIncludes = m_Options.followGlobalIncludes;
395
opts.useBuffer = true;
396
opts.isTemp = isTemp;
397
opts.bufferSkipBlocks = bufferSkipBlocks;
398
opts.handleFunctions = false;
498
opts.useBuffer = true;
499
opts.isTemp = isTemp;
500
opts.bufferSkipBlocks = bufferSkipBlocks;
501
opts.handleFunctions = false;
399
503
return Parse(buffer, isLocal, opts);
402
506
void Parser::BatchParse(const wxArrayString& filenames)
405
509
m_IsBatch = true;
406
510
m_Pool.BatchBegin();
512
Manager::Get()->GetLogManager()->DebugLog(F(_T("Batch-parsing %d file(s)..."), filenames.GetCount()));
407
513
for (unsigned int i = 0; i < filenames.GetCount(); ++i)
409
LoaderBase* loader = NULL; //defer loading until later
410
Parse(filenames[i], true, loader);
514
Parse(filenames[i]); // defer loading until later
413
516
// Allow future parses to take place in this same run
414
m_batchtimer.Start(batch_timer_delay,wxTIMER_ONE_SHOT);
517
m_BatchTimer.Start(batch_timer_delay,wxTIMER_ONE_SHOT);
417
520
bool Parser::Parse(const wxString& filename, bool isLocal, LoaderBase* loader)
419
522
ParserThreadOptions opts;
420
opts.wantPreprocessor = m_Options.wantPreprocessor;
421
opts.useBuffer = false;
422
opts.bufferSkipBlocks = false;
523
opts.wantPreprocessor = m_Options.wantPreprocessor;
524
opts.useBuffer = false;
525
opts.bufferSkipBlocks = false;
423
526
opts.bufferSkipOuterBlocks = false;
424
opts.followLocalIncludes = m_Options.followLocalIncludes;
425
opts.followGlobalIncludes = m_Options.followGlobalIncludes;
426
opts.loader = loader;
428
// feature incomplete
429
// bool isSource = FileTypeOf(filename) == ftSource;
430
// opts.handleClasses = !isSource;
431
// opts.handleEnums = !isSource;
432
//// opts.handleFunctions = !isSource; // always true, so we can get the implementation info
433
// opts.handleTypedefs = !isSource;
434
// opts.handleVars = !isSource;
527
opts.followLocalIncludes = m_Options.followLocalIncludes;
528
opts.followGlobalIncludes = m_Options.followGlobalIncludes;
529
opts.loader = loader; // maybe 0 at this point
436
531
return Parse(UnixFilename(filename), isLocal, opts);
442
537
bool result = false;
447
542
wxCriticalSectionLocker lock(s_MutexProtection);
448
bool canparse = !m_pTokens->IsFileParsed(buffOrFile);
450
canparse = m_pTokens->ReserveFileForParsing(buffOrFile,true) != 0;
544
bool canparse = !m_pTokensTree->IsFileParsed(buffOrFile);
546
canparse = m_pTokensTree->ReserveFileForParsing(buffOrFile, true) != 0;
453
if(opts.loader) // if a loader is already open at this point, the caller must clean it up
454
Manager::Get()->GetLogManager()->DebugLog(_T("CodeCompletion Plugin: FileLoader memory leak likely loading file ")+bufferOrFilename);
550
if (opts.loader) // if a loader is already open at this point, the caller must clean it up
551
Manager::Get()->GetLogManager()->DebugLog(_T("Parse() : CodeCompletion Plugin: FileLoader memory leak likely while loading file ")+bufferOrFilename);
457
if(!opts.loader) //this should always be true (memory will leak if a loader has already been initialized before this point)
458
opts.loader=Manager::Get()->GetFileManager()->Load(bufferOrFilename, false);
555
if (!opts.loader) // this should always be true (memory will leak if a loader has already been initialized before this point)
556
opts.loader = Manager::Get()->GetFileManager()->Load(bufferOrFilename, true);
461
// Manager::Get()->GetLogManager()->DebugLog(_T("Creating task for: %s"), buffOrFile.c_str());
559
TRACE(_T("Parse() : Creating task for: %s"), buffOrFile.wx_str());
462
560
ParserThread* thread = new ParserThread(this,
467
565
if (opts.useBuffer)
469
567
result = thread->Parse();
504
606
ParserThreadOptions opts;
505
607
opts.wantPreprocessor = m_Options.wantPreprocessor;
506
opts.useBuffer = true;
608
opts.useBuffer = true;
507
609
opts.bufferSkipBlocks = true;
508
opts.handleFunctions = true;
509
ParserThread* thread = new ParserThread(this,
514
bool result = thread->Parse();
610
opts.handleFunctions = true;
612
ParserThread thread(this,
618
return thread.Parse();
519
621
bool Parser::ParseBufferForUsingNamespace(const wxString& buffer, wxArrayString& result)
521
623
ParserThreadOptions opts;
522
// opts.wantPreprocessor = m_Options.wantPreprocessor; // ignored
523
// opts.useBuffer = false; // ignored
524
// opts.bufferSkipBlocks = false; // ignored
525
ParserThread* thread = new ParserThread(this,
530
bool bresult = thread->ParseBufferForUsingNamespace(buffer, result);
625
ParserThread thread(this,
631
return thread.ParseBufferForUsingNamespace(buffer, result);
535
634
bool Parser::RemoveFile(const wxString& filename)
538
637
return false; // Can't alter the tokens tree if parsing has not finished
539
639
bool result = false;
540
640
wxString file = UnixFilename(filename);
542
642
wxCriticalSectionLocker lock(s_MutexProtection);
543
size_t index = m_pTokens->GetFileIndex(file);
544
result = m_pTokens->m_FilesStatus.count(index);
643
size_t index = m_pTokensTree->GetFileIndex(file);
644
result = m_pTokensTree->m_FilesStatus.count(index);
546
m_pTokens->RemoveFile(filename);
547
m_pTokens->m_FilesMap.erase(index);
548
m_pTokens->m_FilesStatus.erase(index);
549
m_pTokens->m_FilesToBeReparsed.erase(index);
550
m_pTokens->m_modified = true;
646
m_pTokensTree->RemoveFile(filename);
647
m_pTokensTree->m_FilesMap.erase(index);
648
m_pTokensTree->m_FilesStatus.erase(index);
649
m_pTokensTree->m_FilesToBeReparsed.erase(index);
650
m_pTokensTree->m_Modified = true;
758
855
if (base.Last() == wxFILE_SEP_PATH)
759
856
base.RemoveLast();
761
if(m_IncludeDirs.Index(base) == wxNOT_FOUND)
858
if (m_IncludeDirs.Index(base) == wxNOT_FOUND)
763
// Manager::Get()->GetLogManager()->DebugLog(_T("Adding %s"), base.c_str());
860
TRACE(_T("AddIncludeDir() : Adding %s"), base.wx_str());
764
861
m_IncludeDirs.Add(base);
766
} // end of AddIncludeDir
768
865
wxString Parser::FindFirstFileInIncludeDirs(const wxString& file)
770
867
wxString FirstFound = m_GlobalIncludes.GetItem(file);
771
if(FirstFound.IsEmpty())
868
if (FirstFound.IsEmpty())
773
870
wxArrayString FoundSet = FindFileInIncludeDirs(file,true);
774
if(FoundSet.GetCount())
871
if (FoundSet.GetCount())
776
873
FirstFound = UnixFilename(FoundSet[0]);
777
m_GlobalIncludes.AddItem(file,FirstFound);
874
m_GlobalIncludes.AddItem(file, FirstFound);
780
877
return FirstFound;
783
wxArrayString Parser::FindFileInIncludeDirs(const wxString& file,bool firstonly)
880
wxArrayString Parser::FindFileInIncludeDirs(const wxString& file, bool firstonly)
785
882
wxArrayString FoundSet;
786
for(size_t idxSearch = 0; idxSearch < m_IncludeDirs.GetCount(); ++idxSearch)
883
for (size_t idxSearch = 0; idxSearch < m_IncludeDirs.GetCount(); ++idxSearch)
788
885
wxString base = m_IncludeDirs[idxSearch];
789
886
wxFileName tmp = file;
790
887
NormalizePath(tmp,base);
791
888
wxString fullname = tmp.GetFullPath();
792
if(wxFileExists(fullname))
889
if (wxFileExists(fullname))
794
891
FoundSet.Add(fullname);
798
} // end for : idx : idxSearch
799
// Manager::Get()->GetLogManager()->DebugLog(_T("Searching %s"), file.c_str());
800
// Manager::Get()->GetLogManager()->DebugLog(_T("Found %d"), FoundSet.GetCount());
897
TRACE(_T("FindFileInIncludeDirs() : Searching %s"), file.wx_str());
898
TRACE(_T("FindFileInIncludeDirs() : Found %d"), FoundSet.GetCount());
802
} // end of FindFileInIncludeDirs
804
903
void Parser::OnAllThreadsDone(CodeBlocksEvent& event)
806
if(m_IgnoreThreadEvents)
905
if (m_IgnoreThreadEvents)
809
// LinkInheritance(false);
810
910
wxCommandEvent evt(wxEVT_COMMAND_MENU_SELECTED, PARSER_END);
811
911
evt.SetClientData(this);
812
912
wxPostEvent(m_pParent, evt);
815
wxString Parser::GetFullFileName(const wxString& src,const wxString& tgt, bool isGlobal)
915
wxString Parser::GetFullFileName(const wxString& src, const wxString& tgt, bool isGlobal)
817
917
wxCriticalSectionLocker lock(s_mutexListProtection);
818
918
wxString fullname(_T("")); // Initialize with Empty String
934
1038
// loop two times so that we reparse modified *header* files first
935
1039
// because they usually hold definitions which need to exist
936
1040
// when we parse the normal source files...
937
for(it = m_pTokens->m_FilesToBeReparsed.begin(); it != m_pTokens->m_FilesToBeReparsed.end(); ++it)
1041
for (it = m_pTokensTree->m_FilesToBeReparsed.begin(); it != m_pTokensTree->m_FilesToBeReparsed.end(); ++it)
939
m_pTokens->RemoveFile(*it);
940
wxString filename = m_pTokens->m_FilenamesMap.GetString(*it);
1043
m_pTokensTree->RemoveFile(*it);
1044
wxString filename = m_pTokensTree->m_FilenamesMap.GetString(*it);
941
1045
if (FileTypeOf(filename) == ftSource) // ignore source files (*.cpp etc)
943
1047
files_list.push(filename);
945
for(it = m_pTokens->m_FilesToBeReparsed.begin(); it != m_pTokens->m_FilesToBeReparsed.end(); ++it)
1049
for (it = m_pTokensTree->m_FilesToBeReparsed.begin(); it != m_pTokensTree->m_FilesToBeReparsed.end(); ++it)
947
m_pTokens->RemoveFile(*it);
948
wxString filename = m_pTokens->m_FilenamesMap.GetString(*it);
1051
m_pTokensTree->RemoveFile(*it);
1052
wxString filename = m_pTokensTree->m_FilenamesMap.GetString(*it);
949
1053
if (FileTypeOf(filename) != ftSource) // ignore non-source files (*.h etc)
951
1055
files_list.push(filename);