odoo-ide / pycharm-odoo

PyCharm plugin for Odoo
https://plugins.jetbrains.com/plugin/13499-odoo
Other
41 stars 5 forks source link

java.lang.IndexOutOfBoundsException in PySubscriptionExpressionImpl.getType() #443

Closed jcfernandez-890825 closed 6 months ago

jcfernandez-890825 commented 6 months ago
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)
trinhanhngoc commented 6 months ago

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 https://github.com/JetBrains/intellij-community/commit/4a7ad7fbcf02af68d69643523130eb0dfd060cfe. We need to wait for a new PyCharm update.

trinhanhngoc commented 6 months ago

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