# HG changeset patch # User Alexander Simon # Date 1478615393 -10800 # Tue Nov 08 17:29:53 2016 +0300 # Branch release82 # Node ID 804854b8523daef7bf8eeba4165de78724e70795 # Parent 80882a784170893691ef8a267c3b95b7790e2f88 fixed Bug #247747 Find Usages cannot find method usages after changing it body diff --git a/cnd.completion/src/org/netbeans/modules/cnd/completion/impl/xref/ReferenceResolverImpl.java b/cnd.completion/src/org/netbeans/modules/cnd/completion/impl/xref/ReferenceResolverImpl.java --- a/cnd.completion/src/org/netbeans/modules/cnd/completion/impl/xref/ReferenceResolverImpl.java +++ b/cnd.completion/src/org/netbeans/modules/cnd/completion/impl/xref/ReferenceResolverImpl.java @@ -159,4 +159,9 @@ public Collection getReferences(CsmFile file) { return Collections.emptyList(); } + + @Override + public boolean isStorage() { + return false; + } } diff --git a/cnd.model.services/src/org/netbeans/modules/cnd/api/model/xref/CsmReferenceResolver.java b/cnd.model.services/src/org/netbeans/modules/cnd/api/model/xref/CsmReferenceResolver.java --- a/cnd.model.services/src/org/netbeans/modules/cnd/api/model/xref/CsmReferenceResolver.java +++ b/cnd.model.services/src/org/netbeans/modules/cnd/api/model/xref/CsmReferenceResolver.java @@ -51,6 +51,7 @@ import javax.swing.JEditorPane; import javax.swing.text.Document; import org.netbeans.modules.cnd.api.model.CsmFile; +import org.netbeans.modules.cnd.api.model.CsmObject; import org.netbeans.modules.cnd.modelutil.CsmUtilities; import org.openide.cookies.EditorCookie; import org.openide.nodes.Node; @@ -82,6 +83,13 @@ * @return reference for element on position "offset", null if not found */ public abstract CsmReference findReference(CsmFile file, Document doc, int offset); + + /** + * Return true if resolver gets reference from file database. + * + * @return + */ + public abstract boolean isStorage(); /** * look for reference on specified position in file @@ -150,7 +158,16 @@ for (CsmReferenceResolver resolver : res.allInstances()) { CsmReference out = resolver.findReference(file, doc, offset); if (out != null) { - return out; + if (resolver.isStorage()) { + // reference can be outdated + // check if referenced object is still alive + CsmObject referencedObject = out.getReferencedObject(); + if (referencedObject != null) { + return out; + } + } else { + return out; + } } } return null; @@ -207,5 +224,10 @@ } return list; } + + @Override + public boolean isStorage() { + return false; + } } } diff --git a/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/impl/services/DeclarationReferenceResolverImpl.java b/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/impl/services/DeclarationReferenceResolverImpl.java --- a/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/impl/services/DeclarationReferenceResolverImpl.java +++ b/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/impl/services/DeclarationReferenceResolverImpl.java @@ -87,4 +87,9 @@ } return Collections.emptyList(); } + + @Override + public boolean isStorage() { + return true; + } }