From 41916174b600bbf7ec59fc4ab5496571279e7546 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 2 Nov 2015 14:14:18 +0100 Subject: [PATCH] return Object if denotable type is needed for functional expression (e.g. lambda expression) type EA-75552 - IOE: PsiElementFactoryImpl.createField --- .../quickfix/CreatePropertyFromUsageFix.java | 3 ++- .../refactoring/util/RefactoringUtil.java | 6 ++++++ .../afterPassedLambda.java | 16 ++++++++++++++++ .../beforePassedLambda.java | 6 ++++++ .../quickFix/CreatePropertyFromUsageTest.java | 2 +- 5 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/afterPassedLambda.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/beforePassedLambda.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreatePropertyFromUsageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreatePropertyFromUsageFix.java index 72b608bfce94..50449e141dfc 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreatePropertyFromUsageFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreatePropertyFromUsageFix.java @@ -37,6 +37,7 @@ import com.intellij.psi.codeStyle.VariableKind; import com.intellij.psi.util.PropertyUtil; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; +import com.intellij.refactoring.util.RefactoringUtil; import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; @@ -215,7 +216,7 @@ public class CreatePropertyFromUsageFix extends CreateFromUsageBaseFix implement expectedTypes = new PsiType[]{type}; } else { - type = myMethodCall.getArgumentList().getExpressions()[0].getType(); + type = RefactoringUtil.getTypeByExpression(myMethodCall.getArgumentList().getExpressions()[0]); if (type == null || PsiType.NULL.equals(type)) type = PsiType.getJavaLangObject(manager, myMethodCall.getResolveScope()); expectedTypes = new PsiType[]{type}; } diff --git a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java index 453516c5ef04..fcd75738ff81 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java @@ -416,6 +416,12 @@ public class RefactoringUtil { } } + if (type instanceof PsiLambdaParameterType || + type instanceof PsiLambdaExpressionType || + type instanceof PsiMethodReferenceType) { + type = factory.createTypeByFQClassName(CommonClassNames.JAVA_LANG_OBJECT, expr.getResolveScope()); + } + return type; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/afterPassedLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/afterPassedLambda.java new file mode 100644 index 000000000000..a019ca5a4403 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/afterPassedLambda.java @@ -0,0 +1,16 @@ +// "Create property" "true" +class Calculator { + private Object i; + + { + setI(() -> {}); + } + + public void setI(Object i) { + this.i = i; + } + + public Object getI() { + return i; + } +} diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/beforePassedLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/beforePassedLambda.java new file mode 100644 index 000000000000..04aae73fe98e --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createPropertyFromUsage/beforePassedLambda.java @@ -0,0 +1,6 @@ +// "Create property" "true" +class Calculator { + { + setI(() -> {}); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/CreatePropertyFromUsageTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/CreatePropertyFromUsageTest.java index 1aede5527737..d96ae78b5283 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/CreatePropertyFromUsageTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/CreatePropertyFromUsageTest.java @@ -27,6 +27,6 @@ public class CreatePropertyFromUsageTest extends LightQuickFixParameterizedTestC @Override protected LanguageLevel getLanguageLevel() { - return LanguageLevel.JDK_1_5; + return LanguageLevel.JDK_1_8; } }