Skip to content

Commit db0ac67

Browse files
ghislainpiotguillaume-dequenne
authored andcommitted
SONARPY-2180 Move TypeShedDescriptorsProvider into ProjectLevelSymbolTable (#2040)
1 parent 81be222 commit db0ac67

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

python-frontend/src/main/java/org/sonar/python/semantic/ProjectLevelSymbolTable.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.sonar.python.index.Descriptor;
4242
import org.sonar.python.index.DescriptorUtils;
4343
import org.sonar.python.index.VariableDescriptor;
44+
import org.sonar.python.semantic.v2.typeshed.TypeShedDescriptorsProvider;
4445

4546
import static org.sonar.python.tree.TreeUtils.getSymbolFromTree;
4647
import static org.sonar.python.tree.TreeUtils.nthArgumentOrKeyword;
@@ -52,6 +53,7 @@ public class ProjectLevelSymbolTable {
5253
private final Set<String> djangoViewsFQN = new HashSet<>();
5354
private final Map<String, Set<String>> importsByModule = new HashMap<>();
5455
private final Set<String> projectBasePackages = new HashSet<>();
56+
private TypeShedDescriptorsProvider typeShedDescriptorsProvider = null;
5557

5658
public static ProjectLevelSymbolTable empty() {
5759
return new ProjectLevelSymbolTable(Collections.emptyMap());
@@ -187,6 +189,13 @@ public Set<String> projectBasePackages() {
187189
return projectBasePackages;
188190
}
189191

192+
public TypeShedDescriptorsProvider typeShedDescriptorsProvider() {
193+
if (typeShedDescriptorsProvider == null) {
194+
typeShedDescriptorsProvider = new TypeShedDescriptorsProvider(projectBasePackages);
195+
}
196+
return typeShedDescriptorsProvider;
197+
}
198+
190199
private class DjangoViewsVisitor extends BaseTreeVisitor {
191200
@Override
192201
public void visitCallExpression(CallExpression callExpression) {

python-frontend/src/main/java/org/sonar/python/semantic/v2/SymbolsModuleTypeProvider.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import org.sonar.python.semantic.FunctionSymbolImpl;
3939
import org.sonar.python.semantic.ProjectLevelSymbolTable;
4040
import org.sonar.python.semantic.v2.converter.AnyDescriptorToPythonTypeConverter;
41-
import org.sonar.python.semantic.v2.typeshed.TypeShedDescriptorsProvider;
4241
import org.sonar.python.types.InferredTypes;
4342
import org.sonar.python.types.protobuf.SymbolsProtos;
4443
import org.sonar.python.types.v2.ClassType;
@@ -59,16 +58,14 @@ public class SymbolsModuleTypeProvider {
5958
private final ProjectLevelSymbolTable projectLevelSymbolTable;
6059
private final ModuleType rootModule;
6160
private final LazyTypesContext lazyTypesContext;
62-
private final TypeShedDescriptorsProvider typeShedDescriptorsProvider;
6361
private final AnyDescriptorToPythonTypeConverter anyDescriptorToPythonTypeConverter;
6462

6563
public SymbolsModuleTypeProvider(ProjectLevelSymbolTable projectLevelSymbolTable, LazyTypesContext lazyTypeContext) {
6664
this.projectLevelSymbolTable = projectLevelSymbolTable;
6765
this.lazyTypesContext = lazyTypeContext;
68-
this.typeShedDescriptorsProvider = new TypeShedDescriptorsProvider(projectLevelSymbolTable.projectBasePackages());
6966
this.anyDescriptorToPythonTypeConverter = new AnyDescriptorToPythonTypeConverter(lazyTypesContext);
7067

71-
var rootModuleMembers = typeShedDescriptorsProvider.builtinDescriptors()
68+
var rootModuleMembers = projectLevelSymbolTable.typeShedDescriptorsProvider().builtinDescriptors()
7269
.entrySet()
7370
.stream()
7471
.collect(Collectors.toMap(Map.Entry::getKey, e -> anyDescriptorToPythonTypeConverter.convert(e.getValue())));
@@ -100,7 +97,7 @@ private Optional<ModuleType> createModuleTypeFromProjectLevelSymbolTable(String
10097
}
10198

10299
private Optional<ModuleType> createModuleTypeFromTypeShed(String moduleName, String moduleFqn, ModuleType parent) {
103-
var moduleMembers = typeShedDescriptorsProvider.descriptorsForModule(moduleFqn)
100+
var moduleMembers = projectLevelSymbolTable.typeShedDescriptorsProvider().descriptorsForModule(moduleFqn)
104101
.entrySet().stream()
105102
.collect(Collectors.toMap(Map.Entry::getKey, e -> anyDescriptorToPythonTypeConverter.convert(e.getValue())));
106103
return Optional.of(moduleMembers).filter(m -> !m.isEmpty())

0 commit comments

Comments
 (0)