mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
make getContainingFile robust to concurrent stub-ast switch
This commit is contained in:
@@ -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<T extends StubElement> 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();
|
||||
|
||||
Reference in New Issue
Block a user