diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
index 36eb5f0512ea..05da60992408 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
@@ -904,9 +904,11 @@ public class HighlightUtil extends HighlightUtilBase {
else {
//noinspection DuplicateExpressions
if (PsiModifier.STATIC.equals(modifier) || privateOrProtected || PsiModifier.PACKAGE_LOCAL.equals(modifier)) {
- isAllowed = modifierOwnerParent instanceof PsiClass &&
+ isAllowed = modifierOwnerParent instanceof PsiClass && ((PsiClass)modifierOwnerParent).getQualifiedName() != null ||
+ modifierOwnerParent instanceof PsiDeclarationStatement && aClass.isRecord() ||
+ FileTypeUtils.isInServerPageFile(modifierOwnerParent) ||
// non-physical dummy holder might not have FQN
- ((PsiClass)modifierOwnerParent).getQualifiedName() != null || FileTypeUtils.isInServerPageFile(modifierOwnerParent) || !modifierOwnerParent.isPhysical();
+ !modifierOwnerParent.isPhysical();
}
if (privateOrProtected && !isAllowed) {
fix = QUICK_FIX_FACTORY.createChangeModifierFix();
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingRecords/LocalRecords.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingRecords/LocalRecords.java
new file mode 100644
index 000000000000..0c6a1dd6d95c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingRecords/LocalRecords.java
@@ -0,0 +1,27 @@
+class Foo {
+ void test() {
+ record NoComponent() {}
+
+ static record DeclaredStatic() {}
+ }
+
+ static int STATIC_VAR = 3;
+
+ int instanceVar;
+
+ void capture() {
+ int outerLocal = 2;
+ final int compileTimeConstant = 3;
+ record Local() {
+ static int X = 2;
+
+ void test() {
+ System.out.println(STATIC_VAR);
+ System.out.println(instanceVar);
+ System.out.println(outerLocal);
+ System.out.println(X);
+ System.out.println(compileTimeConstant);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightRecordsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightRecordsHighlightingTest.java
index 84b49cd803ca..7d1f46a81380 100644
--- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightRecordsHighlightingTest.java
+++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightRecordsHighlightingTest.java
@@ -30,6 +30,9 @@ public class LightRecordsHighlightingTest extends LightJavaCodeInsightFixtureTes
public void testRecordCompactConstructors() {
doTest();
}
+ public void testLocalRecords() {
+ doTest();
+ }
private void doTest() {
myFixture.addClass("package java.lang; public abstract class Record {" +