Skip to content

Commit 394c313

Browse files
Fix behavior of DeclaredType#mustBeOrExtend for non-class symbols
1 parent 6e7dead commit 394c313

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,13 @@ public boolean isCompatibleWith(InferredType other) {
131131

132132
@Override
133133
public boolean mustBeOrExtend(String typeName) {
134-
return alternativeTypeSymbols().stream().flatMap(a -> {
134+
List<Symbol> classSymbols = alternativeTypeSymbols().stream().flatMap(a -> {
135135
if (a.is(Symbol.Kind.AMBIGUOUS)) {
136136
return ((AmbiguousSymbol) a).alternatives().stream().filter(alternative -> alternative.is(CLASS));
137137
}
138138
return Stream.of(a);
139-
}).filter(a -> a.is(CLASS)).allMatch(a -> ((ClassSymbol) a).isOrExtends(typeName));
139+
}).filter(a -> a.is(CLASS)).collect(Collectors.toList());
140+
return !classSymbols.isEmpty() && classSymbols.stream().allMatch(a -> ((ClassSymbol) a).isOrExtends(typeName));
140141
}
141142

142143
@Override

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,9 @@ public void test_mustBeOrExtend() {
169169
assertThat(typeAmbiguousX1.mustBeOrExtend("other")).isFalse();
170170

171171
DeclaredType declaredType = new DeclaredType(new SymbolImpl("C", "foo.C"));
172-
assertThat(declaredType.mustBeOrExtend("other")).isTrue();
173-
assertThat(declaredType.mustBeOrExtend("foo.C")).isTrue();
174-
assertThat(declaredType.mustBeOrExtend("C")).isTrue();
172+
assertThat(declaredType.mustBeOrExtend("other")).isFalse();
173+
assertThat(declaredType.mustBeOrExtend("foo.C")).isFalse();
174+
assertThat(declaredType.mustBeOrExtend("C")).isFalse();
175175
}
176176

177177
@Test

0 commit comments

Comments
 (0)