diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/DefaultJavaErrorFixProvider.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/DefaultJavaErrorFixProvider.java index bbbc452c893b..7a54eff4016e 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/DefaultJavaErrorFixProvider.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/DefaultJavaErrorFixProvider.java @@ -1,4 +1,4 @@ -// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.codeInsight.daemon.impl.analysis; import com.intellij.codeInsight.ClassUtil; @@ -1139,10 +1139,10 @@ public final class DefaultJavaErrorFixProvider extends AbstractJavaErrorFixProvi private void createAccessFixes() { JavaFixesPusher accessFix = (error, sink) -> { - if (error.psi() instanceof PsiJavaCodeReferenceElement ref && - error.context().isStaticsScopeCorrect() && error.context().getElement() instanceof PsiJvmMember member) { - HighlightFixUtil.registerAccessQuickFixAction(sink, member, ref, null); - if (ref instanceof PsiReferenceExpression expression) { + if (error.context().isStaticsScopeCorrect() && error.context().getElement() instanceof PsiJvmMember member) { + PsiElement element = error.psi(); + HighlightFixUtil.registerAccessQuickFixAction(sink, member, element, null); + if (element instanceof PsiReferenceExpression expression) { sink.accept(myFactory.createRenameWrongRefFix(expression)); } } diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightFixUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightFixUtil.java index 3688351c0087..9f180a15c44b 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightFixUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightFixUtil.java @@ -1,4 +1,4 @@ -// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.codeInsight.daemon.impl.analysis; import com.intellij.codeInsight.daemon.QuickFixBundle; @@ -195,12 +195,11 @@ public final class HighlightFixUtil { */ static void registerAccessQuickFixAction(@NotNull Consumer info, @NotNull PsiJvmMember refElement, - @NotNull PsiJavaCodeReferenceElement place, + @NotNull PsiElement place, @Nullable PsiElement fileResolveScope) { PsiClass accessObjectClass = null; - PsiElement qualifier = place.getQualifier(); - if (qualifier instanceof PsiExpression) { - accessObjectClass = (PsiClass)PsiUtil.getAccessObjectClass((PsiExpression)qualifier).getElement(); + if (place instanceof PsiJavaCodeReferenceElement ref && ref.getQualifier() instanceof PsiExpression expr) { + accessObjectClass = (PsiClass)PsiUtil.getAccessObjectClass(expr).getElement(); } if (place instanceof PsiReferenceExpression ref) { FieldAccessFixer fixer = FieldAccessFixer.create(ref, refElement, place); diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/ModifierFixtureTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/ModifierFixtureTest.java new file mode 100644 index 000000000000..b37dc41e601b --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/ModifierFixtureTest.java @@ -0,0 +1,50 @@ +// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.codeInsight.daemon.impl.quickfix; + +import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase; + +public final class ModifierFixtureTest extends LightJavaCodeInsightFixtureTestCase { + + public void testUnreachableFunctionalTypeFromLambda() { + myFixture.addClass(""" + package one; + public interface Supplier { + T get(); + } + """); + myFixture.addClass(""" + package one; + class M1 {} // note package-private + """); + myFixture.addClass(""" + package one; + + public class M2 { + public static void test(Supplier supplier) { + System.out.println(supplier.get()); + } + + public static M1Sub create() { + return new M1Sub(); + } + + public static class M1Sub extends M1 { + + } + } + """); + myFixture.configureByText("M3.java", """ + package two; + + import one.*; + + public class M3 { + public static void main(String[] args) { + M2.test(() -> M2.create()); + } + } + """); + myFixture.findSingleIntention("Make 'M1' public"); + } + +}