From 0424db1b07286f6926dec24f430e770ed4ad00bd Mon Sep 17 00:00:00 2001
From: maksim-grebeniuk-sonarsource
<122789225+maksim-grebeniuk-sonarsource@users.noreply.github.com>
Date: Fri, 3 Feb 2023 17:20:09 +0100
Subject: [PATCH] SONARPY-1257 fix quality flaws (#1365)
---
.../AbstractUnreadPrivateMembersCheck.java | 24 +++++++++----------
.../org/sonar/python/checks/cdk/CdkUtils.java | 13 ----------
.../sonar/python/semantic/BuiltinSymbols.java | 15 ++++++------
3 files changed, 19 insertions(+), 33 deletions(-)
diff --git a/python-checks/src/main/java/org/sonar/python/checks/AbstractUnreadPrivateMembersCheck.java b/python-checks/src/main/java/org/sonar/python/checks/AbstractUnreadPrivateMembersCheck.java
index e3378a96df..ba13286770 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/AbstractUnreadPrivateMembersCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/AbstractUnreadPrivateMembersCheck.java
@@ -38,19 +38,17 @@ public abstract class AbstractUnreadPrivateMembersCheck extends PythonSubscripti
@Override
public void initialize(Context context) {
String memberPrefix = memberPrefix();
- context.registerSyntaxNodeConsumer(CLASSDEF, ctx -> {
- Optional.of(ctx.syntaxNode())
- .map(ClassDef.class::cast)
- // avoid checking for classes with decorators since it is impossible to analyze its final behavior
- .filter(classDef -> classDef.decorators().isEmpty())
- .map(TreeUtils::getClassSymbolFromDef)
- .map(ClassSymbol::declaredMembers)
- .stream()
- .flatMap(Collection::stream)
- .filter(s -> s.name().startsWith(memberPrefix) && !s.name().endsWith("__") && equalsToKind(s) && isNeverRead(s))
- .filter(Predicate.not(this::isException))
- .forEach(symbol -> reportIssue(ctx, symbol));
- });
+ context.registerSyntaxNodeConsumer(CLASSDEF, ctx -> Optional.of(ctx.syntaxNode())
+ .map(ClassDef.class::cast)
+ // avoid checking for classes with decorators since it is impossible to analyze its final behavior
+ .filter(classDef -> classDef.decorators().isEmpty())
+ .map(TreeUtils::getClassSymbolFromDef)
+ .map(ClassSymbol::declaredMembers)
+ .stream()
+ .flatMap(Collection::stream)
+ .filter(s -> s.name().startsWith(memberPrefix) && !s.name().endsWith("__") && equalsToKind(s) && isNeverRead(s))
+ .filter(Predicate.not(this::isException))
+ .forEach(symbol -> reportIssue(ctx, symbol)));
}
protected boolean isException(Symbol symbol) {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/cdk/CdkUtils.java b/python-checks/src/main/java/org/sonar/python/checks/cdk/CdkUtils.java
index cd3a12cd33..e18cb137e4 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/cdk/CdkUtils.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/cdk/CdkUtils.java
@@ -290,19 +290,6 @@ public SubscriptionContext ctx() {
}
}
- /**
- * In the case of unpacking expression, we cannot generate flows at the moment.
- * However, to avoid a wrong interpretation of the unpacked expression in the context of absent arguments,
- * an alternative dummy must be returned, which should not lead to false positives.
- * The resolving of such expressions can be improved by SONARPY-1164 if necessary.
- */
- static class UnresolvedExpressionFlow extends ExpressionFlow {
-
- private UnresolvedExpressionFlow(SubscriptionContext ctx) {
- super(ctx, new LinkedList<>());
- }
- }
-
/**
* Dataclass to store a resolved KeyValuePair structure
*/
diff --git a/python-frontend/src/main/java/org/sonar/python/semantic/BuiltinSymbols.java b/python-frontend/src/main/java/org/sonar/python/semantic/BuiltinSymbols.java
index d9dbbda7f9..78fa81ea57 100644
--- a/python-frontend/src/main/java/org/sonar/python/semantic/BuiltinSymbols.java
+++ b/python-frontend/src/main/java/org/sonar/python/semantic/BuiltinSymbols.java
@@ -30,6 +30,10 @@ private BuiltinSymbols() {
// empty constructor
}
+
+ public static final String CLASS_METHOD_DECORATOR = "classmethod";
+ public static final String STATIC_METHOD_DECORATOR = "staticmethod";
+
/**
* See https://docs.python.org/3/library/constants.html#built-in-consts
*/
@@ -70,7 +74,7 @@ private BuiltinSymbols() {
"enumerate",
"input",
"oct",
- "staticmethod",
+ STATIC_METHOD_DECORATOR,
"bool",
"eval",
"int",
@@ -101,7 +105,7 @@ private BuiltinSymbols() {
"list",
"range",
"vars",
- "classmethod",
+ CLASS_METHOD_DECORATOR,
"getattr",
"locals",
"repr",
@@ -124,7 +128,7 @@ private BuiltinSymbols() {
"divmod",
"input",
"open",
- "staticmethod",
+ STATIC_METHOD_DECORATOR,
"all",
"enumerate",
"int",
@@ -165,7 +169,7 @@ private BuiltinSymbols() {
"long",
"reload",
"vars",
- "classmethod",
+ CLASS_METHOD_DECORATOR,
"getattr",
"map",
"repr",
@@ -339,8 +343,5 @@ public static Set all() {
return all;
}
- public static final String CLASS_METHOD_DECORATOR = "classmethod";
- public static final String STATIC_METHOD_DECORATOR = "staticmethod";
-
public static final Set STATIC_AND_CLASS_METHOD_DECORATORS = Set.of(CLASS_METHOD_DECORATOR, STATIC_METHOD_DECORATOR);
}