Skip to content

Commit 933f498

Browse files
Use protobuf stubs for third parties
1 parent 04ac648 commit 933f498

File tree

4 files changed

+15
-15
lines changed

4 files changed

+15
-15
lines changed

python-frontend/src/main/java/org/sonar/python/types/TypeShed.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
import static org.sonar.plugins.python.api.types.BuiltinTypes.NONE_TYPE;
5959
import static org.sonar.plugins.python.api.types.BuiltinTypes.STR;
6060
import static org.sonar.plugins.python.api.types.BuiltinTypes.TUPLE;
61-
import static org.sonar.python.types.TypeShedThirdParties.commonSymbols;
6261
import static org.sonar.python.types.TypeShedThirdParties.getModuleSymbols;
6362

6463
public class TypeShed {
@@ -73,6 +72,7 @@ public class TypeShed {
7372
private static final String THIRD_PARTY_3 = "typeshed/third_party/3/";
7473
private static final String CUSTOM_THIRD_PARTY = "custom/";
7574
private static final String PROTOBUF = "protobuf/";
75+
private static final String PROTOBUF_THIRD_PARTY = "protobuf/stubs/";
7676
private static final String BUILTINS_FQN = "builtins";
7777
private static final String BUILTINS_PREFIX = BUILTINS_FQN + ".";
7878
// Those fundamentals builtins symbols need not to be ambiguous for the frontend to work properly
@@ -96,7 +96,7 @@ private TypeShed() {
9696
public static Map<String, Symbol> builtinSymbols() {
9797
if ((TypeShed.builtins == null)) {
9898
supportedPythonVersions = ProjectPythonVersion.currentVersions().stream().map(PythonVersionUtils.Version::serializedValue).collect(Collectors.toSet());
99-
Map<String, Symbol> builtins = getSymbolsFromProtobufModule(BUILTINS_FQN);
99+
Map<String, Symbol> builtins = getSymbolsFromProtobufModule(BUILTINS_FQN, false);
100100
builtins.put(NONE_TYPE, new ClassSymbolImpl(NONE_TYPE, NONE_TYPE));
101101
TypeShed.builtins = Collections.unmodifiableMap(builtins);
102102
TypeShed.builtinGlobalSymbols.put("", new HashSet<>(builtins.values()));
@@ -271,16 +271,13 @@ private static Map<String, Symbol> searchTypeShedForModule(String moduleName) {
271271
modulesInProgress.remove(moduleName);
272272
return customSymbols;
273273
}
274-
Map<String, Symbol> symbolsFromProtobuf = getSymbolsFromProtobufModule(moduleName);
274+
Map<String, Symbol> symbolsFromProtobuf = getSymbolsFromProtobufModule(moduleName, false);
275275
if (!symbolsFromProtobuf.isEmpty()) {
276276
modulesInProgress.remove(moduleName);
277277
return symbolsFromProtobuf;
278278
}
279-
Map<String, Symbol> thirdPartySymbols = getModuleSymbols(moduleName, THIRD_PARTY_2AND3, builtinGlobalSymbols);
280-
if (thirdPartySymbols.isEmpty()) {
281-
thirdPartySymbols = commonSymbols(getModuleSymbols(moduleName, THIRD_PARTY_2, builtinGlobalSymbols),
282-
getModuleSymbols(moduleName, THIRD_PARTY_3, builtinGlobalSymbols), moduleName);
283-
}
279+
280+
Map<String, Symbol> thirdPartySymbols = getSymbolsFromProtobufModule(moduleName, true);
284281
modulesInProgress.remove(moduleName);
285282
return thirdPartySymbols;
286283
}
@@ -311,8 +308,9 @@ private static boolean isAmbiguousSymbolOfClasses(Symbol symbol) {
311308
return false;
312309
}
313310

314-
private static Map<String, Symbol> getSymbolsFromProtobufModule(String moduleName) {
315-
InputStream resource = TypeShed.class.getResourceAsStream(PROTOBUF + moduleName + ".protobuf");
311+
private static Map<String, Symbol> getSymbolsFromProtobufModule(String moduleName, boolean isThirdParty) {
312+
String protobufDir = isThirdParty ? PROTOBUF_THIRD_PARTY : PROTOBUF;
313+
InputStream resource = TypeShed.class.getResourceAsStream(protobufDir + moduleName + ".protobuf");
316314
if (resource == null) {
317315
return Collections.emptyMap();
318316
}

python-frontend/src/test/java/org/sonar/python/semantic/FullyQualifiedNameTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public void alias_import_preserves_fqn() {
8282
"from flask import redirect as flask_redirect",
8383
"flask_redirect()"
8484
);
85-
assertNameAndQualifiedName(tree, "flask_redirect", "werkzeug.utils.redirect");
85+
assertNameAndQualifiedName(tree, "flask_redirect", "flask.redirect");
8686
}
8787

8888
@Test

python-frontend/src/test/java/org/sonar/python/types/TypeShedTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,8 @@ public void deserialize_annoy_protobuf() {
287287
Map<String, Symbol> deserializedAnnoySymbols = symbolsForModule("annoy").values().stream()
288288
.collect(Collectors.toMap(Symbol::fullyQualifiedName, s -> s));
289289
assertThat(deserializedAnnoySymbols.values()).extracting(Symbol::kind, Symbol::fullyQualifiedName)
290-
.containsExactlyInAnyOrder(tuple(Kind.CLASS, "annoy._Vector"), tuple(Kind.CLASS, "annoy.AnnoyIndex"));
290+
.containsExactlyInAnyOrder(tuple(Kind.CLASS, "annoy._Vector"), tuple(Kind.CLASS, "annoy.AnnoyIndex"), tuple(Kind.OTHER, "annoy.Literal"),
291+
tuple(Kind.CLASS, "annoy.Sized"), tuple(Kind.FUNCTION, "annoy.overload"), tuple(Kind.OTHER, "annoy.Protocol"));
291292

292293
ClassSymbol vector = (ClassSymbol) deserializedAnnoySymbols.get("annoy._Vector");
293294
assertThat(vector.superClasses()).extracting(Symbol::kind, Symbol::fullyQualifiedName)
@@ -315,7 +316,8 @@ public void deserialize_annoy_protobuf() {
315316
tuple(Kind.FUNCTION, "get_n_items"),
316317
tuple(Kind.FUNCTION, "get_n_trees"),
317318
tuple(Kind.FUNCTION, "verbose"),
318-
tuple(Kind.FUNCTION, "set_seed")
319+
tuple(Kind.FUNCTION, "set_seed"),
320+
tuple(Kind.OTHER, "f")
319321
);
320322
assertThat(annoyIndex.hasDecorators()).isFalse();
321323
assertThat(annoyIndex.definitionLocation()).isNull();

sonar-python-plugin/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,8 @@
150150
<configuration>
151151
<rules>
152152
<requireFilesSize>
153-
<maxsize>8300000</maxsize>
154-
<minsize>7300000</minsize>
153+
<maxsize>9300000</maxsize>
154+
<minsize>8300000</minsize>
155155
<files>
156156
<file>${project.build.directory}/${project.build.finalName}.jar</file>
157157
</files>

0 commit comments

Comments
 (0)