summaryrefslogtreecommitdiff
path: root/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/compiler/OptimizingSearchHelperBase.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/compiler/OptimizingSearchHelperBase.java')
-rw-r--r--platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/compiler/OptimizingSearchHelperBase.java85
1 files changed, 85 insertions, 0 deletions
diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/compiler/OptimizingSearchHelperBase.java b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/compiler/OptimizingSearchHelperBase.java
new file mode 100644
index 000000000000..2d6f2bc41b37
--- /dev/null
+++ b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/compiler/OptimizingSearchHelperBase.java
@@ -0,0 +1,85 @@
+package com.intellij.structuralsearch.impl.matcher.compiler;
+
+import gnu.trove.THashSet;
+
+/**
+ * @author Maxim.Mossienko
+*/
+abstract class OptimizingSearchHelperBase implements OptimizingSearchHelper {
+ private final THashSet<String> scanned;
+ private final THashSet<String> scannedText;
+ private final THashSet<String> scannedComments;
+ private final THashSet<String> scannedLiterals;
+ protected int scanRequest;
+
+
+ protected final CompileContext context;
+
+ OptimizingSearchHelperBase(CompileContext _context) {
+ context = _context;
+
+ scanRequest = 0;
+ scanned = new THashSet<String>();
+ scannedText = new THashSet<String>();
+ scannedComments = new THashSet<String>();
+ scannedLiterals = new THashSet<String>();
+ }
+
+ public void clear() {
+ scanned.clear();
+ scannedComments.clear();
+ scannedLiterals.clear();
+ }
+
+ public boolean addWordToSearchInCode(final String refname) {
+ if (!scanned.contains(refname)) {
+ doAddSearchWordInCode(refname);
+ scanned.add( refname );
+ return true;
+ }
+
+ return false;
+ }
+
+ public boolean addWordToSearchInText(final String refname) {
+ if (!scannedText.contains(refname)) {
+ doAddSearchWordInText(refname);
+ scannedText.add(refname);
+ return true;
+ }
+ return false;
+ }
+
+ protected abstract void doAddSearchWordInCode(final String refname);
+ protected abstract void doAddSearchWordInText(final String refname);
+
+ protected abstract void doAddSearchWordInComments(final String refname);
+ protected abstract void doAddSearchWordInLiterals(final String refname);
+
+ public void endTransaction() {
+ scanRequest++;
+ }
+
+ public boolean addWordToSearchInComments(final String refname) {
+ if (!scannedComments.contains(refname)) {
+ doAddSearchWordInComments(refname);
+
+ scannedComments.add( refname );
+ return true;
+ }
+ return false;
+ }
+
+ public boolean addWordToSearchInLiterals(final String refname) {
+ if (!scannedLiterals.contains(refname)) {
+ doAddSearchWordInLiterals(refname);
+ scannedLiterals.add( refname );
+ return true;
+ }
+ return false;
+ }
+
+ public boolean isScannedSomething() {
+ return scanned.size() > 0 || scannedComments.size() > 0 || scannedLiterals.size() > 0;
+ }
+}