From cc1b66f1cc7971a67fada98a375e3ad241ec981c Mon Sep 17 00:00:00 2001 From: Lorenz Haas <lykurg@gmail.com> Date: Thu, 30 May 2013 17:32:15 +0200 Subject: [PATCH] CppTools: Open InsertionPointLocator::methodDefinition for symbols Remove restricted use of declarations and add an option to define if SymbolFinder should be used to find a matching definition for symbol. Change-Id: If5cf5b11926e116766dd60dd3726b4fcf2e1c9f5 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com> --- src/plugins/cpptools/insertionpointlocator.cpp | 15 +++++++++------ src/plugins/cpptools/insertionpointlocator.h | 3 ++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/plugins/cpptools/insertionpointlocator.cpp b/src/plugins/cpptools/insertionpointlocator.cpp index 08d9722086f..f7118a2cfec 100644 --- a/src/plugins/cpptools/insertionpointlocator.cpp +++ b/src/plugins/cpptools/insertionpointlocator.cpp @@ -363,7 +363,7 @@ public: : ASTVisitor(translationUnit) {} - void operator()(Declaration *decl, unsigned *line, unsigned *column) + void operator()(Symbol *decl, unsigned *line, unsigned *column) { // default to end of file _bestToken.maybeSet(-1, translationUnit()->ast()->lastToken()); @@ -470,7 +470,7 @@ static Declaration *isNonVirtualFunctionDeclaration(Symbol *s) return declaration; } -static InsertionLocation nextToSurroundingDefinitions(Declaration *declaration, const CppRefactoringChanges &changes) +static InsertionLocation nextToSurroundingDefinitions(Symbol *declaration, const CppRefactoringChanges &changes) { InsertionLocation noResult; Class *klass = declaration->enclosingClass(); @@ -545,15 +545,18 @@ static InsertionLocation nextToSurroundingDefinitions(Declaration *declaration, return InsertionLocation(QString::fromUtf8(definitionFunction->fileName()), prefix, suffix, line, column); } -QList<InsertionLocation> InsertionPointLocator::methodDefinition(Declaration *declaration) const +QList<InsertionLocation> InsertionPointLocator::methodDefinition(Symbol *declaration, + bool useSymbolFinder) const { QList<InsertionLocation> result; if (!declaration) return result; - CppTools::SymbolFinder symbolFinder; - if (symbolFinder.findMatchingDefinition(declaration, m_refactoringChanges.snapshot(), true)) - return result; + if (useSymbolFinder) { + CppTools::SymbolFinder symbolFinder; + if (symbolFinder.findMatchingDefinition(declaration, m_refactoringChanges.snapshot(), true)) + return result; + } const InsertionLocation location = nextToSurroundingDefinitions(declaration, m_refactoringChanges); if (location.isValid()) { diff --git a/src/plugins/cpptools/insertionpointlocator.h b/src/plugins/cpptools/insertionpointlocator.h index da9799744b7..f5ea46d26d3 100644 --- a/src/plugins/cpptools/insertionpointlocator.h +++ b/src/plugins/cpptools/insertionpointlocator.h @@ -98,7 +98,8 @@ public: const CPlusPlus::Class *clazz, AccessSpec xsSpec) const; - QList<InsertionLocation> methodDefinition(CPlusPlus::Declaration *declaration) const; + QList<InsertionLocation> methodDefinition(CPlusPlus::Symbol *declaration, + bool useSymbolFinder = true) const; private: CppRefactoringChanges m_refactoringChanges; -- GitLab