|
28 | 28 | import org.sonar.plugins.python.api.caching.CacheContext; |
29 | 29 | import org.sonar.plugins.python.api.tree.FileInput; |
30 | 30 | import org.sonar.plugins.python.api.types.v2.ModuleType; |
31 | | -import org.sonar.python.types.v2.TypeChecker; |
32 | 31 | import org.sonar.python.caching.CacheContextImpl; |
33 | 32 | import org.sonar.python.semantic.ProjectLevelSymbolTable; |
34 | 33 | import org.sonar.python.semantic.SymbolTableBuilder; |
35 | 34 | import org.sonar.python.semantic.v2.ProjectLevelTypeTable; |
36 | 35 | import org.sonar.python.semantic.v2.SymbolTableBuilderV2; |
37 | 36 | import org.sonar.python.semantic.v2.TypeInferenceV2; |
| 37 | +import org.sonar.python.types.v2.TypeChecker; |
38 | 38 |
|
39 | 39 | public class PythonVisitorContext extends PythonInputFileContext { |
40 | 40 |
|
41 | 41 | private final FileInput rootTree; |
42 | 42 | private final RecognitionException parsingException; |
43 | | - private List<PreciseIssue> issues = new ArrayList<>(); |
44 | 43 | private final TypeChecker typeChecker; |
45 | 44 | private ModuleType moduleType = null; |
| 45 | + private final List<PreciseIssue> issues; |
46 | 46 |
|
47 | 47 | public PythonVisitorContext(FileInput rootTree, PythonFile pythonFile, @Nullable File workingDirectory, String packageName) { |
48 | 48 | super(pythonFile, workingDirectory, CacheContextImpl.dummyCache(), ProjectLevelSymbolTable.empty()); |
49 | | - this.rootTree = rootTree; |
50 | | - this.parsingException = null; |
| 49 | + |
51 | 50 | SymbolTableBuilder symbolTableBuilder = new SymbolTableBuilder(packageName, pythonFile); |
52 | 51 | symbolTableBuilder.visitFileInput(rootTree); |
53 | 52 | var symbolTable = new SymbolTableBuilderV2(rootTree).build(); |
54 | 53 | var projectLevelTypeTable = new ProjectLevelTypeTable(ProjectLevelSymbolTable.empty()); |
| 54 | + |
| 55 | + this.rootTree = rootTree; |
| 56 | + this.parsingException = null; |
55 | 57 | this.moduleType = new TypeInferenceV2(projectLevelTypeTable, pythonFile, symbolTable, packageName).inferModuleType(rootTree); |
56 | 58 | this.typeChecker = new TypeChecker(projectLevelTypeTable); |
| 59 | + this.issues = new ArrayList<>(); |
57 | 60 | } |
58 | 61 |
|
59 | 62 | public PythonVisitorContext(FileInput rootTree, PythonFile pythonFile, @Nullable File workingDirectory, String packageName, |
60 | 63 | ProjectLevelSymbolTable projectLevelSymbolTable, CacheContext cacheContext) { |
61 | 64 | super(pythonFile, workingDirectory, cacheContext, projectLevelSymbolTable); |
| 65 | + |
| 66 | + var symbolTableBuilder = new SymbolTableBuilder(packageName, pythonFile, projectLevelSymbolTable); |
| 67 | + symbolTableBuilder.visitFileInput(rootTree); |
| 68 | + var symbolTable = new SymbolTableBuilderV2(rootTree).build(); |
| 69 | + var projectLevelTypeTable = new ProjectLevelTypeTable(projectLevelSymbolTable); |
| 70 | + |
62 | 71 | this.rootTree = rootTree; |
63 | 72 | this.parsingException = null; |
64 | | - new SymbolTableBuilder(packageName, pythonFile, projectLevelSymbolTable).visitFileInput(rootTree); |
65 | | - var symbolTable = new SymbolTableBuilderV2(rootTree) |
66 | | - .build(); |
67 | | - var projectLevelTypeTable = new ProjectLevelTypeTable(projectLevelSymbolTable); |
68 | 73 | this.moduleType = new TypeInferenceV2(projectLevelTypeTable, pythonFile, symbolTable, packageName).inferModuleType(rootTree); |
69 | 74 | this.typeChecker = new TypeChecker(projectLevelTypeTable); |
| 75 | + this.issues = new ArrayList<>(); |
70 | 76 | } |
71 | 77 |
|
72 | 78 | public PythonVisitorContext(FileInput rootTree, PythonFile pythonFile, @Nullable File workingDirectory, String packageName, |
73 | 79 | ProjectLevelSymbolTable projectLevelSymbolTable, CacheContext cacheContext, SonarProduct sonarProduct) { |
| 80 | + this(rootTree, pythonFile, workingDirectory, packageName, projectLevelSymbolTable, new ProjectLevelTypeTable(projectLevelSymbolTable), cacheContext, sonarProduct); |
| 81 | + } |
| 82 | + |
| 83 | + public PythonVisitorContext(FileInput rootTree, PythonFile pythonFile, @Nullable File workingDirectory, String packageName, |
| 84 | + ProjectLevelSymbolTable projectLevelSymbolTable, ProjectLevelTypeTable projectLevelTypeTable, CacheContext cacheContext, SonarProduct sonarProduct) { |
74 | 85 | super(pythonFile, workingDirectory, cacheContext, sonarProduct, projectLevelSymbolTable); |
75 | | - this.rootTree = rootTree; |
76 | | - this.parsingException = null; |
77 | | - new SymbolTableBuilder(packageName, pythonFile, projectLevelSymbolTable).visitFileInput(rootTree); |
78 | | - var symbolTable = new SymbolTableBuilderV2(rootTree) |
79 | | - .build(); |
80 | | - var projectLevelTypeTable = new ProjectLevelTypeTable(projectLevelSymbolTable); |
| 86 | + |
| 87 | + var symbolTableBuilderV2 = new SymbolTableBuilderV2(rootTree); |
| 88 | + var symbolTable = symbolTableBuilderV2.build(); |
| 89 | + var symbolTableBuilder = new SymbolTableBuilder(packageName, pythonFile, projectLevelSymbolTable); |
| 90 | + symbolTableBuilder.visitFileInput(rootTree); |
81 | 91 | this.moduleType = new TypeInferenceV2(projectLevelTypeTable, pythonFile, symbolTable, packageName).inferModuleType(rootTree); |
82 | 92 | this.typeChecker = new TypeChecker(projectLevelTypeTable); |
| 93 | + this.rootTree = rootTree; |
| 94 | + this.parsingException = null; |
| 95 | + this.issues = new ArrayList<>(); |
83 | 96 | } |
84 | 97 |
|
85 | 98 | public PythonVisitorContext(PythonFile pythonFile, RecognitionException parsingException) { |
86 | 99 | super(pythonFile, null, CacheContextImpl.dummyCache(), ProjectLevelSymbolTable.empty()); |
87 | 100 | this.rootTree = null; |
88 | 101 | this.parsingException = parsingException; |
89 | 102 | this.typeChecker = new TypeChecker(new ProjectLevelTypeTable(ProjectLevelSymbolTable.empty())); |
| 103 | + this.issues = new ArrayList<>(); |
90 | 104 | } |
91 | 105 |
|
92 | 106 | public PythonVisitorContext(PythonFile pythonFile, RecognitionException parsingException, SonarProduct sonarProduct) { |
93 | 107 | super(pythonFile, null, CacheContextImpl.dummyCache(), sonarProduct, ProjectLevelSymbolTable.empty()); |
94 | 108 | this.rootTree = null; |
95 | 109 | this.parsingException = parsingException; |
96 | 110 | this.typeChecker = new TypeChecker(new ProjectLevelTypeTable(ProjectLevelSymbolTable.empty())); |
| 111 | + this.issues = new ArrayList<>(); |
97 | 112 | } |
98 | 113 |
|
99 | 114 | public FileInput rootTree() { |
|
0 commit comments