diff --git a/python/python-psi-api/src/com/jetbrains/python/psi/impl/PyVersionAwareElementVisitor.kt b/python/python-psi-api/src/com/jetbrains/python/psi/impl/PyVersionAwareElementVisitor.kt index e1dda10b6beb..5d4a015eb2df 100644 --- a/python/python-psi-api/src/com/jetbrains/python/psi/impl/PyVersionAwareElementVisitor.kt +++ b/python/python-psi-api/src/com/jetbrains/python/psi/impl/PyVersionAwareElementVisitor.kt @@ -21,7 +21,7 @@ open class PyVersionAwareElementVisitor(languageLevel: LanguageLevel?) : PyRecur } val ifParts = sequenceOf(node.ifPart) + node.elifParts.asSequence() for (ifPart in ifParts) { - val versions = ifPart.condition?.let(PyVersionCheck::convertToVersionRanges) + val versions = PyVersionCheck.convertToVersionRanges(ifPart) if (versions == null) { super.visitPyIfStatement(node) return diff --git a/python/python-psi-api/src/com/jetbrains/python/psi/impl/PyVersionCheck.kt b/python/python-psi-api/src/com/jetbrains/python/psi/impl/PyVersionCheck.kt index f232f560fdd8..330f0a9a876b 100644 --- a/python/python-psi-api/src/com/jetbrains/python/psi/impl/PyVersionCheck.kt +++ b/python/python-psi-api/src/com/jetbrains/python/psi/impl/PyVersionCheck.kt @@ -6,11 +6,7 @@ import com.google.common.collect.Range import com.intellij.openapi.util.Version import com.intellij.psi.util.QualifiedName import com.jetbrains.python.PyTokenTypes -import com.jetbrains.python.psi.PyBinaryExpression -import com.jetbrains.python.psi.PyExpression -import com.jetbrains.python.psi.PyNumericLiteralExpression -import com.jetbrains.python.psi.PyReferenceExpression -import com.jetbrains.python.psi.PyTupleExpression +import com.jetbrains.python.psi.* import org.jetbrains.annotations.ApiStatus import java.math.BigInteger @@ -22,7 +18,11 @@ object PyVersionCheck { * @see Version and Platform Checks */ @JvmStatic - fun convertToVersionRanges(expression: PyExpression): ImmutableRangeSet? { + fun convertToVersionRanges(ifPart: PyIfPart): ImmutableRangeSet? { + return ifPart.condition?.let(PyVersionCheck::convertToVersionRanges) + } + + private fun convertToVersionRanges(expression: PyExpression): ImmutableRangeSet? { val binaryExpr = PyPsiUtils.flattenParens(expression) as? PyBinaryExpression ?: return null when (val operator = binaryExpr.operator) { PyTokenTypes.AND_KEYWORD, PyTokenTypes.OR_KEYWORD -> { diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/stubs/PyVersionSpecificStubBase.kt b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/stubs/PyVersionSpecificStubBase.kt index 2fb8cd444d28..8057296b3501 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/stubs/PyVersionSpecificStubBase.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/stubs/PyVersionSpecificStubBase.kt @@ -53,7 +53,7 @@ internal fun evaluateVersionsForElement(element: PsiElement): ImmutableRangeSet< private fun evaluateVersionRangeForIfStatementPart(ifStatement: PyIfStatement, ifStatementPart: PsiElement): RangeSet? { assert(ifStatementPart is PyIfPart || ifStatementPart is PyElsePart) val result = if (ifStatementPart is PyIfPart) { - val versionRanges = ifStatementPart.condition?.let(PyVersionCheck::convertToVersionRanges) ?: return null + val versionRanges = PyVersionCheck.convertToVersionRanges(ifStatementPart) ?: return null TreeRangeSet.create(versionRanges) } else { @@ -61,7 +61,7 @@ private fun evaluateVersionRangeForIfStatementPart(ifStatement: PyIfStatement, i } val ifParts = sequenceOf(ifStatement.ifPart) + ifStatement.elifParts.asSequence() for (ifPart in ifParts.takeWhile { it !== ifStatementPart }) { - val versionRanges = ifPart.condition?.let(PyVersionCheck::convertToVersionRanges) ?: return null + val versionRanges = PyVersionCheck.convertToVersionRanges(ifPart) ?: return null result.removeAll(versionRanges) } return result