From bef566cf0ed7f8a217630f629ef3664798727de3 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 13 Feb 2026 12:11:10 +0100 Subject: [PATCH] IDEA-381369 [java]: don't offer Create Field fix on method references GitOrigin-RevId: 1c63811f47a794614121a45f48f8df02b69baaac --- .../impl/quickfix/DefaultQuickFixProvider.java | 13 ++++++++----- .../beforeMethodReference.java | 17 +++++++++++++++++ .../impl/quickfix/CreateFieldFromUsageTest.java | 15 ++++----------- 3 files changed, 29 insertions(+), 16 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeMethodReference.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/DefaultQuickFixProvider.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/DefaultQuickFixProvider.java index 5da8b2192424..d111aafb45f1 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/DefaultQuickFixProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/DefaultQuickFixProvider.java @@ -1,4 +1,4 @@ -// Copyright 2000-2024 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.quickfix; import com.intellij.codeInsight.daemon.QuickFixActionRegistrar; @@ -19,6 +19,7 @@ import com.intellij.psi.PsiJavaCodeReferenceCodeFragment; import com.intellij.psi.PsiJavaCodeReferenceElement; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiMethodCallExpression; +import com.intellij.psi.PsiMethodReferenceExpression; import com.intellij.psi.PsiNewExpression; import com.intellij.psi.PsiReferenceExpression; import com.intellij.psi.PsiTypeElement; @@ -151,11 +152,13 @@ public class DefaultQuickFixProvider extends UnresolvedReferenceQuickFixProvider result.add(kind == VariableKind.LOCAL_VARIABLE ? PriorityIntentionActionWrapper.highPriority(createLocalFix) : createLocalFix); } - List createFieldFixes = CreateFieldFromUsage.generateActions(refExpr); - if (kind == VariableKind.FIELD) { - createFieldFixes = ContainerUtil.map(createFieldFixes, fix -> PriorityIntentionActionWrapper.highPriority(fix)); + if (!(refExpr instanceof PsiMethodReferenceExpression)) { + List createFieldFixes = CreateFieldFromUsage.generateActions(refExpr); + if (kind == VariableKind.FIELD) { + createFieldFixes = ContainerUtil.map(createFieldFixes, fix -> PriorityIntentionActionWrapper.highPriority(fix)); + } + result.addAll(createFieldFixes); } - result.addAll(createFieldFixes); if (!isQualified) { IntentionAction createParameterFix = new CreateParameterFromUsageFix(refExpr); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeMethodReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeMethodReference.java new file mode 100644 index 000000000000..0289f6a07e2e --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeMethodReference.java @@ -0,0 +1,17 @@ +// "Create field 'foo' in 'Target'" "false" + +public class MethodReference { + void test() { + Supplier supplier = Target::new; + Supplier s = Target::foo; + } +} + +class Target { + + private Target() {} + + private static Target foo() { + return null; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/CreateFieldFromUsageTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/CreateFieldFromUsageTest.java index 411afcdb0a6f..f88e92826470 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/CreateFieldFromUsageTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/CreateFieldFromUsageTest.java @@ -1,4 +1,4 @@ -// Copyright 2000-2023 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.quickfix; import com.intellij.application.options.CodeStyle; @@ -44,6 +44,7 @@ public class CreateFieldFromUsageTest extends LightQuickFixTestCase { public void testReferenceInCall() { doSingleTest(); } public void testReferenceLambdaType() { doSingleTest(); } public void testReferenceNull() { doSingleTest(); } + public void testWithAlignment() { final CommonCodeStyleSettings settings = CodeStyle.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE); boolean old = settings.ALIGN_GROUP_FIELD_DECLARATIONS; @@ -69,21 +70,13 @@ public class CreateFieldFromUsageTest extends LightQuickFixTestCase { public void testDependantConstant() { doSingleTest(); } public void testDependantConstant2() { doSingleTest(); } - - public void testArrayBraces() { - doSingleTest(); - } - + public void testMethodReference() { doSingleTest(); } + public void testArrayBraces() { doSingleTest(); } public void testInnerGeneric() { doSingleTest(); } - public void testInnerGenericArray() { doSingleTest(); } - public void testFromUnfinishedAnonymousClass() { doSingleTest(); } - public void testCreateFromAnnotationParameterIncorrectCode() { doSingleTest(); } - public void testAbstractClassIncorrectCode() { doSingleTest(); } - public void testBrokenCode() { doSingleTest(); } protected void doSingleTest() {