1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-21 21:52:10 +02:00

Bug 562896 - Fix qualified name in return type for implement method

Change-Id: Ie1ff2e401091655c6ecc2a7393dac19cea872a0e
(cherry picked from commit 1d38d997dc)
This commit is contained in:
Marco Stornelli 2020-05-06 20:31:51 +02:00
parent 59d53ab880
commit 35384d6adf
2 changed files with 32 additions and 3 deletions

View file

@ -936,4 +936,21 @@ public class ImplementMethodRefactoringTest extends RefactoringTestBase {
public void testNoexpect_Bug562722() throws Exception {
assertRefactoringSuccess();
}
//A.h
//
//struct Test {};
//class TestClass {
//public:
// /*$*/Test foo();/*$$*/
//};
//
//A.cpp
//====================
//Test TestClass::foo() {
//}
public void testWithClassAsReturnType_Bug562896() throws Exception {
assertRefactoringSuccess();
}
}

View file

@ -23,6 +23,8 @@ import java.util.Map;
import org.eclipse.cdt.core.dom.ast.ASTNodeFactoryFactory;
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.EScopeKind;
import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
@ -321,9 +323,19 @@ public class ImplementMethodRefactoring extends CRefactoring {
* we could miss the fully qualified name.
*/
if (declSpecifier instanceof ICPPASTNamedTypeSpecifier) {
ICPPASTQualifiedName qName = createQualifiedNameFor((IASTNamedTypeSpecifier) declSpecifier,
functionDeclarator, declarationParent, insertLocation, functionOffset);
((IASTNamedTypeSpecifier) declSpecifier).setName(qName);
IBinding binding = ((ICPPASTNamedTypeSpecifier) methodDeclaration.getDeclSpecifier()).getName()
.resolveBinding();
try {
if (binding.getScope().getKind() == EScopeKind.eClassType) {
if (!(((ICPPASTNamedTypeSpecifier) declSpecifier).getName() instanceof ICPPASTQualifiedName)) {
ICPPASTQualifiedName qName = createQualifiedNameFor((IASTNamedTypeSpecifier) declSpecifier,
functionDeclarator, declarationParent, insertLocation, functionOffset);
((IASTNamedTypeSpecifier) declSpecifier).setName(qName);
}
}
} catch (DOMException | CoreException e) {
CUIPlugin.log(e);
}
}
if (declSpecifier instanceof ICPPASTDeclSpecifier) {