Java: generate compact equals when using IntelliJ Default (IDEA-339226)

GitOrigin-RevId: dd90f8e079a2693d74a220ef95aca3223c105fa9
This commit is contained in:
Bas Leijdekkers
2023-12-05 10:02:17 +00:00
committed by intellij-monorepo-bot
parent 1bea98b241
commit e8d2bff198
32 changed files with 177 additions and 214 deletions
@@ -12,8 +12,13 @@ Object $paramName){
#if ($fields.size() > 0)
#addClassInstance()
return ##
#set($i = 0)
#foreach($field in $fields)
#if ($i > 0)
&& ##
#end
#set($i = $i + 1)
#if ($field.array)
#addArrayEquals($field)
#elseif ($field.primitive)
@@ -28,39 +33,42 @@ Object $paramName){
#addFieldComparison($field)
#end
#end
#end
;
#else
return true;
#end
}
##
#macro(addPrimitiveFieldComparison $field)
if($field.accessor != ${classInstanceName}.$field.accessor) return false;
$field.accessor == ${classInstanceName}.$field.accessor##
#end
##
#macro(addDoubleFieldComparison $field)
#if ($field.double)
if(java.lang.Double.compare($field.accessor, ${classInstanceName}.$field.accessor) != 0)return false;
java.lang.Double.compare($field.accessor, ${classInstanceName}.$field.accessor) == 0##
#else
if(java.lang.Float.compare($field.accessor, ${classInstanceName}.$field.accessor) != 0)return false;
java.lang.Float.compare($field.accessor, ${classInstanceName}.$field.accessor) == 0##
#end
#end
##
#macro(addFieldComparison $field)
#if ($field.notNull)
if(!${field.accessor}.equals(${classInstanceName}.$field.accessor))return false;
${field.accessor}.equals(${classInstanceName}.$field.accessor)##
#elseif ($java_version < 7)
($field.accessor == null ? ${classInstanceName}.$field.accessor == null : ${field.accessor}.equals(${classInstanceName}.$field.accessor))##
#else
if($field.accessor != null ? !${field.accessor}.equals(${classInstanceName}.$field.accessor) : ${classInstanceName}.$field.accessor != null)return false;
java.util.Objects.equals($field.accessor,${classInstanceName}.$field.accessor)##
#end
#end
##
#macro(addArrayEquals $field)
#if ($field.nestedArray)
#if ($java_version > 4)
if(!java.util.Arrays.deepEquals($field.accessor, ${classInstanceName}.$field.accessor)) return false;
java.util.Arrays.deepEquals($field.accessor, ${classInstanceName}.$field.accessor)##
#else
// Compare nested arrays - values of $field.name here
#end
#break;
#end
if(!java.util.Arrays.equals($field.accessor, ${classInstanceName}.$field.accessor)) return false;
java.util.Arrays.equals($field.accessor, ${classInstanceName}.$field.accessor)##
#end
@@ -138,6 +138,8 @@ public int hashCode() {
#set($name = $field.accessor)
#if ($field.notNull)#adjustHashCodeToArrays($field)
#elseif ($field.array && $java_version > 4)#adjustHashCodeToArrays($field)
#elseif ($java_version >= 7)
java.util.Objects.hashCode($field.accessor) ##
#else
#if ($brace)(##
#end
@@ -5,7 +5,6 @@ class Test extends SuperTest {
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
return true;
}
@@ -12,7 +12,10 @@ class A {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
final A a = (A) o;
return i == a.i && Objects.equals(s, a.s) && Objects.deepEquals(a1, a.a1) && Objects.deepEquals(a2, a.a2);
return i == a.i &&
Objects.equals(s, a.s) &&
Objects.deepEquals(a1, a.a1) &&
Objects.deepEquals(a2, a.a2);
}
@Override
@@ -10,12 +10,9 @@ class Test {
if (o == null || getClass() != o.getClass()) return false;
final Test test = (Test) o;
if (!Arrays.equals(myOs, test.myOs)) return false;
if (!Arrays.deepEquals(myIIs, test.myIIs)) return false;
if (!Arrays.equals(myIs, test.myIs)) return false;
return true;
return Arrays.equals(myOs, test.myOs) &&
Arrays.deepEquals(myIIs, test.myIIs) &&
Arrays.equals(myIs, test.myIs);
}
public int hashCode() {
@@ -7,10 +7,7 @@ class Arrays {
if (o == null || getClass() != o.getClass()) return false;
final Arrays arrays = (Arrays) o;
if (!java.util.Arrays.equals(i, arrays.i)) return false;
return true;
return java.util.Arrays.equals(i, arrays.i);
}
@Override
@@ -10,12 +10,9 @@ class Test {
if (o == null || getClass() != o.getClass()) return false;
final Test test = (Test) o;
if (!Arrays.equals(myOs, test.myOs)) return false;
if (!Arrays.deepEquals(myIIs, test.myIIs)) return false;
if (!Arrays.equals(myIs, test.myIs)) return false;
return true;
return Arrays.equals(myOs, test.myOs) &&
Arrays.deepEquals(myIIs, test.myIIs) &&
Arrays.equals(myIs, test.myIs);
}
public int hashCode() {
@@ -9,10 +9,7 @@ class A<T extends String, K> {
if (o == null || getClass() != o.getClass()) return false;
final A<?, ?> a = (A<?, ?>) o;
if (!Arrays.equals(a1, a.a1)) return false;
return true;
return Arrays.equals(a1, a.a1);
}
@Override
@@ -1,4 +1,5 @@
import java.util.Arrays;
import java.util.Objects;
class A {
Object[] a1;
@@ -25,23 +26,20 @@ class A {
if (o == null || getClass() != o.getClass()) return false;
final A a = (A) o;
if (a7 != a.a7) return false;
if (a8 != a.a8) return false;
if (a9 != a.a9) return false;
if (a10 != a.a10) return false;
if (Float.compare(a11, a.a11) != 0) return false;
if (Double.compare(a12, a.a12) != 0) return false;
if (!Arrays.equals(a1, a.a1)) return false;
if (!Arrays.deepEquals(a2, a.a2)) return false;
if (!Arrays.equals(a3, a.a3)) return false;
if (!Arrays.deepEquals(a4, a.a4)) return false;
if (!Arrays.equals(a5, a.a5)) return false;
if (!Arrays.deepEquals(a6, a.a6)) return false;
if (a13 != null ? !a13.equals(a.a13) : a.a13 != null) return false;
if (a14 != null ? !a14.equals(a.a14) : a.a14 != null) return false;
return true;
return a7 == a.a7 &&
a8 == a.a8 &&
a9 == a.a9 &&
a10 == a.a10 &&
Float.compare(a11, a.a11) == 0 &&
Double.compare(a12, a.a12) == 0 &&
Arrays.equals(a1, a.a1) &&
Arrays.deepEquals(a2, a.a2) &&
Arrays.equals(a3, a.a3) &&
Arrays.deepEquals(a4, a.a4) &&
Arrays.equals(a5, a.a5) &&
Arrays.deepEquals(a6, a.a6) &&
Objects.equals(a13, a.a13) &&
Objects.equals(a14, a.a14);
}
@Override
@@ -61,8 +59,8 @@ class A {
result = 31 * result + Float.floatToIntBits(a11);
temp = Double.doubleToLongBits(a12);
result = 31 * result + (int) (temp ^ (temp >>> 32));
result = 31 * result + (a13 != null ? a13.hashCode() : 0);
result = 31 * result + (a14 != null ? a14.hashCode() : 0);
result = 31 * result + Objects.hashCode(a13);
result = 31 * result + Objects.hashCode(a14);
return result;
}
}
@@ -25,23 +25,20 @@ class A {
if (o == null || getClass() != o.getClass()) return false;
final A a = (A) o;
if (a7 != a.a7) return false;
if (a8 != a.a8) return false;
if (a9 != a.a9) return false;
if (a10 != a.a10) return false;
if (Float.compare(a11, a.a11) != 0) return false;
if (Double.compare(a12, a.a12) != 0) return false;
if (!Arrays.equals(a1, a.a1)) return false;
if (!Arrays.deepEquals(a2, a.a2)) return false;
if (!Arrays.equals(a3, a.a3)) return false;
if (!Arrays.deepEquals(a4, a.a4)) return false;
if (!Arrays.equals(a5, a.a5)) return false;
if (!Arrays.deepEquals(a6, a.a6)) return false;
if (!a13.equals(a.a13)) return false;
if (!a14.equals(a.a14)) return false;
return true;
return a7 == a.a7 &&
a8 == a.a8 &&
a9 == a.a9 &&
a10 == a.a10 &&
Float.compare(a11, a.a11) == 0 &&
Double.compare(a12, a.a12) == 0 &&
Arrays.equals(a1, a.a1) &&
Arrays.deepEquals(a2, a.a2) &&
Arrays.equals(a3, a.a3) &&
Arrays.deepEquals(a4, a.a4) &&
Arrays.equals(a5, a.a5) &&
Arrays.deepEquals(a6, a.a6) &&
a13.equals(a.a13) &&
a14.equals(a.a14);
}
@Override
@@ -1,4 +1,5 @@
import java.util.Arrays;
import java.util.Objects;
class A {
Object[] a1;
@@ -73,23 +74,20 @@ class A {
if (o == null || getClass() != o.getClass()) return false;
final A a = (A) o;
if (getA7() != a.getA7()) return false;
if (getA8() != a.getA8()) return false;
if (getA9() != a.getA9()) return false;
if (getA10() != a.getA10()) return false;
if (Float.compare(getA11(), a.getA11()) != 0) return false;
if (Double.compare(getA12(), a.getA12()) != 0) return false;
if (!Arrays.equals(getA1(), a.getA1())) return false;
if (!Arrays.deepEquals(getA2(), a.getA2())) return false;
if (!Arrays.equals(getA3(), a.getA3())) return false;
if (!Arrays.deepEquals(getA4(), a.getA4())) return false;
if (!Arrays.equals(getA5(), a.getA5())) return false;
if (!Arrays.deepEquals(getA6(), a.getA6())) return false;
if (a13 != null ? !a13.equals(a.a13) : a.a13 != null) return false;
if (a14 != null ? !a14.equals(a.a14) : a.a14 != null) return false;
return true;
return getA7() == a.getA7() &&
getA8() == a.getA8() &&
getA9() == a.getA9() &&
getA10() == a.getA10() &&
Float.compare(getA11(), a.getA11()) == 0 &&
Double.compare(getA12(), a.getA12()) == 0 &&
Arrays.equals(getA1(), a.getA1()) &&
Arrays.deepEquals(getA2(), a.getA2()) &&
Arrays.equals(getA3(), a.getA3()) &&
Arrays.deepEquals(getA4(), a.getA4()) &&
Arrays.equals(getA5(), a.getA5()) &&
Arrays.deepEquals(getA6(), a.getA6()) &&
Objects.equals(a13, a.a13) &&
Objects.equals(a14, a.a14);
}
@Override
@@ -109,8 +107,8 @@ class A {
result = 31 * result + Float.floatToIntBits(getA11());
temp = Double.doubleToLongBits(getA12());
result = 31 * result + (int) (temp ^ (temp >>> 32));
result = 31 * result + (a13 != null ? a13.hashCode() : 0);
result = 31 * result + (a14 != null ? a14.hashCode() : 0);
result = 31 * result + Objects.hashCode(a13);
result = 31 * result + Objects.hashCode(a14);
return result;
}
}
@@ -24,22 +24,19 @@ class A {
if (o == null || getClass() != o.getClass()) return false;
final A a = (A) o;
if (a7 != a.a7) return false;
if (a8 != a.a8) return false;
if (a9 != a.a9) return false;
if (a10 != a.a10) return false;
if (Float.compare(a11, a.a11) != 0) return false;
if (!Arrays.equals(a1, a.a1)) return false;
if (!Arrays.deepEquals(a2, a.a2)) return false;
if (!Arrays.equals(a3, a.a3)) return false;
if (!Arrays.deepEquals(a4, a.a4)) return false;
if (!Arrays.equals(a5, a.a5)) return false;
if (!Arrays.deepEquals(a6, a.a6)) return false;
if (!a13.equals(a.a13)) return false;
if (!a14.equals(a.a14)) return false;
return true;
return a7 == a.a7 &&
a8 == a.a8 &&
a9 == a.a9 &&
a10 == a.a10 &&
Float.compare(a11, a.a11) == 0 &&
Arrays.equals(a1, a.a1) &&
Arrays.deepEquals(a2, a.a2) &&
Arrays.equals(a3, a.a3) &&
Arrays.deepEquals(a4, a.a4) &&
Arrays.equals(a5, a.a5) &&
Arrays.deepEquals(a6, a.a6) &&
a13.equals(a.a13) &&
a14.equals(a.a14);
}
@Override
@@ -37,23 +37,20 @@ class A extends B {
if (!super.equals(o)) return false;
final A a = (A) o;
if (a7 != a.a7) return false;
if (a8 != a.a8) return false;
if (a9 != a.a9) return false;
if (a10 != a.a10) return false;
if (Float.compare(a11, a.a11) != 0) return false;
if (Double.compare(a12, a.a12) != 0) return false;
if (!Arrays.equals(a1, a.a1)) return false;
if (!Arrays.deepEquals(a2, a.a2)) return false;
if (!Arrays.equals(a3, a.a3)) return false;
if (!Arrays.deepEquals(a4, a.a4)) return false;
if (!Arrays.equals(a5, a.a5)) return false;
if (!Arrays.deepEquals(a6, a.a6)) return false;
if (!a13.equals(a.a13)) return false;
if (!a14.equals(a.a14)) return false;
return true;
return a7 == a.a7 &&
a8 == a.a8 &&
a9 == a.a9 &&
a10 == a.a10 &&
Float.compare(a11, a.a11) == 0 &&
Double.compare(a12, a.a12) == 0 &&
Arrays.equals(a1, a.a1) &&
Arrays.deepEquals(a2, a.a2) &&
Arrays.equals(a3, a.a3) &&
Arrays.deepEquals(a4, a.a4) &&
Arrays.equals(a5, a.a5) &&
Arrays.deepEquals(a6, a.a6) &&
a13.equals(a.a13) &&
a14.equals(a.a14);
}
@Override
@@ -34,7 +34,20 @@ class A extends B {
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
final A a = (A) o;
return a7 == a.a7 && a8 == a.a8 && a9 == a.a9 && a10 == a.a10 && Float.compare(a11, a.a11) == 0 && Double.compare(a12, a.a12) == 0 && com.google.common.base.Objects.equal(a1, a.a1) && com.google.common.base.Objects.equal(a2, a.a2) && com.google.common.base.Objects.equal(a3, a.a3) && com.google.common.base.Objects.equal(a4, a.a4) && com.google.common.base.Objects.equal(a5, a.a5) && com.google.common.base.Objects.equal(a6, a.a6) && com.google.common.base.Objects.equal(a13, a.a13) && com.google.common.base.Objects.equal(a14, a.a14);
return a7 == a.a7 &&
a8 == a.a8 &&
a9 == a.a9 &&
a10 == a.a10 &&
Float.compare(a11, a.a11) == 0 &&
Double.compare(a12, a.a12) == 0 &&
com.google.common.base.Objects.equal(a1, a.a1) &&
com.google.common.base.Objects.equal(a2, a.a2) &&
com.google.common.base.Objects.equal(a3, a.a3) &&
com.google.common.base.Objects.equal(a4, a.a4) &&
com.google.common.base.Objects.equal(a5, a.a5) &&
com.google.common.base.Objects.equal(a6, a.a6) &&
com.google.common.base.Objects.equal(a13, a.a13) &&
com.google.common.base.Objects.equal(a14, a.a14);
}
@Override
@@ -1,3 +1,5 @@
import java.util.Objects;
class Test {
int i;
Test a;
@@ -8,12 +10,7 @@ class Test {
if (o == null || getClass() != o.getClass()) return false;
final Test test = (Test) o;
if (i != test.i) return false;
if (!a.equals(test.a)) return false;
if (b != null ? !b.equals(test.b) : test.b != null) return false;
return true;
return i == test.i && a.equals(test.a) && Objects.equals(b, test.b);
}
public int hashCode() {
@@ -1,3 +1,5 @@
import java.util.Objects;
class Test {
int i;
Test a;
@@ -9,13 +11,10 @@ class Test {
if (o == null || getClass() != o.getClass()) return false;
final Test test = (Test) o;
if (i != test.i) return false;
if (Double.compare(c, test.c) != 0) return false;
if (!a.equals(test.a)) return false;
if (b != null ? !b.equals(test.b) : test.b != null) return false;
return true;
return i == test.i &&
Double.compare(c, test.c) == 0 &&
a.equals(test.a) &&
Objects.equals(b, test.b);
}
public int hashCode() {
@@ -23,7 +22,7 @@ class Test {
long temp;
result = i;
result = 31 * result + a.hashCode();
result = 31 * result + (b != null ? b.hashCode() : 0);
result = 31 * result + Objects.hashCode(b);
temp = Double.doubleToLongBits(c);
result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
@@ -7,10 +7,7 @@ class Test {
if (o == null || getClass() != o.getClass()) return false;
final Test test = (Test) o;
if (i != test.i) return false;
return true;
return i == test.i;
}
@Override
@@ -11,12 +11,9 @@ class A {
if (!(o instanceof A)) return false;
final A a = (A) o;
if (value != a.value) return false;
if (!Arrays.equals(values, a.values)) return false;
if (!Arrays.deepEquals(valueses, a.valueses)) return false;
return true;
return value == a.value &&
Arrays.equals(values, a.values) &&
Arrays.deepEquals(valueses, a.valueses);
}
@Override
@@ -7,10 +7,7 @@ class Integer {
if (o == null || getClass() != o.getClass()) return false;
final Integer integer = (Integer) o;
if (i != integer.i) return false;
return true;
return i == integer.i;
}
@Override
@@ -9,10 +9,7 @@ class Test {
if (o == null || getClass() != o.getClass()) return false;
final Integer integer = (Integer) o;
if (i != integer.i) return false;
return true;
return i == integer.i;
}
@Override
@@ -25,23 +25,20 @@ class A {
if (o == null || getClass() != o.getClass()) return false;
final A a = (A) o;
if (a7 != a.a7) return false;
if (a8 != a.a8) return false;
if (a9 != a.a9) return false;
if (a10 != a.a10) return false;
if (Float.compare(a11, a.a11) != 0) return false;
if (Double.compare(temp, a.temp) != 0) return false;
if (!Arrays.equals(a1, a.a1)) return false;
if (!Arrays.deepEquals(a2, a.a2)) return false;
if (!Arrays.equals(a3, a.a3)) return false;
if (!Arrays.deepEquals(a4, a.a4)) return false;
if (!Arrays.equals(a5, a.a5)) return false;
if (!Arrays.deepEquals(a6, a.a6)) return false;
if (!result.equals(a.result)) return false;
if (!a14.equals(a.a14)) return false;
return true;
return a7 == a.a7 &&
a8 == a.a8 &&
a9 == a.a9 &&
a10 == a.a10 &&
Float.compare(a11, a.a11) == 0 &&
Double.compare(temp, a.temp) == 0 &&
Arrays.equals(a1, a.a1) &&
Arrays.deepEquals(a2, a.a2) &&
Arrays.equals(a3, a.a3) &&
Arrays.deepEquals(a4, a.a4) &&
Arrays.equals(a5, a.a5) &&
Arrays.deepEquals(a6, a.a6) &&
result.equals(a.result) &&
a14.equals(a.a14);
}
@Override
@@ -2,7 +2,6 @@ public class Test {
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
return true;
}
@@ -1,3 +1,5 @@
import java.util.Objects;
class Test {
@org.jetbrains.annotations.NotNull Object d;
@@ -6,13 +8,10 @@ class Test {
if (o == null || getClass() != o.getClass()) return false;
final Test test = (Test) o;
if (d != null ? !d.equals(test.d) : test.d != null) return false;
return true;
return Objects.equals(d, test.d);
}
public int hashCode() {
return d != null ? d.hashCode() : 0;
return Objects.hashCode(d);
}
}
@@ -6,10 +6,7 @@ class Test {
if (o == null || getClass() != o.getClass()) return false;
final Test test = (Test) o;
if (Double.compare(d, test.d) != 0) return false;
return true;
return Double.compare(d, test.d) == 0;
}
public int hashCode() {
@@ -6,10 +6,7 @@ class Test {
if (o == null || getClass() != o.getClass()) return false;
final Test test = (Test) o;
if (Double.compare(d, test.d) != 0) return false;
return true;
return Double.compare(d, test.d) == 0;
}
public int hashCode() {
@@ -1,3 +1,5 @@
import java.util.Objects;
class Test {
Object d;
@@ -6,13 +8,10 @@ class Test {
if (o == null || getClass() != o.getClass()) return false;
final Test test = (Test) o;
if (d != null ? !d.equals(test.d) : test.d != null) return false;
return true;
return Objects.equals(d, test.d);
}
public int hashCode() {
return d != null ? d.hashCode() : 0;
return Objects.hashCode(d);
}
}
@@ -6,10 +6,7 @@ class Test {
if (o == null || getClass() != o.getClass()) return false;
final Test test = (Test) o;
if (Float.compare(d, test.d) != 0) return false;
return true;
return Float.compare(d, test.d) == 0;
}
public int hashCode() {
@@ -7,10 +7,7 @@ class Simple {
if (p_o_r == null || getClass() != p_o_r.getClass()) return false;
final Simple l_that_v = (Simple) p_o_r;
if (simple != l_that_v.simple) return false;
return true;
return simple == l_that_v.simple;
}
@Override
@@ -8,12 +8,7 @@ public class Test {
if (o == null || getClass() != o.getClass()) return false;
final Test test = (Test) o;
if (f != test.f) return false;
if (j != test.j) return false;
if (h != test.h) return false;
return true;
return f == test.f && j == test.j && h == test.h;
}
public int hashCode() {
@@ -12,16 +12,13 @@ public class X {
if (o == null || getClass() != o.getClass()) return false;
final X x = (X) o;
if (l != x.l) return false;
if (b != x.b) return false;
if (v != x.v) return false;
if (s != x.s) return false;
if (i != x.i) return false;
if (Float.compare(f, x.f) != 0) return false;
if (Double.compare(d, x.d) != 0) return false;
return true;
return l == x.l &&
b == x.b &&
v == x.v &&
s == x.s &&
i == x.i &&
Float.compare(f, x.f) == 0 &&
Double.compare(d, x.d) == 0;
}
public int hashCode() {
@@ -11,7 +11,6 @@ class Test extends SuperTest {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
return true;
}
}
@@ -1,14 +1,18 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.java.codeInsight;
import com.intellij.application.options.CodeStyle;
import com.intellij.codeInsight.generation.EqualsHashCodeTemplatesManager;
import com.intellij.codeInsight.generation.GenerateEqualsHelper;
import com.intellij.codeInsight.generation.GenerateMembersUtil;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiField;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.testFramework.LightJavaCodeInsightTestCase;
@@ -208,6 +212,8 @@ public class GenerateEqualsTest extends LightJavaCodeInsightTestCase {
boolean useAccessors,
boolean useInstanceofToCheckParameterType) {
configureByFile("/codeInsight/generateEquals/before" + getTestName(false) + ".java");
CodeStyleSettings codeStyleSettings = CodeStyle.getSettings(getProject());
codeStyleSettings.getCommonSettings(JavaLanguage.INSTANCE).BINARY_OPERATION_WRAP = CommonCodeStyleSettings.WRAP_ON_EVERY_ITEM;
JavaCodeStyleSettings.getInstance(getProject()).GENERATE_FINAL_LOCALS = true;
JavaCodeStyleSettings.getInstance(getProject()).INSERT_OVERRIDE_ANNOTATION = insertOverride;
PsiElement element = getFile().findElementAt(getEditor().getCaretModel().getOffset());