diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java index b822de6ba2e6..db457dcedd87 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java @@ -21,6 +21,7 @@ import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; +import com.intellij.psi.impl.PsiImplUtil; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTypesUtil; @@ -308,13 +309,13 @@ public class DataFlowInspectionBase extends AbstractBaseJavaLocalInspectionTool Set coveredSwitches = new HashSet<>(); Set trueLabels = StreamEx.of(trueSet).select(ConditionalGotoInstruction.class) .map(ConditionalGotoInstruction::getPsiAnchor).select(PsiExpression.class) - .filter(e -> SwitchUtils.getLabelStatementForLabel(e) != null).toSet(); + .filter(e -> PsiImplUtil.getSwitchLabel(e) != null).toSet(); Set falseLabels = StreamEx.of(falseSet).select(ConditionalGotoInstruction.class) .map(ConditionalGotoInstruction::getPsiAnchor).select(PsiExpression.class) - .filter(e -> SwitchUtils.getLabelStatementForLabel(e) != null).toSet(); + .filter(e -> PsiImplUtil.getSwitchLabel(e) != null).toSet(); for (PsiExpression label : trueLabels) { - PsiSwitchLabelStatementBase labelStatement = Objects.requireNonNull(SwitchUtils.getLabelStatementForLabel(label)); + PsiSwitchLabelStatementBase labelStatement = Objects.requireNonNull(PsiImplUtil.getSwitchLabel(label)); PsiSwitchBlock statement = labelStatement.getEnclosingSwitchBlock(); if (statement == null) continue; if (!StreamEx.iterate(labelStatement, Objects::nonNull, l -> PsiTreeUtil.getPrevSiblingOfType(l, PsiSwitchLabelStatementBase.class)) @@ -327,7 +328,7 @@ public class DataFlowInspectionBase extends AbstractBaseJavaLocalInspectionTool createUnwrapSwitchLabelFix()); } for (PsiExpression label : falseLabels) { - PsiSwitchLabelStatementBase labelStatement = Objects.requireNonNull(SwitchUtils.getLabelStatementForLabel(label)); + PsiSwitchLabelStatementBase labelStatement = Objects.requireNonNull(PsiImplUtil.getSwitchLabel(label)); if (!coveredSwitches.contains(labelStatement.getEnclosingSwitchBlock())) { holder.registerProblem(label, InspectionsBundle.message("dataflow.message.unreachable.switch.label"), new DeleteSwitchLabelFix(label)); @@ -730,7 +731,7 @@ public class DataFlowInspectionBase extends AbstractBaseJavaLocalInspectionTool } } else if (psiAnchor != null && - (!(psiAnchor instanceof PsiExpression) || SwitchUtils.getLabelStatementForLabel((PsiExpression)psiAnchor) == null) && + (!(psiAnchor instanceof PsiExpression) || PsiImplUtil.getSwitchLabel((PsiExpression)psiAnchor) == null) && !isFlagCheck(psiAnchor)) { boolean evaluatesToTrue = trueSet.contains(instruction); final PsiElement parent = psiAnchor.getParent(); diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/fix/DeleteSwitchLabelFix.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/fix/DeleteSwitchLabelFix.java index aa9ddd62781d..8e43017c6700 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/fix/DeleteSwitchLabelFix.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/fix/DeleteSwitchLabelFix.java @@ -5,13 +5,13 @@ import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.project.Project; import com.intellij.psi.*; +import com.intellij.psi.impl.PsiImplUtil; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.ObjectUtils; import com.siyeh.ig.psiutils.CommentTracker; import com.siyeh.ig.psiutils.ControlFlowUtils; -import com.siyeh.ig.psiutils.SwitchUtils; import one.util.streamex.StreamEx; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class DeleteSwitchLabelFix implements LocalQuickFix { public DeleteSwitchLabelFix(@NotNull PsiExpression label) { myName = label.getText(); - PsiSwitchLabelStatementBase labelStatement = Objects.requireNonNull(SwitchUtils.getLabelStatementForLabel(label)); + PsiSwitchLabelStatementBase labelStatement = Objects.requireNonNull(PsiImplUtil.getSwitchLabel(label)); PsiExpressionList values = labelStatement.getCaseValues(); boolean multiple = values != null && values.getExpressionCount() > 1; myBranch = !multiple && shouldRemoveBranch(labelStatement); @@ -63,7 +63,7 @@ public class DeleteSwitchLabelFix implements LocalQuickFix { public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { PsiExpression expression = ObjectUtils.tryCast(descriptor.getStartElement(), PsiExpression.class); if (expression == null) return; - PsiSwitchLabelStatementBase label = SwitchUtils.getLabelStatementForLabel(expression); + PsiSwitchLabelStatementBase label = PsiImplUtil.getSwitchLabel(expression); if (label == null) return; PsiExpressionList values = label.getCaseValues(); if (values != null && values.getExpressionCount() == 1) { diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/UnwrapSwitchLabelFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/UnwrapSwitchLabelFix.java index 46e1461b499f..264844141d2b 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/UnwrapSwitchLabelFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/UnwrapSwitchLabelFix.java @@ -7,10 +7,10 @@ import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.dataFlow.fix.DeleteSwitchLabelFix; import com.intellij.openapi.project.Project; import com.intellij.psi.*; +import com.intellij.psi.impl.PsiImplUtil; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.ObjectUtils; import com.siyeh.ig.psiutils.CommentTracker; -import com.siyeh.ig.psiutils.SwitchUtils; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; @@ -28,7 +28,7 @@ public class UnwrapSwitchLabelFix implements LocalQuickFix { public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { PsiExpression label = ObjectUtils.tryCast(descriptor.getStartElement(), PsiExpression.class); if (label == null) return; - PsiSwitchLabelStatementBase labelStatement = SwitchUtils.getLabelStatementForLabel(label); + PsiSwitchLabelStatementBase labelStatement = PsiImplUtil.getSwitchLabel(label); if (labelStatement == null) return; PsiSwitchStatement statement = labelStatement.getEnclosingSwitchStatement(); if (statement == null) return; diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java index 166543ca92fb..905115a765c8 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java @@ -632,6 +632,12 @@ public class PsiImplUtil { } } + /** + * Returns enclosing label statement for given label expression + * + * @param expression switch label expression + * @return enclosing label statement or null if given expression is not a label statement + */ @Nullable public static PsiSwitchLabelStatementBase getSwitchLabel(@NotNull PsiExpression expression) { PsiElement parent = PsiUtil.skipParenthesizedExprUp(expression.getParent()); diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SwitchUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SwitchUtils.java index 02c77db76992..677ca9f93c9e 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SwitchUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SwitchUtils.java @@ -23,8 +23,6 @@ import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.TypeConversionUtil; -import com.intellij.util.ObjectUtils; -import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -241,21 +239,6 @@ public class SwitchUtils { } } - /** - * Returns enclosing label statement for given label expression - * - * @param expression switch label expression - * @return enclosing label statement or null if given expression is not a label statement - */ - @Contract("null -> null") - @Nullable - public static PsiSwitchLabelStatementBase getLabelStatementForLabel(PsiExpression expression) { - if (expression == null) return null; - PsiElement parent = expression.getParent(); - if (!(parent instanceof PsiExpressionList)) return null; - return ObjectUtils.tryCast(parent.getParent(), PsiSwitchLabelStatementBase.class); - } - private static boolean checkForLabel(String name, PsiElement ancestor) { final LabelSearchVisitor visitor = new LabelSearchVisitor(name); ancestor.accept(visitor);