From d41e8927d8f2f0dc949072d41268cb34dcff218e Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 8 Nov 2012 19:57:07 +0100 Subject: [PATCH] make getContainingFile robust to concurrent stub-ast switch --- .../intellij/extapi/psi/StubBasedPsiElementBase.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/platform/core-impl/src/com/intellij/extapi/psi/StubBasedPsiElementBase.java b/platform/core-impl/src/com/intellij/extapi/psi/StubBasedPsiElementBase.java index 504a85010bb8..528180497bc7 100644 --- a/platform/core-impl/src/com/intellij/extapi/psi/StubBasedPsiElementBase.java +++ b/platform/core-impl/src/com/intellij/extapi/psi/StubBasedPsiElementBase.java @@ -30,6 +30,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiInvalidElementAccessException; +import com.intellij.psi.PsiLock; import com.intellij.psi.impl.DebugUtil; import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.impl.source.PsiFileImpl; @@ -137,10 +138,14 @@ public class StubBasedPsiElementBase extends ASTDelegateP stub = stub.getParentStub(); } PsiFile psi = (PsiFile)stub.getPsi(); - if (psi == null) { - throw new PsiInvalidElementAccessException(this, "no psi for file stub " + stub, null); + if (psi != null) { + return psi; + } + synchronized (PsiLock.LOCK) { + if (myStub != null) { + throw new PsiInvalidElementAccessException(this, "no psi for file stub " + stub, null); + } } - return psi; } PsiFile file = super.getContainingFile();