mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 23:31:05 +07:00
PY-82905 PyCharm extremely slowing down (almost blocked) with message: 'IDE running on low memory'
GitOrigin-RevId: 5e6e5ba64a12d4c1cc826f0b783877494747433f
This commit is contained in:
committed by
intellij-monorepo-bot
parent
742bef79da
commit
4dcf05fc6d
@@ -7,6 +7,9 @@ import com.intellij.openapi.util.Version;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.stubs.*;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.psi.util.PsiModificationTracker;
|
||||
import com.intellij.psi.util.QualifiedName;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.jetbrains.python.PyStubElementTypes;
|
||||
@@ -83,8 +86,11 @@ public class PyClassElementType extends PyStubElementType<PyClassStub, PyClass>
|
||||
if (classStub == null) {
|
||||
return List.of(pyClass.getSuperClassExpressions());
|
||||
}
|
||||
return ContainerUtil.mapNotNull(classStub.getSuperClassesText(),
|
||||
x -> PyUtil.createExpressionFromFragment(x, pyClass.getContainingFile()));
|
||||
return CachedValuesManager.getCachedValue(pyClass, () -> CachedValueProvider.Result.create(
|
||||
(ContainerUtil.mapNotNull(classStub.getSuperClassesText(),
|
||||
x -> PyUtil.createExpressionFromFragment(x, pyClass.getContainingFile()))),
|
||||
PsiModificationTracker.MODIFICATION_COUNT)
|
||||
);
|
||||
}
|
||||
|
||||
private static @Nullable QualifiedName resolveOriginalSuperClassQName(@NotNull PyExpression superClassExpression) {
|
||||
|
||||
@@ -20,8 +20,7 @@ import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.stubs.StubInputStream;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.QualifiedName;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.jetbrains.python.PyElementTypes;
|
||||
import com.jetbrains.python.PyTokenTypes;
|
||||
@@ -199,25 +198,27 @@ public final class PyTypingAliasStubType extends CustomTargetExpressionStubType<
|
||||
* @see PyTypingAliasStub
|
||||
*/
|
||||
public static @Nullable PyExpression getAssignedValueStubLike(@NotNull PyTargetExpression target) {
|
||||
final PyTargetExpressionStub stub = target.getStub();
|
||||
PyExpression result = null;
|
||||
if (stub != null) {
|
||||
final PyTypingAliasStub aliasStub = stub.getCustomStub(PyTypingAliasStub.class);
|
||||
String aliasText = null;
|
||||
if (aliasStub != null) {
|
||||
aliasText = aliasStub.getText();
|
||||
return CachedValuesManager.getCachedValue(target, () -> {
|
||||
final PyTargetExpressionStub stub = target.getStub();
|
||||
PyExpression result = null;
|
||||
if (stub != null) {
|
||||
final PyTypingAliasStub aliasStub = stub.getCustomStub(PyTypingAliasStub.class);
|
||||
String aliasText = null;
|
||||
if (aliasStub != null) {
|
||||
aliasText = aliasStub.getText();
|
||||
}
|
||||
else if (stub.getInitializerType() == InitializerType.ReferenceExpression) {
|
||||
aliasText = Objects.toString(stub.getInitializer(), null);
|
||||
}
|
||||
if (aliasText != null) {
|
||||
result = PyUtil.createExpressionFromFragment(aliasText, target.getContainingFile());
|
||||
}
|
||||
}
|
||||
else if (stub.getInitializerType() == InitializerType.ReferenceExpression) {
|
||||
aliasText = Objects.toString(stub.getInitializer(), null);
|
||||
else {
|
||||
// Use PSI to get the assigned value but only if the same expression would be saved in stubs
|
||||
result = getAssignedValueIfTypeAliasLike(target, false);
|
||||
}
|
||||
if (aliasText != null) {
|
||||
result = PyUtil.createExpressionFromFragment(aliasText, target.getContainingFile());
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Use PSI to get the assigned value but only if the same expression would be saved in stubs
|
||||
result = getAssignedValueIfTypeAliasLike(target, false);
|
||||
}
|
||||
return result;
|
||||
return CachedValueProvider.Result.create(result, PsiModificationTracker.MODIFICATION_COUNT);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user