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 {" +