diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index 618e5e8701ac..6c4bec73d2f4 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -540,6 +540,7 @@ public class HighlightUtil { if (errorResult != null && valueType != null) { IntentionAction fix = QUICK_FIX_FACTORY.createMethodReturnFix(method, valueType, true); QuickFixAction.registerQuickFixAction(errorResult, fix); + ChangeParameterClassFix.registerQuickFixAction(returnType, valueType, errorResult); if (returnType instanceof PsiArrayType && TypeConversionUtil.isAssignable(((PsiArrayType)returnType).getComponentType(), valueType)) { QuickFixAction.registerQuickFixAction(errorResult, new SurroundWithArrayFix(null) { @Override @@ -2507,7 +2508,7 @@ public class HighlightUtil { QuickFixAction.registerQuickFixAction(highlightInfo, action); } } - ChangeParameterClassFix.registerQuickFixAction(parameter, itemType, highlightInfo); + ChangeParameterClassFix.registerQuickFixAction(parameter.getType(), itemType, highlightInfo); } @Nullable diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeParameterClassFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeParameterClassFix.java index 7182aaf6d974..c4dab56f1f17 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeParameterClassFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeParameterClassFix.java @@ -114,16 +114,16 @@ public class ChangeParameterClassFix extends ExtendsListFix { UndoUtil.markPsiFileForUndo(file); } - public static void registerQuickFixAction(PsiVariable variable, PsiType returnType, HighlightInfo info) { - final PsiClass returnClass = PsiUtil.resolveClassInClassTypeOnly(returnType); - final PsiType variableType = variable.getType(); - final PsiClass variableClass = PsiUtil.resolveClassInClassTypeOnly(variableType); + public static void registerQuickFixAction(PsiType lType, PsiType rType, HighlightInfo info) { + final PsiClass lClass = PsiUtil.resolveClassInClassTypeOnly(lType); + final PsiClass rClass = PsiUtil.resolveClassInClassTypeOnly(rType); - if (returnClass == null || variableClass == null) return; - if (returnClass instanceof PsiAnonymousClass) return; - if (returnClass.isInheritor(variableClass, true)) return; + if (rClass == null || lClass == null) return; + if (rClass instanceof PsiAnonymousClass) return; + if (rClass.isInheritor(lClass, true)) return; + if (lClass.isInheritor(rClass, true)) return; - QuickFixAction.registerQuickFixAction(info, new ChangeParameterClassFix(returnClass, (PsiClassType)variableType)); + QuickFixAction.registerQuickFixAction(info, new ChangeParameterClassFix(rClass, (PsiClassType)lType)); } public static void registerQuickFixActions(PsiCall methodCall, PsiExpressionList list, HighlightInfo highlightInfo) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/afterReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/afterReturn.java new file mode 100644 index 000000000000..c9e097aefe1a --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/afterReturn.java @@ -0,0 +1,9 @@ +// "Make 'Foo' implement 'Foo.Bar'" "true" +public class Foo implements Foo.Bar { + + public Bar getBar() { + return this; + } + + public interface Bar {} +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeAssignmentToInheritor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeAssignmentToInheritor.java new file mode 100644 index 000000000000..70cc57e5f9ff --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeAssignmentToInheritor.java @@ -0,0 +1,10 @@ +// "Make 'Foo' implement 'Foo.Bar'" "false" +public class Foo { + + public void getBar() { + Bar f = new Foo(); + } + + public class Bar extends Foo { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeReturn.java new file mode 100644 index 000000000000..bff1eb33322e --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass/beforeReturn.java @@ -0,0 +1,9 @@ +// "Make 'Foo' implement 'Foo.Bar'" "true" +public class Foo { + + public Bar getBar() { + return this; + } + + public interface Bar {} +} \ No newline at end of file