1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-22 06:02:11 +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 { public void testNoexpect_Bug562722() throws Exception {
assertRefactoringSuccess(); 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.ASTNodeFactoryFactory;
import org.eclipse.cdt.core.dom.ast.ASTVisitor; 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.IASTDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTDeclaration; import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTDeclarator; import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
@ -321,10 +323,20 @@ public class ImplementMethodRefactoring extends CRefactoring {
* we could miss the fully qualified name. * we could miss the fully qualified name.
*/ */
if (declSpecifier instanceof ICPPASTNamedTypeSpecifier) { if (declSpecifier instanceof ICPPASTNamedTypeSpecifier) {
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, ICPPASTQualifiedName qName = createQualifiedNameFor((IASTNamedTypeSpecifier) declSpecifier,
functionDeclarator, declarationParent, insertLocation, functionOffset); functionDeclarator, declarationParent, insertLocation, functionOffset);
((IASTNamedTypeSpecifier) declSpecifier).setName(qName); ((IASTNamedTypeSpecifier) declSpecifier).setName(qName);
} }
}
} catch (DOMException | CoreException e) {
CUIPlugin.log(e);
}
}
if (declSpecifier instanceof ICPPASTDeclSpecifier) { if (declSpecifier instanceof ICPPASTDeclSpecifier) {
((ICPPASTDeclSpecifier) declSpecifier).setVirtual(false); ((ICPPASTDeclSpecifier) declSpecifier).setVirtual(false);