Skip to content

Commit 6c00a77

Browse files
Fix memory leak in StringFormatCorrectnessCheck (#779)
1 parent ad5e3f7 commit 6c00a77

File tree

1 file changed

+12
-20
lines changed

1 file changed

+12
-20
lines changed

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

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,8 @@
2020
package org.sonar.python.checks;
2121

2222
import java.util.Arrays;
23-
import java.util.HashMap;
2423
import java.util.HashSet;
2524
import java.util.List;
26-
import java.util.Map;
2725
import java.util.Optional;
2826
import java.util.Set;
2927
import java.util.stream.Collectors;
@@ -55,8 +53,6 @@ public class StringFormatCorrectnessCheck extends AbstractStringFormatCheck {
5553
"debug", "info", "warning", "error", "critical"
5654
));
5755

58-
private Map<Name, Boolean> singleAssignedLoggers = new HashMap<>();
59-
6056
@Override
6157
public void initialize(Context context) {
6258
context.registerSyntaxNodeConsumer(Tree.Kind.MODULO, this::checkPrintfStyle);
@@ -72,7 +68,7 @@ private void checkCallExpression(SubscriptionContext ctx) {
7268
}
7369
}
7470

75-
private boolean isCallToLog(CallExpression callExpression) {
71+
private static boolean isCallToLog(CallExpression callExpression) {
7672
Symbol symbol = callExpression.calleeSymbol();
7773

7874
if (symbol != null && LOGGER_FULL_NAMES.contains(symbol.fullyQualifiedName())) {
@@ -82,7 +78,7 @@ private boolean isCallToLog(CallExpression callExpression) {
8278
return isQualifiedCallToLogger(callExpression);
8379
}
8480

85-
private boolean isQualifiedCallToLogger(CallExpression callExpression) {
81+
private static boolean isQualifiedCallToLogger(CallExpression callExpression) {
8682
if (!callExpression.callee().is(Tree.Kind.QUALIFIED_EXPR)) {
8783
return false;
8884
}
@@ -97,22 +93,18 @@ private boolean isQualifiedCallToLogger(CallExpression callExpression) {
9793
return false;
9894
}
9995

100-
Name name = (Name) qualifier;
101-
102-
return singleAssignedLoggers.computeIfAbsent(name, key -> {
103-
Expression singleAssignedValue = Expressions.singleAssignedValue(key);
104-
if (singleAssignedValue == null || !singleAssignedValue.is(Tree.Kind.CALL_EXPR)) {
105-
return false;
106-
}
96+
Expression singleAssignedValue = Expressions.singleAssignedValue((Name) qualifier);
97+
if (singleAssignedValue == null || !singleAssignedValue.is(Tree.Kind.CALL_EXPR)) {
98+
return false;
99+
}
107100

108-
CallExpression call = (CallExpression) singleAssignedValue;
109-
Symbol symbol = call.calleeSymbol();
110-
if (symbol == null) {
111-
return false;
112-
}
101+
CallExpression call = (CallExpression) singleAssignedValue;
102+
Symbol symbol = call.calleeSymbol();
103+
if (symbol == null) {
104+
return false;
105+
}
113106

114-
return "logging.getLogger".equals(symbol.fullyQualifiedName());
115-
});
107+
return "logging.getLogger".equals(symbol.fullyQualifiedName());
116108
}
117109

118110
private static void checkLoggerLog(SubscriptionContext ctx, CallExpression callExpression) {

0 commit comments

Comments
 (0)