From a6d4adadcfc6bb28397a166054e846d672c70cf2 Mon Sep 17 00:00:00 2001 From: Thomas Serre Date: Mon, 21 Oct 2024 17:21:05 +0200 Subject: [PATCH] SONARPY-2219 Fix tests importing variable which FQN starts the same as module FQN --- .../python/semantic/ProjectLevelSymbolTable.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/python-frontend/src/main/java/org/sonar/python/semantic/ProjectLevelSymbolTable.java b/python-frontend/src/main/java/org/sonar/python/semantic/ProjectLevelSymbolTable.java index a557358956..c486a47150 100644 --- a/python-frontend/src/main/java/org/sonar/python/semantic/ProjectLevelSymbolTable.java +++ b/python-frontend/src/main/java/org/sonar/python/semantic/ProjectLevelSymbolTable.java @@ -24,8 +24,10 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; import javax.annotation.CheckForNull; import javax.annotation.Nullable; @@ -45,6 +47,7 @@ import org.sonar.python.semantic.v2.SymbolTableBuilderV2; import org.sonar.python.semantic.v2.SymbolV2; import org.sonar.python.semantic.v2.TypeInferenceV2; +import org.sonar.python.semantic.v2.UsageV2; import org.sonar.python.semantic.v2.converter.PythonTypeToDescriptorConverter; import org.sonar.python.semantic.v2.typeshed.TypeShedDescriptorsProvider; import org.sonar.python.types.v2.PythonType; @@ -228,7 +231,14 @@ public void addModuleV2(String fullyQualifiedModuleName, Set moduleD public void addModuleV2(String fullyQualifiedModuleName, Map> typesBySymbol) { var moduleDescriptors = typesBySymbol.entrySet() .stream() - .map(entry -> pythonTypeToDescriptorConverter.convert(fullyQualifiedModuleName, entry.getKey(), entry.getValue())) + .map(entry -> { + var descriptor = pythonTypeToDescriptorConverter.convert(fullyQualifiedModuleName, entry.getKey(), entry.getValue()); + return Map.entry(entry.getKey(), descriptor); + } + ) + .filter( entry -> !(!entry.getValue().fullyQualifiedName().startsWith(fullyQualifiedModuleName) + || entry.getKey().usages().stream().anyMatch(u -> u.kind().equals(UsageV2.Kind.IMPORT)))) + .map(Map.Entry::getValue) .collect(Collectors.toSet()); addModuleV2(fullyQualifiedModuleName, moduleDescriptors); }