Skip to content

Commit 9255503

Browse files
Cherry pick 7180 (#7312)
* refactor: extract resolveMetricPublishersMethod to ClientClassUtils * add changelog entry --------- Co-authored-by: Mohammed Said <se3do.4work@gmail.com>
1 parent be95bb3 commit 9255503

4 files changed

Lines changed: 44 additions & 74 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "feature",
3+
"category": "AWS SDK for Java v2",
4+
"contributor": "Se3do",
5+
"description": "Extract the duplicated resolveMetricPublishers generator into ClientClassUtils, removing verbatim duplication across the sync and async client generators. No change to generated client code or SDK behavior."
6+
}

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/AsyncClientClass.java

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import static javax.lang.model.element.Modifier.STATIC;
2626
import static software.amazon.awssdk.codegen.internal.Constant.EVENT_PUBLISHER_PARAM_NAME;
2727
import static software.amazon.awssdk.codegen.poet.client.ClientClassUtils.addS3ArnableFieldCode;
28+
import static software.amazon.awssdk.codegen.poet.client.ClientClassUtils.resolveMetricPublishersMethod;
2829
import static software.amazon.awssdk.codegen.poet.client.ClientClassUtils.transformServiceId;
2930
import static software.amazon.awssdk.codegen.poet.client.ClientClassUtils.updateSdkClientConfigurationMethod;
3031
import static software.amazon.awssdk.codegen.poet.client.SyncClientClass.addRequestModifierCode;
@@ -41,7 +42,6 @@
4142
import java.net.URI;
4243
import java.nio.ByteBuffer;
4344
import java.util.ArrayList;
44-
import java.util.Collections;
4545
import java.util.Comparator;
4646
import java.util.List;
4747
import java.util.concurrent.CompletableFuture;
@@ -75,7 +75,6 @@
7575
import software.amazon.awssdk.codegen.poet.model.EventStreamSpecHelper;
7676
import software.amazon.awssdk.codegen.poet.model.ServiceClientConfigurationUtils;
7777
import software.amazon.awssdk.codegen.poet.rules.EndpointRulesSpecUtils;
78-
import software.amazon.awssdk.core.RequestOverrideConfiguration;
7978
import software.amazon.awssdk.core.async.AsyncResponseTransformer;
8079
import software.amazon.awssdk.core.async.AsyncResponseTransformerUtils;
8180
import software.amazon.awssdk.core.async.SdkPublisher;
@@ -573,41 +572,6 @@ protected void addPresignedUrlExtensionMethod(Builder type) {
573572
type.addMethod(presignedUrlExtension);
574573
}
575574

