@ -17,6 +17,7 @@ This is a {{ site.pmd.release_type }} release.
|
||||
### Fixed Issues
|
||||
|
||||
* java-performance
|
||||
* [#3379](https://github.com/pmd/pmd/issues/3379): \[java] UseArraysAsList must ignore primitive arrays
|
||||
* [#3965](https://github.com/pmd/pmd/issues/3965): \[java] UseArraysAsList false positive with non-trivial loops
|
||||
* javascript
|
||||
* [#3948](https://github.com/pmd/pmd/issues/3948): \[js] Invalid operator error for method property in object literal
|
||||
|
@ -970,6 +970,12 @@ You must use `new ArrayList<>(Arrays.asList(...))` if that is inconvenient for y
|
||||
[not(.//IfStatement)]
|
||||
[count(Statement//StatementExpression)=1]
|
||||
[@Foreach = true() or ForInit//VariableInitializer//Literal[@IntLiteral= true() and @Image='0']]
|
||||
(: skip primitive types :)
|
||||
[@Foreach = true() and Expression[not(pmd-java:typeIs('boolean[]') or pmd-java:typeIs('char[]') or pmd-java:typeIs('byte[]') or pmd-java:typeIs('short[]') or pmd-java:typeIs('int[]') or pmd-java:typeIs('long[]') or pmd-java:typeIs('float[]') or pmd-java:typeIs('double[]'))]
|
||||
or Expression/RelationalExpression/PrimaryExpression/PrimaryPrefix/Name[substring-before(@Image, '.length') =
|
||||
ancestor::MethodDeclaration[1]//VariableDeclaratorId[not(pmd-java:typeIs('boolean[]') or pmd-java:typeIs('char[]') or pmd-java:typeIs('byte[]') or pmd-java:typeIs('short[]') or pmd-java:typeIs('int[]') or pmd-java:typeIs('long[]') or pmd-java:typeIs('float[]') or pmd-java:typeIs('double[]'))]
|
||||
/@Name]
|
||||
]
|
||||
//StatementExpression
|
||||
[PrimaryExpression
|
||||
[PrimaryPrefix/Name
|
||||
@ -1013,12 +1019,12 @@ public class Test {
|
||||
public void foo(Integer[] ints) {
|
||||
// could just use Arrays.asList(ints)
|
||||
List<Integer> l = new ArrayList<>(100);
|
||||
for (int i = 0; i < 100; i++) {
|
||||
for (int i = 0; i < ints.length; i++) {
|
||||
l.add(ints[i]);
|
||||
}
|
||||
|
||||
List<Integer> anotherList = new ArrayList<>();
|
||||
for (int i = 0; i < 100; i++) {
|
||||
for (int i = 0; i < ints.length; i++) {
|
||||
anotherList.add(ints[i].toString()); // won't trigger the rule
|
||||
}
|
||||
}
|
||||
|
@ -14,9 +14,9 @@ import java.util.List;
|
||||
|
||||
public class Bar {
|
||||
void foo() {
|
||||
Integer[] ints = new Integer(10);
|
||||
List l = new ArrayList(10);
|
||||
for (int i = 0; i < 100; i++) {
|
||||
Integer[] ints = new Integer[10];
|
||||
List l = new ArrayList(ints.length);
|
||||
for (int i = 0; i < ints.length; i++) {
|
||||
l.add(ints[i]);
|
||||
}
|
||||
}
|
||||
@ -114,11 +114,13 @@ public class Test {
|
||||
public void foo(Integer[] ints) {
|
||||
// could just use Arrays.asList(ints)
|
||||
List l = new ArrayList(10);
|
||||
for (int i = 0; i < 100; i++) {
|
||||
for (int i = 0; i < ints.length; i++) {
|
||||
l.add(ints[i]);
|
||||
}
|
||||
for (int i = 0; i < 100; i++) {
|
||||
l.add(a[i].toString()); // won't trigger the rule
|
||||
|
||||
List l2 = new ArrayList(10);
|
||||
for (int i = 0; i < ints.length; i++) {
|
||||
l2.add(ints[i].toString()); // won't trigger the rule
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -179,11 +181,11 @@ public class Test {
|
||||
public void foo(Integer[] ints) {
|
||||
// could just use Arrays.asList(ints)
|
||||
List<Integer> l = new ArrayList<>(100);
|
||||
for (int i = 0; i < 100; i++) {
|
||||
for (int i = 0; i < ints.length; i++) {
|
||||
l.add(ints[i]); // line 9, here is the violation
|
||||
}
|
||||
List<Integer> anotherList = new ArrayList<>();
|
||||
for (int i = 0; i < 100; i++) {
|
||||
for (int i = 0; i < ints.length; i++) {
|
||||
anotherList.add(ints[i].toString()); // line 13 - false positive
|
||||
}
|
||||
}
|
||||
@ -226,6 +228,30 @@ public class Test {
|
||||
return Arrays.asList(a);
|
||||
}
|
||||
}
|
||||
]]></code>
|
||||
</test-code>
|
||||
|
||||
<test-code>
|
||||
<description>[java] UseArraysAsList must ignore primitive arrays #3379</description>
|
||||
<expected-problems>0</expected-problems>
|
||||
<code><![CDATA[
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
class Test {
|
||||
public void convert(Object value) {
|
||||
short[] array = (short[]) value;
|
||||
List<Short> arrayList = new ArrayList<>(array.length);
|
||||
for (short v : array) {
|
||||
arrayList.add(v); // line 9 - false positive
|
||||
}
|
||||
|
||||
List<Short> arrayList2 = new ArrayList<>(array.length);
|
||||
for (int i = 0; i < array.length; i++) {
|
||||
arrayList2.add(array[i]); // line 14 - false positive
|
||||
}
|
||||
}
|
||||
}
|
||||
]]></code>
|
||||
</test-code>
|
||||
</test-data>
|
||||
|
Reference in New Issue
Block a user