diff --git a/shared/cplusplus/AST.cpp b/shared/cplusplus/AST.cpp index b6ddde0c0ebfc6d740a8a3c7c2ccf5dd371de4d1..282b5876c89514679ba862fc348db8ff6d9c93b1 100644 --- a/shared/cplusplus/AST.cpp +++ b/shared/cplusplus/AST.cpp @@ -1352,8 +1352,12 @@ unsigned ExceptionSpecificationAST::lastToken() const return throw_token + 1; } -void ExpressionListAST::accept0(ASTVisitor *) -{ assert(0); } +void ExpressionListAST::accept0(ASTVisitor *visitor) +{ + for (const ExpressionListAST *it = this; it; it = it->next) { + accept(it->expression, visitor); + } +} unsigned ExpressionListAST::firstToken() const { @@ -1821,9 +1825,11 @@ void NewDeclaratorAST::accept0(ASTVisitor *visitor) { if (visitor->visit(this)) { for (PtrOperatorAST *ptr_op = ptr_operators; ptr_op; - ptr_op = static_cast<PtrOperatorAST *>(ptr_op->next)) + ptr_op = static_cast<PtrOperatorAST *>(ptr_op->next)) { accept(ptr_op, visitor); - // ### TODO accept the brackets + } + + accept(declarator, visitor); } } @@ -1834,10 +1840,14 @@ unsigned NewDeclaratorAST::firstToken() const unsigned NewDeclaratorAST::lastToken() const { - assert(0 && "review me"); if (declarator) return declarator->lastToken(); - assert(0); // ### implement me + + for (PtrOperatorAST *it = ptr_operators; it; it = it->next) { + if (! it->next) + return it->lastToken(); + } + return 0; } @@ -2184,7 +2194,6 @@ unsigned ReferenceAST::firstToken() const unsigned ReferenceAST::lastToken() const { - assert(0 && "review me"); return amp_token + 1; } @@ -2202,8 +2211,11 @@ unsigned ReturnStatementAST::firstToken() const unsigned ReturnStatementAST::lastToken() const { - assert(0 && "review me"); - return semicolon_token + 1; + if (semicolon_token) + return semicolon_token + 1; + else if (expression) + return expression->lastToken(); + return return_token + 1; } void SimpleDeclarationAST::accept0(ASTVisitor *visitor) @@ -2222,23 +2234,24 @@ unsigned SimpleDeclarationAST::firstToken() const return decl_specifier_seq->firstToken(); else if (declarators) return declarators->firstToken(); - else - return semicolon_token; + return semicolon_token; } unsigned SimpleDeclarationAST::lastToken() const { - assert(0 && "review me"); if (semicolon_token) return semicolon_token + 1; + for (DeclaratorListAST *it = declarators; it; it = it->next) { if (! it->next) return it->lastToken(); } + for (SpecifierAST *it = decl_specifier_seq; it; it = it->next) { if (! it->next) return it->lastToken(); } + return 0; } @@ -2255,7 +2268,6 @@ unsigned SimpleNameAST::firstToken() const unsigned SimpleNameAST::lastToken() const { - assert(0 && "review me"); return identifier_token + 1; } @@ -2272,7 +2284,6 @@ unsigned SimpleSpecifierAST::firstToken() const unsigned SimpleSpecifierAST::lastToken() const { - assert(0 && "review me"); return specifier_token + 1; } @@ -2290,7 +2301,6 @@ unsigned TypeofSpecifierAST::firstToken() const unsigned TypeofSpecifierAST::lastToken() const { - assert(0 && "review me"); if (expression) return expression->lastToken(); return typeof_token + 1; @@ -2310,7 +2320,6 @@ unsigned SizeofExpressionAST::firstToken() const unsigned SizeofExpressionAST::lastToken() const { - assert(0 && "review me"); if (expression) return expression->lastToken(); return sizeof_token + 1; @@ -2330,7 +2339,6 @@ unsigned StringLiteralAST::firstToken() const unsigned StringLiteralAST::lastToken() const { - assert(0 && "review me"); if (next) return next->lastToken(); return token + 1; @@ -2351,10 +2359,15 @@ unsigned SwitchStatementAST::firstToken() const unsigned SwitchStatementAST::lastToken() const { - assert(0 && "review me"); if (statement) return statement->lastToken(); - return rparen_token + 1; + else if (rparen_token) + return rparen_token + 1; + else if (condition) + return condition->lastToken(); + else if (lparen_token) + return lparen_token + 1; + return switch_token + 1; } void TemplateArgumentListAST::accept0(ASTVisitor *visitor) @@ -2372,9 +2385,8 @@ unsigned TemplateArgumentListAST::firstToken() const unsigned TemplateArgumentListAST::lastToken() const { - assert(0 && "review me"); for (const TemplateArgumentListAST *it = this; it; it = it->next) { - if (! it->next) + if (! it->next && it->template_argument) return it->template_argument->lastToken(); } return 0; @@ -2399,10 +2411,24 @@ unsigned TemplateDeclarationAST::firstToken() const unsigned TemplateDeclarationAST::lastToken() const { - assert(0 && "review me"); if (declaration) return declaration->lastToken(); - return greater_token + 1; + else if (greater_token) + return greater_token + 1; + + for (DeclarationAST *it = template_parameters; it; it = it->next) { + if (! it->next) + return it->lastToken(); + } + + if (less_token) + return less_token + 1; + else if (template_token) + return template_token + 1; + else if (export_token) + return export_token + 1; + + return 0; } void TemplateIdAST::accept0(ASTVisitor *visitor) @@ -2421,8 +2447,18 @@ unsigned TemplateIdAST::firstToken() const unsigned TemplateIdAST::lastToken() const { - assert(0 && "review me"); - return greater_token + 1; + if (greater_token) + return greater_token + 1; + + for (TemplateArgumentListAST *it = template_arguments; it; it = it->next) { + if (! it->next && it->template_argument) + return it->template_argument->lastToken(); + } + + if (less_token) + return less_token + 1; + + return identifier_token + 1; } void TemplateTypeParameterAST::accept0(ASTVisitor *visitor) @@ -2438,7 +2474,6 @@ unsigned TemplateTypeParameterAST::firstToken() const unsigned TemplateTypeParameterAST::lastToken() const { - assert(0 && "review me"); if (type_id) return type_id->lastToken(); else if (equal_token) @@ -2447,7 +2482,18 @@ unsigned TemplateTypeParameterAST::lastToken() const return name->lastToken(); else if (class_token) return class_token + 1; - return greater_token + 1; + else if (greater_token) + return greater_token + 1; + + for (DeclarationAST *it = template_parameters; it; it = it->next) { + if (! it->next) + return it->lastToken(); + } + + if (less_token) + return less_token + 1; + + return template_token + 1; } void ThisExpressionAST::accept0(ASTVisitor *visitor) @@ -2463,7 +2509,6 @@ unsigned ThisExpressionAST::firstToken() const unsigned ThisExpressionAST::lastToken() const { - assert(0 && "review me"); return this_token + 1; } @@ -2481,7 +2526,6 @@ unsigned ThrowExpressionAST::firstToken() const unsigned ThrowExpressionAST::lastToken() const { - assert(0 && "review me"); if (expression) return expression->lastToken(); return throw_token + 1; @@ -2503,7 +2547,6 @@ unsigned TranslationUnitAST::firstToken() const unsigned TranslationUnitAST::lastToken() const { - assert(0 && "review me"); for (DeclarationAST *it = declarations; it; it = it->next) { if (! it->next) return it->lastToken(); @@ -2526,13 +2569,14 @@ unsigned TryBlockStatementAST::firstToken() const unsigned TryBlockStatementAST::lastToken() const { - assert(0 && "review me"); for (CatchClauseAST *it = catch_clause_seq; it; it = it->next) { if (! it->next) return it->lastToken(); } + if (statement) return statement->lastToken(); + return try_token + 1; } @@ -2554,8 +2598,24 @@ unsigned TypeConstructorCallAST::firstToken() const unsigned TypeConstructorCallAST::lastToken() const { - assert(0 && "review me"); - return rparen_token + 1; + if (rparen_token) + return rparen_token + 1; + + for (ExpressionListAST *it = expression_list; it; it = it->next) { + if (! it->next) + return it->lastToken(); + } + + if (lparen_token) + return lparen_token + 1; + + + for (SpecifierAST *it = type_specifier; it; it = it->next) { + if (! it->next) + return it->lastToken(); + } + + return 0; } void TypeIdAST::accept0(ASTVisitor *visitor) @@ -2574,10 +2634,15 @@ unsigned TypeIdAST::firstToken() const unsigned TypeIdAST::lastToken() const { - assert(0 && "review me"); if (declarator) return declarator->lastToken(); - return type_specifier->lastToken(); + + for (SpecifierAST *it = type_specifier; it; it = it->next) { + if (! it->next) + return it->lastToken(); + } + + return 0; } void TypeidExpressionAST::accept0(ASTVisitor *visitor) @@ -2594,8 +2659,14 @@ unsigned TypeidExpressionAST::firstToken() const unsigned TypeidExpressionAST::lastToken() const { - assert(0 && "review me"); - return rparen_token + 1; + if (rparen_token) + return rparen_token + 1; + else if (expression) + return expression->lastToken(); + else if (lparen_token) + return lparen_token + 1; + + return typeid_token + 1; } void TypenameCallExpressionAST::accept0(ASTVisitor *visitor) @@ -2615,8 +2686,20 @@ unsigned TypenameCallExpressionAST::firstToken() const unsigned TypenameCallExpressionAST::lastToken() const { - assert(0 && "review me"); - return rparen_token + 1; + if (rparen_token) + return rparen_token + 1; + + for (ExpressionListAST *it = expression_list; it; it = it->next) { + if (! it->next) + return it->lastToken(); + } + + if (lparen_token) + return lparen_token + 1; + else if (name) + return name->lastToken(); + + return typename_token + 1; } void TypenameTypeParameterAST::accept0(ASTVisitor *visitor) @@ -2634,7 +2717,6 @@ unsigned TypenameTypeParameterAST::firstToken() const unsigned TypenameTypeParameterAST::lastToken() const { - assert(0 && "review me"); if (type_id) return type_id->lastToken(); else if (equal_token) @@ -2658,7 +2740,6 @@ unsigned UnaryExpressionAST::firstToken() const unsigned UnaryExpressionAST::lastToken() const { - assert(0 && "review me"); if (expression) return expression->lastToken(); return unary_op_token + 1; @@ -2678,8 +2759,13 @@ unsigned UsingAST::firstToken() const unsigned UsingAST::lastToken() const { - assert(0 && "review me"); - return semicolon_token + 1; + if (semicolon_token) + return semicolon_token + 1; + else if (name) + return name->lastToken(); + else if (typename_token) + return typename_token + 1; + return using_token + 1; } void UsingDirectiveAST::accept0(ASTVisitor *visitor) @@ -2696,8 +2782,13 @@ unsigned UsingDirectiveAST::firstToken() const unsigned UsingDirectiveAST::lastToken() const { - assert(0 && "review me"); - return semicolon_token + 1; + if (semicolon_token) + return semicolon_token + 1; + else if (name) + return name->lastToken(); + else if (namespace_token) + return namespace_token + 1; + return using_token + 1; } void WhileStatementAST::accept0(ASTVisitor *visitor) @@ -2715,10 +2806,15 @@ unsigned WhileStatementAST::firstToken() const unsigned WhileStatementAST::lastToken() const { - assert(0 && "review me"); if (statement) return statement->lastToken(); - return rparen_token + 1; + else if (rparen_token) + return rparen_token + 1; + else if (condition) + return condition->lastToken(); + else if (lparen_token) + return lparen_token + 1; + return while_token + 1; } CPLUSPLUS_END_NAMESPACE diff --git a/src/plugins/quickopen/quickopentoolwindow.cpp b/src/plugins/quickopen/quickopentoolwindow.cpp index 415e347a3ac612904ff87f31a7604984fc989821..b3232147f37b724f9f332e3f5fea5fbc99dbacca 100644 --- a/src/plugins/quickopen/quickopentoolwindow.cpp +++ b/src/plugins/quickopen/quickopentoolwindow.cpp @@ -451,14 +451,25 @@ void QuickOpenToolWindow::show(const QString &text, int selectionStart, int sele void QuickOpenToolWindow::filterSelected() { - const char * const TEXT = "<type here>"; + QString searchText = "<type here>"; QAction *action = qobject_cast<QAction*>(sender()); QTC_ASSERT(action, return); IQuickOpenFilter *filter = action->data().value<IQuickOpenFilter*>(); QTC_ASSERT(filter, return); - show(filter->shortcutString() + " " + TEXT, + QString currentText = m_fileLineEdit->text().trimmed(); + // add shortcut string at front or replace existing shortcut string + if (!currentText.isEmpty()) { + searchText = currentText; + foreach (IQuickOpenFilter *otherfilter, m_quickOpenPlugin->filter()) { + if (currentText.startsWith(otherfilter->shortcutString() + " ")) { + searchText = currentText.mid(otherfilter->shortcutString().length()+1); + break; + } + } + } + show(filter->shortcutString() + " " + searchText, filter->shortcutString().length() + 1, - QString(TEXT).length()); + searchText.length()); updateCompletionList(m_fileLineEdit->text()); m_fileLineEdit->setFocus(); }