mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
implicit numeric conversion should detect unary numeric promotion inside array dimension expression and test
This commit is contained in:
@@ -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){
|
||||
|
||||
+7
-11
@@ -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;
|
||||
}
|
||||
}
|
||||
+171
@@ -0,0 +1,171 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<problems>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>17</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>1</code> from 'int' to 'float' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>18</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>i</code> from 'int' to 'float' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>21</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>'c'</code> from 'char' to 'int' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>22</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>ch</code> from 'char' to 'int' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>24</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>0</code> from 'int' to 'double' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>25</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>0.0F</code> from 'float' to 'double' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>26</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>-0.0F</code> from 'float' to 'double' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>27</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>i</code> from 'int' to 'double' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>28</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>ch</code> from 'char' to 'double' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>29</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>l</code> from 'long' to 'double' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>31</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>f</code> from 'float' to 'double' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>33</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>1.0F</code> from 'float' to 'double' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>35</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>0</code> from 'int' to 'float' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>36</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>0L</code> from 'long' to 'float' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>38</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>i</code> from 'int' to 'float' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>39</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>ch</code> from 'char' to 'float' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>40</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>l</code> from 'long' to 'float' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>44</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>i</code> from 'int' to 'long' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>45</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>ch</code> from 'char' to 'long' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>51</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>l</code> from 'long' to 'int' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>78</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>2</code> from 'int' to 'byte' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>79</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>b</code> from 'byte' to 'int' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>80</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>b</code> from 'byte' to 'int' #loc</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>ImplicitNumericConversion.java</file>
|
||||
<line>80</line>
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Implicit numeric conversion</problem_class>
|
||||
<description>Implicit numeric conversion of <code>(byte)1</code> from 'byte' to 'int' #loc</description>
|
||||
</problem>
|
||||
</problems>
|
||||
+11
@@ -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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user