mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 13:02:30 +07:00
[java-highlighting] IDEA-270163 Good code is red: private record declared in anonymous class
GitOrigin-RevId: fd0e72648b09de6efcac2749d2e4c9e8c99542d5
This commit is contained in:
committed by
intellij-monorepo-bot
parent
6328482822
commit
8653f21eef
@@ -57,7 +57,10 @@ import com.intellij.psi.util.*;
|
||||
import com.intellij.refactoring.util.RefactoringChangeUtil;
|
||||
import com.intellij.ui.ColorUtil;
|
||||
import com.intellij.ui.ExperimentalUI;
|
||||
import com.intellij.util.*;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.ArrayUtilRt;
|
||||
import com.intellij.util.JavaPsiConstructorUtil;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import com.intellij.util.ui.NamedColorUtil;
|
||||
@@ -1044,7 +1047,9 @@ public final class HighlightUtil {
|
||||
else {
|
||||
if (PsiModifier.STATIC.equals(modifier) || privateOrProtected || PsiModifier.PACKAGE_LOCAL.equals(modifier)) {
|
||||
isAllowed = modifierOwnerParent instanceof PsiClass &&
|
||||
(PsiModifier.STATIC.equals(modifier) || ((PsiClass)modifierOwnerParent).getQualifiedName() != null) ||
|
||||
(PsiModifier.STATIC.equals(modifier) ||
|
||||
PsiUtil.isLanguageLevel16OrHigher(modifierOwnerParent) ||
|
||||
((PsiClass)modifierOwnerParent).getQualifiedName() != null) ||
|
||||
FileTypeUtils.isInServerPageFile(modifierOwnerParent) ||
|
||||
// non-physical dummy holder might not have FQN
|
||||
!modifierOwnerParent.isPhysical();
|
||||
@@ -1063,8 +1068,9 @@ public final class HighlightUtil {
|
||||
isAllowed &= !PsiModifier.ABSTRACT.equals(modifier);
|
||||
}
|
||||
|
||||
if (aClass.getContainingClass() instanceof PsiAnonymousClass) {
|
||||
isAllowed &= !privateOrProtected;
|
||||
if (aClass.getContainingClass() instanceof PsiAnonymousClass &&
|
||||
privateOrProtected && !PsiUtil.isLanguageLevel16OrHigher(modifierOwnerParent)) {
|
||||
isAllowed = false;
|
||||
}
|
||||
}
|
||||
if (PsiModifier.NON_SEALED.equals(modifier) && !aClass.hasModifierProperty(PsiModifier.SEALED)) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//statics in inner -- in Java 16 allowed everywhere
|
||||
public class a {
|
||||
<error descr="Class 'a' is public, should be declared in a file named 'a.java'">public class a</error> {
|
||||
|
||||
static final Number x = null;
|
||||
static final int ix = x== null ? 4 : 3;
|
||||
@@ -83,7 +83,7 @@ public class a {
|
||||
|
||||
void withanonymous() {
|
||||
new Object() {
|
||||
<error descr="Modifier 'private' not allowed here">private</error> class RT {}
|
||||
private class RT {}
|
||||
private void method() {}
|
||||
private int myI;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
public class PrivateRecordInsideAnonymous {
|
||||
void foo() {
|
||||
new Object() {
|
||||
private record Foo() { }
|
||||
};
|
||||
class Local {
|
||||
private class Priv {}
|
||||
protected class Prot {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,7 @@
|
||||
package com.intellij.java.codeInsight.daemon;
|
||||
|
||||
import com.intellij.JavaTestUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.light.LightRecordCanonicalConstructor;
|
||||
import com.intellij.psi.PsiDeclarationStatement;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.refactoring.introduceVariable.ReassignVariableUtil;
|
||||
import com.intellij.testFramework.LightProjectDescriptor;
|
||||
@@ -59,6 +58,9 @@ public class LightRecordsHighlightingTest extends LightJavaCodeInsightFixtureTes
|
||||
ReassignVariableUtil.registerDeclaration(getEditor(), decl, getTestRootDisposable());
|
||||
ReassignVariableUtil.reassign(getEditor());
|
||||
}
|
||||
public void testPrivateRecordInsideAnonymous() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
private void doTest() {
|
||||
myFixture.addClass("package java.lang; public abstract class Record {" +
|
||||
|
||||
Reference in New Issue
Block a user