From 613f6bd417fbef8a39ebdc4eb2f2388c3a945b27 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 8 May 2018 17:49:50 +0200 Subject: [PATCH] restore special handling for PSI errors after stub-ast mismatches --- .../src/com/intellij/psi/impl/source/FileTrees.java | 2 +- .../src/com/intellij/psi/impl/source/PsiFileImpl.java | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/FileTrees.java b/platform/core-impl/src/com/intellij/psi/impl/source/FileTrees.java index 6bf2b1d06ebe..884363a11aa4 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/FileTrees.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/FileTrees.java @@ -173,7 +173,7 @@ final class FileTrees { } catch (Throwable e) { LOG.error(e); - myFile.onContentReload(); + myFile.clearContent(PsiFileImpl.STUB_PSI_MISMATCH); myFile.rebuildStub(); throw StubTreeLoader.getInstance().stubTreeAndIndexDoNotMatch(e.getMessage(), stubTree, myFile); } 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 3ff3420d7b2a..546c209bc68f 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 @@ -54,7 +54,7 @@ import static com.intellij.util.AstLoadingFilter.assertTreeLoadingEnabled; public abstract class PsiFileImpl extends ElementBase implements PsiFileEx, PsiFileWithStubSupport, Queryable { private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.source.PsiFileImpl"); - public static final String STUB_PSI_MISMATCH = "stub-psi mismatch"; + static final String STUB_PSI_MISMATCH = "stub-psi mismatch"; private static final AtomicFieldUpdater ourTreeUpdater = AtomicFieldUpdater.forFieldOfType(PsiFileImpl.class, FileTrees.class); @@ -510,14 +510,18 @@ public abstract class PsiFileImpl extends ElementBase implements PsiFileEx, PsiF public void onContentReload() { ApplicationManager.getApplication().assertWriteAccessAllowed(); - DebugUtil.performPsiModification("onContentReload", () -> { + clearContent("onContentReload"); + } + + final void clearContent(String reason) { + DebugUtil.performPsiModification(reason, () -> { synchronized (myPsiLock) { FileElement treeElement = derefTreeElement(); if (treeElement != null) { treeElement.detachFromFile(); DebugUtil.onInvalidated(treeElement); } - updateTrees(myTrees.clearStub("onContentReload")); + updateTrees(myTrees.clearStub(reason)); setTreeElementPointer(null); } });