|
|
|
|
@ -6,6 +6,7 @@
|
|
|
|
|
#include "debug_clang.h" |
|
|
|
|
#endif |
|
|
|
|
#include "info.h" |
|
|
|
|
#include "dialogs.h" |
|
|
|
|
|
|
|
|
|
namespace sigc { |
|
|
|
|
#ifndef SIGC_FUNCTORS_DEDUCE_RESULT_TYPE_WITH_DECLTYPE |
|
|
|
|
@ -891,6 +892,7 @@ Source::ClangViewAutocomplete(file_path, language) {
|
|
|
|
|
} |
|
|
|
|
auto token=get_token(); |
|
|
|
|
if(token) { |
|
|
|
|
wait_parsing(views); |
|
|
|
|
std::vector<Source::View*> renamed_views; |
|
|
|
|
for(auto &view: views) { |
|
|
|
|
if(auto clang_view=dynamic_cast<Source::ClangView*>(view)) { |
|
|
|
|
@ -968,6 +970,8 @@ Source::ClangViewAutocomplete(file_path, language) {
|
|
|
|
|
return location; |
|
|
|
|
} |
|
|
|
|
auto token=get_token(); |
|
|
|
|
if(token) { |
|
|
|
|
wait_parsing(views); |
|
|
|
|
for(auto &view: views) { |
|
|
|
|
if(auto clang_view=dynamic_cast<Source::ClangView*>(view)) { |
|
|
|
|
if(clang_view->language && clang_view->language->get_id()!="chdr" && clang_view->language->get_id()!="cpphdr") { |
|
|
|
|
@ -991,6 +995,8 @@ Source::ClangViewAutocomplete(file_path, language) {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
Info::get().print("Could not find implementation"); |
|
|
|
|
} |
|
|
|
|
return location; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
@ -1001,6 +1007,8 @@ Source::ClangViewAutocomplete(file_path, language) {
|
|
|
|
|
return usages; |
|
|
|
|
} |
|
|
|
|
auto token=get_token(); |
|
|
|
|
if(token) { |
|
|
|
|
wait_parsing(views); |
|
|
|
|
std::vector<Source::View*> views_reordered; |
|
|
|
|
views_reordered.emplace_back(this); |
|
|
|
|
for(auto &view: views) { |
|
|
|
|
@ -1044,6 +1052,7 @@ Source::ClangViewAutocomplete(file_path, language) {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return usages; |
|
|
|
|
}; |
|
|
|
|
@ -1277,6 +1286,36 @@ Source::ClangViewRefactor::Token Source::ClangViewRefactor::get_token() {
|
|
|
|
|
return Token(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Source::ClangViewRefactor::wait_parsing(const std::vector<Source::View*> &views) { |
|
|
|
|
std::unique_ptr<Dialog::Message> message; |
|
|
|
|
std::vector<Source::ClangView*> clang_views; |
|
|
|
|
for(auto &view: views) { |
|
|
|
|
if(auto clang_view=dynamic_cast<Source::ClangView*>(view)) { |
|
|
|
|
if(!clang_view->parsed) { |
|
|
|
|
clang_views.emplace_back(clang_view); |
|
|
|
|
if(!message) |
|
|
|
|
message=std::unique_ptr<Dialog::Message>(new Dialog::Message("Please wait while all buffers finish parsing")); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(message) { |
|
|
|
|
for(;;) { |
|
|
|
|
while(g_main_context_pending(NULL)) |
|
|
|
|
g_main_context_iteration(NULL, false); |
|
|
|
|
bool all_parsed=true; |
|
|
|
|
for(auto &clang_view: clang_views) { |
|
|
|
|
if(!clang_view->parsed) { |
|
|
|
|
all_parsed=false; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(all_parsed) |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
message->hide(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Source::ClangViewRefactor::tag_similar_tokens(const Token &token) { |
|
|
|
|
if(parsed) { |
|
|
|
|
if(token && last_tagged_token!=token) { |
|
|
|
|
|