diff --git a/src/libs/cplusplus/CppDocument.h b/src/libs/cplusplus/CppDocument.h index 0360eb65078..b040b3400ae 100644 --- a/src/libs/cplusplus/CppDocument.h +++ b/src/libs/cplusplus/CppDocument.h @@ -91,8 +91,8 @@ public: QList definedMacros() const { return _definedMacros; } - Symbol *lastVisibleSymbolAt(unsigned line, unsigned column) const; - Scope *scopeAt(unsigned line, unsigned column); + Symbol *lastVisibleSymbolAt(unsigned line, unsigned column = 0) const; + Scope *scopeAt(unsigned line, unsigned column = 0); QByteArray source() const; void setSource(const QByteArray &source); diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index a995b5c39da..a33c23d6f7d 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -1074,19 +1074,13 @@ void CPPEditor::switchDeclarationDefinition() int line = 0, positionInBlock = 0; convertPosition(position(), &line, &positionInBlock); - Scope *scope = thisDocument->scopeAt(line, positionInBlock + 1); Symbol *lastVisibleSymbol = thisDocument->lastVisibleSymbolAt(line, positionInBlock + 1); + if (! lastVisibleSymbol) + return; - Scope *functionScope = 0; - if (scope->isFunction()) - functionScope = scope; - else - functionScope = scope->enclosingFunction(); - - if (! functionScope && lastVisibleSymbol) { - if (Function *def = lastVisibleSymbol->asFunction()) - functionScope = def; - } + Function *functionScope = lastVisibleSymbol->asFunction(); + if (! functionScope) + functionScope = lastVisibleSymbol->enclosingFunction(); if (functionScope) { LookupContext context(thisDocument, snapshot);