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 581cc289e8e4..fe837a9adefc 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 @@ -231,11 +231,15 @@ public class HighlightFixUtil { for (IntentionAction action : getChangeVariableTypeFixes(parameter, itemType)) { QuickFixAction.registerQuickFixAction(highlightInfo, action); } + registerChangeReturnTypeFix(highlightInfo, expr, parameter.getType()); + } + + static void registerChangeReturnTypeFix(@NotNull HighlightInfo highlightInfo, @Nullable PsiExpression expr, @NotNull PsiType toType) { if (expr instanceof PsiMethodCallExpression) { final PsiMethod method = ((PsiMethodCallExpression)expr).resolveMethod(); if (method != null) { QuickFixAction.registerQuickFixAction(highlightInfo, PriorityActionWrapper - .lowPriority(method, QUICK_FIX_FACTORY.createMethodReturnFix(method, parameter.getType(), true))); + .lowPriority(method, QUICK_FIX_FACTORY.createMethodReturnFix(method, toType, true))); } } } 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 47871da44cf2..c16e38f5e3b4 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 @@ -499,6 +499,7 @@ public class HighlightUtil extends HighlightUtilBase { QuickFixAction.registerQuickFixAction(highlightInfo, QUICK_FIX_FACTORY.createWrapWithAdapterFix(lType, expression)); AddTypeArgumentsConditionalFix.register(highlightInfo, expression, lType); HighlightFixUtil.registerCollectionToArrayFixAction(highlightInfo, rType, lType, expression); + HighlightFixUtil.registerChangeReturnTypeFix(highlightInfo, expression, lType); } ChangeNewOperatorTypeFix.register(highlightInfo, expression, lType); return highlightInfo; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/afterReturnAnotherMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/afterReturnAnotherMethod.java new file mode 100644 index 000000000000..4228e61895eb --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/afterReturnAnotherMethod.java @@ -0,0 +1,10 @@ +// "Make 'bar' return 'java.lang.String'" "true" +public class Foo { + String foo() { + return bar(); + } + + String bar() { + return null; + } +} diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/beforeReturnAnotherMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/beforeReturnAnotherMethod.java new file mode 100644 index 000000000000..8b8ea7a0caa5 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/methodReturn/beforeReturnAnotherMethod.java @@ -0,0 +1,9 @@ +// "Make 'bar' return 'java.lang.String'" "true" +public class Foo { + String foo() { + return bar(); + } + + void bar() { + } +}