Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/qt
diff options
context:
space:
mode:
authorAndrew Eidsness2013-02-26 21:53:28 +0000
committerDoug Schaefer2013-02-27 02:17:01 +0000
commit6c6ab24c2355b454aa529361c9e0ee06d4166d35 (patch)
treefe409daf20ec25c4f79688ce91e62df67f064cc1 /qt
parent29efae531167786ab6e563c67c29a948525ff73e (diff)
downloadorg.eclipse.cdt-6c6ab24c2355b454aa529361c9e0ee06d4166d35.tar.gz
org.eclipse.cdt-6c6ab24c2355b454aa529361c9e0ee06d4166d35.tar.xz
org.eclipse.cdt-6c6ab24c2355b454aa529361c9e0ee06d4166d35.zip
Bug 400020: Allow tagging of IBindings
Addresses review comments from https://git.eclipse.org/r/#/c/10648. Fixes the junit problems by making sure that the dummy PDOM acquires its write lock before calling exercising the tag index. Original commit message: This new extension point allows contributors to put their own information into the PDOM and to later retrieve it for their own purposes. There are many details in the bug. The idea is that contributors provide an implementation of IBindingTagger, which is given a chance to examine IBindings when they are created. The ITagWriter interface allows the contributor to create a new tag which can then have data written to it. The ITagService interface (accessible from CCorePlugin.getTagService() provides a way for the contributor to later get an instance of ITagReader to retrieve tags from bindings. ITags are copied to the PDOM when the associated binding is persisteed. Contributors use a unique id (based on their plugin id), so that multiple contributors are able to independently tag a given binding. In-memory tags are not cached. I've done some timing tests using my sample implementation and found no measurable difference. The full log lines look like: !MESSAGE Indexed 'simple-01' (2 sources, 184 headers) in <see below> sec: 21,550 declarations; 35,394 references; 0 unresolved inclusions; 1 syntax errors; 0 unresolved names (0.00%) I did 5 tests using the current master (no tagging-related code), the times were: 18.86 sec 9.17 sec 5.91 sec 4.79 sec 4.83 sec And then I ran the same sequence of tests using the code in this commit: 18.73 sec 9.39 sec 6.50 sec 4.78 sec 5.27 sec If performance does become a problem, then caching could be introduced with a new implementation of ITaggableService. The two problems are finding a key other than the identity of the IBinding (since IBindings are re-created often) and properly evicting stale entries when the binding is no longer valid. The process of copying tags from an in-memory IBinding to a PDOMBinding, is a synchronization. This means that tags that are no longer applicable, will be removed from the persistent store. While developing this I found that PDOMBindings are not deleted from the Database (only the names that reference them are deleted), so there is no provision for deleting all tags at once. New database locks are not needed. By the time the persistent tags are accessed, higher levels of code have already taken a read or write lock as appropriate. There are new unit tests covering the changes to the PDOM. Change-Id: I6ae1afc949082f7f4484b3faa1550670be43312f Reviewed-on: https://git.eclipse.org/r/10659 Reviewed-by: Doug Schaefer <dschaefer@qnx.com> IP-Clean: Doug Schaefer <dschaefer@qnx.com> Tested-by: Doug Schaefer <dschaefer@qnx.com>
Diffstat (limited to 'qt')
-rw-r--r--qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/qt/internal/ui/QtCompletionProposalComputer.java4
1 files changed, 2 insertions, 2 deletions
diff --git a/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/qt/internal/ui/QtCompletionProposalComputer.java b/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/qt/internal/ui/QtCompletionProposalComputer.java
index 733e08857ab..63d22a437fc 100644
--- a/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/qt/internal/ui/QtCompletionProposalComputer.java
+++ b/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/qt/internal/ui/QtCompletionProposalComputer.java
@@ -156,7 +156,7 @@ public class QtCompletionProposalComputer extends ParsingBasedProposalComputer
return false;
int result = tag.getByte( 0 );
- return result != ITag.Fail
+ return result != ITag.FAIL
&& ( ( result & QtPlugin.SignalSlot_Mask_signal ) == QtPlugin.SignalSlot_Mask_signal );
}
};
@@ -175,7 +175,7 @@ public class QtCompletionProposalComputer extends ParsingBasedProposalComputer
return false;
int result = tag.getByte( 0 );
- return result != ITag.Fail
+ return result != ITag.FAIL
&& ( ( result & QtPlugin.SignalSlot_Mask_slot ) == QtPlugin.SignalSlot_Mask_slot );
}
};

Back to the top