Skip to content

🐞Navigator4URL OpenFeign RestController-v5.5.1

Choose a tag to compare

@lltopk lltopk released this 03 Apr 16:14

🐞修复了如下异常

com.intellij.psi.PsiInvalidElementAccessException: Element: class com.intellij.psi.impl.source.PsiClassImpl #JAVA 
invalidated at: see attachment
    at com.intellij.psi.impl.source.SubstrateRef$1.getNode(SubstrateRef.java:43)
    at com.intellij.extapi.psi.StubBasedPsiElementBase.getNode(StubBasedPsiElementBase.java:133)
    at com.intellij.psi.impl.source.PsiClassImpl.getNode(PsiClassImpl.java:102)
    at com.intellij.psi.impl.source.PsiClassImpl.getNode(PsiClassImpl.java:36)
    at com.intellij.extapi.psi.StubBasedPsiElementBase.getStubOrPsiChild(StubBasedPsiElementBase.java:36
    at com.intellij.extapi.psi.StubBasedPsiElementBase.getRequiredStubOrPsiChild(StubBasedPsiElementBase.java:375)
    at com.intellij.psi.impl.source.PsiClassImpl.getModifierList(PsiClassImpl.java:170)
    at com.intellij.psi.PsiJvmConversionHelper.hasListAnnotation(PsiJvmConversionHelper.java:57)
    at com.intellij.psi.PsiModifierListOwner.hasAnnotation(PsiModifierListOwner.java:45)
    at com.intellij.psi.PsiJvmModifiersOwner.hasAnnotation(PsiJvmModifiersOwner.java:32)
    at com.lyflexi.feignx.utils.AnnotationParserUtils.isFeignInterface(AnnotationParserUtils.java:101)
    at com.lyflexi.feignx.utils.FeignClassScanUtils.feignsOfPsiClass(FeignClassScanUtils.java:123)
    at com.lyflexi.feignx.utils.FeignClassScanUtils.scanFeignInterfaces(FeignClassScanUtils.java:107)
    at com.lyflexi.feignx.provider.Controller2FeignLineMarkerProvider.collectNavigationMarkers(Controller2FeignLineMarkerProvider.java:43)
...

定位到是由于v5.5.0中上线的类文件的图标替换功能导致 PSI 元素失效,影响了原先正常的主流程解析逻辑

  1. 文件被修改(例如用户编辑代码)。
  2. PSI 元素的访问必须在 读操作(Read Action) 或 事件分发线程(EDT) 中进行。
  3. 如果在后台线程(非 EDT)直接访问 PSI 元素,可能导致元素失效。
  4. 未检查元素有效性等

Navigator4URL OpenFeign RestController-5.5.1.zip