diff options
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.java | 85 |
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; + } +} |