mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Add @Override annotation to explicit record getters (IDEA-244562)
GitOrigin-RevId: d5c1775ef64f4d59970e72cd0ab284ffabc98ce5
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d6ac511732
commit
2496d8598b
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user