diff --git a/python/src/com/jetbrains/python/psi/PyUtil.java b/python/src/com/jetbrains/python/psi/PyUtil.java index ad1eee4c86ca..9fdc17b2ebb1 100644 --- a/python/src/com/jetbrains/python/psi/PyUtil.java +++ b/python/src/com/jetbrains/python/psi/PyUtil.java @@ -858,6 +858,16 @@ public class PyUtil { return result; } + /** + * Executes code only if
_PYCHARM_VERBOSE_MODE
is set in env (which should be done for debug purposes only) + * @param runnable code to call + */ + public static void verboseOnly(@NotNull final Runnable runnable) { + if (System.getenv().get("_PYCHARM_VERBOSE_MODE") != null) { + runnable.run(); + } + } + public static class KnownDecoratorProviderHolder { public static PyKnownDecoratorProvider[] KNOWN_DECORATOR_PROVIDERS = Extensions.getExtensions(PyKnownDecoratorProvider.EP_NAME); diff --git a/python/src/com/jetbrains/python/psi/impl/PyBaseElementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyBaseElementImpl.java index 4d547c87efc0..e27a3536155c 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyBaseElementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyBaseElementImpl.java @@ -17,7 +17,6 @@ package com.jetbrains.python.psi.impl; import com.intellij.extapi.psi.StubBasedPsiElementBase; import com.intellij.lang.ASTNode; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; @@ -32,6 +31,7 @@ import com.jetbrains.python.PythonLanguage; import com.jetbrains.python.psi.PyElement; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyReferenceOwner; +import com.jetbrains.python.psi.PyUtil; import com.jetbrains.python.psi.resolve.PyResolveContext; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; @@ -71,10 +71,7 @@ public class PyBaseElementImpl extends StubBasedPsiElemen } public void accept(@NotNull PsiElementVisitor visitor) { - if (ApplicationManager.getApplication().isUnitTestMode()) { - // Good check, but too slow for production - PyPsiUtils.assertValid(this); - } + PyUtil.verboseOnly(() -> PyPsiUtils.assertValid(this)); if (visitor instanceof PyElementVisitor) { acceptPyVisitor(((PyElementVisitor)visitor)); } diff --git a/python/src/com/jetbrains/python/psi/impl/PyCallExpressionHelper.java b/python/src/com/jetbrains/python/psi/impl/PyCallExpressionHelper.java index fbdecf9caa1e..607d3288b1c5 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyCallExpressionHelper.java +++ b/python/src/com/jetbrains/python/psi/impl/PyCallExpressionHelper.java @@ -462,9 +462,7 @@ public class PyCallExpressionHelper { final PsiPolyVariantReference reference = ((PyReferenceExpression)callee).getReference(resolveContext); final List members = new ArrayList(); for (PsiElement target : PyUtil.multiResolveTopPriority(reference)) { - if (ApplicationManager.getApplication().isUnitTestMode()) { - PyPsiUtils.assertValid(target); - } + PyUtil.verboseOnly(() ->PyPsiUtils.assertValid(target)); if (target != null) { final Ref typeRef = getCallTargetReturnType(call, target, context); if (typeRef != null) { diff --git a/python/src/com/jetbrains/python/psi/impl/PyEvaluator.java b/python/src/com/jetbrains/python/psi/impl/PyEvaluator.java index fb1c3369068d..050ff1ca78b1 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyEvaluator.java +++ b/python/src/com/jetbrains/python/psi/impl/PyEvaluator.java @@ -59,9 +59,7 @@ public class PyEvaluator { if (expr == null || myVisited.contains(expr)) { return null; } - if (ApplicationManager.getApplication().isUnitTestMode()) { - PyPsiUtils.assertValid(expr); - } + PyUtil.verboseOnly(() ->PyPsiUtils.assertValid(expr)); myVisited.add(expr); if (expr instanceof PyParenthesizedExpression) { return evaluate(((PyParenthesizedExpression)expr).getContainedExpression()); diff --git a/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java b/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java index 1f57a0e24af6..eb9540cd8c97 100644 --- a/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java +++ b/python/src/com/jetbrains/python/psi/resolve/ResolveImportUtil.java @@ -116,9 +116,7 @@ public class ResolveImportUtil { @NotNull public static List multiResolveImportElement(PyImportElement importElement, @NotNull final QualifiedName qName) { - if (ApplicationManager.getApplication().isUnitTestMode()) { - PyPsiUtils.assertValid(importElement); - } + PyUtil.verboseOnly(() ->PyPsiUtils.assertValid(importElement)); final PyStatement importStatement = importElement.getContainingImportStatement(); if (importStatement instanceof PyFromImportStatement) { return resolveNameInFromImport((PyFromImportStatement)importStatement, qName);