From fa3934ebafdd3d69bc5fde5cb2c1b32bbfd0fcef Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 8 Sep 2011 15:53:43 +0200 Subject: [PATCH] ProgressManager -> ProgressIndicatorProvider --- .../openapi/progress/NonCancelableSection.java | 0 .../openapi/progress/ProgressIndicatorProvider.java | 2 ++ .../intellij/extapi/psi/StubBasedPsiElementBase.java | 6 +++--- .../src/com/intellij/lang/impl/PsiBuilderImpl.java | 12 ++++++------ .../src/com/intellij/psi/impl/PsiManagerImpl.java | 8 ++++---- .../psi/impl/source/resolve/ResolveCache.java | 4 ++-- .../reference/ReferenceProvidersRegistry.java | 4 ++-- .../com/intellij/psi/impl/source/text/DiffLog.java | 5 ++--- .../intellij/psi/impl/source/tree/AstBufferUtil.java | 4 ++-- .../psi/impl/source/tree/CompositeElement.java | 6 +++--- .../psi/impl/source/tree/LeafPsiElement.java | 8 ++------ .../intellij/openapi/progress/ProgressManager.java | 5 +++++ 12 files changed, 33 insertions(+), 31 deletions(-) rename platform/{platform-api => core-api}/src/com/intellij/openapi/progress/NonCancelableSection.java (100%) diff --git a/platform/platform-api/src/com/intellij/openapi/progress/NonCancelableSection.java b/platform/core-api/src/com/intellij/openapi/progress/NonCancelableSection.java similarity index 100% rename from platform/platform-api/src/com/intellij/openapi/progress/NonCancelableSection.java rename to platform/core-api/src/com/intellij/openapi/progress/NonCancelableSection.java diff --git a/platform/core-api/src/com/intellij/openapi/progress/ProgressIndicatorProvider.java b/platform/core-api/src/com/intellij/openapi/progress/ProgressIndicatorProvider.java index cf9541e3d044..31c7e5b0b1eb 100644 --- a/platform/core-api/src/com/intellij/openapi/progress/ProgressIndicatorProvider.java +++ b/platform/core-api/src/com/intellij/openapi/progress/ProgressIndicatorProvider.java @@ -33,6 +33,8 @@ public abstract class ProgressIndicatorProvider { protected abstract void doCheckCanceled() throws ProcessCanceledException; + public abstract NonCancelableSection startNonCancelableSection(); + public static boolean ourNeedToCheckCancel = false; public static void checkCanceled() throws ProcessCanceledException { // smart optimization! There's a thread started in ProgressManagerImpl, that set's this flag up once in 10 milliseconds diff --git a/platform/lang-impl/src/com/intellij/extapi/psi/StubBasedPsiElementBase.java b/platform/lang-impl/src/com/intellij/extapi/psi/StubBasedPsiElementBase.java index 0e5f206cdd06..1e2f64c823df 100644 --- a/platform/lang-impl/src/com/intellij/extapi/psi/StubBasedPsiElementBase.java +++ b/platform/lang-impl/src/com/intellij/extapi/psi/StubBasedPsiElementBase.java @@ -22,7 +22,7 @@ package com.intellij.extapi.psi; import com.intellij.lang.ASTNode; import com.intellij.lang.Language; import com.intellij.openapi.progress.NonCancelableSection; -import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; @@ -67,7 +67,7 @@ public class StubBasedPsiElementBase extends ASTDelegateP synchronized (file.getStubLock()) { node = myNode; if (node == null) { - NonCancelableSection criticalSection = ProgressManager.getInstance().startNonCancelableSection(); + NonCancelableSection criticalSection = ProgressIndicatorProvider.getInstance().startNonCancelableSection(); try { if (!file.isValid()) throw new PsiInvalidElementAccessException(this); FileElement treeElement = file.getTreeElement(); @@ -194,7 +194,7 @@ public class StubBasedPsiElementBase extends ASTDelegateP } public T getStub() { - ProgressManager.checkCanceled(); // Hope, this is called often + ProgressIndicatorProvider.checkCanceled(); // Hope, this is called often return myStub; } diff --git a/platform/lang-impl/src/com/intellij/lang/impl/PsiBuilderImpl.java b/platform/lang-impl/src/com/intellij/lang/impl/PsiBuilderImpl.java index f95899dbf184..eb09fc3159e0 100644 --- a/platform/lang-impl/src/com/intellij/lang/impl/PsiBuilderImpl.java +++ b/platform/lang-impl/src/com/intellij/lang/impl/PsiBuilderImpl.java @@ -19,7 +19,7 @@ package com.intellij.lang.impl; import com.intellij.lang.*; import com.intellij.lexer.Lexer; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Key; @@ -187,7 +187,7 @@ public class PsiBuilderImpl extends UserDataHolderBase implements PsiBuilder { int i = 0; int offset = 0; while (true) { - ProgressManager.checkCanceled(); + ProgressIndicatorProvider.checkCanceled(); IElementType type = myLexer.getTokenType(); if (type == null) break; @@ -630,7 +630,7 @@ public class PsiBuilderImpl extends UserDataHolderBase implements PsiBuilder { } myTokenTypeChecked = false; myCurrentLexeme++; - ProgressManager.checkCanceled(); + ProgressIndicatorProvider.checkCanceled(); } private void skipWhitespace() { @@ -946,7 +946,7 @@ public class PsiBuilderImpl extends UserDataHolderBase implements PsiBuilder { final MyTreeStructure treeStructure = new MyTreeStructure(newRoot, null); final MyComparator comparator = new MyComparator(getUserDataUnprotected(CUSTOM_COMPARATOR), treeStructure); - BlockSupportImpl.diffTrees(oldRoot, builder, comparator, treeStructure, ProgressManager.getInstance().getProgressIndicator()); + BlockSupportImpl.diffTrees(oldRoot, builder, comparator, treeStructure, ProgressIndicatorProvider.getInstance().getProgressIndicator()); return diffLog; } @@ -1102,7 +1102,7 @@ public class PsiBuilderImpl extends UserDataHolderBase implements PsiBuilder { private int insertLeaves(int curToken, int lastIdx, final CompositeElement curNode) { lastIdx = Math.min(lastIdx, myLexemeCount); while (curToken < lastIdx) { - ProgressManager.checkCanceled(); + ProgressIndicatorProvider.checkCanceled(); final int start = myLexStarts[curToken]; final int end = myLexStarts[curToken + 1]; if (start < end || myLexTypes[curToken] instanceof ILeafElementType) { // Empty token. Most probably a parser directive like indent/dedent in Python @@ -1162,7 +1162,7 @@ public class PsiBuilderImpl extends UserDataHolderBase implements PsiBuilder { } public ThreeState deepEqual(final ASTNode oldNode, final LighterASTNode newNode) { - ProgressManager.checkCanceled(); + ProgressIndicatorProvider.checkCanceled(); boolean oldIsErrorElement = oldNode instanceof PsiErrorElement; boolean newIsErrorElement = newNode.getTokenType() == TokenType.ERROR_ELEMENT; diff --git a/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerImpl.java index b97cce085268..8738c48a41a1 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerImpl.java @@ -24,7 +24,7 @@ import com.intellij.openapi.components.ProjectComponent; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.module.Module; -import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.startup.StartupManager; @@ -186,13 +186,13 @@ public class PsiManagerImpl extends PsiManagerEx implements ProjectComponent { @NotNull public ResolveCache getResolveCache() { - ProgressManager.checkCanceled(); // We hope this method is being called often enough to cancel daemon processes smoothly + ProgressIndicatorProvider.checkCanceled(); // We hope this method is being called often enough to cancel daemon processes smoothly return myResolveCache; } public boolean areElementsEquivalent(PsiElement element1, PsiElement element2) { - ProgressManager.checkCanceled(); // We hope this method is being called often enough to cancel daemon processes smoothly + ProgressIndicatorProvider.checkCanceled(); // We hope this method is being called often enough to cancel daemon processes smoothly if (element1 == element2) return true; if (element1 == null || element2 == null) { @@ -237,7 +237,7 @@ public class PsiManagerImpl extends PsiManagerEx implements ProjectComponent { } public PsiDirectory findDirectory(@NotNull VirtualFile file) { - ProgressManager.checkCanceled(); + ProgressIndicatorProvider.checkCanceled(); return myFileManager.findDirectory(file); } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/ResolveCache.java b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/ResolveCache.java index 1b546a5c2587..1890ca74df35 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/ResolveCache.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/ResolveCache.java @@ -18,7 +18,7 @@ package com.intellij.psi.impl.source.resolve; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.RecursionGuard; import com.intellij.openapi.util.RecursionManager; @@ -104,7 +104,7 @@ public class ResolveCache { @NotNull Map>[] maps, boolean needToPreventRecursion, final boolean incompleteCode, boolean poly) { - ProgressManager.checkCanceled(); + ProgressIndicatorProvider.checkCanceled(); ApplicationManager.getApplication().assertReadAccessAllowed(); int clearCountOnStart = myClearCount.intValue(); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/ReferenceProvidersRegistry.java b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/ReferenceProvidersRegistry.java index 4bdba93560e6..70889e1ef2b6 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/ReferenceProvidersRegistry.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/ReferenceProvidersRegistry.java @@ -19,7 +19,7 @@ package com.intellij.psi.impl.source.resolve.reference; import com.intellij.lang.Language; import com.intellij.lang.LanguageExtension; import com.intellij.openapi.components.ServiceManager; -import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.util.Trinity; import com.intellij.patterns.ElementPattern; @@ -108,7 +108,7 @@ public class ReferenceProvidersRegistry { } public static PsiReference[] getReferencesFromProviders(PsiElement context, @NotNull PsiReferenceService.Hints hints) { - ProgressManager.checkCanceled(); + ProgressIndicatorProvider.checkCanceled(); assert context.isValid() : "Invalid context: " + context; ReferenceProvidersRegistry registry = getInstance(); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/text/DiffLog.java b/platform/lang-impl/src/com/intellij/psi/impl/source/text/DiffLog.java index 62bdb7c45bad..51e3e9b5ad58 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/text/DiffLog.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/text/DiffLog.java @@ -16,7 +16,7 @@ package com.intellij.psi.impl.source.text; import com.intellij.lang.ASTNode; -import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.pom.tree.events.impl.TreeChangeEventImpl; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -29,7 +29,6 @@ import com.intellij.psi.impl.source.tree.CompositeElement; import com.intellij.psi.impl.source.tree.FileElement; import com.intellij.psi.impl.source.tree.TreeElement; import com.intellij.psi.impl.source.tree.TreeUtil; -import com.intellij.util.IncorrectOperationException; import com.intellij.util.diff.DiffTreeChangeBuilder; import org.jetbrains.annotations.NotNull; @@ -45,7 +44,7 @@ public class DiffLog implements DiffTreeChangeBuilder { private abstract static class LogEntry { protected LogEntry() { - ProgressManager.checkCanceled(); + ProgressIndicatorProvider.checkCanceled(); } abstract void doActualPsiChange(@NotNull PsiFile file, @NotNull ASTDiffBuilder astDiffBuilder); } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/AstBufferUtil.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/AstBufferUtil.java index eb329bb8acca..6f563fc14947 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/AstBufferUtil.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/AstBufferUtil.java @@ -20,7 +20,7 @@ package com.intellij.psi.impl.source.tree; import com.intellij.lang.ASTNode; -import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.psi.tree.TokenSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -38,7 +38,7 @@ public class AstBufferUtil { ((TreeElement)element).acceptTree(new RecursiveTreeElementWalkingVisitor(false) { @Override public void visitLeaf(LeafElement element) { - ProgressManager.checkCanceled(); + ProgressIndicatorProvider.checkCanceled(); if (element instanceof ForeignLeafPsiElement || skipTypes != null && skipTypes.contains(element.getElementType())) { return; diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/CompositeElement.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/CompositeElement.java index 899f7f46e198..fc4e393e85cc 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/CompositeElement.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/CompositeElement.java @@ -21,7 +21,7 @@ import com.intellij.extapi.psi.ASTDelegatePsiElement; import com.intellij.lang.*; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.openapi.util.text.StringUtil; import com.intellij.pom.tree.events.ChangeInfo; import com.intellij.pom.tree.events.TreeChangeEvent; @@ -723,7 +723,7 @@ public class CompositeElement extends TreeElement { } public final PsiElement getPsi() { - ProgressManager.checkCanceled(); // We hope this method is being called often enough to cancel daemon processes smoothly + ProgressIndicatorProvider.checkCanceled(); // We hope this method is being called often enough to cancel daemon processes smoothly PsiElement wrapper = myWrapper; if (wrapper != null) return wrapper; @@ -810,7 +810,7 @@ public class CompositeElement extends TreeElement { @Override public void visitComposite(CompositeElement composite) { - ProgressManager.checkCanceled(); // we can safely interrupt creating children PSI any moment + ProgressIndicatorProvider.checkCanceled(); // we can safely interrupt creating children PSI any moment if (composite.myWrapper != null) { // someone else 've managed to create the PSI in the meantime. Abandon our attempts to cache everything. stopWalking(); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/LeafPsiElement.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/LeafPsiElement.java index 2a1f9ea6f022..e10ae3f6cdae 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/LeafPsiElement.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/LeafPsiElement.java @@ -22,8 +22,7 @@ import com.intellij.lang.Language; import com.intellij.navigation.ItemPresentation; import com.intellij.navigation.NavigationItem; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.openapi.project.Project; import com.intellij.pom.Navigatable; import com.intellij.psi.*; @@ -87,10 +86,7 @@ public class LeafPsiElement extends LeafElement implements PsiElement, Navigatio } private void invalid() { - final ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator(); - if (indicator != null) { - indicator.checkCanceled(); - } + ProgressIndicatorProvider.checkCanceled(); final StringBuilder builder = new StringBuilder(); TreeElement element = this; diff --git a/platform/platform-api/src/com/intellij/openapi/progress/ProgressManager.java b/platform/platform-api/src/com/intellij/openapi/progress/ProgressManager.java index 37b0296b212b..14772809ad63 100644 --- a/platform/platform-api/src/com/intellij/openapi/progress/ProgressManager.java +++ b/platform/platform-api/src/com/intellij/openapi/progress/ProgressManager.java @@ -37,6 +37,11 @@ public abstract class ProgressManager { protected void doCheckCanceled() throws ProcessCanceledException { ProgressManager.ourInstance.doCheckCanceled(); } + + @Override + public NonCancelableSection startNonCancelableSection() { + return ProgressManager.ourInstance.startNonCancelableSection(); + } }; }