mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
cleanup [python]: Minor code deduplication (PyVersionSpecificBase.kt)
GitOrigin-RevId: 42e8cc2865d1db7c02c6f9e3c7b5da0ebdef9e6d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
e2dbec90c6
commit
1e07fdb86a
@@ -212,7 +212,8 @@ public class PyEvaluator {
|
||||
return null;
|
||||
}
|
||||
|
||||
private static int @Nullable [] evaluateAsVersion(@Nullable PyExpression expression) {
|
||||
@ApiStatus.Internal
|
||||
public static int @Nullable [] evaluateAsVersion(@Nullable PyExpression expression) {
|
||||
if (!(PyPsiUtils.flattenParens(expression) instanceof PyTupleExpression tupleExpression)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
+6
-39
@@ -6,12 +6,11 @@ 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.QualifiedName
|
||||
import com.jetbrains.python.PyTokenTypes
|
||||
import com.jetbrains.python.psi.*
|
||||
import com.jetbrains.python.psi.impl.PyEvaluator
|
||||
import com.jetbrains.python.psi.impl.PyPsiUtils
|
||||
import com.jetbrains.python.psi.stubs.PyVersionSpecificStub
|
||||
import java.math.BigInteger
|
||||
|
||||
internal abstract class PyVersionSpecificStubBase<T : PsiElement>(
|
||||
parent: StubElement<*>?,
|
||||
@@ -89,11 +88,12 @@ private fun convertToVersionRanges(expression: PyExpression): ImmutableRangeSet<
|
||||
}
|
||||
|
||||
PyTokenTypes.LT, PyTokenTypes.GT, PyTokenTypes.LE, PyTokenTypes.GE -> {
|
||||
val refExpr = PyPsiUtils.flattenParens(binaryExpr.leftExpression) as? PyReferenceExpression ?: return null
|
||||
if (SYS_VERSION_INFO_QUALIFIED_NAME != refExpr.asQualifiedName()) return null
|
||||
if (!PyEvaluator.isSysVersionInfoExpression(binaryExpr.leftExpression)) return null
|
||||
|
||||
val tuple = PyPsiUtils.flattenParens(binaryExpr.rightExpression) as? PyTupleExpression ?: return null
|
||||
val version = evaluateVersion(tuple) ?: return null
|
||||
val versionArray = PyEvaluator.evaluateAsVersion(binaryExpr.rightExpression) ?: return null
|
||||
val major = versionArray.firstOrNull() ?: return null
|
||||
val minor = versionArray.getOrElse(1) { 0 }
|
||||
val version = Version(major, minor, 0)
|
||||
|
||||
val range = when (operator) {
|
||||
PyTokenTypes.LT -> Range.lessThan(version)
|
||||
@@ -109,39 +109,6 @@ private fun convertToVersionRanges(expression: PyExpression): ImmutableRangeSet<
|
||||
}
|
||||
}
|
||||
|
||||
private val SYS_VERSION_INFO_QUALIFIED_NAME = QualifiedName.fromDottedString("sys.version_info")
|
||||
|
||||
private fun evaluateVersion(versionTuple: PyTupleExpression): Version? {
|
||||
val elements = versionTuple.elements
|
||||
if (elements.size != 1 && elements.size != 2) {
|
||||
return null
|
||||
}
|
||||
|
||||
val major = evaluateNumber(elements[0])
|
||||
if (major == null) {
|
||||
return null
|
||||
}
|
||||
|
||||
if (elements.size == 1) {
|
||||
return Version(major, 0, 0)
|
||||
}
|
||||
|
||||
val minor = evaluateNumber(elements[1])
|
||||
if (minor == null) {
|
||||
return null
|
||||
}
|
||||
|
||||
return Version(major, minor, 0)
|
||||
}
|
||||
|
||||
private fun evaluateNumber(expression: PyExpression?): Int? {
|
||||
if (expression !is PyNumericLiteralExpression) return null
|
||||
if (!expression.isIntegerLiteral) return null
|
||||
val value = expression.bigIntegerValue
|
||||
val intValue = value.toInt()
|
||||
return if (BigInteger.valueOf(intValue.toLong()) == value) intValue else null
|
||||
}
|
||||
|
||||
internal fun serializeVersions(versions: RangeSet<Version>, outputStream: StubOutputStream) {
|
||||
val ranges = versions.asRanges()
|
||||
outputStream.writeVarInt(ranges.size)
|
||||
|
||||
Reference in New Issue
Block a user