mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Bug 424565 - 'Open Declaration' on use of alias template defined in base
class This should work now for AliasTemplates from AST and PDOM. SourceHover is also affected. Are there any unit tests for this? Change-Id: I54a9c2d6cd0851f901b917a57d79616298699299 Signed-off-by: Michi <woskimi@yahoo.de> Reviewed-on: https://git.eclipse.org/r/38919 Tested-by: Hudson CI Reviewed-by: Sergey Prigogin <eclipse.sprigogin@gmail.com> Tested-by: Sergey Prigogin <eclipse.sprigogin@gmail.com>
This commit is contained in:
parent
7aa9cf6efc
commit
d7e2618b8f
3 changed files with 13 additions and 2 deletions
|
@ -143,6 +143,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypeTransformationSpecifier;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDeclaration;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDirective;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTWhileStatement;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPAliasTemplate;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBlockScope;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate;
|
||||
|
@ -1476,7 +1477,7 @@ public class CPPVisitor extends ASTQueries {
|
|||
shouldVisitNames = true;
|
||||
this.decls = new IASTName[DEFAULT_LIST_SIZE];
|
||||
|
||||
final String bname= binding.getName();
|
||||
final String bname = binding.getName();
|
||||
if (bname.length() > 0 && !bname.startsWith("operator")) { //$NON-NLS-1$
|
||||
requiredName= bname.toCharArray();
|
||||
}
|
||||
|
@ -1489,6 +1490,7 @@ public class CPPVisitor extends ASTQueries {
|
|||
} else if (binding instanceof ICPPTemplateParameter) {
|
||||
kind = KIND_TEMPLATE_PARAMETER;
|
||||
} else if (binding instanceof ICompositeType ||
|
||||
binding instanceof ICPPAliasTemplate ||
|
||||
binding instanceof ITypedef ||
|
||||
binding instanceof IEnumeration) {
|
||||
kind = KIND_TYPE;
|
||||
|
@ -1542,7 +1544,8 @@ public class CPPVisitor extends ASTQueries {
|
|||
case KIND_TYPE:
|
||||
case KIND_COMPOSITE:
|
||||
if (prop == IASTCompositeTypeSpecifier.TYPE_NAME ||
|
||||
prop == IASTEnumerationSpecifier.ENUMERATION_NAME ||
|
||||
prop == ICPPASTAliasDeclaration.ALIAS_NAME ||
|
||||
prop == IASTEnumerationSpecifier.ENUMERATION_NAME ||
|
||||
prop == ICPPASTUsingDeclaration.NAME) {
|
||||
break;
|
||||
} else if (prop == IASTElaboratedTypeSpecifier.TYPE_NAME) {
|
||||
|
|
|
@ -61,6 +61,7 @@ import org.eclipse.cdt.core.dom.ast.IType;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDeclaration;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPAliasTemplateInstance;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
|
||||
|
@ -254,6 +255,9 @@ class OpenDeclarationsJob extends Job implements ASTRunnable {
|
|||
}
|
||||
|
||||
private IName[] findDeclNames(IASTTranslationUnit ast, NameKind kind, IBinding binding) throws CoreException {
|
||||
if (binding instanceof ICPPAliasTemplateInstance) {
|
||||
binding = ((ICPPAliasTemplateInstance) binding).getTemplateDefinition();
|
||||
}
|
||||
IName[] declNames = findNames(fIndex, ast, kind, binding);
|
||||
// Bug 207320, handle template instances.
|
||||
while (declNames.length == 0 && binding instanceof ICPPSpecialization) {
|
||||
|
|
|
@ -80,6 +80,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclarator;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleDeclSpecifier;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypeId;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPAliasTemplateInstance;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
|
||||
|
@ -661,6 +662,9 @@ public class CSourceHover extends AbstractCEditorTextHover {
|
|||
* @throws CoreException
|
||||
*/
|
||||
private IName[] findDefinitions(IASTTranslationUnit ast, IBinding binding) throws CoreException {
|
||||
if (binding instanceof ICPPAliasTemplateInstance) {
|
||||
binding = ((ICPPAliasTemplateInstance) binding).getTemplateDefinition();
|
||||
}
|
||||
IName[] declNames= ast.getDefinitionsInAST(binding);
|
||||
if (declNames.length == 0 && ast.getIndex() != null) {
|
||||
// search definitions in index
|
||||
|
|
Loading…
Add table
Reference in a new issue