Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Non-idempotent computation error in pycharm 2021.2 with plugin version 0.3.4 #351

Closed
ilyachch opened this issue Aug 19, 2021 · 3 comments
Closed
Labels
bug Something isn't working

Comments

@ilyachch
Copy link

ilyachch commented Aug 19, 2021

java.lang.Throwable: Non-idempotent computation: it returns different results when invoked multiple times or on different threads:
  MyInstanceElement{myClass=PyClass: Usermember={resolve=PsiParameterizedCachedValue{com.jetbrains.python.codeInsight.PyCustomMember$$Lambda$5746/0x0000000102385440@6c2279fa}}node=Element(Py:CLASS_DECLARATION), myContext=PyClass: HttpRequest} != MyInstanceElement{myClass=PyClass: Usermember={resolve=PsiParameterizedCachedValue{com.jetbrains.python.codeInsight.PyCustomMember$$Lambda$5746/0x0000000102385440@2dcf7073}}node=Element(Py:CLASS_DECLARATION), myContext=PyClass: HttpRequest}
  which is element of MyInstanceElement{myClass=PyClass: Usermember={resolve=PsiParameterizedCachedValue{com.jetbrains.python.codeInsight.PyCustomMember$$Lambda$5746/0x0000000102385440@6c2279fa}}node=Element(Py:CLASS_DECLARATION), myContext=PyClass: HttpRequest}@0 and MyInstanceElement{myClass=PyClass: Usermember={resolve=PsiParameterizedCachedValue{com.jetbrains.python.codeInsight.PyCustomMember$$Lambda$5746/0x0000000102385440@2dcf7073}}node=Element(Py:CLASS_DECLARATION), myContext=PyClass: HttpRequest}@0
  which is 0th element of [MyInstanceElement{myClass=PyClass: Usermember={resolve=PsiParameterizedCachedValue{com.jetbrains.python.codeInsight.PyCustomMember$$Lambda$5746/0x0000000102385440@6c2279fa}}node=Element(Py:CLASS_DECLARATION), myContext=PyClass: HttpRequest}@0] and [MyInstanceElement{myClass=PyClass: Usermember={resolve=PsiParameterizedCachedValue{com.jetbrains.python.codeInsight.PyCustomMember$$Lambda$5746/0x0000000102385440@2dcf7073}}node=Element(Py:CLASS_DECLARATION), myContext=PyClass: HttpRequest}@0]

