Skip to content

Commit 901cc74

Browse files
ghislainpiotsonartech
authored andcommitted
SONARPY-2978 Instantiate a new TypeCheckMap on every file (#281)
GitOrigin-RevId: 1edbe8898e8b1b25e377606eb9ee0aefc383c5d4
1 parent 8cd361f commit 901cc74

6 files changed

Lines changed: 20 additions & 11 deletions

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,19 @@ public class PredictableSaltCheck extends PythonSubscriptionCheck {
7676
"base64.b16encode", new ArgumentInfo(0, "s"),
7777
"base64.b16decode", new ArgumentInfo(0, "s"));
7878

79+
private TypeCheckMap<ArgumentInfo> sensitiveArgumentByFqnCheck;
80+
private TypeCheckMap<ArgumentInfo> saltFunctionArgumentsToCheck;
81+
private List<TypeCheckBuilder> deriveFunctionsToCheck;
82+
7983
@Override
8084
public void initialize(Context context) {
81-
var sensitiveArgumentByFqnCheck = new TypeCheckMap<ArgumentInfo>();
82-
var saltFunctionArgumentsToCheck = new TypeCheckMap<ArgumentInfo>();
83-
var deriveFunctionsToCheck = new ArrayList<TypeCheckBuilder>();
84-
context.registerSyntaxNodeConsumer(Tree.Kind.FILE_INPUT, ctx -> initializeTypeChecks(ctx, sensitiveArgumentByFqnCheck,
85-
saltFunctionArgumentsToCheck, deriveFunctionsToCheck));
85+
context.registerSyntaxNodeConsumer(Tree.Kind.FILE_INPUT, ctx -> {
86+
sensitiveArgumentByFqnCheck = new TypeCheckMap<>();
87+
saltFunctionArgumentsToCheck = new TypeCheckMap<>();
88+
deriveFunctionsToCheck = new ArrayList<>();
89+
initializeTypeChecks(ctx, sensitiveArgumentByFqnCheck,
90+
saltFunctionArgumentsToCheck, deriveFunctionsToCheck);
91+
});
8692
context.registerSyntaxNodeConsumer(Tree.Kind.CALL_EXPR, ctx -> handleCallExpression((CallExpression) ctx.syntaxNode(),
8793
ctx,
8894
sensitiveArgumentByFqnCheck,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ public class RewriteCollectionConstructorAsComprehensionCheck extends PythonSubs
4545
@Override
4646
public void initialize(Context context) {
4747
IsComprehensionTransformedChecker isComprehensionTransformedChecker = new IsComprehensionTransformedChecker(context);
48-
collectionTypeCheckerMap = new TypeCheckMap<>();
4948
context.registerSyntaxNodeConsumer(Tree.Kind.FILE_INPUT, ctx -> {
49+
collectionTypeCheckerMap = new TypeCheckMap<>();
5050
for (var collectionEntry : COLLECTION_MESSAGES.entrySet()) {
5151
TypeCheckBuilder typeChecker = ctx.typeChecker().typeCheckBuilder().isTypeWithFqn(collectionEntry.getKey());
5252
collectionTypeCheckerMap.put(typeChecker, collectionEntry.getValue());

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public class SynchronousFileOperationsInAsyncCheck extends PythonSubscriptionChe
3232
private static final String MESSAGE = "Use an asynchronous file API instead of synchronous %s() in this async function.";
3333
private static final String SECONDARY_MESSAGE = "This function is async.";
3434

35-
private final TypeCheckMap<String> syncFileFunctions = new TypeCheckMap<>();
35+
private TypeCheckMap<String> syncFileFunctions;
3636

3737
@Override
3838
public void initialize(Context context) {
@@ -55,6 +55,7 @@ public void initialize(Context context) {
5555
"lzma.open");
5656

5757
private void initializeTypeCheckMap(SubscriptionContext context) {
58+
syncFileFunctions = new TypeCheckMap<>();
5859
SYNC_FILE_FUNCTIONS.forEach(fqn -> syncFileFunctions.put(context.typeChecker().typeCheckBuilder().isTypeOrInstanceWithName(fqn), fqn));
5960
}
6061

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public class SynchronousHttpOperationsInAsyncCheck extends PythonSubscriptionChe
5959
"httpx.options",
6060
"httpx.patch");
6161

62-
private final TypeCheckMap<Object> syncHttpTypeChecks = new TypeCheckMap<>();
62+
private TypeCheckMap<Object> syncHttpTypeChecks;
6363

6464
@Override
6565
public void initialize(Context context) {
@@ -68,6 +68,7 @@ public void initialize(Context context) {
6868
}
6969

7070
private void setupTypeChecks(SubscriptionContext ctx) {
71+
syncHttpTypeChecks = new TypeCheckMap<>();
7172
var object = new Object();
7273
IMPORT_PATHS.forEach(path -> syncHttpTypeChecks.put(ctx.typeChecker().typeCheckBuilder().isTypeOrInstanceWithName(path), object));
7374
IMPORT_PATHS_FQN.forEach(path -> syncHttpTypeChecks.put(ctx.typeChecker().typeCheckBuilder().isTypeWithFqn(path), object));

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class SynchronousOsCallsInAsyncCheck extends PythonSubscriptionCheck {
3636
"os.waitid"
3737
);
3838

39-
private final TypeCheckMap<Object> syncOsCallsTypeChecks = new TypeCheckMap<>();
39+
private TypeCheckMap<Object> syncOsCallsTypeChecks;
4040

4141
@Override
4242
public void initialize(Context context) {
@@ -45,8 +45,9 @@ public void initialize(Context context) {
4545
}
4646

4747
private void setupTypeChecks(SubscriptionContext ctx) {
48+
syncOsCallsTypeChecks = new TypeCheckMap<>();
4849
var object = new Object();
49-
OS_BLOCKING_CALLS.forEach(path ->
50+
OS_BLOCKING_CALLS.forEach(path ->
5051
syncOsCallsTypeChecks.put(ctx.typeChecker().typeCheckBuilder().isTypeOrInstanceWithName(path), object));
5152
}
5253

python-checks/src/main/java/org/sonar/python/checks/hotspots/FastHashingOrPlainTextCheck.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ public class FastHashingOrPlainTextCheck extends PythonSubscriptionCheck {
233233

234234
private TypeCheckBuilder argon2CheapestProfileTypeChecker = null;
235235
private TypeCheckBuilder flaskConfigTypeChecker = null;
236-
private TypeCheckMap<Collection<CallValidator>> typeCheckMap = new TypeCheckMap<>();
236+
private TypeCheckMap<Collection<CallValidator>> typeCheckMap = null;
237237
@Override
238238
public void initialize(Context context) {
239239
context.registerSyntaxNodeConsumer(Tree.Kind.FILE_INPUT, this::registerTypeCheckers);

0 commit comments

Comments
 (0)