From 7fc21c9a686662390c646d0a2f4f1657156e7dbd Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Tue, 24 Mar 2015 12:51:52 +0100 Subject: [PATCH] Make "Magic number" inspection less trigger happy (IDEA-137998) --- .../MagicNumberInspectionBase.java | 10 +++-- .../abstraction/magic_number/MagicNumber.java | 42 ++++++++++++++++++- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/MagicNumberInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/MagicNumberInspectionBase.java index 215bf39f1a37..a664d01a92dc 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/MagicNumberInspectionBase.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/MagicNumberInspectionBase.java @@ -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)) { diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/abstraction/magic_number/MagicNumber.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/abstraction/magic_number/MagicNumber.java index fe7cb824e3aa..1e1af814f3a6 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/abstraction/magic_number/MagicNumber.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/abstraction/magic_number/MagicNumber.java @@ -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 = 400; 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 = 987; + }; int result; result = m_foo; result = 29 * result + m_foo2; @@ -38,7 +48,7 @@ public class MagicNumber } void foo() { - final int value = 101 * 55; + 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(); + } } \ No newline at end of file