From 8f1873cbcfcb225149895060366c740275f8503a Mon Sep 17 00:00:00 2001 From: "Roman.Ivanov" Date: Mon, 23 Jul 2018 10:58:21 +0700 Subject: [PATCH] CreateTypeParameter: don't suggest fix inside type parameter IDEA-195832 --- .../CreateTypeParameterFromUsageFix.java | 2 +- .../afterTypeParameter.java | 40 +++++++++++++++++++ .../beforeTypeParameter.java | 40 +++++++++++++++++++ 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createTypeParameterFromUsage/afterTypeParameter.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createTypeParameterFromUsage/beforeTypeParameter.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateTypeParameterFromUsageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateTypeParameterFromUsageFix.java index 56fdf5402d1e..9f860e1a2640 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateTypeParameterFromUsageFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateTypeParameterFromUsageFix.java @@ -185,7 +185,7 @@ public class CreateTypeParameterFromUsageFix extends BaseIntentionAction { if (element instanceof PsiField && ((PsiField)element).hasModifierProperty(PsiModifier.STATIC)) { break; } - if (element instanceof PsiMethod || element instanceof PsiClass) { + if (element instanceof PsiMethod || (element instanceof PsiClass && !(element instanceof PsiTypeParameter))) { if (((PsiMember)element).getName() != null) { parents.add((PsiNameIdentifierOwner)element); if (findFirstOnly) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createTypeParameterFromUsage/afterTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createTypeParameterFromUsage/afterTypeParameter.java new file mode 100644 index 000000000000..d26409fc34e0 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createTypeParameterFromUsage/afterTypeParameter.java @@ -0,0 +1,40 @@ +// "Create type parameter 'U'" "true" + +public class Helpers { + + interface RunAlgebra { + + } + + interface ReturnAlgebra { + + } + + interface SomeAlgebra { + + } + + interface AlgebraImplementation extends ReturnAlgebra, SomeAlgebra { + + } + + public static void giveMeAlgebraImplementation(RunAlgebra algebra) { + + } + + public static > RunAlgebra aReturn() { + return null; + } + + public static > RunAlgebra aReturn(String overload) { + return null; + } + + public static , + AI extends SomeAlgebra, U> RunAlgebra consumeReturn(A returnAlgebra) { + return null; + } + + +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createTypeParameterFromUsage/beforeTypeParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createTypeParameterFromUsage/beforeTypeParameter.java new file mode 100644 index 000000000000..8a76a96210ca --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createTypeParameterFromUsage/beforeTypeParameter.java @@ -0,0 +1,40 @@ +// "Create type parameter 'U'" "true" + +public class Helpers { + + interface RunAlgebra { + + } + + interface ReturnAlgebra { + + } + + interface SomeAlgebra { + + } + + interface AlgebraImplementation extends ReturnAlgebra, SomeAlgebra { + + } + + public static void giveMeAlgebraImplementation(RunAlgebra algebra) { + + } + + public static > RunAlgebra aReturn() { + return null; + } + + public static > RunAlgebra aReturn(String overload) { + return null; + } + + public static >, + AI extends SomeAlgebra> RunAlgebra consumeReturn(A returnAlgebra) { + return null; + } + + +} \ No newline at end of file