summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodecompletion.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <qtc-committer@nokia.com>2008-12-30 11:35:30 +0100
committerRoberto Raggi <qtc-committer@nokia.com>2008-12-30 11:35:30 +0100
commitf6f0c81021f16c31f014ab5d43bc2dab2702ce3e (patch)
tree9e45c656180ad75986a3440063408e019ac8a54e /src/plugins/cpptools/cppcodecompletion.cpp
parent702e078ace5b8e091da1e02ea240c42222b2c002 (diff)
downloadqt-creator-f6f0c81021f16c31f014ab5d43bc2dab2702ce3e.tar.gz
Improved CppCodeCompletion::completeScope(). Added simple support for typedefs.
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r--src/plugins/cpptools/cppcodecompletion.cpp33
1 files changed, 23 insertions, 10 deletions
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 075a55b96e..947bea8f6f 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -515,7 +515,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
} if ((m_completionOperator == T_DOT || m_completionOperator == T_ARROW) &&
completeMember(exprTy, resolvedTypes, context)) {
return m_startPosition;
- } else if (m_completionOperator == T_COLON_COLON && completeScope(exprTy, resolvedTypes, context)) {
+ } else if (m_completionOperator == T_COLON_COLON && completeScope(resolvedTypes, context)) {
return m_startPosition;
} else if (m_completionOperator == T_SIGNAL && completeSignal(exprTy, resolvedTypes, context)) {
return m_startPosition;
@@ -682,32 +682,45 @@ bool CppCodeCompletion::completeMember(FullySpecifiedType,
return false;
}
-bool CppCodeCompletion::completeScope(FullySpecifiedType exprTy,
- const QList<TypeOfExpression::Result> &resolvedTypes,
+bool CppCodeCompletion::completeScope(const QList<TypeOfExpression::Result> &results,
const LookupContext &context)
{
+ if (results.isEmpty())
+ return false; // nothing to do.
+
// Search for a class or a namespace.
- foreach (TypeOfExpression::Result p, resolvedTypes) {
- if (p.first->isClass() || p.first->isNamespace()) {
- exprTy = p.first;
+ TypeOfExpression::Result result(FullySpecifiedType(), 0);
+ foreach (result, results) {
+ FullySpecifiedType ty = result.first;
+
+ if (ty->isClass() || ty->isNamespace())
break;
- }
}
- if (exprTy->asNamespace()) {
+ FullySpecifiedType exprTy = result.first;
+ if (! exprTy) {
+ return false;
+ } else if (exprTy->asNamespace()) {
QList<Symbol *> candidates;
- foreach (TypeOfExpression::Result p, resolvedTypes) {
+ foreach (TypeOfExpression::Result p, results) {
if (Namespace *ns = p.first->asNamespace())
candidates.append(ns);
}
completeNamespace(candidates, context);
} else if (exprTy->isClass()) {
QList<Symbol *> candidates;
- foreach (TypeOfExpression::Result p, resolvedTypes) {
+ foreach (TypeOfExpression::Result p, results) {
if (Class *k = p.first->asClass())
candidates.append(k);
}
completeClass(candidates, context);
+ } else if (Symbol *symbol = result.second) {
+ if (symbol->isTypedef()) {
+ SymbolsForDotAccess symbolsForDotAccess;
+ const QList<Symbol *> candidates = symbolsForDotAccess(result,
+ context);
+ completeClass(candidates, context);
+ }
}
return ! m_completions.isEmpty();