diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java b/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java index bdbbc364aa60..12300a2bcf45 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java @@ -759,17 +759,17 @@ public abstract class PsiFileImpl extends ElementBase implements PsiFileEx, PsiF @Override public PsiElement getFirstChild() { - return SharedImplUtil.getFirstChild(calcTreeElement()); + return SharedImplUtil.getFirstChild(getNode()); } @Override public PsiElement getLastChild() { - return SharedImplUtil.getLastChild(calcTreeElement()); + return SharedImplUtil.getLastChild(getNode()); } @Override public void acceptChildren(@NotNull PsiElementVisitor visitor) { - SharedImplUtil.acceptChildren(visitor, calcTreeElement()); + SharedImplUtil.acceptChildren(visitor, getNode()); } @Override diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/resolve/ResolveCache.java b/platform/core-impl/src/com/intellij/psi/impl/source/resolve/ResolveCache.java index 4f2e44371b79..c2d54cca3302 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/resolve/ResolveCache.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/resolve/ResolveCache.java @@ -128,7 +128,9 @@ public class ResolveCache { boolean isPoly, boolean isPhysical) { ProgressIndicatorProvider.checkCanceled(); - ApplicationManager.getApplication().assertReadAccessAllowed(); + if (isPhysical) { + ApplicationManager.getApplication().assertReadAccessAllowed(); + } int index = getIndex(isPhysical, incompleteCode, isPoly); ConcurrentMap map = getMap(index); diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/tree/SharedImplUtil.java b/platform/core-impl/src/com/intellij/psi/impl/source/tree/SharedImplUtil.java index 4c93ca05f160..b9b3dd35d445 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/tree/SharedImplUtil.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/tree/SharedImplUtil.java @@ -22,6 +22,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.*; import com.intellij.psi.impl.CheckUtil; import com.intellij.psi.impl.DebugUtil; +import com.intellij.psi.impl.ElementBase; import com.intellij.psi.impl.source.SourceTreeToPsiMap; import com.intellij.psi.impl.source.codeStyle.CodeEditUtil; import com.intellij.psi.tree.IElementType; @@ -40,7 +41,7 @@ public class SharedImplUtil { } public static PsiElement getParent(ASTNode thisElement) { - if (CHECK_FOR_READ_ACTION) { + if (CHECK_FOR_READ_ACTION && thisElement instanceof ElementBase) { ApplicationManager.getApplication().assertReadAccessAllowed(); } return SourceTreeToPsiMap.treeElementToPsi(thisElement.getTreeParent()); @@ -82,7 +83,7 @@ public class SharedImplUtil { } public static FileElement findFileElement(@NotNull ASTNode element) { - if (CHECK_FOR_READ_ACTION) { + if (CHECK_FOR_READ_ACTION && element instanceof ElementBase) { ApplicationManager.getApplication().assertReadAccessAllowed(); } ASTNode parent = element.getTreeParent(); @@ -180,8 +181,8 @@ public class SharedImplUtil { return count; } - public static void acceptChildren(PsiElementVisitor visitor, CompositeElement root) { - TreeElement childNode = root.getFirstChildNode(); + public static void acceptChildren(PsiElementVisitor visitor, ASTNode root) { + ASTNode childNode = root.getFirstChildNode(); while (childNode != null) { final PsiElement psi; diff --git a/platform/core-impl/src/com/intellij/psi/stubs/StubTreeBuilder.java b/platform/core-impl/src/com/intellij/psi/stubs/StubTreeBuilder.java index d026bc284845..830915968efd 100644 --- a/platform/core-impl/src/com/intellij/psi/stubs/StubTreeBuilder.java +++ b/platform/core-impl/src/com/intellij/psi/stubs/StubTreeBuilder.java @@ -58,7 +58,7 @@ public class StubTreeBuilder { CharSequence contentAsText = inputData.getContentAsText(); FileContentImpl fileContent = (FileContentImpl)inputData; - PsiFile psi = fileContent.getPsiFileAccountingForUnsavedDocument(); + PsiFile psi = fileContent.getPsiFileForPsiDependentIndex(); psi = psi.getViewProvider().getStubBindingRoot(); psi.putUserData(IndexingDataKeys.FILE_TEXT_CONTENT_KEY, contentAsText); @@ -82,7 +82,7 @@ public class StubTreeBuilder { if (stubFileElementType != null) { StubBuilder stubBuilder = stubFileElementType.getBuilder(); if (stubBuilder instanceof LightStubBuilder) { - LightStubBuilder.FORCED_AST.set(fileContent.getLighterAST()); + LightStubBuilder.FORCED_AST.set(fileContent.getLighterASTForPsiDependentIndex()); } data = stubBuilder.buildStubTree(psi); } diff --git a/platform/core-impl/src/com/intellij/util/indexing/FileContentImpl.java b/platform/core-impl/src/com/intellij/util/indexing/FileContentImpl.java index 58521fdf0258..41184daab651 100644 --- a/platform/core-impl/src/com/intellij/util/indexing/FileContentImpl.java +++ b/platform/core-impl/src/com/intellij/util/indexing/FileContentImpl.java @@ -79,10 +79,10 @@ public final class FileContentImpl extends UserDataHolderBase implements FileCon return psi; } - public @NotNull LighterAST getLighterAST() { + public @NotNull LighterAST getLighterASTForPsiDependentIndex() { LighterAST lighterAST = getUserData(IndexingDataKeys.LIGHTER_AST_NODE_KEY); if (lighterAST == null) { - lighterAST = getPsiFileAccountingForUnsavedDocument().getNode().getLighterAST(); + lighterAST = getPsiFileForPsiDependentIndex().getNode().getLighterAST(); assert lighterAST != null; putUserData(IndexingDataKeys.LIGHTER_AST_NODE_KEY, lighterAST); } @@ -229,7 +229,7 @@ public final class FileContentImpl extends UserDataHolderBase implements FileCon myHash = hash; } - public PsiFile getPsiFileAccountingForUnsavedDocument() { + public PsiFile getPsiFileForPsiDependentIndex() { Document document = FileDocumentManager.getInstance().getCachedDocument(getFile()); PsiFile psi = null; if (document != null) { diff --git a/platform/duplicates-analysis/src/com/intellij/dupLocator/index/DuplicatesIndex.java b/platform/duplicates-analysis/src/com/intellij/dupLocator/index/DuplicatesIndex.java index 90b3dc93f387..bc0945b071ec 100644 --- a/platform/duplicates-analysis/src/com/intellij/dupLocator/index/DuplicatesIndex.java +++ b/platform/duplicates-analysis/src/com/intellij/dupLocator/index/DuplicatesIndex.java @@ -119,7 +119,7 @@ public class DuplicatesIndex extends FileBasedIndexExtension result = new THashMap(); - LighterAST ast = fileContent.getLighterAST(); + LighterAST ast = fileContent.getLighterASTForPsiDependentIndex(); assert ast != null; ((LightDuplicateProfile)profile).process(ast, new LightDuplicateProfile.Callback() { @Override @@ -134,7 +134,7 @@ public class DuplicatesIndex extends FileBasedIndexExtension implements UpdatableIndex