From 9a5f9fecf069565a33c4e93a3abe78c7ac0cf09c Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 11 Feb 2014 16:25:10 +0100 Subject: [PATCH] EA-53797 - CCE: ShiftUtils.getLogBaseTwo --- ...ultiplyOrDivideByPowerOfTwoInspection.java | 44 ++++++++----------- .../src/com/siyeh/ig/j2me/ShiftUtils.java | 5 +-- 2 files changed, 20 insertions(+), 29 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/MultiplyOrDivideByPowerOfTwoInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/MultiplyOrDivideByPowerOfTwoInspection.java index 3436ee0a567e..217ece7078ba 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/MultiplyOrDivideByPowerOfTwoInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/MultiplyOrDivideByPowerOfTwoInspection.java @@ -53,16 +53,13 @@ public class MultiplyOrDivideByPowerOfTwoInspection @Nullable public JComponent createOptionsPanel() { return new SingleCheckboxOptionsPanel(InspectionGadgetsBundle.message( - "multiply.or.divide.by.power.of.two.divide.option"), this, - "checkDivision"); + "multiply.or.divide.by.power.of.two.divide.option"), this, "checkDivision"); } @Override @NotNull public String buildErrorString(Object... infos) { - return InspectionGadgetsBundle.message( - "expression.can.be.replaced.problem.descriptor", - calculateReplacementShift((PsiExpression)infos[0])); + return InspectionGadgetsBundle.message("expression.can.be.replaced.problem.descriptor", calculateReplacementShift((PsiExpression)infos[0])); } static String calculateReplacementShift(PsiExpression expression) { @@ -70,8 +67,7 @@ public class MultiplyOrDivideByPowerOfTwoInspection final PsiExpression rhs; final String operator; if (expression instanceof PsiAssignmentExpression) { - final PsiAssignmentExpression exp = - (PsiAssignmentExpression)expression; + final PsiAssignmentExpression exp = (PsiAssignmentExpression)expression; lhs = exp.getLExpression(); rhs = exp.getRExpression(); final IElementType tokenType = exp.getOperationTokenType(); @@ -94,16 +90,17 @@ public class MultiplyOrDivideByPowerOfTwoInspection operator = ">>"; } } + + if (!(rhs instanceof PsiLiteralExpression)) return null; + final String lhsText; - if (ParenthesesUtils.getPrecedence(lhs) > - ParenthesesUtils.SHIFT_PRECEDENCE) { + if (ParenthesesUtils.getPrecedence(lhs) > ParenthesesUtils.SHIFT_PRECEDENCE) { lhsText = '(' + lhs.getText() + ')'; } else { lhsText = lhs.getText(); } - String expString = - lhsText + operator + ShiftUtils.getLogBaseTwo(rhs); + String expString = lhsText + operator + ShiftUtils.getLogBaseTwo((PsiLiteralExpression)rhs); final PsiElement parent = expression.getParent(); if (parent instanceof PsiExpression) { if (!(parent instanceof PsiParenthesizedExpression) && @@ -119,19 +116,15 @@ public class MultiplyOrDivideByPowerOfTwoInspection public InspectionGadgetsFix buildFix(Object... infos) { final PsiExpression expression = (PsiExpression)infos[0]; if (expression instanceof PsiBinaryExpression) { - final PsiBinaryExpression binaryExpression = - (PsiBinaryExpression)expression; - final IElementType operationTokenType = - binaryExpression.getOperationTokenType(); + final PsiBinaryExpression binaryExpression = (PsiBinaryExpression)expression; + final IElementType operationTokenType = binaryExpression.getOperationTokenType(); if (JavaTokenType.DIV.equals(operationTokenType)) { return null; } } else if (expression instanceof PsiAssignmentExpression) { - final PsiAssignmentExpression assignmentExpression = - (PsiAssignmentExpression)expression; - final IElementType operationTokenType = - assignmentExpression.getOperationTokenType(); + final PsiAssignmentExpression assignmentExpression = (PsiAssignmentExpression)expression; + final IElementType operationTokenType = assignmentExpression.getOperationTokenType(); if (JavaTokenType.DIVEQ.equals(operationTokenType)) { return null; } @@ -156,10 +149,11 @@ public class MultiplyOrDivideByPowerOfTwoInspection @Override public void doFix(Project project, ProblemDescriptor descriptor) throws IncorrectOperationException { - final PsiExpression expression = - (PsiExpression)descriptor.getPsiElement(); + final PsiExpression expression = (PsiExpression)descriptor.getPsiElement(); final String newExpression = calculateReplacementShift(expression); - PsiReplacementUtil.replaceExpression(expression, newExpression); + if (newExpression != null) { + PsiReplacementUtil.replaceExpression(expression, newExpression); + } } } @@ -171,8 +165,7 @@ public class MultiplyOrDivideByPowerOfTwoInspection private class ConstantShiftVisitor extends BaseInspectionVisitor { @Override - public void visitBinaryExpression( - @NotNull PsiBinaryExpression expression) { + public void visitBinaryExpression(@NotNull PsiBinaryExpression expression) { super.visitBinaryExpression(expression); final PsiExpression rhs = expression.getROperand(); if (rhs == null) { @@ -199,8 +192,7 @@ public class MultiplyOrDivideByPowerOfTwoInspection } @Override - public void visitAssignmentExpression( - @NotNull PsiAssignmentExpression expression) { + public void visitAssignmentExpression(@NotNull PsiAssignmentExpression expression) { super.visitAssignmentExpression(expression); if (!WellFormednessUtils.isWellFormed(expression)) { return; diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/ShiftUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/ShiftUtils.java index a4467e1d054a..508298d4fe29 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/ShiftUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/ShiftUtils.java @@ -46,9 +46,8 @@ class ShiftUtils { return intValue == 1; } - public static int getLogBaseTwo(PsiExpression rhs) { - final PsiLiteralExpression literal = (PsiLiteralExpression)rhs; - final Object value = literal.getValue(); + public static int getLogBaseTwo(PsiLiteralExpression rhs) { + final Object value = rhs.getValue(); int log = 0; if (value == null) { return log;