diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java b/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java index b69ffe98016d..e4ed99576fc3 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java @@ -347,9 +347,7 @@ public class ExpectedTypeUtils{ final PsiMethod method = PsiTreeUtil.getParentOfType(returnStatement, PsiMethod.class); - if(method == null){ - expectedType = null; - } else{ + if (method != null) { expectedType = method.getReturnType(); } } @@ -372,7 +370,8 @@ public class ExpectedTypeUtils{ } } - @Override public void visitExpressionList(PsiExpressionList expressionList){ + @Override public void visitExpressionList( + PsiExpressionList expressionList){ final JavaResolveResult result = findCalledMethod(expressionList); final PsiMethod method = (PsiMethod) result.getElement(); if(method == null){ @@ -384,6 +383,17 @@ public class ExpectedTypeUtils{ } } + @Override + public void visitNewExpression(PsiNewExpression expression) { + final PsiExpression[] arrayDimensions = + expression.getArrayDimensions(); + for (PsiExpression arrayDimension : arrayDimensions) { + if (wrappedExpression.equals(arrayDimension)) { + expectedType = PsiType.INT; + } + } + } + @NotNull private static JavaResolveResult findCalledMethod( PsiExpressionList expressionList){ diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/confusing/ImplicitNumericConversionInspection.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/implicit_numeric_conversion/ImplicitNumericConversion.java similarity index 76% rename from plugins/InspectionGadgets/test/com/siyeh/igtest/confusing/ImplicitNumericConversionInspection.java rename to plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/implicit_numeric_conversion/ImplicitNumericConversion.java index 153390539d0b..9aa5a5a2dde8 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/confusing/ImplicitNumericConversionInspection.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/implicit_numeric_conversion/ImplicitNumericConversion.java @@ -1,8 +1,8 @@ -package com.siyeh.igtest.confusing; +package com.siyeh.igtest.numeric.implicit_numeric_conversion; -public class ImplicitNumericConversionInspection +public class ImplicitNumericConversion { - public ImplicitNumericConversionInspection() + public ImplicitNumericConversion() { } @@ -73,14 +73,10 @@ public class ImplicitNumericConversionInspection { System.out.println(d); } -} - class TestQuickFix{ - public static final long ONE_HOUR = 3600L; - - public void test(){ - long time = ONE_HOUR; - long minutes = (time % (3600 * 1000)) / 1000; - long hours = (time % (24 * 3600 * 1000)) / (3600 * 1000); + private void unaryPromotion() { + byte b = 2; + int a[] = new int[b]; + a[b] = (byte)1; } } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/implicit_numeric_conversion/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/implicit_numeric_conversion/expected.xml new file mode 100644 index 000000000000..3b9e14d34212 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/implicit_numeric_conversion/expected.xml @@ -0,0 +1,171 @@ + + + + + ImplicitNumericConversion.java + 17 + Implicit numeric conversion + Implicit numeric conversion of <code>1</code> from 'int' to 'float' #loc + + + + ImplicitNumericConversion.java + 18 + Implicit numeric conversion + Implicit numeric conversion of <code>i</code> from 'int' to 'float' #loc + + + + ImplicitNumericConversion.java + 21 + Implicit numeric conversion + Implicit numeric conversion of <code>'c'</code> from 'char' to 'int' #loc + + + + ImplicitNumericConversion.java + 22 + Implicit numeric conversion + Implicit numeric conversion of <code>ch</code> from 'char' to 'int' #loc + + + + ImplicitNumericConversion.java + 24 + Implicit numeric conversion + Implicit numeric conversion of <code>0</code> from 'int' to 'double' #loc + + + + ImplicitNumericConversion.java + 25 + Implicit numeric conversion + Implicit numeric conversion of <code>0.0F</code> from 'float' to 'double' #loc + + + + ImplicitNumericConversion.java + 26 + Implicit numeric conversion + Implicit numeric conversion of <code>-0.0F</code> from 'float' to 'double' #loc + + + + ImplicitNumericConversion.java + 27 + Implicit numeric conversion + Implicit numeric conversion of <code>i</code> from 'int' to 'double' #loc + + + + ImplicitNumericConversion.java + 28 + Implicit numeric conversion + Implicit numeric conversion of <code>ch</code> from 'char' to 'double' #loc + + + + ImplicitNumericConversion.java + 29 + Implicit numeric conversion + Implicit numeric conversion of <code>l</code> from 'long' to 'double' #loc + + + + ImplicitNumericConversion.java + 31 + Implicit numeric conversion + Implicit numeric conversion of <code>f</code> from 'float' to 'double' #loc + + + + ImplicitNumericConversion.java + 33 + Implicit numeric conversion + Implicit numeric conversion of <code>1.0F</code> from 'float' to 'double' #loc + + + + ImplicitNumericConversion.java + 35 + Implicit numeric conversion + Implicit numeric conversion of <code>0</code> from 'int' to 'float' #loc + + + + ImplicitNumericConversion.java + 36 + Implicit numeric conversion + Implicit numeric conversion of <code>0L</code> from 'long' to 'float' #loc + + + + ImplicitNumericConversion.java + 38 + Implicit numeric conversion + Implicit numeric conversion of <code>i</code> from 'int' to 'float' #loc + + + + ImplicitNumericConversion.java + 39 + Implicit numeric conversion + Implicit numeric conversion of <code>ch</code> from 'char' to 'float' #loc + + + + ImplicitNumericConversion.java + 40 + Implicit numeric conversion + Implicit numeric conversion of <code>l</code> from 'long' to 'float' #loc + + + + ImplicitNumericConversion.java + 44 + Implicit numeric conversion + Implicit numeric conversion of <code>i</code> from 'int' to 'long' #loc + + + + ImplicitNumericConversion.java + 45 + Implicit numeric conversion + Implicit numeric conversion of <code>ch</code> from 'char' to 'long' #loc + + + + ImplicitNumericConversion.java + 51 + Implicit numeric conversion + Implicit numeric conversion of <code>l</code> from 'long' to 'int' #loc + + + + ImplicitNumericConversion.java + 78 + Implicit numeric conversion + Implicit numeric conversion of <code>2</code> from 'int' to 'byte' #loc + + + + ImplicitNumericConversion.java + 79 + Implicit numeric conversion + Implicit numeric conversion of <code>b</code> from 'byte' to 'int' #loc + + + + ImplicitNumericConversion.java + 80 + Implicit numeric conversion + Implicit numeric conversion of <code>b</code> from 'byte' to 'int' #loc + + + + ImplicitNumericConversion.java + 80 + Implicit numeric conversion + Implicit numeric conversion of <code>(byte)1</code> from 'byte' to 'int' #loc + + \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/numeric/ImplicitNumericConversionInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/numeric/ImplicitNumericConversionInspectionTest.java new file mode 100644 index 000000000000..5efee279bd4f --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/numeric/ImplicitNumericConversionInspectionTest.java @@ -0,0 +1,11 @@ +package com.siyeh.ig.numeric; + +import com.siyeh.ig.IGInspectionTestCase; + +public class ImplicitNumericConversionInspectionTest extends IGInspectionTestCase { + + public void test() throws Exception { + doTest("com/siyeh/igtest/numeric/implicit_numeric_conversion", + new ImplicitNumericConversionInspection()); + } +} \ No newline at end of file