From dfd7a7164cbcc042dc4f88276622d7f93f26812f Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Thu, 7 Sep 2017 01:23:06 -0400 Subject: [PATCH] Bug 521817 - Implement PDOMCPPAliasTemplate.update() This ensures that if the target type of an alias template changes, the target type is updated in the index during an incremental index update, without requiring a full index rebuild. Change-Id: I8800e3c1701409276f8db64000499a5fa9caf6a9 --- .../core/pdom/dom/cpp/PDOMCPPAliasTemplate.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPAliasTemplate.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPAliasTemplate.java index 9443c989ef2..8a4607d8ff1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPAliasTemplate.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPAliasTemplate.java @@ -14,6 +14,8 @@ package org.eclipse.cdt.internal.core.pdom.dom.cpp; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ast.DOMException; +import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPAliasTemplate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter; @@ -22,6 +24,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTemplateParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter; import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants; import org.eclipse.cdt.internal.core.pdom.db.Database; +import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; import org.eclipse.core.runtime.CoreException; @@ -55,12 +58,25 @@ class PDOMCPPAliasTemplate extends PDOMCPPBinding implements ICPPAliasTemplate, } public void initData(IType aliasedType) { + storeAliasedType(aliasedType); + } + + private void storeAliasedType(IType aliasedType) { try { getLinkage().storeType(record + ALIASED_TYPE, aliasedType); } catch (CoreException e) { CCorePlugin.log(e); } } + + @Override + public void update(PDOMLinkage linkage, IBinding newBinding, IASTNode point) throws CoreException { + if (!(newBinding instanceof ICPPAliasTemplate)) { + return; + } + + storeAliasedType(((ICPPAliasTemplate) newBinding).getType()); + } @Override public int getNodeType() {