From 740b8638f0f26381340338ee20a1a380691dea5c Mon Sep 17 00:00:00 2001 From: Zoe Wang <33073555+zoewangg@users.noreply.github.com> Date: Tue, 2 Dec 2025 12:53:08 -0800 Subject: [PATCH 1/2] Remove Lazy on identityProviders --- .../internal/DefaultIdentityProviders.java | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultIdentityProviders.java b/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultIdentityProviders.java index 863db0710b30..1b103c22c927 100644 --- a/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultIdentityProviders.java +++ b/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultIdentityProviders.java @@ -17,8 +17,11 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; import software.amazon.awssdk.annotations.Immutable; import software.amazon.awssdk.annotations.SdkInternalApi; import software.amazon.awssdk.identity.spi.Identity; @@ -35,24 +38,20 @@ @Immutable @SdkInternalApi public final class DefaultIdentityProviders implements IdentityProviders { - /** - * TODO(sra-identity-auth): Currently, some customers assume we won't interact with the identity providers when we create - * the client. This isn't true - we need to call identityType. To TEMPORARILY work around those customer's tests failing, - * this is marked lazy. Once we fully migrate over to the SRA as the default code path, we should remove this lazy and - * ticket everyone in live who is making those bad assumptions. - */ - private final Lazy, IdentityProvider>> identityProviders; + // /** + // * TODO(sra-identity-auth): Currently, some customers assume we won't interact with the identity providers when we create + // * the client. This isn't true - we need to call identityType. To TEMPORARILY work around those customer's tests failing, + // * this is marked lazy. Once we fully migrate over to the SRA as the default code path, we should remove this lazy and + // * ticket everyone in live who is making those bad assumptions. + // */ + private final Map, IdentityProvider> identityProviders; private final List> identityProvidersList; private DefaultIdentityProviders(BuilderImpl builder) { this.identityProvidersList = new ArrayList<>(builder.identityProviders); - this.identityProviders = new Lazy<>(() -> { - Map, IdentityProvider> result = new HashMap<>(); - for (IdentityProvider identityProvider : identityProvidersList) { - result.put(identityProvider.identityType(), identityProvider); - } - return result; - }); + this.identityProviders = identityProvidersList.stream().collect( + Collectors.toMap(identityProvider -> identityProvider.identityType(), + Function.identity())); } public static Builder builder() { @@ -61,7 +60,7 @@ public static Builder builder() { @Override public IdentityProvider identityProvider(Class identityType) { - return (IdentityProvider) identityProviders.getValue().get(identityType); + return (IdentityProvider) identityProviders.get(identityType); } @Override From 244d081cf15fd371365f2a155529cf83e1da3dc0 Mon Sep 17 00:00:00 2001 From: Zoe Wang <33073555+zoewangg@users.noreply.github.com> Date: Tue, 2 Dec 2025 13:23:30 -0800 Subject: [PATCH 2/2] Fix build --- .../internal/DefaultIdentityProviders.java | 19 +++++-------------- .../identity/spi/IdentityProvidersTest.java | 17 ----------------- 2 files changed, 5 insertions(+), 31 deletions(-) diff --git a/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultIdentityProviders.java b/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultIdentityProviders.java index 1b103c22c927..c49d4d0ff168 100644 --- a/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultIdentityProviders.java +++ b/core/identity-spi/src/main/java/software/amazon/awssdk/identity/spi/internal/DefaultIdentityProviders.java @@ -17,7 +17,6 @@ import java.util.ArrayList; import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -27,7 +26,6 @@ import software.amazon.awssdk.identity.spi.Identity; import software.amazon.awssdk.identity.spi.IdentityProvider; import software.amazon.awssdk.identity.spi.IdentityProviders; -import software.amazon.awssdk.utils.Lazy; import software.amazon.awssdk.utils.ToString; import software.amazon.awssdk.utils.Validate; @@ -38,20 +36,13 @@ @Immutable @SdkInternalApi public final class DefaultIdentityProviders implements IdentityProviders { - // /** - // * TODO(sra-identity-auth): Currently, some customers assume we won't interact with the identity providers when we create - // * the client. This isn't true - we need to call identityType. To TEMPORARILY work around those customer's tests failing, - // * this is marked lazy. Once we fully migrate over to the SRA as the default code path, we should remove this lazy and - // * ticket everyone in live who is making those bad assumptions. - // */ + private final Map, IdentityProvider> identityProviders; - private final List> identityProvidersList; private DefaultIdentityProviders(BuilderImpl builder) { - this.identityProvidersList = new ArrayList<>(builder.identityProviders); - this.identityProviders = identityProvidersList.stream().collect( + this.identityProviders = builder.identityProviders.stream().collect( Collectors.toMap(identityProvider -> identityProvider.identityType(), - Function.identity())); + Function.identity(), (m1, m2) -> m2, HashMap::new)); } public static Builder builder() { @@ -71,7 +62,7 @@ public Builder toBuilder() { @Override public String toString() { return ToString.builder("IdentityProviders") - .add("identityProviders", identityProvidersList) + .add("identityProviders", identityProviders.values()) .build(); } @@ -82,7 +73,7 @@ private BuilderImpl() { } private BuilderImpl(DefaultIdentityProviders identityProviders) { - this.identityProviders.addAll(identityProviders.identityProvidersList); + this.identityProviders.addAll(identityProviders.identityProviders.values()); } @Override diff --git a/core/identity-spi/src/test/java/software/amazon/awssdk/identity/spi/IdentityProvidersTest.java b/core/identity-spi/src/test/java/software/amazon/awssdk/identity/spi/IdentityProvidersTest.java index 4a208607984c..e9657e55508d 100644 --- a/core/identity-spi/src/test/java/software/amazon/awssdk/identity/spi/IdentityProvidersTest.java +++ b/core/identity-spi/src/test/java/software/amazon/awssdk/identity/spi/IdentityProvidersTest.java @@ -97,23 +97,6 @@ public void copyBuilder_addIdentityProvider_works() { assertSame(tokenProvider, identityProviders.identityProvider(TokenIdentity.class)); } - @Test - public void identityProviders_notTouched_untilNeeded() { - // TODO(sra-identity-auth): This should be removed once everything is on useSraAuth = true - IdentityProvider awsCredentialsProvider = Mockito.mock(IdentityProvider.class); - IdentityProviders providers = - IdentityProviders.builder() - .putIdentityProvider(awsCredentialsProvider) - .build() - .toBuilder() - .putIdentityProvider(awsCredentialsProvider) - .build() - .toBuilder() - .build(); - providers.toString(); - Mockito.verifyNoMoreInteractions(awsCredentialsProvider); - } - private static final class AwsCredentialsProvider implements IdentityProvider { @Override