Skip to content

Commit bbcb28a

Browse files
SONARPY-1894 Mark new type inference API as Beta (#1816)
1 parent d1cc4bd commit bbcb28a

File tree

13 files changed

+45
-1
lines changed

13 files changed

+45
-1
lines changed

python-frontend/src/main/java/org/sonar/plugins/python/api/tree/Name.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
*/
2020
package org.sonar.plugins.python.api.tree;
2121

22+
import org.sonar.api.Beta;
2223
import org.sonar.python.semantic.v2.SymbolV2;
2324

2425
/**
@@ -31,5 +32,6 @@ public interface Name extends Expression, HasSymbol {
3132
// FIXME: we should create a separate tree for Variables
3233
boolean isVariable();
3334

35+
@Beta
3436
SymbolV2 symbolV2();
3537
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222
import java.util.ArrayList;
2323
import java.util.List;
2424
import javax.annotation.Nullable;
25+
import org.sonar.api.Beta;
2526
import org.sonar.plugins.python.api.tree.Name;
2627
import org.sonar.python.tree.NameImpl;
2728

29+
@Beta
2830
public record SymbolV2(String name, @Nullable String fullyQualifiedName, List<UsageV2> usages) {
2931

3032
public SymbolV2(String name) {
@@ -39,6 +41,7 @@ void addUsage(Name name, UsageV2.Kind kind) {
3941
}
4042
}
4143

44+
@Beta
4245
public boolean hasSingleBindingUsage() {
4346
return usages.stream().filter(UsageV2::isBindingUsage).toList().size() == 1;
4447
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@
1919
*/
2020
package org.sonar.python.semantic.v2;
2121

22+
import org.sonar.api.Beta;
2223
import org.sonar.plugins.python.api.tree.Tree;
2324

25+
@Beta
2426
public record UsageV2(Tree tree, Kind kind) {
2527

28+
@Beta
2629
public boolean isBindingUsage() {
2730
return kind() != UsageV2.Kind.OTHER && kind() != UsageV2.Kind.GLOBAL_DECLARATION;
2831
}

python-frontend/src/main/java/org/sonar/python/types/v2/ClassType.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,13 @@
2828
import java.util.Set;
2929
import java.util.stream.Collectors;
3030
import javax.annotation.Nullable;
31+
import org.sonar.api.Beta;
3132
import org.sonar.plugins.python.api.LocationInFile;
3233

3334
/**
3435
* ClassType
3536
*/
37+
@Beta
3638
public record ClassType(
3739
String name,
3840
Set<Member> members,
@@ -86,10 +88,12 @@ public boolean isCompatibleWith(PythonType another) {
8688
return true;
8789
}
8890

91+
@Beta
8992
public boolean isASubClassFrom(ClassType other) {
9093
return superClasses.stream().anyMatch(superClass -> superClass.isCompatibleWith(other));
9194
}
9295

96+
@Beta
9397
public boolean areAttributesCompatible(ClassType other) {
9498
return attributes.stream().allMatch(attr -> other.attributes.stream().anyMatch(attr::isCompatibleWith));
9599
}

python-frontend/src/main/java/org/sonar/python/types/v2/FunctionType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@
2323
import java.util.Objects;
2424
import java.util.Optional;
2525
import javax.annotation.Nullable;
26+
import org.sonar.api.Beta;
2627
import org.sonar.plugins.python.api.LocationInFile;
2728

2829
/**
2930
* FunctionType
3031
*/
32+
@Beta
3133
public record FunctionType(
3234
String name,
3335
List<PythonType> attributes,
@@ -71,7 +73,6 @@ public int hashCode() {
7173
return Objects.hash(name, attributes, parameters, returnType, isAsynchronous, hasDecorators, isInstanceMethod, hasVariadicParameter);
7274
}
7375

74-
7576
@Override
7677
public String toString() {
7778
return "FunctionType[%s]".formatted(name);

python-frontend/src/main/java/org/sonar/python/types/v2/Member.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
*/
2020
package org.sonar.python.types.v2;
2121

22+
import org.sonar.api.Beta;
23+
24+
@Beta
2225
public record Member(String name, PythonType type) {
2326
}
2427

python-frontend/src/main/java/org/sonar/python/types/v2/ModuleType.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
import java.util.Objects;
2525
import java.util.Optional;
2626
import javax.annotation.Nullable;
27+
import org.sonar.api.Beta;
2728

29+
@Beta
2830
public record ModuleType(@Nullable String name, @Nullable ModuleType parent, Map<String, PythonType> members) implements PythonType {
2931
public ModuleType(@Nullable String name) {
3032
this(name, null);

python-frontend/src/main/java/org/sonar/python/types/v2/ObjectType.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@
2323
import java.util.List;
2424
import java.util.Objects;
2525
import java.util.Optional;
26+
import org.sonar.api.Beta;
2627
import org.sonar.plugins.python.api.LocationInFile;
2728

29+
@Beta
2830
public record ObjectType(PythonType type, List<PythonType> attributes, List<Member> members) implements PythonType {
2931

3032
public ObjectType(PythonType type) {

python-frontend/src/main/java/org/sonar/python/types/v2/ParameterV2.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
package org.sonar.python.types.v2;
2121

2222
import javax.annotation.Nullable;
23+
import org.sonar.api.Beta;
2324
import org.sonar.plugins.python.api.LocationInFile;
2425

26+
@Beta
2527
public record ParameterV2(
2628
@Nullable String name,
2729
PythonType declaredType,
@@ -32,6 +34,7 @@ public record ParameterV2(
3234
boolean isPositionalVariadic,
3335
@Nullable LocationInFile location) {
3436

37+
@Beta
3538
public boolean isVariadic() {
3639
return isKeywordVariadic || isPositionalVariadic;
3740
}

python-frontend/src/main/java/org/sonar/python/types/v2/PythonType.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,46 +20,57 @@
2020
package org.sonar.python.types.v2;
2121

2222
import java.util.Optional;
23+
import org.sonar.api.Beta;
2324
import org.sonar.plugins.python.api.LocationInFile;
2425

2526
/**
2627
* PythonType
2728
*/
29+
@Beta
2830
public interface PythonType {
2931
PythonType UNKNOWN = new UnknownType();
3032

33+
@Beta
3134
default String name() {
3235
return this.toString();
3336
}
3437

38+
@Beta
3539
default Optional<String> displayName() {
3640
return Optional.empty();
3741
}
3842

43+
@Beta
3944
default Optional<String> instanceDisplayName() {
4045
return Optional.empty();
4146
}
4247

48+
@Beta
4349
default boolean isCompatibleWith(PythonType another) {
4450
return true;
4551
}
4652

53+
@Beta
4754
default String key() {
4855
return name();
4956
}
5057

58+
@Beta
5159
default Optional<PythonType> resolveMember(String memberName) {
5260
return Optional.empty();
5361
}
5462

63+
@Beta
5564
default TriBool hasMember(String memberName) {
5665
return TriBool.UNKNOWN;
5766
}
5867

68+
@Beta
5969
default Optional<LocationInFile> definitionLocation() {
6070
return Optional.empty();
6171
}
6272

73+
@Beta
6374
default PythonType unwrappedType() {
6475
return this;
6576
}

0 commit comments

Comments
 (0)