Skip to content

Commit ff76a4e

Browse files
SONARJAVA-5400 Fix false positive for S6241 and S6242 when builder is not AwsClientBuilder (#5104)
Previously these checks were only taking into account calls on some specific kind of builders, but there can be other implementations.
1 parent 0ee9ab2 commit ff76a4e

6 files changed

Lines changed: 25 additions & 6 deletions

File tree

java-checks-aws/src/main/java/org/sonar/java/checks/aws/AwsBuilderMethodFinder.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@
3333
public abstract class AwsBuilderMethodFinder extends IssuableSubscriptionVisitor {
3434

3535
private static final String SDK_CLIENT_TYPE = "software.amazon.awssdk.core.SdkClient";
36-
private static final String SDK_CLIENT_BUILDER_TYPE = "software.amazon.awssdk.utils.builder.SdkBuilder";
37-
protected static final String AWS_CLIENT_BUILDER_TYPE = "software.amazon.awssdk.awscore.client.builder.AwsClientBuilder";
36+
protected static final String SDK_CLIENT_BUILDER_TYPE = "software.amazon.awssdk.utils.builder.SdkBuilder";
3837
private static final MethodMatchers BUILD_METHOD = MethodMatchers.create()
3938
.ofSubTypes(SDK_CLIENT_BUILDER_TYPE)
4039
.names("build")

java-checks-aws/src/main/java/org/sonar/java/checks/aws/AwsCredentialsShouldBeSetExplicitlyCheck.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
@Rule(key = "S6242")
2323
public class AwsCredentialsShouldBeSetExplicitlyCheck extends AwsBuilderMethodFinder {
2424
private static final MethodMatchers CREDENTIALS_METHOD = MethodMatchers.create()
25-
.ofSubTypes(AWS_CLIENT_BUILDER_TYPE)
25+
.ofSubTypes(SDK_CLIENT_BUILDER_TYPE)
2626
.names("credentialsProvider")
2727
.addParametersMatcher("software.amazon.awssdk.auth.credentials.AwsCredentialsProvider")
2828
.build();

java-checks-aws/src/main/java/org/sonar/java/checks/aws/AwsRegionShouldBeSetExplicitlyCheck.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
@Rule(key = "S6241")
2323
public class AwsRegionShouldBeSetExplicitlyCheck extends AwsBuilderMethodFinder {
2424
private static final MethodMatchers REGION_METHOD = MethodMatchers.create()
25-
.ofSubTypes(AWS_CLIENT_BUILDER_TYPE)
25+
.ofSubTypes(SDK_CLIENT_BUILDER_TYPE)
2626
.names("region")
2727
.addParametersMatcher("software.amazon.awssdk.regions.Region")
2828
.build();

java-checks-test-sources/aws/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
<dependency>
3434
<groupId>software.amazon.awssdk</groupId>
3535
<artifactId>aws-sdk-java</artifactId>
36-
<version>2.17.215</version>
36+
<version>2.31.30</version>
3737
<scope>provided</scope>
3838
</dependency>
3939
<dependency>

java-checks-test-sources/aws/src/main/java/checks/aws/AwsCredentialsShouldBeSetExplicitlyCheckSample.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import software.amazon.awssdk.awscore.client.builder.AwsClientBuilder;
66
import software.amazon.awssdk.core.SdkSystemSetting;
77
import software.amazon.awssdk.regions.Region;
8+
import software.amazon.awssdk.services.s3.S3AsyncClient;
89
import software.amazon.awssdk.services.s3.S3Client;
910
import software.amazon.awssdk.services.s3.S3ClientBuilder;
1011

@@ -73,4 +74,14 @@ void compliant(AwsClientBuilder builderArgument) {
7374
static AwsClientBuilder getABuilder() {
7475
return S3Client.builder();
7576
}
77+
78+
void s3asyncClient() {
79+
var credentialsProvider = EnvironmentVariableCredentialsProvider.create();
80+
try (var client = S3AsyncClient.crtBuilder() // Compliant
81+
.region(Region.EU_CENTRAL_1)
82+
.credentialsProvider(credentialsProvider)
83+
.build()) {
84+
client.waiter();
85+
}
86+
}
7687
}

java-checks-test-sources/aws/src/main/java/checks/aws/AwsRegionShouldBeSetExplicitlyCheckSample.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import software.amazon.awssdk.awscore.client.builder.AwsClientBuilder;
55
import software.amazon.awssdk.core.SdkSystemSetting;
66
import software.amazon.awssdk.regions.Region;
7+
import software.amazon.awssdk.services.s3.S3AsyncClient;
78
import software.amazon.awssdk.services.s3.S3Client;
89
import software.amazon.awssdk.services.s3.S3ClientBuilder;
910

@@ -87,7 +88,15 @@ static AwsClientBuilder getABuilder() {
8788
void compliantInitializedInOtherMethod() {
8889
AwsClientBuilder builder = getABuilder(); // Compliant FN
8990
builder.build();
91+
}
9092

91-
93+
void s3asyncClient() {
94+
var credentialsProvider = EnvironmentVariableCredentialsProvider.create();
95+
try (var client = S3AsyncClient.crtBuilder() // Compliant
96+
.region(Region.EU_CENTRAL_1)
97+
.credentialsProvider(credentialsProvider)
98+
.build()) {
99+
client.waiter();
100+
}
92101
}
93102
}

0 commit comments

Comments
 (0)