diff --git a/plugins/lombok/gradle.properties b/plugins/lombok/gradle.properties index bdc488c5f104d..8e448eeca3b2b 100644 --- a/plugins/lombok/gradle.properties +++ b/plugins/lombok/gradle.properties @@ -3,8 +3,8 @@ # https://www.jetbrains.com/intellij-repository/snapshots # #ideaVersion=2020.1.4 -#ideaVersion=2020.2 -ideaVersion=LATEST-EAP-SNAPSHOT +ideaVersion=2020.2 +#ideaVersion=LATEST-EAP-SNAPSHOT # pluginGroup=de.plushnikov.intellij.plugin pluginName=lombok-plugin 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 2a762191d9806..311a412ebe8a5 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 @@ -14,12 +14,12 @@ import java.util.*; import java.util.stream.Stream; -public class LombokLightClassBuilder extends LightPsiClassBuilder implements PsiExtensibleClass { +public class LombokLightClassBuilder extends LightPsiClassBuilder implements PsiExtensibleClass, SyntheticElement { private boolean myIsEnum; private final String myQualifiedName; private final Icon myBaseIcon; private final LombokLightModifierList myModifierList; - private Collection myFields = new ArrayList<>(); + private final Collection myFields = new ArrayList<>(); public LombokLightClassBuilder(@NotNull PsiElement context, @NotNull String simpleName, @NotNull String qualifiedName) { super(context, simpleName); @@ -187,15 +187,21 @@ public boolean equals(Object o) { LombokLightClassBuilder that = (LombokLightClassBuilder) o; - if(getNavigationElement() != this && !getNavigationElement().equals(that.getNavigationElement())) { - return false; - } - - return myQualifiedName.equals(that.myQualifiedName); + return isValid() == that.isValid() && myQualifiedName.equals(that.myQualifiedName); } @Override public int hashCode() { return myQualifiedName.hashCode(); } + + @Override + public boolean isValid() { + return super.isValid() && areAllFieldsAndMethodsValid(); + } + + private boolean areAllFieldsAndMethodsValid() { + return Arrays.stream(getFields()).allMatch(PsiElement::isValid) + && Arrays.stream(getMethods()).allMatch(PsiElement::isValid); + } } 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 69a5990bc4e7d..71759193b893a 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 @@ -12,12 +12,13 @@ import org.jetbrains.annotations.NotNull; import java.util.Collections; +import java.util.Objects; import java.util.stream.Stream; /** * @author Plushnikov Michail */ -public class LombokLightFieldBuilder extends LightFieldBuilder { +public class LombokLightFieldBuilder extends LightFieldBuilder implements SyntheticElement { private String myName; private final LombokLightIdentifier myNameIdentifier; private final LombokLightModifierList myModifierList; @@ -138,13 +139,25 @@ 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); } } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + LombokLightFieldBuilder that = (LombokLightFieldBuilder) o; + return isValid() == that.isValid() && + Objects.equals(myName, that.myName) && + Objects.equals(myNameIdentifier, that.myNameIdentifier) && + Objects.equals(myModifierList, that.myModifierList); + } + + @Override + public int hashCode() { + return Objects.hash(myName, myNameIdentifier, myModifierList); + } } 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 6445b5df6ce65..3f891e67fa98d 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 @@ -3,6 +3,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiManager; +import com.intellij.psi.SyntheticElement; import com.intellij.psi.impl.light.LightIdentifier; import java.util.Objects; @@ -10,7 +11,7 @@ /** * Date: 12.10.13 Time: 23:27 */ -public class LombokLightIdentifier extends LightIdentifier { +public class LombokLightIdentifier extends LightIdentifier implements SyntheticElement { private String myText; public LombokLightIdentifier(PsiManager manager, String text) { @@ -49,16 +50,11 @@ public boolean equals(Object o) { LombokLightIdentifier that = (LombokLightIdentifier) o; - if(getNavigationElement() != this && !getNavigationElement().equals(that.getNavigationElement())) { - return false; - } - return Objects.equals(myText, that.myText); - } @Override public int hashCode() { - return myText != null ? myText.hashCode() : 0; + return Objects.hash(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 8f261079140ab..9eb32d529848b 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 @@ -22,7 +22,7 @@ /** * @author Plushnikov Michail */ -public class LombokLightMethodBuilder extends LightMethodBuilder { +public class LombokLightMethodBuilder extends LightMethodBuilder implements SyntheticElement { private PsiMethod myMethod; private ASTNode myASTNode; private PsiCodeBlock myBodyCodeBlock; @@ -288,11 +288,7 @@ public boolean equals(Object o) { return false; } - if(getNavigationElement() != this && !getNavigationElement().equals(that.getNavigationElement())) { - return false; - } - - return Objects.equals(myReturnTypeAsText, that.myReturnTypeAsText); + return isValid() == that.isValid() && Objects.equals(myReturnTypeAsText, that.myReturnTypeAsText); } @Override 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 73a5dffc13c83..fc7fa38ff0111 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 @@ -13,7 +13,7 @@ /** * @author Plushnikov Michail */ -public class LombokLightModifierList extends LightModifierList { +public class LombokLightModifierList extends LightModifierList implements SyntheticElement { private static final Set ALL_MODIFIERS = new HashSet<>(Arrays.asList(PsiModifier.MODIFIERS)); private final Map myAnnotations; @@ -115,10 +115,6 @@ 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 40c929871cf0c..b1c4279451b5e 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 @@ -2,10 +2,7 @@ import com.intellij.lang.Language; import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiIdentifier; -import com.intellij.psi.PsiManager; -import com.intellij.psi.PsiType; +import com.intellij.psi.*; import com.intellij.psi.impl.light.LightModifierList; import com.intellij.psi.impl.light.LightParameter; import com.intellij.psi.impl.light.LightVariableBuilder; @@ -17,7 +14,7 @@ /** * @author Plushnikov Michail */ -public class LombokLightParameter extends LightParameter { +public class LombokLightParameter extends LightParameter implements SyntheticElement { private String myName; private final LombokLightIdentifier myNameIdentifier; @@ -77,10 +74,6 @@ 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 0f2dd633086fa..dff3d45098ce3 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 @@ -2,11 +2,12 @@ import com.intellij.lang.Language; import com.intellij.psi.PsiManager; +import com.intellij.psi.SyntheticElement; import com.intellij.psi.impl.light.LightParameterListBuilder; import java.util.Arrays; -public class LombokLightParameterListBuilder extends LightParameterListBuilder { +public class LombokLightParameterListBuilder extends LightParameterListBuilder implements SyntheticElement { public LombokLightParameterListBuilder(PsiManager manager, Language language) { super(manager, language); @@ -27,10 +28,6 @@ public boolean equals(Object o) { return false; } - if(getNavigationElement() != this && !getNavigationElement().equals(that.getNavigationElement())) { - return false; - } - return Arrays.equals(getParameters(), that.getParameters()); } diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightReferenceListBuilder.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightReferenceListBuilder.java index f79a4e686c674..190505cc2eae8 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightReferenceListBuilder.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/psi/LombokLightReferenceListBuilder.java @@ -3,9 +3,10 @@ import com.intellij.lang.Language; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiManager; +import com.intellij.psi.SyntheticElement; import com.intellij.psi.impl.light.LightReferenceListBuilder; -public class LombokLightReferenceListBuilder extends LightReferenceListBuilder { +public class LombokLightReferenceListBuilder extends LightReferenceListBuilder implements SyntheticElement { public LombokLightReferenceListBuilder(PsiManager manager, Language language, Role role) { super(manager, language, role);