Commit 45ec1bbe authored by raidsan's avatar raidsan Committed by Erik Verbruggen

Fix: Switch Between Method Declaration/Definition issue when has implementation in header file

Task-number: QTCREATORBUG-8393

Change-Id: Ie390e3151e6edc68287e5e0241365d128e6e2c4c
Reviewed-by: default avatarErik Verbruggen <erik.verbruggen@digia.com>
parent 352f6d6c
......@@ -1120,10 +1120,12 @@ void CPPEditorWidget::switchDeclarationDefinition()
foreach (const LookupItem &r, declarations) {
if (Symbol *decl = r.declaration()) {
if (Function *funTy = decl->type()->asFunctionType()) {
if (funTy->isEqualTo(function) && decl != function && binding == r.binding())
best.prepend(decl);
else
best.append(decl);
if (funTy->isEqualTo(function)) {
if (decl != function && binding == r.binding())
best.prepend(decl);
else
best.append(decl);
}
}
}
}
......@@ -1131,7 +1133,7 @@ void CPPEditorWidget::switchDeclarationDefinition()
openCppEditorAt(linkToSymbol(best.first()));
} else if (lastVisibleSymbol && lastVisibleSymbol->isDeclaration() && lastVisibleSymbol->type()->isFunctionType()) {
if (Symbol *def = symbolFinder()->findMatchingDefinition(lastVisibleSymbol, snapshot))
if (Symbol *def = symbolFinder()->findMatchingDefinition(lastVisibleSymbol, snapshot, true))
openCppEditorAt(linkToSymbol(def));
}
}
......
......@@ -158,6 +158,9 @@ Symbol *SymbolFinder::findMatchingDefinition(Symbol *declaration,
continue; // nothing to do
foreach (Function *fun, result) {
if (fun->unqualifiedName()->isDestructorNameId() != declaration->unqualifiedName()->isDestructorNameId())
continue;
const QList<LookupItem> declarations = context.lookup(fun->name(), fun->enclosingScope());
if (declarations.isEmpty())
continue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment