From 0c7adaaacb924f28be8eb75cf67d2fd181562088 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Thu, 6 Mar 2014 10:54:51 +0100 Subject: [PATCH] java: split multi-catch intention simplified; test data made adequate --- .../exceptions/SplitMultiCatchIntention.java | 26 +++++-------------- .../exceptions/splitMultiCatch/TypeAnno.java | 17 ++++++++++-- .../splitMultiCatch/TypeAnno_after.java | 17 ++++++++++-- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/exceptions/SplitMultiCatchIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/exceptions/SplitMultiCatchIntention.java index c58edc18b433..d6de66af803a 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/exceptions/SplitMultiCatchIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/exceptions/SplitMultiCatchIntention.java @@ -16,15 +16,12 @@ package com.siyeh.ipp.exceptions; import com.intellij.psi.*; -import com.intellij.psi.impl.PsiImplUtil; -import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.util.IncorrectOperationException; import com.siyeh.ipp.base.Intention; import com.siyeh.ipp.base.PsiElementPredicate; import org.jetbrains.annotations.NotNull; -import java.util.List; - import static com.intellij.util.ObjectUtils.assertNotNull; public class SplitMultiCatchIntention extends Intention { @@ -56,27 +53,16 @@ public class SplitMultiCatchIntention extends Intention { } final PsiElementFactory factory = JavaPsiFacade.getElementFactory(element.getProject()); - final List disjunctions = PsiTreeUtil.getChildrenOfTypeAsList(parameter.getTypeElement(), PsiTypeElement.class); - for (int i = 0; i < disjunctions.size(); i++) { + final JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(element.getProject()); + for (PsiType disjunction : ((PsiDisjunctionType)type).getDisjunctions()) { final PsiCatchSection copy = (PsiCatchSection)catchSection.copy(); final PsiTypeElement typeElement = assertNotNull(assertNotNull(copy.getParameter()).getTypeElement()); - final PsiTypeElement newTypeElement = factory.createTypeElementFromText(disjunctions.get(i).getText(), catchSection); - typeElement.replace(newTypeElement); + final PsiTypeElement newTypeElement = factory.createTypeElementFromText(disjunction.getCanonicalText(true), catchSection); + final PsiElement replaced = typeElement.replace(newTypeElement); grandParent.addBefore(copy, catchSection); - - if (i == 0) { - // clear the original from type annotations: they belong to the first disjunction and should not appear in others - final PsiModifierList modifierList = parameter.getModifierList(); - if (modifierList != null) { - for (PsiAnnotation annotation : modifierList.getAnnotations()) { - if (PsiImplUtil.findApplicableTarget(annotation, PsiAnnotation.TargetType.TYPE_USE) == PsiAnnotation.TargetType.TYPE_USE) { - annotation.delete(); - } - } - } - } + styleManager.shortenClassReferences(replaced); } catchSection.delete(); diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/exceptions/splitMultiCatch/TypeAnno.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/exceptions/splitMultiCatch/TypeAnno.java index 9768360bedb6..51b86343d0a8 100644 --- a/plugins/IntentionPowerPak/test/com/siyeh/ipp/exceptions/splitMultiCatch/TypeAnno.java +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/exceptions/splitMultiCatch/TypeAnno.java @@ -1,5 +1,18 @@ -package com.siyeh.ipp.exceptions.splitMultiCatch; - +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import java.io.*; import java.lang.annotation.*; diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/exceptions/splitMultiCatch/TypeAnno_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/exceptions/splitMultiCatch/TypeAnno_after.java index d8d23ae53a2a..019809da9690 100644 --- a/plugins/IntentionPowerPak/test/com/siyeh/ipp/exceptions/splitMultiCatch/TypeAnno_after.java +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/exceptions/splitMultiCatch/TypeAnno_after.java @@ -1,5 +1,18 @@ -package com.siyeh.ipp.exceptions.splitMultiCatch; - +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import java.io.*; import java.lang.annotation.*;