diff --git a/java/java-impl/src/com/intellij/lang/java/actions/CreateFieldAction.kt b/java/java-impl/src/com/intellij/lang/java/actions/CreateFieldAction.kt index c900513656a9..ab29107e719b 100644 --- a/java/java-impl/src/com/intellij/lang/java/actions/CreateFieldAction.kt +++ b/java/java-impl/src/com/intellij/lang/java/actions/CreateFieldAction.kt @@ -68,7 +68,10 @@ internal class JavaFieldRenderer( } fun renderField(): PsiField { - val fieldType = if (expectedTypes.isNotEmpty()) expectedTypes[0].type else PsiTypes.intType() + var fieldType = if (expectedTypes.isNotEmpty()) expectedTypes[0].type else PsiTypes.intType() + //something completely broken in this file, let's propose default value - Object + if (fieldType is PsiLambdaParameterType || + fieldType is PsiLambdaExpressionType) fieldType = PsiType.getJavaLangObject(targetClass.manager, targetClass.getResolveScope()) val field = JavaPsiFacade.getElementFactory(project).createField(request.fieldName, fieldType) // clean template modifiers diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterReferenceLambdaType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterReferenceLambdaType.java new file mode 100644 index 000000000000..ae32c179e5e5 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/afterReferenceLambdaType.java @@ -0,0 +1,15 @@ +// "Create constant field 'MODULE' in 'Usage'" "true" +class Usage { + + private static final MODULE = ; + + void usage() { + var type = ()-> System.out.println(""); + switch (type) { + case CLASS -> symbols.add(1); + case INTERFACE -> symbols.add(2); + case MODULE -> symbols.add(42); + } + } +} + diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeReferenceLambdaType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeReferenceLambdaType.java new file mode 100644 index 000000000000..99706a3bcd6a --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromUsage/beforeReferenceLambdaType.java @@ -0,0 +1,13 @@ +// "Create constant field 'MODULE' in 'Usage'" "true" +class Usage { + + void usage() { + var type = ()-> System.out.println(""); + switch (type) { + case CLASS -> symbols.add(1); + case INTERFACE -> symbols.add(2); + case MODULE -> symbols.add(42); + } + } +} + 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 b75c19230bbd..a6fb4a644c91 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 @@ -42,6 +42,7 @@ public class CreateFieldFromUsageTest extends LightQuickFixTestCase { public void testCreateFromEqualsToPrimitiveType() { doSingleTest(); } public void testInsideInterface() { doSingleTest(); } public void testReferenceInCall() { doSingleTest(); } + public void testReferenceLambdaType() { doSingleTest(); } public void testWithAlignment() { final CommonCodeStyleSettings settings = CodeStyle.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE); boolean old = settings.ALIGN_GROUP_FIELD_DECLARATIONS;