From ad86a5171df4892a494e57ea2328be6ad8abd7a2 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Wed, 20 Jul 2016 19:47:43 +0200 Subject: [PATCH] introduce variable: suggest upper bound of captured wildcard --- java/java-psi-api/src/com/intellij/psi/GenericsUtil.java | 2 +- .../CapturedWildcardUpperBoundSuggestedAsType.after.java | 9 +++++++++ .../CapturedWildcardUpperBoundSuggestedAsType.java | 9 +++++++++ .../com/intellij/refactoring/IntroduceVariableTest.java | 4 ++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/introduceVariable/CapturedWildcardUpperBoundSuggestedAsType.after.java create mode 100644 java/java-tests/testData/refactoring/introduceVariable/CapturedWildcardUpperBoundSuggestedAsType.java diff --git a/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java b/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java index 7adbeea3435b..45605b6c727d 100644 --- a/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java @@ -298,7 +298,7 @@ public class GenericsUtil { public static PsiType getVariableTypeByExpressionType(@Nullable PsiType type, final boolean openCaptured) { if (type == null) return null; if (type instanceof PsiCapturedWildcardType) { - type = ((PsiCapturedWildcardType)type).getWildcard(); + type = ((PsiCapturedWildcardType)type).getUpperBound(); } PsiType transformed = type.accept(new PsiTypeVisitor() { @Override diff --git a/java/java-tests/testData/refactoring/introduceVariable/CapturedWildcardUpperBoundSuggestedAsType.after.java b/java/java-tests/testData/refactoring/introduceVariable/CapturedWildcardUpperBoundSuggestedAsType.after.java new file mode 100644 index 000000000000..af406f7750a7 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/CapturedWildcardUpperBoundSuggestedAsType.after.java @@ -0,0 +1,9 @@ +interface I {} + +abstract class Test { + void foo(Test t) { + I m = t.get(); + } + + abstract T get(); +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/introduceVariable/CapturedWildcardUpperBoundSuggestedAsType.java b/java/java-tests/testData/refactoring/introduceVariable/CapturedWildcardUpperBoundSuggestedAsType.java new file mode 100644 index 000000000000..ee03c88653bc --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/CapturedWildcardUpperBoundSuggestedAsType.java @@ -0,0 +1,9 @@ +interface I {} + +abstract class Test { + void foo(Test t) { + t.get() + } + + abstract T get(); +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java index fbe86084b54a..56034a69ca86 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java @@ -520,6 +520,10 @@ public class IntroduceVariableTest extends LightCodeInsightTestCase { doTest(new MockIntroduceVariableHandler("m", false, false, false, "java.util.function.IntFunction[]>")); } + public void testCapturedWildcardUpperBoundSuggestedAsType() throws Exception { + doTest(new MockIntroduceVariableHandler("m", false, false, false, "I")); + } + public void testReturnNonExportedArray() { doTest(new MockIntroduceVariableHandler("i", false, false, false, "java.io.File[]") { @Override