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 extends PyType> 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);