Make "Magic number" inspection less trigger happy (IDEA-137998)

This commit is contained in:
Bas Leijdekkers
2015-03-24 12:52:32 +01:00
parent fd893067f8
commit 7fc21c9a68
2 changed files with 47 additions and 5 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2015 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.
@@ -77,7 +77,8 @@ public class MagicNumberInspectionBase extends BaseInspection {
return;
}
if (ignoreInHashCode) {
final PsiMethod containingMethod = PsiTreeUtil.getParentOfType(expression, PsiMethod.class);
final PsiMethod containingMethod = PsiTreeUtil.getParentOfType(expression, PsiMethod.class, true,
PsiClass.class, PsiLambdaExpression.class);
if (MethodUtils.isHashCode(containingMethod)) {
return;
}
@@ -119,7 +120,8 @@ public class MagicNumberInspectionBase extends BaseInspection {
CommonClassNames.JAVA_LANG_ABSTRACT_STRING_BUILDER,
CommonClassNames.JAVA_UTIL_MAP,
CommonClassNames.JAVA_UTIL_COLLECTION,
"java.io.ByteArrayOutputStream") != null;
"java.io.ByteArrayOutputStream",
"java.awt.Dimension") != null;
}
private boolean isSpecialCaseLiteral(PsiLiteralExpression expression) {
@@ -145,7 +147,7 @@ public class MagicNumberInspectionBase extends BaseInspection {
public boolean isFinalVariableInitialization(PsiExpression expression) {
final PsiElement parent =
PsiTreeUtil.skipParentsOfType(expression, PsiTypeCastExpression.class, PsiParenthesizedExpression.class, PsiPrefixExpression.class);
PsiTreeUtil.getParentOfType(expression, PsiVariable.class, PsiAssignmentExpression.class);
final PsiVariable variable;
if (!(parent instanceof PsiVariable)) {
if (!(parent instanceof PsiAssignmentExpression)) {
@@ -1,7 +1,9 @@
package com.siyeh.igtest.abstraction.magic_number;
import java.awt.*;
import java.util.*;
import java.io.*;
import java.util.List;
@Size(max = 15)
public class MagicNumber
@@ -11,6 +13,7 @@ public class MagicNumber
private static int s_foo2 = <warning descr="Magic number '400'">400</warning>;
private final int m_foo2 = -(-(400));
private static final List s_set = new ArrayList(400);
private static final Dimension PREFERRED_SIZE = new Dimension(600, 400);
public static void main(String[] args)
{
@@ -18,6 +21,10 @@ public class MagicNumber
set.toString();
}
public Dimension getScreenSize() {
return new Dimension(2880, 1800);
}
public boolean equals(final Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
@@ -31,6 +38,9 @@ public class MagicNumber
}
public int hashCode() {
new Object() {
private int i = <warning descr="Magic number '987'">987</warning>;
};
int result;
result = m_foo;
result = 29 * result + m_foo2;
@@ -38,7 +48,7 @@ public class MagicNumber
}
void foo() {
final int value = <warning descr="Magic number '101'">101</warning> * <warning descr="Magic number '55'">55</warning>;
final int value = 101 * 55;
}
ByteArrayOutputStream out = new ByteArrayOutputStream(756);
@@ -49,4 +59,34 @@ public class MagicNumber
}
@interface Size {
int max();
}
enum Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7),
PLUTO (1.27e+22, 1.137e6);
private final double mass; // in kilograms
private final double radius; // in meters
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
public double mass() { return mass; }
public double radius() { return radius; }
// universal gravitational constant (m3 kg-1 s-2)
public static final double G = 6.67300E-11;
public double surfaceGravity() {
return G * mass / (radius * radius);
}
public double surfaceWeight(double otherMass) {
return otherMass * surfaceGravity();
}
}