mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
EA-53797 - CCE: ShiftUtils.getLogBaseTwo
This commit is contained in:
+18
-26
@@ -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;
|
||||
|
||||
+2
-3
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user