Skip to content

Commit f5780d2

Browse files
Seppli11sonartech
authored andcommitted
SONARPY-3275 S7504: Fix NullPointerException (#459)
GitOrigin-RevId: 23f0ec6329232c3dea6cd6f54415a5e53a3a3f94
1 parent 87011c0 commit f5780d2

2 files changed

Lines changed: 17 additions & 8 deletions

File tree

python-checks/src/main/java/org/sonar/python/checks/UnnecessaryListCastCheck.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@
4343
public class UnnecessaryListCastCheck extends PythonSubscriptionCheck {
4444
private TypeCheckBuilder isListCallCheck;
4545

46-
private static final Set<String> MODIFYING_LIST_METHODS = Set.of("append", "extend", "insert", "remove", "pop", "clear",
47-
"sort", "reverse");
46+
private static final Set<String> MODIFYING_LIST_METHODS = Set.of("append", "extend", "insert", "remove", "pop",
47+
"clear", "sort", "reverse");
4848
private TypeCheckMap<Object> typeCheckMap;
4949

5050
@Override
@@ -144,16 +144,19 @@ public boolean isModifyingListMethod() {
144144
public void visitCallExpression(CallExpression callExpr) {
145145
super.visitCallExpression(callExpr);
146146
var symbol = listName.symbolV2();
147-
if(symbol != null) {
148-
isModifyingListMethod |= isMethodReceiverInstanceOf(callExpr, symbol)
149-
&& isModifyingListMethod(callExpr);
147+
if (symbol != null) {
148+
isModifyingListMethod |= isMethodReceiverInstanceOf(callExpr, symbol)
149+
&& isModifyingListMethod(callExpr);
150150
}
151151
}
152152

153153
private static boolean isMethodReceiverInstanceOf(CallExpression callExpr, SymbolV2 listSymbol) {
154-
return callExpr.callee() instanceof QualifiedExpression qualifiedExpression &&
155-
qualifiedExpression.qualifier() instanceof Name name &&
156-
name.symbolV2().equals(listSymbol);
154+
if (callExpr.callee() instanceof QualifiedExpression qualifiedExpression &&
155+
qualifiedExpression.qualifier() instanceof Name name) {
156+
var symbolV2 = name.symbolV2();
157+
return symbolV2 != null && symbolV2.equals(listSymbol);
158+
}
159+
return false;
157160
}
158161

159162
private boolean isModifyingListMethod(CallExpression callExpression) {

python-checks/src/test/resources/checks/unnecessaryListCast.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,9 @@ def noncompliant_modifying_list_outside_loop():
7878

7979
for i in list(test): # Noncompliant
8080
test().append(i)
81+
object.__setattr__(test, k, v)
82+
83+
for i in list(object): # Noncompliant
84+
test().append(i)
85+
object.__setattr__(test, k, v)
86+

0 commit comments

Comments
 (0)