576-
private MethodSpec resolveMetricPublishersMethod() {
577-
String clientConfigName = "clientConfiguration";
578-
String requestOverrideConfigName = "requestOverrideConfiguration";
579-
580-
MethodSpec.Builder methodBuilder = MethodSpec.methodBuilder("resolveMetricPublishers")
581-
.addModifiers(PRIVATE, STATIC)
582-
.returns(ParameterizedTypeName.get(List.class, MetricPublisher.class))
583-
.addParameter(SdkClientConfiguration.class, clientConfigName)
584-
.addParameter(RequestOverrideConfiguration.class, requestOverrideConfigName);
585-
586-
String publishersName = "publishers";
587-
588-
methodBuilder.addStatement("$T $N = null", ParameterizedTypeName.get(List.class, MetricPublisher.class), publishersName);
589-
590-
methodBuilder.beginControlFlow("if ($N != null)", requestOverrideConfigName)
591-
.addStatement("$N = $N.metricPublishers()", publishersName, requestOverrideConfigName)
592-
.endControlFlow();
593-
594-
methodBuilder.beginControlFlow("if ($1N == null || $1N.isEmpty())", publishersName)
595-
.addStatement("$N = $N.option($T.$N)",
596-
publishersName,
597-
clientConfigName,
598-
SdkClientOption.class,
599-
"METRIC_PUBLISHERS")
600-
.endControlFlow();
601-
602-
methodBuilder.beginControlFlow("if ($1N == null)", publishersName)
603-
.addStatement("$N = $T.emptyList()", publishersName, Collections.class)
604-
.endControlFlow();
605-
606-
methodBuilder.addStatement("return $N", publishersName);
607-
608-
return methodBuilder.build();
609-
}
610-
611575
private void addScheduledExecutorIfNeeded(Builder classBuilder) {
612576
if (!hasScheduledExecutor) {
613577
classBuilder.addField(FieldSpec.builder(ClassName.get(ScheduledExecutorService.class), "executorService")

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/ClientClassUtils.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import software.amazon.awssdk.codegen.poet.PoetUtils;
5858
import software.amazon.awssdk.codegen.poet.auth.scheme.AuthSchemeSpecUtils;
5959
import software.amazon.awssdk.codegen.poet.rules.EndpointRulesSpecUtils;
60+
import software.amazon.awssdk.core.RequestOverrideConfiguration;
6061
import software.amazon.awssdk.core.SdkClient;
6162
import software.amazon.awssdk.core.SdkPlugin;
6263
import software.amazon.awssdk.core.SdkRequest;
@@ -651,6 +652,41 @@ static MethodSpec resolveEndpointMethod(AuthSchemeSpecUtils authSchemeSpecUtils,
651652
return b.build();
652653
}
653654

655+
static MethodSpec resolveMetricPublishersMethod() {
656+
String clientConfigName = "clientConfiguration";
657+
String requestOverrideConfigName = "requestOverrideConfiguration";
658+
659+
MethodSpec.Builder methodBuilder = MethodSpec.methodBuilder("resolveMetricPublishers")
660+
.addModifiers(PRIVATE, STATIC)
661+
.returns(ParameterizedTypeName.get(List.class, MetricPublisher.class))
662+
.addParameter(SdkClientConfiguration.class, clientConfigName)
663+
.addParameter(RequestOverrideConfiguration.class, requestOverrideConfigName);
664+
665+
String publishersName = "publishers";
666+
667+
methodBuilder.addStatement("$T $N = null", ParameterizedTypeName.get(List.class, MetricPublisher.class), publishersName);
668+
669+
methodBuilder.beginControlFlow("if ($N != null)", requestOverrideConfigName)
670+
.addStatement("$N = $N.metricPublishers()", publishersName, requestOverrideConfigName)
671+
.endControlFlow();
672+
673+
methodBuilder.beginControlFlow("if ($1N == null || $1N.isEmpty())", publishersName)
674+
.addStatement("$N = $N.option($T.$N)",
675+
publishersName,
676+
clientConfigName,
677+
SdkClientOption.class,
678+
"METRIC_PUBLISHERS")
679+
.endControlFlow();
680+
681+
methodBuilder.beginControlFlow("if ($1N == null)", publishersName)
682+
.addStatement("$N = $T.emptyList()", publishersName, Collections.class)
683+
.endControlFlow();
684+
685+
methodBuilder.addStatement("return $N", publishersName);
686+
687+
return methodBuilder.build();
688+
}
689+
654690
/**
655691
* Generates the shared {@code publishMetrics} helper that every operation body calls to publish its API call metrics.
656692
* Inline, the equivalent {@code metricPublishers.forEach(...)} costs one synthetic lambda, and its constant pool

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/SyncClientClass.java

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import static javax.lang.model.element.Modifier.STATIC;
2323
import static software.amazon.awssdk.codegen.poet.PoetUtils.classNameFromFqcn;
2424
import static software.amazon.awssdk.codegen.poet.client.ClientClassUtils.addS3ArnableFieldCode;
25+
import static software.amazon.awssdk.codegen.poet.client.ClientClassUtils.resolveMetricPublishersMethod;
2526
import static software.amazon.awssdk.codegen.poet.client.ClientClassUtils.transformServiceId;
2627
import static software.amazon.awssdk.codegen.poet.client.ClientClassUtils.updateSdkClientConfigurationMethod;
2728

@@ -34,7 +35,6 @@
3435
import com.squareup.javapoet.WildcardTypeName;
3536
import java.net.URI;
3637
import java.util.ArrayList;
37-
import java.util.Collections;
3838
import java.util.List;
3939
import java.util.Map;
4040
import java.util.Optional;
@@ -62,7 +62,6 @@
6262
import software.amazon.awssdk.codegen.poet.client.specs.XmlProtocolSpec;
6363
import software.amazon.awssdk.codegen.poet.model.ServiceClientConfigurationUtils;
6464
import software.amazon.awssdk.codegen.poet.rules.EndpointRulesSpecUtils;
65-
import software.amazon.awssdk.core.RequestOverrideConfiguration;
6665
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
6766
import software.amazon.awssdk.core.client.config.SdkClientOption;
6867
import software.amazon.awssdk.core.client.handler.SyncClientHandler;
@@ -415,41 +414,6 @@ static ProtocolSpec getProtocolSpecs(PoetExtension poetExtensions, IntermediateM
415414
}
416415
}
417416

418-
private MethodSpec resolveMetricPublishersMethod() {
419-
String clientConfigName = "clientConfiguration";
420-
String requestOverrideConfigName = "requestOverrideConfiguration";
421-
422-
MethodSpec.Builder methodBuilder = MethodSpec.methodBuilder("resolveMetricPublishers")
423-
.addModifiers(PRIVATE, STATIC)
424-
.returns(ParameterizedTypeName.get(List.class, MetricPublisher.class))
425-
.addParameter(SdkClientConfiguration.class, clientConfigName)
426-
.addParameter(RequestOverrideConfiguration.class, requestOverrideConfigName);
427-
428-
String publishersName = "publishers";
429-
430-
methodBuilder.addStatement("$T $N = null", ParameterizedTypeName.get(List.class, MetricPublisher.class), publishersName);
431-
432-
methodBuilder.beginControlFlow("if ($N != null)", requestOverrideConfigName)
433-
.addStatement("$N = $N.metricPublishers()", publishersName, requestOverrideConfigName)
434-
.endControlFlow();
435-
436-
methodBuilder.beginControlFlow("if ($1N == null || $1N.isEmpty())", publishersName)
437-
.addStatement("$N = $N.option($T.$N)",
438-
publishersName,
439-
clientConfigName,
440-
SdkClientOption.class,
441-
"METRIC_PUBLISHERS")
442-
.endControlFlow();
443-
444-
methodBuilder.beginControlFlow("if ($1N == null)", publishersName)
445-
.addStatement("$N = $T.emptyList()", publishersName, Collections.class)
446-
.endControlFlow();
447-
448-
methodBuilder.addStatement("return $N", publishersName);
449-
450-
return methodBuilder.build();
451-
}
452-
453417
@Override
454418
protected MethodSpec.Builder waiterOperationBody(MethodSpec.Builder builder) {
455419
return builder.addAnnotation(Override.class)

0 commit comments

Comments
 (0)