odoo-ide/pycharm-odoo

java.lang.IndexOutOfBoundsException in PySubscriptionExpressionImpl.getType()

Closed this issue · 2 comments

java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 2
	at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
	at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
	at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
	at java.base/java.util.Objects.checkIndex(Objects.java:361)
	at java.base/java.util.ArrayList.get(ArrayList.java:427)
	at java.base/java.util.Collections$UnmodifiableList.get(Collections.java:1347)
	at com.intellij.util.containers.ContainerUtil.getOrElse(ContainerUtil.java:522)
	at com.jetbrains.python.psi.types.PyTupleType.getElementType(PyTupleType.java:79)
	at java.base/java.util.Optional.map(Optional.java:260)
	at com.jetbrains.python.psi.impl.PySubscriptionExpressionImpl.getType(PySubscriptionExpressionImpl.java:81)
	at dev.ngocta.pycharm.odoo.python.psi.OdooPySubscriptionExpression.getType(OdooPySubscriptionExpression.java:77)
	at com.jetbrains.python.psi.types.TypeEvalContext.lambda$getType$0(TypeEvalContext.java:181)
	at com.intellij.openapi.util.RecursionManager$1.computePreventingRecursion(RecursionManager.java:111)
	at com.intellij.openapi.util.RecursionGuard.doPreventingRecursion(RecursionGuard.java:27)
	at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:66)
	at com.jetbrains.python.psi.types.TypeEvalContext.getType(TypeEvalContext.java:170)
	at dev.ngocta.pycharm.odoo.python.psi.OdooPySliceExpression.getType(OdooPySliceExpression.java:23)
	at com.jetbrains.python.psi.types.TypeEvalContext.lambda$getType$0(TypeEvalContext.java:181)
	at com.intellij.openapi.util.RecursionManager$1.computePreventingRecursion(RecursionManager.java:111)
	at com.intellij.openapi.util.RecursionGuard.doPreventingRecursion(RecursionGuard.java:27)
	at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:66)
	at com.jetbrains.python.psi.types.TypeEvalContext.getType(TypeEvalContext.java:170)
	at dev.ngocta.pycharm.odoo.python.psi.OdooPyQualifiedReference.resolveInner(OdooPyQualifiedReference.java:87)
	at dev.ngocta.pycharm.odoo.python.psi.OdooPyQualifiedReference.lambda$multiResolve$0(OdooPyQualifiedReference.java:64)
	at com.intellij.openapi.util.RecursionManager$1.computePreventingRecursion(RecursionManager.java:111)
	at com.intellij.openapi.util.RecursionGuard.doPreventingRecursion(RecursionGuard.java:27)
	at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:66)
	at dev.ngocta.pycharm.odoo.python.psi.OdooPyQualifiedReference.lambda$multiResolve$1(OdooPyQualifiedReference.java:64)
	at dev.ngocta.pycharm.odoo.OdooUtils.getParameterizedCachedValue(OdooUtils.java:355)
	at dev.ngocta.pycharm.odoo.OdooUtils.getParameterizedCachedValue(OdooUtils.java:366)
	at dev.ngocta.pycharm.odoo.python.psi.OdooPyQualifiedReference.multiResolve(OdooPyQualifiedReference.java:58)
	at com.jetbrains.python.psi.PyUtil.multiResolveTopPriority(PyUtil.java:510)
	at com.jetbrains.python.codeInsight.typing.PyTypingTypeProvider.tryResolvingWithAliases(PyTypingTypeProvider.java:1764)
	at com.jetbrains.python.codeInsight.typing.PyTypingTypeProvider.tryResolving(PyTypingTypeProvider.java:1753)
	at com.jetbrains.python.codeInsight.typing.PyTypingTypeProvider.resolveToQualifiedNames(PyTypingTypeProvider.java:1850)
	at com.jetbrains.python.codeInsight.typing.PyTypedDictTypeProvider$Companion.isTypedDict(PyTypedDictTypeProvider.kt:48)
	at com.jetbrains.python.codeInsight.typing.PyTypedDictTypeProvider$Companion.getTypedDictTypeForCallee(PyTypedDictTypeProvider.kt:117)
	at com.jetbrains.python.codeInsight.typing.PyTypedDictTypeProvider$Companion.access$getTypedDictTypeForCallee(PyTypedDictTypeProvider.kt:39)
	at com.jetbrains.python.codeInsight.typing.PyTypedDictTypeProvider.getReferenceExpressionType(PyTypedDictTypeProvider.kt:28)
	at com.jetbrains.python.psi.impl.PyReferenceExpressionImpl.getTypeFromProviders(PyReferenceExpressionImpl.java:379)
	at com.jetbrains.python.psi.impl.PyReferenceExpressionImpl.getType(PyReferenceExpressionImpl.java:215)
	at dev.ngocta.pycharm.odoo.python.psi.OdooPyReferenceExpression.getType(OdooPyReferenceExpression.java:43)
	at com.jetbrains.python.psi.types.TypeEvalContext.lambda$getType$0(TypeEvalContext.java:181)
	at com.intellij.openapi.util.RecursionManager$1.computePreventingRecursion(RecursionManager.java:111)
	at com.intellij.openapi.util.RecursionGuard.doPreventingRecursion(RecursionGuard.java:27)
	at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:66)
	at com.jetbrains.python.psi.types.TypeEvalContext.getType(TypeEvalContext.java:170)
	at com.jetbrains.python.psi.impl.PyCallExpressionHelper.getExplicitResolveResults(PyCallExpressionHelper.java:220)
	at com.jetbrains.python.psi.impl.PyCallExpressionHelper.lambda$multiResolveCallee$1(PyCallExpressionHelper.java:192)
	at com.jetbrains.python.psi.PyUtil.getNullableParameterizedCachedValue(PyUtil.java:669)
	at com.jetbrains.python.psi.PyUtil.getParameterizedCachedValue(PyUtil.java:647)
	at com.jetbrains.python.psi.impl.PyCallExpressionHelper.multiResolveCallee(PyCallExpressionHelper.java:188)
	at com.jetbrains.python.psi.impl.PyCallExpressionImpl.multiResolveCallee(PyCallExpressionImpl.java:47)
	at com.jetbrains.python.psi.impl.PyCallExpressionHelper.multiResolveCalleeFunction(PyCallExpressionHelper.java:834)
	at com.jetbrains.python.psi.impl.PyCallExpressionHelper.mapArguments(PyCallExpressionHelper.java:827)
	at com.jetbrains.python.psi.impl.PyCallExpressionImpl.multiMapArguments(PyCallExpressionImpl.java:53)
	at com.jetbrains.python.inlayHints.PythonInlayParameterHintsProvider.getInlayInfoForArgumentList(PythonInlayParameterHintsProvider.kt:44)
	at com.jetbrains.python.inlayHints.PythonInlayParameterHintsProvider.getParameterHints(PythonInlayParameterHintsProvider.kt:145)
	at com.intellij.codeInsight.hints.ParameterHintsPass.process(ParameterHintsPass.java:113)
	at com.intellij.codeInsight.hints.ParameterHintsPass.lambda$doCollectInformation$2(ParameterHintsPass.java:105)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at com.intellij.codeInsight.hints.ParameterHintsPass.doCollectInformation(ParameterHintsPass.java:105)
	at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:55)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$1(PassExecutorService.java:406)
	at com.intellij.platform.diagnostic.telemetry.helpers.TraceKt.runWithSpanIgnoreThrows(trace.kt:76)
	at com.intellij.platform.diagnostic.telemetry.helpers.TraceUtil.runWithSpanThrows(TraceUtil.java:34)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:401)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1075)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$3(PassExecutorService.java:392)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:610)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:685)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:641)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:609)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:78)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:391)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$run$0(PassExecutorService.java:367)
	at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:200)
	at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:184)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:365)
	at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:187)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)

Hello @jcfernandez-890825 ,

The code sample to reproduce the exception:

a = (1, 2)[-1]

This is a PyCharm bug (https://youtrack.jetbrains.com/issues?q=project:%20PyCharm&preview=PY-64474). They fixed it in the commit JetBrains/intellij-community@4a7ad7f. We need to wait for a new PyCharm update.

Hi @jcfernandez-890825 , PyCharm 2023.3.2 has been released with the fix for this bug.