Add @Override annotation to explicit record getters (IDEA-244562)

GitOrigin-RevId: d5c1775ef64f4d59970e72cd0ab284ffabc98ce5
This commit is contained in:
Tagir Valeev
2020-06-25 18:56:47 +03:00
committed by intellij-monorepo-bot
parent d6ac511732
commit 2496d8598b
3 changed files with 42 additions and 0 deletions
@@ -15,6 +15,7 @@ import com.intellij.openapi.editor.ScrollType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.*;
import com.intellij.psi.impl.light.LightTypeElement;
@@ -777,6 +778,11 @@ public class GenerateMembersUtil {
if (superMethod != null && superMethod.getContainingClass() != targetClass && PsiUtil.isAccessible(superMethod, targetClass, null)) {
OverrideImplementUtil.annotateOnOverrideImplement(generated, targetClass, superMethod, true);
}
if (JavaPsiRecordUtil.getRecordComponentForAccessor(generated) != null &&
PsiUtil.getLanguageLevel(targetClass) != LanguageLevel.JDK_14_PREVIEW) {
AddAnnotationPsiFix
.addPhysicalAnnotationIfAbsent(CommonClassNames.JAVA_LANG_OVERRIDE, PsiNameValuePair.EMPTY_ARRAY, generated.getModifierList());
}
}
return generated;
}
@@ -3,6 +3,8 @@ package com.intellij.psi.util;
import com.intellij.psi.*;
import com.intellij.psi.impl.light.LightRecordField;
import com.intellij.psi.impl.source.DummyHolder;
import com.intellij.util.ObjectUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -18,6 +20,12 @@ public class JavaPsiRecordUtil {
@Nullable
public static PsiRecordComponent getRecordComponentForAccessor(@NotNull PsiMethod accessor) {
PsiClass aClass = accessor.getContainingClass();
if (aClass == null) {
PsiElement parent = accessor.getParent();
if (parent instanceof DummyHolder) {
aClass = ObjectUtils.tryCast(parent.getContext(), PsiClass.class);
}
}
if (aClass == null || !aClass.isRecord()) return null;
if (!accessor.getParameterList().isEmpty()) return null;
String name = accessor.getName();
@@ -8,6 +8,7 @@ import com.intellij.codeInsight.generation.SetterTemplatesManager
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.intellij.psi.codeStyle.JavaCodeStyleSettings
import com.intellij.testFramework.LightProjectDescriptor
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase
import com.intellij.util.ui.UIUtil
import com.siyeh.ig.style.UnqualifiedFieldAccessInspection
@@ -251,6 +252,28 @@ class Foo {
void foo() {}
}'''
}
void "test record accessor"() {
myFixture.configureByText('a.java', '''
record Point(int x, int y) {
<caret>
}
''')
generateGetter()
myFixture.checkResult('''
record Point(int x, int y) {
@Override
public int x() {
return x;
}
@Override
public int y() {
return y;
}
}
''')
}
private void generateSetter() {
new GenerateSetterHandler() {
@@ -266,4 +289,9 @@ class Foo {
}.invoke(project, myFixture.editor, myFixture.file)
UIUtil.dispatchAllInvocationEvents()
}
@Override
protected LightProjectDescriptor getProjectDescriptor() {
return JAVA_15
}
}