aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cpptools/insertionpointlocator.cpp
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@digia.com>2013-09-06 09:31:21 +0200
committerNikolai Kosjar <nikolai.kosjar@digia.com>2013-09-09 15:48:59 +0200
commitbbdee91bc9a2a3731979497f11df3fc3bd8e6495 (patch)
tree458bef961a048f9f60e4b08d2ed03499d3b1d70f /src/plugins/cpptools/insertionpointlocator.cpp
parent3eaf044045fb87d2611eb95e6c9885a862fbecb0 (diff)
CppTools: Handle erroneous statements in FindMethodDefinitionInsertPoint
...at end of file. Change-Id: Ife8142cd9cf3c5e4be2594b7cc635e5ab7b9e946 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src/plugins/cpptools/insertionpointlocator.cpp')
-rw-r--r--src/plugins/cpptools/insertionpointlocator.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/plugins/cpptools/insertionpointlocator.cpp b/src/plugins/cpptools/insertionpointlocator.cpp
index 48fc824f15..21dc5138c9 100644
--- a/src/plugins/cpptools/insertionpointlocator.cpp
+++ b/src/plugins/cpptools/insertionpointlocator.cpp
@@ -356,7 +356,7 @@ class FindMethodDefinitionInsertPoint : protected ASTVisitor
{
QList<const Identifier *> _namespaceNames;
int _currentDepth;
- HighestValue<int, int> _bestToken;
+ HighestValue<int, unsigned> _bestToken;
public:
FindMethodDefinitionInsertPoint(TranslationUnit *translationUnit)
@@ -366,10 +366,10 @@ public:
void operator()(Symbol *decl, unsigned *line, unsigned *column)
{
// default to end of file
- _bestToken.maybeSet(-1, translationUnit()->ast()->lastToken());
-
- if (translationUnit()->ast()->lastToken() >= 2) {
+ const unsigned lastToken = translationUnit()->ast()->lastToken();
+ _bestToken.maybeSet(-1, lastToken);
+ if (lastToken >= 2) {
QList<const Name *> names = LookupContext::fullyQualifiedName(decl);
foreach (const Name *name, names) {
const Identifier *id = name->asNameId();
@@ -381,7 +381,11 @@ public:
accept(translationUnit()->ast());
}
- translationUnit()->getTokenEndPosition(_bestToken.get(), line, column);
+
+ if (lastToken == _bestToken.get()) // No matching namespace found
+ translationUnit()->getTokenStartPosition(lastToken, line, column);
+ else // Insert at end of matching namespace
+ translationUnit()->getTokenEndPosition(_bestToken.get(), line, column);
}
protected: