diff --git a/python/python-psi-impl/src/com/jetbrains/python/packaging/PyRequirementParser.java b/python/python-psi-impl/src/com/jetbrains/python/packaging/PyRequirementParser.java index 9b3e9735b989..6ad1ea797b9d 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/packaging/PyRequirementParser.java +++ b/python/python-psi-impl/src/com/jetbrains/python/packaging/PyRequirementParser.java @@ -8,6 +8,7 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.concurrency.annotations.RequiresReadLock; import com.jetbrains.python.packaging.requirement.PyRequirementRelation; import com.jetbrains.python.packaging.requirement.PyRequirementVersionSpec; import one.util.streamex.StreamEx; @@ -194,6 +195,8 @@ public final class PyRequirementParser { return fromText(text, null, new HashSet<>()); } + @RequiresReadLock(generateAssertion = false) + public static @NotNull List fromFile(@NotNull VirtualFile file) { return fromText(loadText(file), file, new HashSet<>()); } @@ -221,6 +224,8 @@ public final class PyRequirementParser { return null; } + @RequiresReadLock(generateAssertion = false) + private static @Nullable PyRequirement parseVcsProjectUrl(@NotNull String line) { final Matcher vcsMatcher = VCS_PROJECT_URL.matcher(line); if (vcsMatcher.matches()) { @@ -259,8 +264,12 @@ public final class PyRequirementParser { return null; } + @RequiresReadLock(generateAssertion = false) + @ApiStatus.Internal - public static @NotNull List fromText(@NotNull String text, @Nullable VirtualFile containingFile, @NotNull Set visitedFiles) { + public static @NotNull List fromText(@NotNull String text, + @Nullable VirtualFile containingFile, + @NotNull Set visitedFiles) { if (containingFile != null) { visitedFiles.add(containingFile); } @@ -273,6 +282,7 @@ public final class PyRequirementParser { .toList(); } + @RequiresReadLock(generateAssertion = false) private static @NotNull String loadText(@NotNull VirtualFile file) { final Document document = FileDocumentManager.getInstance().getDocument(file); @@ -312,6 +322,8 @@ public final class PyRequirementParser { return Pair.create(normalizeVcsOrArchiveNameParts(nameParts), normalizeVcsOrArchiveVersionParts(versionParts)); } + @RequiresReadLock(generateAssertion = false) + private static @NotNull PyRequirement createVcsOrArchiveRequirement(@NotNull Pair nameAndVersion, @NotNull List installOptions, @Nullable String extras) { @@ -399,6 +411,8 @@ public final class PyRequirementParser { return result; } + @RequiresReadLock(generateAssertion = false) + private static @NotNull List parseLine(@NotNull String line, @Nullable VirtualFile containingFile, @NotNull Set visitedFiles) { @@ -533,6 +547,8 @@ public final class PyRequirementParser { return null; } + @RequiresReadLock(generateAssertion = false) + private static @NotNull List parseRecursiveLine(@NotNull String line, @Nullable VirtualFile containingFile, @NotNull Set visitedFiles, diff --git a/python/src/com/jetbrains/python/packaging/PyPackageManagerImplBase.java b/python/src/com/jetbrains/python/packaging/PyPackageManagerImplBase.java index b6fbed2c063a..e02f628e4374 100644 --- a/python/src/com/jetbrains/python/packaging/PyPackageManagerImplBase.java +++ b/python/src/com/jetbrains/python/packaging/PyPackageManagerImplBase.java @@ -11,6 +11,7 @@ import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.concurrency.annotations.RequiresReadLock; import com.intellij.util.net.HttpConfigurable; import com.jetbrains.python.PyPsiPackageUtil; import com.jetbrains.python.PySdkBundle; @@ -167,6 +168,7 @@ public abstract class PyPackageManagerImplBase extends PyPackageManager { return dependents; } + @RequiresReadLock(generateAssertion = false) protected static @NotNull LanguageLevel getOrRequestLanguageLevelForSdk(@NotNull Sdk sdk) throws ExecutionException { if (sdk instanceof PyDetectedSdk) { final PythonSdkFlavor flavor = PythonSdkFlavor.getFlavor(sdk); diff --git a/python/src/com/jetbrains/python/packaging/PyPackageUtil.java b/python/src/com/jetbrains/python/packaging/PyPackageUtil.java index 5b8eb239ce09..5d16f298fdeb 100644 --- a/python/src/com/jetbrains/python/packaging/PyPackageUtil.java +++ b/python/src/com/jetbrains/python/packaging/PyPackageUtil.java @@ -33,6 +33,7 @@ import com.intellij.psi.PsiManager; import com.intellij.psi.ResolveResult; import com.intellij.serviceContainer.AlreadyDisposedException; import com.intellij.util.ObjectUtils; +import com.intellij.util.concurrency.annotations.RequiresReadLock; import com.intellij.util.containers.ContainerUtil; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PyNames; @@ -419,6 +420,7 @@ public final class PyPackageUtil { PyPsiPackageUtil.findPackage(packages, PIP) != null; } + @RequiresReadLock(generateAssertion = false) public static @Nullable List getRequirementsFromTxt(@NotNull Module module) { final VirtualFile requirementsTxt = findRequirementsTxt(module); if (requirementsTxt != null) {