From d3e75c59516358641d46f105442aa023398cb4a5 Mon Sep 17 00:00:00 2001 From: Mikhail Pyltsin Date: Fri, 20 Dec 2024 11:15:46 +0100 Subject: [PATCH] [java-inspections] IDEA-365031 Propose on info level convert to record for classes without getters GitOrigin-RevId: 77f56876a99f3e924bf39232f9cf5a32fb174211 --- .../classCanBeRecord/ClassCanBeRecordInspection.java | 11 ++++++++--- .../classCanBeRecord/afterClassWithouGetters.java | 7 +++++++ .../classCanBeRecord/beforeClassWithouGetters.java | 12 ++++++++++++ .../weakenAccessibility/afterAccessor.java | 3 +++ .../weakenAccessibility/afterCtor.java | 10 ++++++++++ .../weakenAccessibility/afterField.java | 3 +++ .../weakenAccessibility/beforeAccessor.java | 2 +- .../weakenAccessibility/beforeCtor.java | 9 ++++++++- .../weakenAccessibility/beforeField.java | 2 +- ...CanBeRecordInspectionWeakenAccessibilityTest.java | 1 + 10 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 java/java-tests/testData/inspection/classCanBeRecord/afterClassWithouGetters.java create mode 100644 java/java-tests/testData/inspection/classCanBeRecord/beforeClassWithouGetters.java create mode 100644 java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/afterAccessor.java create mode 100644 java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/afterCtor.java create mode 100644 java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/afterField.java diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/classCanBeRecord/ClassCanBeRecordInspection.java b/java/java-impl-inspections/src/com/intellij/codeInspection/classCanBeRecord/ClassCanBeRecordInspection.java index d26708b927e4..677e20c32076 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/classCanBeRecord/ClassCanBeRecordInspection.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/classCanBeRecord/ClassCanBeRecordInspection.java @@ -3,6 +3,7 @@ package com.intellij.codeInspection.classCanBeRecord; import com.intellij.codeInspection.AddToInspectionOptionListFix; import com.intellij.codeInspection.LocalQuickFix; +import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.codeInspection.classCanBeRecord.ConvertToRecordFix.RecordCandidate; import com.intellij.codeInspection.options.OptPane; import com.intellij.codeInspection.util.InspectionMessage; @@ -116,11 +117,15 @@ public final class ClassCanBeRecordInspection extends BaseInspection { if (classIdentifier == null) return; RecordCandidate recordCandidate = ConvertToRecordFix.getClassDefinition(aClass, mySuggestAccessorsRenaming, myIgnoredAnnotations); if (recordCandidate == null) return; - if (myConversionStrategy == ConversionStrategy.DO_NOT_SUGGEST || + if (myConversionStrategy == ConversionStrategy.DO_NOT_SUGGEST || myConversionStrategy == ConversionStrategy.SHOW_AFFECTED_MEMBERS && !isOnTheFly()) { - if (!ConvertToRecordProcessor.findConflicts(recordCandidate).isEmpty()) return; + if (!ConvertToRecordProcessor.findConflicts(recordCandidate).isEmpty()){ + registerError(classIdentifier, ProblemHighlightType.INFORMATION, isOnTheFly(), aClass); + } + } + else { + registerError(classIdentifier, isOnTheFly(), aClass); } - registerError(classIdentifier, isOnTheFly(), aClass); } } diff --git a/java/java-tests/testData/inspection/classCanBeRecord/afterClassWithouGetters.java b/java/java-tests/testData/inspection/classCanBeRecord/afterClassWithouGetters.java new file mode 100644 index 000000000000..e475d10d8be1 --- /dev/null +++ b/java/java-tests/testData/inspection/classCanBeRecord/afterClassWithouGetters.java @@ -0,0 +1,7 @@ +// "Convert to record class" "true" + +package my.annotation2; + + +record A(java.util.Date date) { +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/classCanBeRecord/beforeClassWithouGetters.java b/java/java-tests/testData/inspection/classCanBeRecord/beforeClassWithouGetters.java new file mode 100644 index 000000000000..d13062b8cf7d --- /dev/null +++ b/java/java-tests/testData/inspection/classCanBeRecord/beforeClassWithouGetters.java @@ -0,0 +1,12 @@ +// "Convert to record class" "true" + +package my.annotation2; + + +class A{ + private final java.util.Date date; + + A(java.util.Date date) { + this.date = date; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/afterAccessor.java b/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/afterAccessor.java new file mode 100644 index 000000000000..a042eb598a52 --- /dev/null +++ b/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/afterAccessor.java @@ -0,0 +1,3 @@ +// "Convert to record class" "INFORMATION" +record R(int first) { +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/afterCtor.java b/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/afterCtor.java new file mode 100644 index 000000000000..71ec45074e02 --- /dev/null +++ b/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/afterCtor.java @@ -0,0 +1,10 @@ +// "Convert to record class" "INFORMATION" +record R(int first) { +} + +class AA{ + public static void main(String[] args) { + R r = new R(1); + System.out.println(r.first()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/afterField.java b/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/afterField.java new file mode 100644 index 000000000000..57872ce21960 --- /dev/null +++ b/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/afterField.java @@ -0,0 +1,3 @@ +// "Convert to record class" "INFORMATION" +public record R(int first) { +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/beforeAccessor.java b/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/beforeAccessor.java index b4288ad19faa..2f69a12524cd 100644 --- a/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/beforeAccessor.java +++ b/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/beforeAccessor.java @@ -1,4 +1,4 @@ -// "Convert to record class" "false" +// "Convert to record class" "INFORMATION" class R { final int first; diff --git a/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/beforeCtor.java b/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/beforeCtor.java index 5f5898543b8a..583a21134230 100644 --- a/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/beforeCtor.java +++ b/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/beforeCtor.java @@ -1,8 +1,15 @@ -// "Convert to record class" "false" +// "Convert to record class" "INFORMATION" class R { final int first; private R(int first) { this.first = first; } +} + +class AA{ + public static void main(String[] args) { + R r = new R(1); + System.out.println(r.first); + } } \ No newline at end of file diff --git a/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/beforeField.java b/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/beforeField.java index d8dbe0016188..3241f9cb4fca 100644 --- a/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/beforeField.java +++ b/java/java-tests/testData/inspection/classCanBeRecord/weakenAccessibility/beforeField.java @@ -1,4 +1,4 @@ -// "Convert to record class" "false" +// "Convert to record class" "INFORMATION" public class R { private final int first; diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/classCanBeRecord/ClassCanBeRecordInspectionWeakenAccessibilityTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/classCanBeRecord/ClassCanBeRecordInspectionWeakenAccessibilityTest.java index 9fa0df74c805..c02d2cdf7eb7 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/classCanBeRecord/ClassCanBeRecordInspectionWeakenAccessibilityTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/classCanBeRecord/ClassCanBeRecordInspectionWeakenAccessibilityTest.java @@ -21,6 +21,7 @@ public class ClassCanBeRecordInspectionWeakenAccessibilityTest extends LightQuic return LightJavaCodeInsightFixtureTestCase.JAVA_LATEST; } + @Override protected String getBasePath() { return "/inspection/classCanBeRecord/weakenAccessibility";