diff options
author | Nikolai Kosjar <nikolai.kosjar@digia.com> | 2013-09-06 09:31:21 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@digia.com> | 2013-09-09 15:48:59 +0200 |
commit | bbdee91bc9a2a3731979497f11df3fc3bd8e6495 (patch) | |
tree | 458bef961a048f9f60e4b08d2ed03499d3b1d70f /src/plugins/cpptools/insertionpointlocator.cpp | |
parent | 3eaf044045fb87d2611eb95e6c9885a862fbecb0 (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.cpp | 14 |
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: |