Recomputation gives [Lcom.intellij.psi.ResolveResult;@342d0519 (class [Lcom.intellij.psi.ResolveResult;) which is different from both values
Recomputation log:
  Resolving PyQualifiedReference(PyReferenceExpression: user,com.jetbrains.python.psi.resolve.PyResolveContext@3c1) of class com.jetbrains.python.psi.impl.references.PyQualifiedReference
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:182)
at com.intellij.util.IdempotenceChecker.reportFailure(IdempotenceChecker.java:89)
at com.intellij.util.IdempotenceChecker.checkEquivalence(IdempotenceChecker.java:76)
at com.intellij.psi.impl.source.resolve.ResolveCache.cache(ResolveCache.java:322)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolve(ResolveCache.java:249)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolve(ResolveCache.java:154)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:169)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:162)
at com.jetbrains.python.psi.impl.references.PyReferenceImpl.multiResolve(PyReferenceImpl.java:93)
at com.jetbrains.python.psi.PyUtil.multiResolveTopPriority(PyUtil.java:515)
at com.koxudaxi.pydantic.PydanticKt.getResolvedPsiElements(Pydantic.kt:255)
at com.koxudaxi.pydantic.PydanticDataclassTypeProvider.getPydanticDataclass(PydanticDataclassTypeProvider.kt:63)
at com.koxudaxi.pydantic.PydanticDataclassTypeProvider.getReferenceExpressionType(PydanticDataclassTypeProvider.kt:27)
at com.jetbrains.python.psi.impl.PyReferenceExpressionImpl.getTypeFromProviders(PyReferenceExpressionImpl.java:383)
at com.jetbrains.python.psi.impl.PyReferenceExpressionImpl.getType(PyReferenceExpressionImpl.java:217)
at com.jetbrains.python.psi.types.TypeEvalContext.lambda$getType$0(TypeEvalContext.java:177)
at com.intellij.openapi.util.RecursionManager$1.computePreventingRecursion(RecursionManager.java:111)
at com.intellij.openapi.util.RecursionGuard.doPreventingRecursion(RecursionGuard.java:43)
at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
at com.jetbrains.python.psi.types.TypeEvalContext.getType(TypeEvalContext.java:166)
at com.jetbrains.python.psi.impl.references.PyQualifiedReference.resolveInner(PyQualifiedReference.java:79)
at com.jetbrains.python.psi.impl.references.PyReferenceImpl.multiResolveInner(PyReferenceImpl.java:106)
at com.jetbrains.python.psi.impl.references.PyReferenceImpl$CachingResolver.resolve(PyReferenceImpl.java:775)
at com.jetbrains.python.psi.impl.references.PyReferenceImpl$CachingResolver.resolve(PyReferenceImpl.java:770)
at com.intellij.psi.impl.source.resolve.ResolveCache.lambda$resolve$1(ResolveCache.java:154)
at com.intellij.openapi.util.Computable.get(Computable.java:18)
at com.intellij.psi.impl.source.resolve.ResolveCache.lambda$loggingResolver$4(ResolveCache.java:260)
at com.intellij.openapi.util.RecursionManager$1.computePreventingRecursion(RecursionManager.java:111)
at com.intellij.openapi.util.RecursionGuard.doPreventingRecursion(RecursionGuard.java:43)
at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolve(ResolveCache.java:237)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolve(ResolveCache.java:154)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:169)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:162)
at com.jetbrains.python.psi.impl.references.PyReferenceImpl.multiResolve(PyReferenceImpl.java:93)
at com.jetbrains.python.psi.impl.PyReferenceExpressionImpl.multiFollowAssignmentsChain(PyReferenceExpressionImpl.java:153)
at com.jetbrains.python.psi.PyReferenceExpression.multiFollowAssignmentsChain(PyReferenceExpression.java:54)
at com.jetbrains.python.psi.impl.PyReferenceExpressionImpl.followAssignmentsChain(PyReferenceExpressionImpl.java:123)
at com.jetbrains.django.util.PythonDataflowUtil.isCallWithArgument(PythonDataflowUtil.java:203)
at com.jetbrains.django.util.PythonDataflowUtil$CallVisitor.visitPyCallExpression(PythonDataflowUtil.java:182)
at com.jetbrains.python.psi.impl.PyCallExpressionImpl.acceptPyVisitor(PyCallExpressionImpl.java:27)
at com.jetbrains.python.psi.impl.PyBaseElementImpl.accept(PyBaseElementImpl.java:69)
at com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
at com.jetbrains.python.psi.PyRecursiveElementVisitor.visitElement(PyRecursiveElementVisitor.java:12)
at com.jetbrains.python.psi.PyElementVisitor.visitPyElement(PyElementVisitor.java:26)
at com.jetbrains.python.psi.PyElementVisitor.visitPyStatement(PyElementVisitor.java:170)
at com.jetbrains.python.psi.PyElementVisitor.visitPyExpressionStatement(PyElementVisitor.java:166)
at com.jetbrains.python.psi.impl.PyExpressionStatementImpl.acceptPyVisitor(PyExpressionStatementImpl.java:25)
at com.jetbrains.python.psi.impl.PyBaseElementImpl.accept(PyBaseElementImpl.java:69)
at com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
at com.jetbrains.python.psi.PyRecursiveElementVisitor.visitElement(PyRecursiveElementVisitor.java:12)
at com.jetbrains.python.psi.PyElementVisitor.visitPyElement(PyElementVisitor.java:26)
at com.jetbrains.python.psi.PyElementVisitor.visitPyStatementList(PyElementVisitor.java:198)
at com.jetbrains.python.psi.impl.PyStatementListImpl.acceptPyVisitor(PyStatementListImpl.java:23)
at com.jetbrains.python.psi.impl.PyBaseElementImpl.accept(PyBaseElementImpl.java:69)
at com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
at com.jetbrains.python.psi.PyRecursiveElementVisitor.visitElement(PyRecursiveElementVisitor.java:12)
at com.jetbrains.python.psi.PyElementVisitor.visitPyElement(PyElementVisitor.java:26)
at com.jetbrains.python.psi.PyElementVisitor.visitPyConditionalStatementPart(PyElementVisitor.java:270)
at com.jetbrains.python.psi.impl.PyConditionalStatementPartImpl.acceptPyVisitor(PyConditionalStatementPartImpl.java:26)
at com.jetbrains.python.psi.impl.PyBaseElementImpl.accept(PyBaseElementImpl.java:69)
at com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
at com.jetbrains.python.psi.PyRecursiveElementVisitor.visitElement(PyRecursiveElementVisitor.java:12)
at com.jetbrains.python.psi.PyElementVisitor.visitPyElement(PyElementVisitor.java:26)
at com.jetbrains.python.psi.PyElementVisitor.visitPyStatement(PyElementVisitor.java:170)
at com.jetbrains.python.psi.PyElementVisitor.visitPyIfStatement(PyElementVisitor.java:150)
at com.jetbrains.python.psi.impl.PyIfStatementImpl.acceptPyVisitor(PyIfStatementImpl.java:20)
at com.jetbrains.python.psi.impl.PyBaseElementImpl.accept(PyBaseElementImpl.java:69)
at com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
at com.jetbrains.python.psi.PyRecursiveElementVisitor.visitElement(PyRecursiveElementVisitor.java:12)
at com.jetbrains.python.psi.PyElementVisitor.visitPyElement(PyElementVisitor.java:26)
at com.jetbrains.python.psi.PyElementVisitor.visitPyStatementList(PyElementVisitor.java:198)
at com.jetbrains.python.psi.impl.PyStatementListImpl.acceptPyVisitor(PyStatementListImpl.java:23)
at com.jetbrains.python.psi.impl.PyBaseElementImpl.accept(PyBaseElementImpl.java:69)
at com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
at com.jetbrains.python.psi.PyRecursiveElementVisitor.visitElement(PyRecursiveElementVisitor.java:12)
at com.jetbrains.python.psi.PyElementVisitor.visitPyElement(PyElementVisitor.java:26)
at com.jetbrains.python.psi.PyElementVisitor.visitPyFunction(PyElementVisitor.java:206)
at com.jetbrains.python.psi.impl.PyFunctionImpl.acceptPyVisitor(PyFunctionImpl.java:553)
at com.jetbrains.python.psi.impl.PyBaseElementImpl.accept(PyBaseElementImpl.java:69)
at com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
at com.jetbrains.python.psi.PyRecursiveElementVisitor.visitElement(PyRecursiveElementVisitor.java:12)
at com.jetbrains.python.psi.PyElementVisitor.visitPyElement(PyElementVisitor.java:26)
at com.jetbrains.python.psi.PyElementVisitor.visitPyStatementList(PyElementVisitor.java:198)
at com.jetbrains.python.psi.impl.PyStatementListImpl.acceptPyVisitor(PyStatementListImpl.java:23)
at com.jetbrains.python.psi.impl.PyBaseElementImpl.accept(PyBaseElementImpl.java:69)
at com.jetbrains.django.util.PythonDataflowUtil.getCalls(PythonDataflowUtil.java:158)
at com.jetbrains.django.model.DjangoTemplateManager$TemplateReferenceExpectedChecker.fun(DjangoTemplateManager.java:540)
at com.jetbrains.django.model.DjangoTemplateManager$TemplateReferenceExpectedChecker.fun(DjangoTemplateManager.java:523)
at com.intellij.psi.util.PsiCacheKey.getValue(PsiCacheKey.java:29)
at com.jetbrains.django.model.DjangoTemplateManager.isTemplateReferenceExpected(DjangoTemplateManager.java:362)
at com.jetbrains.django.ref.DjangoTemplateReferenceProvider.getReferencesByElement(DjangoTemplateReferenceProvider.java:23)
at com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistryImpl.getReferences(ReferenceProvidersRegistryImpl.java:199)
at com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistryImpl.mapNotEmptyReferencesFromProviders(ReferenceProvidersRegistryImpl.java:162)
at com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistryImpl.doGetReferencesFromProviders(ReferenceProvidersRegistryImpl.java:141)
at com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry.lambda$getReferencesFromProviders$0(ReferenceProvidersRegistry.java:39)
at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:158)
at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:39)
at com.intellij.util.CachedValueBase.lambda$getValueWithLock$3(CachedValueBase.java:227)
at com.intellij.util.CachedValueBase.computeData(CachedValueBase.java:42)
at com.intellij.util.CachedValueBase.lambda$getValueWithLock$4(CachedValueBase.java:227)
at com.intellij.openapi.util.RecursionManager$1.computePreventingRecursion(RecursionManager.java:111)
at com.intellij.openapi.util.RecursionGuard.doPreventingRecursion(RecursionGuard.java:43)
at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:228)
at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:28)
at com.intellij.util.CachedValuesManagerImpl.getCachedValue(CachedValuesManagerImpl.java:72)
at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:155)
at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:121)
at com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry.getReferencesFromProviders(ReferenceProvidersRegistry.java:38)
at com.jetbrains.python.psi.impl.PyStringLiteralExpressionImpl.getReferences(PyStringLiteralExpressionImpl.java:194)
at com.intellij.codeInsight.highlighting.HyperlinkAnnotator.annotate(HyperlinkAnnotator.java:45)
at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.runAnnotators(DefaultHighlightVisitor.java:134)
at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.visit(DefaultHighlightVisitor.java:114)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.runVisitors(GeneralHighlightingPass.java:335)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.lambda$collectHighlights$5(GeneralHighlightingPass.java:268)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:294)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.lambda$analyzeByVisitors$6(GeneralHighlightingPass.java:297)
at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.analyze(DefaultHighlightVisitor.java:94)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:297)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.collectHighlights(GeneralHighlightingPass.java:265)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.collectInformationWithProgress(GeneralHighlightingPass.java:211)
at com.intellij.codeInsight.daemon.impl.ProgressableTextEditorHighlightingPass.doCollectInformation(ProgressableTextEditorHighlightingPass.java:84)
at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:56)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$1(PassExecutorService.java:399)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1078)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:392)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:705)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:647)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:63)
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:174)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:183)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:365)
at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:188)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

Environments (please complete the following information):

  • IDE: PyCharm Pro 2021.2
  • OS: Ubuntu 20.04.2
  • Pydantic Version 1.8.1
  • Plugin version 0.3.4
@ilyachch
Copy link
Author

Screenshot from 2021-08-19 16-49-57

@koxudaxi
Copy link
Owner

@ilyachch
Thank you for creating this issue.
I'll investigate the source of the problem.

@koxudaxi koxudaxi added the bug Something isn't working label Aug 22, 2021
@koxudaxi
Copy link
Owner

koxudaxi commented Mar 2, 2023

@ilyachch
I'm sorry for my too-late fix.
I have released a new version v0.4.0 in the market
The version dropped unnecessary resolving for an object reference.
It means the update reduces CPU load and fixes unexpected errors.

I closed the PR because the root cause method was removed from the plugin's source code.
Thank you.

@koxudaxi koxudaxi closed this as completed Mar 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants