From a97c69b578d84bb956c0fc8063eb9a9e2f69559d Mon Sep 17 00:00:00 2001 From: "Ilya.Kazakevich" Date: Fri, 27 May 2016 19:16:30 +0300 Subject: [PATCH] QualifiedNameResolver now requires read action since it has PSI access --- .../psi/resolve/QualifiedNameResolverImpl.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/python/src/com/jetbrains/python/psi/resolve/QualifiedNameResolverImpl.java b/python/src/com/jetbrains/python/psi/resolve/QualifiedNameResolverImpl.java index 3fc366f47654..7f1d773cd634 100644 --- a/python/src/com/jetbrains/python/psi/resolve/QualifiedNameResolverImpl.java +++ b/python/src/com/jetbrains/python/psi/resolve/QualifiedNameResolverImpl.java @@ -20,6 +20,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.intellij.facet.Facet; import com.intellij.facet.FacetManager; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; @@ -88,6 +89,7 @@ public class QualifiedNameResolverImpl implements RootVisitor, QualifiedNameReso @Override public QualifiedNameResolver fromElement(@NotNull PsiElement foothold) { + checkAccess(); myContext.setFromElement(foothold); if (PydevConsoleRunner.isInPydevConsole(foothold) || PyUtil.isInScratchFile(foothold)) { withAllModules(); @@ -101,6 +103,7 @@ public class QualifiedNameResolverImpl implements RootVisitor, QualifiedNameReso @Override public QualifiedNameResolver fromModule(@NotNull Module module) { + checkAccess(); myContext.setFromModule(module); return this; } @@ -190,6 +193,7 @@ public class QualifiedNameResolverImpl implements RootVisitor, QualifiedNameReso } public boolean visitRoot(final VirtualFile root, @Nullable Module module, @Nullable Sdk sdk, boolean isModuleSource) { + checkAccess(); if (!root.isValid()) { return true; } @@ -223,6 +227,7 @@ public class QualifiedNameResolverImpl implements RootVisitor, QualifiedNameReso @Override @NotNull public List resultsAsList() { + checkAccess(); if (!myContext.isValid()) { return Collections.emptyList(); } @@ -348,6 +353,7 @@ public class QualifiedNameResolverImpl implements RootVisitor, QualifiedNameReso @Override @Nullable public PsiElement firstResult() { + checkAccess(); final List results = resultsAsList(); return results.size() > 0 ? results.get(0) : null; } @@ -355,6 +361,7 @@ public class QualifiedNameResolverImpl implements RootVisitor, QualifiedNameReso @Override @NotNull public List resultsOfType(Class clazz) { + checkAccess(); List result = new ArrayList(); for (PsiElement element : resultsAsList()) { if (clazz.isInstance(element)) { @@ -368,6 +375,7 @@ public class QualifiedNameResolverImpl implements RootVisitor, QualifiedNameReso @Override @Nullable public T firstResultOfType(Class clazz) { + checkAccess(); final List list = resultsOfType(clazz); return list.size() > 0 ? list.get(0) : null; } @@ -410,6 +418,7 @@ public class QualifiedNameResolverImpl implements RootVisitor, QualifiedNameReso @Nullable public PsiElement resolveModuleAt(@Nullable PsiDirectory directory) { // prerequisites + checkAccess(); PyPsiUtils.assertValid(directory); if (directory == null || !directory.isValid()) return null; @@ -431,6 +440,7 @@ public class QualifiedNameResolverImpl implements RootVisitor, QualifiedNameReso @Nullable @Override public T resolveTopLevelMember(@NotNull final Class aClass) { + checkAccess(); Preconditions.checkState(getModule() != null, "Module is not set"); final String memberName = myQualifiedName.getLastComponent(); if (memberName == null) { @@ -448,4 +458,8 @@ public class QualifiedNameResolverImpl implements RootVisitor, QualifiedNameReso } return null; } + + private static void checkAccess() { + Preconditions.checkState(ApplicationManager.getApplication().isReadAccessAllowed(), "This method requires read access"); + } }