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 72718507f959..404fe8b062cf 100644 --- a/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java @@ -307,8 +307,10 @@ public class GenericsUtil { if (refClass instanceof PsiAnonymousClass) { type = ((PsiAnonymousClass)refClass).getBaseClassType(); } - if (type instanceof PsiCapturedWildcardType) { - type = ((PsiCapturedWildcardType)type).getUpperBound(); + PsiType deepComponentType = type.getDeepComponentType(); + if (deepComponentType instanceof PsiCapturedWildcardType) { + type = PsiTypesUtil.createArrayType(((PsiCapturedWildcardType)deepComponentType).getUpperBound(), + type.getArrayDimensions()); } PsiType transformed = type.accept(new PsiTypeVisitor() { @Override diff --git a/java/java-tests/testData/refactoring/introduceVariable/ArrayOfCapturedWildcardUpperBoundSuggestedAsType.after.java b/java/java-tests/testData/refactoring/introduceVariable/ArrayOfCapturedWildcardUpperBoundSuggestedAsType.after.java new file mode 100644 index 000000000000..632bdaa5c8eb --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/ArrayOfCapturedWildcardUpperBoundSuggestedAsType.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/ArrayOfCapturedWildcardUpperBoundSuggestedAsType.java b/java/java-tests/testData/refactoring/introduceVariable/ArrayOfCapturedWildcardUpperBoundSuggestedAsType.java new file mode 100644 index 000000000000..49fe8840fe77 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/ArrayOfCapturedWildcardUpperBoundSuggestedAsType.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/java/refactoring/IntroduceVariableTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceVariableTest.java index b4ab51c76563..fc44ddd56d3e 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceVariableTest.java @@ -670,6 +670,10 @@ public class IntroduceVariableTest extends LightCodeInsightTestCase { public void testCapturedWildcardUpperBoundSuggestedAsType() { doTest(new MockIntroduceVariableHandler("m", false, false, false, "I")); } + + public void testArrayOfCapturedWildcardUpperBoundSuggestedAsType() { + doTest(new MockIntroduceVariableHandler("m", false, false, false, "I[]")); + } public void testReturnNonExportedArray() { doTest(new MockIntroduceVariableHandler("i", false, false, false, "java.io.File[]") {