mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
cancellability when indexing todos in plain text files (IDEA-180644)
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.java.index
|
||||
|
||||
import com.intellij.ide.todo.TodoConfiguration
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.application.WriteAction
|
||||
import com.intellij.openapi.command.WriteCommandAction
|
||||
@@ -27,6 +28,9 @@ import com.intellij.openapi.fileEditor.FileEditor
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager
|
||||
import com.intellij.openapi.fileTypes.PlainTextFileType
|
||||
import com.intellij.openapi.module.StdModuleTypes
|
||||
import com.intellij.openapi.progress.ProcessCanceledException
|
||||
import com.intellij.openapi.progress.ProgressManager
|
||||
import com.intellij.openapi.progress.util.ProgressIndicatorBase
|
||||
import com.intellij.openapi.roots.ContentIterator
|
||||
import com.intellij.openapi.util.Ref
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
@@ -45,6 +49,7 @@ import com.intellij.psi.impl.PsiManagerEx
|
||||
import com.intellij.psi.impl.cache.impl.id.IdIndex
|
||||
import com.intellij.psi.impl.cache.impl.id.IdIndexEntry
|
||||
import com.intellij.psi.impl.cache.impl.id.IdIndexImpl
|
||||
import com.intellij.psi.impl.cache.impl.todo.TodoIndex
|
||||
import com.intellij.psi.impl.file.impl.FileManagerImpl
|
||||
import com.intellij.psi.impl.java.stubs.index.JavaStubIndexKeys
|
||||
import com.intellij.psi.impl.source.JavaFileElementType
|
||||
@@ -54,11 +59,14 @@ import com.intellij.psi.search.EverythingGlobalScope
|
||||
import com.intellij.psi.search.FilenameIndex
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.psi.search.PsiSearchHelper
|
||||
import com.intellij.psi.search.TodoAttributesUtil
|
||||
import com.intellij.psi.search.TodoPattern
|
||||
import com.intellij.psi.stubs.SerializedStubTree
|
||||
import com.intellij.psi.stubs.StubIndex
|
||||
import com.intellij.psi.stubs.StubIndexImpl
|
||||
import com.intellij.psi.stubs.StubUpdatingIndex
|
||||
import com.intellij.testFramework.IdeaTestUtil
|
||||
import com.intellij.testFramework.LightVirtualFile
|
||||
import com.intellij.testFramework.PlatformTestUtil
|
||||
import com.intellij.testFramework.PsiTestUtil
|
||||
import com.intellij.testFramework.SkipSlowTestLocally
|
||||
@@ -67,6 +75,7 @@ import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase
|
||||
import com.intellij.util.FileContentUtil
|
||||
import com.intellij.util.IncorrectOperationException
|
||||
import com.intellij.util.Processor
|
||||
import com.intellij.util.TimeoutUtil
|
||||
import com.intellij.util.indexing.*
|
||||
import com.intellij.util.indexing.impl.MapIndexStorage
|
||||
import com.intellij.util.indexing.impl.MapReduceIndex
|
||||
@@ -75,6 +84,8 @@ import com.siyeh.ig.JavaOverridingMethodUtil
|
||||
import groovy.transform.CompileStatic
|
||||
import org.jetbrains.annotations.NotNull
|
||||
|
||||
import java.util.concurrent.CountDownLatch
|
||||
|
||||
/**
|
||||
* @author Eugene Zhuravlev
|
||||
* @since Dec 12, 2007
|
||||
@@ -809,4 +820,38 @@ class IndexTest extends JavaCodeInsightFixtureTestCase {
|
||||
assert !JavaOverridingMethodUtil.getOverridingMethodsIfCheapEnough(runnable.methods[0], projectScope, { true }).findFirst().present
|
||||
assert StubIndex.instance.getElements(JavaStubIndexKeys.METHODS, 'run', project, projectScope, PsiMethod).empty
|
||||
}
|
||||
|
||||
void "test text todo indexing checks for cancellation"() {
|
||||
TodoPattern pattern = new TodoPattern("(x+x+)+y", TodoAttributesUtil.createDefault(), true)
|
||||
|
||||
TodoPattern[] oldPatterns = TodoConfiguration.getInstance().getTodoPatterns()
|
||||
TodoPattern[] newPatterns = [pattern]
|
||||
TodoConfiguration.getInstance().setTodoPatterns(newPatterns)
|
||||
FileBasedIndex.instance.ensureUpToDate(TodoIndex.NAME, project, GlobalSearchScope.allScope(project))
|
||||
myFixture.addFileToProject("Foo.txt", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
|
||||
|
||||
try {
|
||||
final CountDownLatch progressStarted = new CountDownLatch(1)
|
||||
final ProgressIndicatorBase progressIndicatorBase = new ProgressIndicatorBase()
|
||||
boolean[] canceled = [false]
|
||||
ApplicationManager.application.executeOnPooledThread({
|
||||
progressStarted.await()
|
||||
TimeoutUtil.sleep(1000)
|
||||
progressIndicatorBase.cancel()
|
||||
TimeoutUtil.sleep(500)
|
||||
assertTrue(canceled[0])
|
||||
});
|
||||
ProgressManager.getInstance().runProcess({
|
||||
try {
|
||||
progressStarted.countDown();
|
||||
FileBasedIndex.instance.ensureUpToDate(TodoIndex.NAME, project, GlobalSearchScope.allScope(project))
|
||||
}
|
||||
catch (ProcessCanceledException ignore) {
|
||||
canceled[0] = true
|
||||
}
|
||||
}, progressIndicatorBase);
|
||||
} finally {
|
||||
TodoConfiguration.getInstance().setTodoPatterns(oldPatterns);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.psi.impl.cache.impl.todo;
|
||||
|
||||
import com.intellij.patterns.StringPattern;
|
||||
import com.intellij.psi.impl.cache.impl.IndexPatternUtil;
|
||||
import com.intellij.psi.impl.cache.impl.OccurrenceConsumer;
|
||||
import com.intellij.psi.search.IndexPattern;
|
||||
@@ -41,7 +42,7 @@ public class PlainTextTodoIndexer extends VersionedTodoIndexer {
|
||||
for (IndexPattern indexPattern : indexPatterns) {
|
||||
Pattern pattern = indexPattern.getOptimizedIndexingPattern();
|
||||
if (pattern != null) {
|
||||
Matcher matcher = pattern.matcher(chars);
|
||||
Matcher matcher = pattern.matcher(StringPattern.newBombedCharSequence(chars));
|
||||
while (matcher.find()) {
|
||||
if (matcher.start() != matcher.end()) {
|
||||
occurrenceConsumer.incTodoOccurrence(indexPattern);
|
||||
|
||||
Reference in New Issue
Block a user