PublicConstructorInNonPublicClass: do not report compact/canonical constructors in records

GitOrigin-RevId: 9b12f70be57e9d4c2e5915af5b899ba41a7452c6
This commit is contained in:
Tagir Valeev
2019-12-24 08:41:04 +00:00
committed by intellij-monorepo-bot
parent a6cf900ac4
commit 962a2b176f
3 changed files with 23 additions and 1 deletions
@@ -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;
@@ -12,3 +12,19 @@ class PublicConstructorInNonPublicClass {
public B() {}
}
}
record Rec() {
public Rec {}
<warning descr="Constructor is declared 'public' in non-public class 'Rec'">public</warning> Rec(int x) {
this();
System.out.println(x);
}
}
record Rec2(int x) {
<warning descr="Constructor is declared 'public' in non-public class 'Rec2'">public</warning> Rec2() {
this(0);
}
public Rec2(int x) {
System.out.println(x);
this.x = x;
}
}
@@ -16,7 +16,7 @@ public class PublicConstructorInNonPublicClassInspectionTest extends LightJavaCo
@NotNull
@Override
protected LightProjectDescriptor getProjectDescriptor() {
return JAVA_8;
return JAVA_14;
}
private void doTest() {