From 962a2b176f259a3a3fea431a1ce6d7fcf2743ad1 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Tue, 24 Dec 2019 10:27:04 +0700 Subject: [PATCH] PublicConstructorInNonPublicClass: do not report compact/canonical constructors in records GitOrigin-RevId: 9b12f70be57e9d4c2e5915af5b899ba41a7452c6 --- ...licConstructorInNonPublicClassInspection.java | 6 ++++++ .../PublicConstructorInNonPublicClass.java | 16 ++++++++++++++++ ...onstructorInNonPublicClassInspectionTest.java | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/classlayout/PublicConstructorInNonPublicClassInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/classlayout/PublicConstructorInNonPublicClassInspection.java index 5decb59dadce..792f68cbcbe1 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/classlayout/PublicConstructorInNonPublicClassInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/classlayout/PublicConstructorInNonPublicClassInspection.java @@ -18,6 +18,7 @@ package com.siyeh.ig.classlayout; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.project.Project; import com.intellij.psi.*; +import com.intellij.psi.util.JavaPsiRecordUtil; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; @@ -104,6 +105,11 @@ public class PublicConstructorInNonPublicClassInspection extends BaseInspection if (containingClass == null) { return; } + if (containingClass.isRecord() && + (JavaPsiRecordUtil.isCompactConstructor(method) || JavaPsiRecordUtil.isCanonicalConstructor(method))) { + // compact and canonical constructors in record must be public, according to spec + return; + } if (containingClass.hasModifierProperty(PsiModifier.PUBLIC) || containingClass.hasModifierProperty(PsiModifier.PROTECTED)) { return; diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/public_constructor_in_non_public_class/PublicConstructorInNonPublicClass.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/public_constructor_in_non_public_class/PublicConstructorInNonPublicClass.java index bb14be47490b..9497e14976a8 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/public_constructor_in_non_public_class/PublicConstructorInNonPublicClass.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/public_constructor_in_non_public_class/PublicConstructorInNonPublicClass.java @@ -12,3 +12,19 @@ class PublicConstructorInNonPublicClass { public B() {} } } +record Rec() { + public Rec {} + public Rec(int x) { + this(); + System.out.println(x); + } +} +record Rec2(int x) { + public Rec2() { + this(0); + } + public Rec2(int x) { + System.out.println(x); + this.x = x; + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/classlayout/PublicConstructorInNonPublicClassInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/classlayout/PublicConstructorInNonPublicClassInspectionTest.java index d2b363a72caa..37b7b83390fb 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/classlayout/PublicConstructorInNonPublicClassInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/classlayout/PublicConstructorInNonPublicClassInspectionTest.java @@ -16,7 +16,7 @@ public class PublicConstructorInNonPublicClassInspectionTest extends LightJavaCo @NotNull @Override protected LightProjectDescriptor getProjectDescriptor() { - return JAVA_8; + return JAVA_14; } private void doTest() {