diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/implementmethod/ImplementMethodRefactoringTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/implementmethod/ImplementMethodRefactoringTest.java index 3f1c4479712..f48cb2f736c 100755 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/implementmethod/ImplementMethodRefactoringTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/implementmethod/ImplementMethodRefactoringTest.java @@ -825,4 +825,43 @@ public class ImplementMethodRefactoringTest extends RefactoringTestBase { assertRefactoringSuccess(); } + //A.h + //template + //struct Waldo { + // /*$*/void find();/*$$*/ + //}; + // + //==================== + //template + //struct Waldo { + // void find(); + //}; + // + //template + //inline void Waldo::find() { + //} + public void testTemplateParameters_Bug510289() throws Exception { + expectedFinalInfos = 1; + assertRefactoringSuccess(); + } + + //A.h + //template class N> + //struct Waldo { + // /*$*/void find();/*$$*/ + //}; + // + //==================== + //template class N> + //struct Waldo { + // void find(); + //}; + // + //template class N> + //inline void Waldo::find() { + //} + public void testTemplateTemplateParameters_Bug510289() throws Exception { + expectedFinalInfos = 1; + assertRefactoringSuccess(); + } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/utils/NamespaceHelper.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/utils/NamespaceHelper.java index a86d81ae772..1d9f660dc9b 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/utils/NamespaceHelper.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/utils/NamespaceHelper.java @@ -26,8 +26,10 @@ import org.eclipse.cdt.core.dom.ast.IASTNodeLocation; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTParameterDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplatedTypeTemplateParameter; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNamedTypeSpecifier; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSimpleTypeTemplateParameter; @@ -119,6 +121,26 @@ public class NamespaceHelper { namedTypeSpecifier.setName(simpleTypeTemplateParameter.getName().copy(CopyStyle.withLocations)); id.setDeclSpecifier(namedTypeSpecifier); + templateId.addTemplateArgument(id); + } else if (templateParameter instanceof ICPPASTParameterDeclaration) { + ICPPASTParameterDeclaration parDecl = (ICPPASTParameterDeclaration) templateParameter; + + CPPASTTypeId id = new CPPASTTypeId(); + + CPPASTNamedTypeSpecifier namedTypeSpecifier = new CPPASTNamedTypeSpecifier(); + namedTypeSpecifier.setName(parDecl.getDeclarator().getName().copy(CopyStyle.withLocations)); + id.setDeclSpecifier(namedTypeSpecifier); + + templateId.addTemplateArgument(id); + } else if (templateParameter instanceof ICPPASTTemplatedTypeTemplateParameter) { + ICPPASTTemplatedTypeTemplateParameter parDecl = (ICPPASTTemplatedTypeTemplateParameter) templateParameter; + + CPPASTTypeId id = new CPPASTTypeId(); + + CPPASTNamedTypeSpecifier namedTypeSpecifier = new CPPASTNamedTypeSpecifier(); + namedTypeSpecifier.setName(parDecl.getName().copy(CopyStyle.withLocations)); + id.setDeclSpecifier(namedTypeSpecifier); + templateId.addTemplateArgument(id); } }