diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java index c67f5b9bde0..151bec14d10 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java @@ -417,9 +417,7 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { long fileLocalRec[]= {0}; pdomBinding = adaptBinding(parent, binding, fileLocalRec); - if (pdomBinding != null) { - getPDOM().putCachedResult(inputBinding, pdomBinding); - } else { + if (pdomBinding == null) { try { pdomBinding = createBinding(parent, binding, fileLocalRec[0]); if (pdomBinding != null) { @@ -437,6 +435,8 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { } return pdomBinding; } + + getPDOM().putCachedResult(inputBinding, pdomBinding); } if (shouldUpdate(pdomBinding, fromName)) { @@ -884,25 +884,12 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { parent= adaptOrAddParent(false, binding); } if (parent == this) { - PDOMBinding glob= CPPFindBinding.findBinding(getIndex(), this, binding, 0); - if (fileLocalRecHolder == null) - return glob; - final long loc= getLocalToFileRec(parent, binding, glob); - if (loc == 0) - return glob; - fileLocalRecHolder[0]= loc; - return CPPFindBinding.findBinding(getIndex(), this, binding, loc); + BTree btree = getIndex(); + return findBinding(btree, parent, binding, fileLocalRecHolder); } if (parent instanceof PDOMCPPNamespace) { - final BTree btree = ((PDOMCPPNamespace) parent).getIndex(); - PDOMBinding glob= CPPFindBinding.findBinding(btree, this, binding, 0); - if (fileLocalRecHolder == null) - return glob; - final long loc= getLocalToFileRec(parent, binding, glob); - if (loc == 0) - return glob; - fileLocalRecHolder[0]= loc; - return CPPFindBinding.findBinding(btree, this, binding, loc); + BTree btree = ((PDOMCPPNamespace) parent).getIndex(); + return findBinding(btree, parent, binding, fileLocalRecHolder); } if (binding instanceof ICPPTemplateParameter && parent instanceof IPDOMCPPTemplateParameterOwner) { return (PDOMBinding) ((IPDOMCPPTemplateParameterOwner) parent).adaptTemplateParameter( @@ -919,6 +906,18 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { return null; } + private PDOMBinding findBinding(BTree btree, PDOMNode parent, IBinding binding, long[] fileLocalRecHolder) + throws CoreException { + PDOMBinding glob= CPPFindBinding.findBinding(btree, this, binding, 0); + if (fileLocalRecHolder == null) + return glob; + final long loc= getLocalToFileRec(parent, binding, glob); + if (loc == 0) + return glob; + fileLocalRecHolder[0]= loc; + return CPPFindBinding.findBinding(btree, this, binding, loc); + } + /** * Adapts the parent of the given binding to an object contained in this linkage. May return * null if the binding cannot be adapted or the binding does not exist and addParent