void OpenResourceDialog::DoPopulateTags() { bool gotExactMatch(false); // Next, add the tags TagEntryPtrVector_t tags; if(m_userFilters.IsEmpty()) return; m_manager->GetTagsManager()->GetTagsByPartialName(m_userFilters.Item(0), tags); for(size_t i = 0; i < tags.size(); i++) { TagEntryPtr tag = tags.at(i); // Filter out non relevanting entries if(!m_filters.IsEmpty() && m_filters.Index(tag->GetKind()) == wxNOT_FOUND) continue; if(!MatchesFilter(tag->GetName())) continue; wxString name(tag->GetName()); // keep the fullpath wxDataViewItem item; wxString fullname; if(tag->GetKind() == wxT("function") || tag->GetKind() == wxT("prototype")) { fullname = wxString::Format( wxT("%s::%s%s"), tag->GetScope().c_str(), tag->GetName().c_str(), tag->GetSignature().c_str()); item = DoAppendLine(tag->GetName(), fullname, (tag->GetKind() == wxT("function")), new OpenResourceDialogItemData( tag->GetFile(), tag->GetLine(), tag->GetPattern(), tag->GetName(), tag->GetScope()), DoGetTagImg(tag)); } else { fullname = wxString::Format(wxT("%s::%s"), tag->GetScope().c_str(), tag->GetName().c_str()); item = DoAppendLine(tag->GetName(), fullname, false, new OpenResourceDialogItemData( tag->GetFile(), tag->GetLine(), tag->GetPattern(), tag->GetName(), tag->GetScope()), DoGetTagImg(tag)); } if((m_userFilters.GetCount() == 1) && (m_userFilters.Item(0).CmpNoCase(name) == 0) && !gotExactMatch) { gotExactMatch = true; DoSelectItem(item); } } }
void SymbolsDialog::AddSymbol(const TagEntryPtr &tag, bool sel) { //------------------------------------------------------- // Populate the columns //------------------------------------------------------- wxString line; line << tag->GetLine(); long index = AppendListCtrlRow(m_results); SetColumnText(m_results, index, 0, tag->GetFullDisplayName()); SetColumnText(m_results, index, 1, tag->GetKind()); SetColumnText(m_results, index, 2, tag->GetFile()); SetColumnText(m_results, index, 3, line); SetColumnText(m_results, index, 4, tag->GetPattern()); // list ctrl can reorder items, so use returned index to insert tag m_tags.insert(m_tags.begin()+index, tag); }
void PHPCodeCompletion::OnFindSymbol(clCodeCompletionEvent& e) { e.Skip(); if(PHPWorkspace::Get()->IsOpen()) { if(!CanCodeComplete(e)) return; e.Skip(false); IEditor* editor = dynamic_cast<IEditor*>(e.GetEditor()); if(editor) { wxString word = editor->GetWordAtCaret(); if(word.IsEmpty()) return; PHPEntityBase::List_t symbols = m_lookupTable.FindSymbol(word); if(symbols.size() == 1) { PHPEntityBase::Ptr_t match = *symbols.begin(); DoOpenEditorForEntry(match); } else { // Convert the matches to clSelectSymbolDialogEntry::List_t clSelectSymbolDialogEntry::List_t entries; std::for_each(symbols.begin(), symbols.end(), [&](PHPEntityBase::Ptr_t entry) { TagEntryPtr tag = DoPHPEntityToTagEntry(entry); wxBitmap bmp = wxCodeCompletionBox::GetBitmap(tag); clSelectSymbolDialogEntry m; m.bmp = bmp; m.name = entry->GetFullName(); m.clientData = new PHPFindSymbol_ClientData(entry); m.help = tag->GetKind(); entries.push_back(m); }); // Show selection dialog clSelectSymbolDialog dlg(EventNotifier::Get()->TopFrame(), entries); if(dlg.ShowModal() != wxID_OK) return; PHPFindSymbol_ClientData* cd = dynamic_cast<PHPFindSymbol_ClientData*>(dlg.GetSelection()); if(cd) { DoOpenEditorForEntry(cd->m_ptr); } } } } }
wxBitmap OpenResourceDialog::DoGetTagImg(TagEntryPtr tag) { wxString kind = tag->GetKind(); wxString access = tag->GetAccess(); wxBitmap bmp = m_tagImgMap[wxT("text")]; if(kind == wxT("class")) bmp = m_tagImgMap[wxT("class")]; if(kind == wxT("struct")) bmp = m_tagImgMap[wxT("struct")]; if(kind == wxT("namespace")) bmp = m_tagImgMap[wxT("namespace")]; if(kind == wxT("variable")) bmp = m_tagImgMap[wxT("member_public")]; if(kind == wxT("typedef")) bmp = m_tagImgMap[wxT("typedef")]; if(kind == wxT("member") && access.Contains(wxT("private"))) bmp = m_tagImgMap[wxT("member_private")]; if(kind == wxT("member") && access.Contains(wxT("public"))) bmp = m_tagImgMap[wxT("member_public")]; if(kind == wxT("member") && access.Contains(wxT("protected"))) bmp = m_tagImgMap[wxT("member_protected")]; if(kind == wxT("member")) bmp = m_tagImgMap[wxT("member_public")]; if((kind == wxT("function") || kind == wxT("prototype")) && access.Contains(wxT("private"))) bmp = m_tagImgMap[wxT("function_private")]; if((kind == wxT("function") || kind == wxT("prototype")) && (access.Contains(wxT("public")) || access.IsEmpty())) bmp = m_tagImgMap[wxT("function_public")]; if((kind == wxT("function") || kind == wxT("prototype")) && access.Contains(wxT("protected"))) bmp = m_tagImgMap[wxT("function_protected")]; if(kind == wxT("macro")) bmp = m_tagImgMap[wxT("typedef")]; if(kind == wxT("enum")) bmp = m_tagImgMap[wxT("enum")]; if(kind == wxT("enumerator")) bmp = m_tagImgMap[wxT("enumerator")]; return bmp; }
int wxCodeCompletionBox::GetImageId(TagEntryPtr entry) { wxString kind = entry->GetKind(); wxString access = entry->GetAccess(); if(kind == wxT("class")) return 0; if(kind == wxT("struct")) return 1; if(kind == wxT("namespace")) return 2; if(kind == wxT("variable")) return 3; if(kind == wxT("typedef")) return 4; if(kind == wxT("member") && access.Contains(wxT("private"))) return 5; if(kind == wxT("member") && access.Contains(wxT("public"))) return 6; if(kind == wxT("member") && access.Contains(wxT("protected"))) return 7; // member with no access? (maybe part of namespace??) if(kind == wxT("member")) return 6; if((kind == wxT("function") || kind == wxT("prototype")) && access.Contains(wxT("private"))) return 8; if((kind == wxT("function") || kind == wxT("prototype")) && (access.Contains(wxT("public")) || access.IsEmpty())) return 9; if((kind == wxT("function") || kind == wxT("prototype")) && access.Contains(wxT("protected"))) return 10; if(kind == wxT("macro")) return 11; if(kind == wxT("enum")) return 12; if(kind == wxT("enumerator")) return 13; if(kind == wxT("cpp_keyword")) return 17; return wxNOT_FOUND; }
TagEntryPtr RefactoringEngine::SyncSignature(const wxFileName& fn, int line, int pos, const wxString &word, const wxString &text, const wxString &expr) { TagEntryPtr func = TagsManagerST::Get()->FunctionFromFileLine(fn, line); if(!func) return NULL; bool bIsImpl = (func->GetKind() == wxT("function")); // Found the counterpart std::vector<TagEntryPtr> tags; TagsManagerST::Get()->FindImplDecl(fn, line, expr, word, text, tags, !bIsImpl); if(tags.size() != 1) return NULL; TagEntryPtr tag = tags.at(0); if(tag->IsMethod() == false) return NULL; wxString signature; if (bIsImpl) { // The "source" is an implementaion, which means that we need to prepare declaration signature // this could be tricky since we might lose the "default" values signature = TagsManagerST::Get()->NormalizeFunctionSig(func->GetSignature(), Normalize_Func_Default_value|Normalize_Func_Name|Normalize_Func_Reverse_Macro); } else { // Prepare an "implementation" signature signature = TagsManagerST::Get()->NormalizeFunctionSig(func->GetSignature(), Normalize_Func_Name|Normalize_Func_Reverse_Macro); } tag->SetSignature(signature); return tag; }
void OpenResourceDialog::DoPopulateTags() { if (m_tags.empty()) return; bool gotExactMatch(false); wxArrayString tmpArr; wxString curSel = m_textCtrlResourceName->GetValue(); wxString curSelNoStar; if (!curSel.Trim().Trim(false).IsEmpty()) { curSel = curSel.MakeLower().Trim().Trim(false); curSelNoStar = curSel.c_str(); for (size_t i=0; i<m_tags.size(); i++) { TagEntryPtr tag = m_tags.at(i); wxString name(tag->GetName()); name.MakeLower(); //append wildcard at the end if (!curSel.EndsWith(wxT("*"))) { curSel << wxT("*"); } // FR# [2008133] if (m_checkBoxUsePartialMatching->IsChecked() && !curSel.StartsWith(wxT("*"))) { curSel.Prepend(wxT("*")); } if (wxMatchWild(curSel, name)) { // keep the fullpath int index(0); if(tag->GetKind() == wxT("function") || tag->GetKind() == wxT("prototype")) index = DoAppendLine(tag->GetName(), tag->GetSignature(), tag->GetScope(), tag->GetKind() == wxT("function"), new OpenResourceDialogItemData(tag->GetFile(), tag->GetLine(), tag->GetPattern(), m_type, tag->GetName(), tag->GetScope())); else index = DoAppendLine(tag->GetName(), tag->GetScope(), wxT(""), false, new OpenResourceDialogItemData(tag->GetFile(), tag->GetLine(), tag->GetPattern(), m_type, tag->GetName(), tag->GetScope())); if (curSelNoStar == name && !gotExactMatch) { gotExactMatch = true; DoSelectItem(index); } } } } if (m_listOptions->GetItemCount() == 150) { m_staticTextErrorMessage->SetLabel(wxT("Too many matches, please narrow down your search")); } if (!gotExactMatch && m_listOptions->GetItemCount()) { DoSelectItem(0); } }
bool RefactoringEngine::DoResolveWord(TextStatesPtr states, const wxFileName& fn, int pos, int line, const wxString &word, RefactorSource *rs) { std::vector<TagEntryPtr> tags; // try to process the current expression wxString expr = GetExpression(pos, states); // sanity if(states->text.length() < (size_t)pos + 1) return false; // get the scope // Optimize the text for large files wxString text(states->text.substr(0, pos + 1)); // we simply collect declarations & implementations //try implemetation first bool found(false); TagsManagerST::Get()->FindImplDecl(fn, line, expr, word, text, tags, true, true); if (tags.empty() == false) { // try to see if we got a function and not class/struct for (size_t i=0; i<tags.size(); i++) { TagEntryPtr tag = tags.at(i); // find first non class/struct tag if (tag->GetKind() != wxT("class") && tag->GetKind() != wxT("struct")) { // if there is no match, add it anyways if (!found) { rs->isClass = (tag->GetKind() == wxT("class") ||tag->GetKind() == wxT("struct")); rs->name = tag->GetName(); rs->scope = tag->GetScope(); found = true; } else if (rs->scope == wxT("<global>") && rs->isClass == false) { // give predecense to <global> variables rs->isClass = (tag->GetKind() == wxT("class") ||tag->GetKind() == wxT("struct")); rs->name = tag->GetName(); rs->scope = tag->GetScope(); found = true; } found = true; } } // if no match was found, keep the first result but keep searching if ( !found ) { TagEntryPtr tag = tags.at(0); rs->scope = tag->GetScope(); rs->name = tag->GetName(); rs->isClass = tag->IsClass() || tag->IsStruct(); found = true; } else { return true; } } // Ok, the "implementation" search did not yield definite results, try declaration tags.clear(); TagsManagerST::Get()->FindImplDecl(fn, line, expr, word, text, tags, false, true); if (tags.empty() == false) { // try to see if we got a function and not class/struct for (size_t i=0; i<tags.size(); i++) { TagEntryPtr tag = tags.at(i); // find first non class/struct tag if (tag->GetKind() != wxT("class") && tag->GetKind() != wxT("struct")) { rs->name = tag->GetName(); rs->scope = tag->GetScope(); return true; } } // if no match was found, keep the first result but keep searching if ( !found ) { TagEntryPtr tag = tags.at(0); rs->scope = tag->GetScope(); rs->name = tag->GetName(); rs->isClass = tag->IsClass() || tag->IsStruct(); } return true; } // if we got so far, CC failed to parse the expression return false; }