From 8e2bf508e02996748ab87d1eb1aaad8c94335a8a Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 23 Apr 2019 19:53:53 +0200 Subject: [PATCH] normalize array of captures type (IDEA-211139) GitOrigin-RevId: bfb2392bd4cd5e435ad6a3e8a825b068e17fb5fc --- java/java-psi-api/src/com/intellij/psi/GenericsUtil.java | 6 ++++-- ...fCapturedWildcardUpperBoundSuggestedAsType.after.java | 9 +++++++++ ...ArrayOfCapturedWildcardUpperBoundSuggestedAsType.java | 9 +++++++++ .../intellij/java/refactoring/IntroduceVariableTest.java | 4 ++++ 4 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/refactoring/introduceVariable/ArrayOfCapturedWildcardUpperBoundSuggestedAsType.after.java create mode 100644 java/java-tests/testData/refactoring/introduceVariable/ArrayOfCapturedWildcardUpperBoundSuggestedAsType.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 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[]") {