From cd39da22c70ed10f1cc74dd631072166a2854ce5 Mon Sep 17 00:00:00 2001 From: Zed Spencer-Milnes Date: Thu, 13 Aug 2020 09:35:28 +0100 Subject: [PATCH] Consider navigable element in equality - seems to fix psi outdated (#860) * Consider navigation element in PSI equality checks This seems to solve issues related to psi becoming outdated. Extension of comment by ajchun: https://github.com/mplushnikov/lombok-intellij-plugin/issues/840#issuecomment-666085509 Covers issues: #821, #827, #829, #840, #842, #844, #846, #850, #853, #854, #855, #857 * Remove debug logging related to equality of PsiElements GitOrigin-RevId: e9ad9801b15dc91b872b14add012a9261033fbc7 --- .../intellij/plugin/psi/LombokLightClassBuilder.java | 4 ++++ .../intellij/plugin/psi/LombokLightFieldBuilder.java | 4 ++++ .../intellij/plugin/psi/LombokLightIdentifier.java | 8 +++++++- .../intellij/plugin/psi/LombokLightMethodBuilder.java | 5 +++++ .../intellij/plugin/psi/LombokLightModifierList.java | 4 ++++ .../intellij/plugin/psi/LombokLightParameter.java | 4 ++++ .../plugin/psi/LombokLightParameterListBuilder.java | 5 +++++ 7 files changed, 33 insertions(+), 1 deletion(-) diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightClassBuilder.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightClassBuilder.java index 3f0379731959c..2a762191d9806 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightClassBuilder.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightClassBuilder.java @@ -187,6 +187,10 @@ public boolean equals(Object o) { LombokLightClassBuilder that = (LombokLightClassBuilder) o; + if(getNavigationElement() != this && !getNavigationElement().equals(that.getNavigationElement())) { + return false; + } + return myQualifiedName.equals(that.myQualifiedName); } diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightFieldBuilder.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightFieldBuilder.java index 470f134dc8c02..69a5990bc4e7d 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightFieldBuilder.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightFieldBuilder.java @@ -138,6 +138,10 @@ public boolean isEquivalentTo(PsiElement another) { (null != containingClass && containingClass.isEquivalentTo(anotherContainingClass)); } + if(getNavigationElement() != this && !getNavigationElement().equals(anotherLightField.getNavigationElement())) { + stillEquivalent = false; + } + return stillEquivalent; } else { return super.isEquivalentTo(another); diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightIdentifier.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightIdentifier.java index c7bddea9c0a30..6445b5df6ce65 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightIdentifier.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightIdentifier.java @@ -5,6 +5,8 @@ import com.intellij.psi.PsiManager; import com.intellij.psi.impl.light.LightIdentifier; +import java.util.Objects; + /** * Date: 12.10.13 Time: 23:27 */ @@ -47,7 +49,11 @@ public boolean equals(Object o) { LombokLightIdentifier that = (LombokLightIdentifier) o; - return !(myText != null ? !myText.equals(that.myText) : that.myText != null); + if(getNavigationElement() != this && !getNavigationElement().equals(that.getNavigationElement())) { + return false; + } + + return Objects.equals(myText, that.myText); } diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightMethodBuilder.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightMethodBuilder.java index aae0d15ec36e7..8f261079140ab 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightMethodBuilder.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightMethodBuilder.java @@ -287,6 +287,11 @@ public boolean equals(Object o) { if (!getParameterList().equals(that.getParameterList())) { return false; } + + if(getNavigationElement() != this && !getNavigationElement().equals(that.getNavigationElement())) { + return false; + } + return Objects.equals(myReturnTypeAsText, that.myReturnTypeAsText); } diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightModifierList.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightModifierList.java index a33db1418dc84..73a5dffc13c83 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightModifierList.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightModifierList.java @@ -115,6 +115,10 @@ public boolean equals(Object o) { LombokLightModifierList that = (LombokLightModifierList) o; + if (getNavigationElement() != this && !getNavigationElement().equals(that.getNavigationElement())) { + return false; + } + return myAnnotations.equals(that.myAnnotations); } diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightParameter.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightParameter.java index b73c2fbcf3034..40c929871cf0c 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightParameter.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightParameter.java @@ -77,6 +77,10 @@ public boolean equals(Object o) { return false; } + if(getNavigationElement() != this && !getNavigationElement().equals(that.getNavigationElement())) { + return false; + } + return thisType.getCanonicalText().equals(thatType.getCanonicalText()); } diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightParameterListBuilder.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightParameterListBuilder.java index ceeff6a162203..0f2dd633086fa 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightParameterListBuilder.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightParameterListBuilder.java @@ -7,6 +7,7 @@ import java.util.Arrays; public class LombokLightParameterListBuilder extends LightParameterListBuilder { + public LombokLightParameterListBuilder(PsiManager manager, Language language) { super(manager, language); } @@ -26,6 +27,10 @@ public boolean equals(Object o) { return false; } + if(getNavigationElement() != this && !getNavigationElement().equals(that.getNavigationElement())) { + return false; + } + return Arrays.equals(getParameters(), that.getParameters()); }