From 3003df26669a78ef550e72c4d9983aed7c7a1464 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 19 May 2014 13:35:39 +0400 Subject: [PATCH] change class signature: process diamond (IDEA-125236) --- .../ChangeClassSignatureProcessor.java | 7 +++++++ .../changeClassSignature/AddParamDiamond.java | 5 +++++ .../changeClassSignature/AddParamDiamond.java.after | 5 +++++ .../ChangeClassSignatureTest.java | 12 ++++++++++++ 4 files changed, 29 insertions(+) create mode 100644 java/java-tests/testData/refactoring/changeClassSignature/AddParamDiamond.java create mode 100644 java/java-tests/testData/refactoring/changeClassSignature/AddParamDiamond.java.after diff --git a/java/java-impl/src/com/intellij/refactoring/changeClassSignature/ChangeClassSignatureProcessor.java b/java/java-impl/src/com/intellij/refactoring/changeClassSignature/ChangeClassSignatureProcessor.java index a32dc464f7fa..9d157a9f040e 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeClassSignature/ChangeClassSignatureProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/changeClassSignature/ChangeClassSignatureProcessor.java @@ -96,6 +96,13 @@ public class ChangeClassSignatureProcessor extends BaseRefactoringProcessor { PsiJavaCodeReferenceElement referenceElement = (PsiJavaCodeReferenceElement)reference.getElement(); PsiElement parent = referenceElement.getParent(); if (parent instanceof PsiTypeElement && parent.getParent() instanceof PsiInstanceOfExpression) continue; + if (parent instanceof PsiNewExpression && PsiUtil.isLanguageLevel7OrHigher(parent)) { + final PsiReferenceParameterList parameterList = referenceElement.getParameterList(); + if (parameterList != null) { + final PsiTypeElement[] parameterElements = parameterList.getTypeParameterElements(); + if (parameterElements.length == 1 && parameterElements[0].getType() instanceof PsiDiamondType) continue; + } + } if (parent instanceof PsiTypeElement || parent instanceof PsiNewExpression || parent instanceof PsiAnonymousClass || parent instanceof PsiReferenceList) { if (!hadTypeParameters || referenceElement.getTypeParameters().length > 0) { diff --git a/java/java-tests/testData/refactoring/changeClassSignature/AddParamDiamond.java b/java/java-tests/testData/refactoring/changeClassSignature/AddParamDiamond.java new file mode 100644 index 000000000000..48402db1277f --- /dev/null +++ b/java/java-tests/testData/refactoring/changeClassSignature/AddParamDiamond.java @@ -0,0 +1,5 @@ +class QueryParameter {} + +class UUU { + QueryParameter q = new QueryParameter<>(); +} diff --git a/java/java-tests/testData/refactoring/changeClassSignature/AddParamDiamond.java.after b/java/java-tests/testData/refactoring/changeClassSignature/AddParamDiamond.java.after new file mode 100644 index 000000000000..02ed54af884d --- /dev/null +++ b/java/java-tests/testData/refactoring/changeClassSignature/AddParamDiamond.java.after @@ -0,0 +1,5 @@ +class QueryParameter {} + +class UUU { + QueryParameter q = new QueryParameter<>(); +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/changeClassSignature/ChangeClassSignatureTest.java b/java/java-tests/testSrc/com/intellij/refactoring/changeClassSignature/ChangeClassSignatureTest.java index d3cbca99792e..8478f17aa649 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/changeClassSignature/ChangeClassSignatureTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/changeClassSignature/ChangeClassSignatureTest.java @@ -85,6 +85,18 @@ public class ChangeClassSignatureTest extends LightRefactoringTestCase { }); } + public void testAddParamDiamond() throws Exception { + doTest(new GenParams() { + @Override + public TypeParameterInfo[] gen(PsiClass aClass) throws IncorrectOperationException { + return new TypeParameterInfo[] { + new TypeParameterInfo(0), + new TypeParameterInfo(aClass, "I", "Integer") + }; + } + }); + } + public void testAddOneFirst() throws Exception { doTest(new GenParams() { @Override