From 49f4cf8abfc8b2ce308f649a61085474d20490f4 Mon Sep 17 00:00:00 2001 From: Dongie Agnir Date: Tue, 13 May 2025 16:13:43 -0700 Subject: [PATCH 1/5] Copy only req extra files if using compiled rules When generating compiled endpoint rules, the majority of the classes used for the older intepreted rules don't need to be copied. To save on JAR space, only copy the files that are required. --- .../feature-AWSSDKforJavav2-0b9a472.json | 6 +++ .../emitters/tasks/EndpointProviderTasks.java | 2 +- .../RulesEngineRuntimeGeneratorTask.java | 4 +- .../RulesEngineRuntimeLiteGeneratorTask.java | 49 +++++++++++++++++++ 4 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 .changes/next-release/feature-AWSSDKforJavav2-0b9a472.json create mode 100644 codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java diff --git a/.changes/next-release/feature-AWSSDKforJavav2-0b9a472.json b/.changes/next-release/feature-AWSSDKforJavav2-0b9a472.json new file mode 100644 index 000000000000..6deebfd096b4 --- /dev/null +++ b/.changes/next-release/feature-AWSSDKforJavav2-0b9a472.json @@ -0,0 +1,6 @@ +{ + "type": "feature", + "category": "AWS SDK for Java v2", + "contributor": "", + "description": "Don't generate the unused files for the service endpoint provider when compiled endpoint rules are enabled (the default behavior). This lowers the overall size of the built JAR." +} diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/EndpointProviderTasks.java b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/EndpointProviderTasks.java index 6b64bd61f743..e54f964e4d04 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/EndpointProviderTasks.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/EndpointProviderTasks.java @@ -53,7 +53,7 @@ protected List createTasks() throws Exception { tasks.add(generateParams()); if (shouldGenerateCompiledEndpointRules()) { tasks.add(generateDefaultProvider2()); - tasks.add(new RulesEngineRuntimeGeneratorTask(generatorTaskParams)); + tasks.add(new RulesEngineRuntimeLiteGeneratorTask(generatorTaskParams)); tasks.add(new RulesEngineRuntimeGeneratorTask2(generatorTaskParams)); } else { tasks.add(generateDefaultProvider()); diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeGeneratorTask.java b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeGeneratorTask.java index beaa1a3bb0d7..38c956695a14 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeGeneratorTask.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeGeneratorTask.java @@ -30,7 +30,7 @@ import software.amazon.awssdk.utils.StringUtils; import software.amazon.awssdk.utils.Validate; -public final class RulesEngineRuntimeGeneratorTask extends BaseGeneratorTasks { +public class RulesEngineRuntimeGeneratorTask extends BaseGeneratorTasks { public static final String RUNTIME_CLASS_NAME = "WaitersRuntime"; private final String engineInternalClassDir; @@ -63,7 +63,7 @@ protected List createTasks() throws Exception { return copyTasks; } - private List rulesEngineJavaFilePaths(Collection runtimeEngineFiles) { + protected List rulesEngineJavaFilePaths(Collection runtimeEngineFiles) { return runtimeEngineFiles.stream() .filter(e -> e.endsWith(".java.resource")) .collect(Collectors.toList()); diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java new file mode 100644 index 000000000000..bf58246eb3d2 --- /dev/null +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java @@ -0,0 +1,49 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.codegen.emitters.tasks; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import software.amazon.awssdk.codegen.emitters.GeneratorTaskParams; +import software.amazon.awssdk.codegen.model.config.customization.CustomizationConfig; + +/** A version of {@link software.amazon.awssdk.codegen.emitters.tasks.RulesEngineRuntimeGeneratorTask} that copies a minimal + * set of the interpreter related classes. This set represents the only classes that need to be copied when compiled rules are + * enabled. + * + * @see CustomizationConfig#isEnableGenerateCompiledEndpointRules() + */ +public final class RulesEngineRuntimeLiteGeneratorTask extends RulesEngineRuntimeGeneratorTask { + private static final List FILES_TO_COPY = Stream.of("Outputs.java.resource", + "RegionOverride.java.resource", + "Partition.java.resource", + "PartitionDataProvider.java.resource", + "AwsEndpointProviderUtils.java.resource") + .collect(Collectors.toList()); + + public RulesEngineRuntimeLiteGeneratorTask(GeneratorTaskParams generatorTaskParams) { + super(generatorTaskParams); + } + + protected List rulesEngineJavaFilePaths(Collection runtimeEngineFiles) { + return super.rulesEngineJavaFilePaths(runtimeEngineFiles) + .stream() + .filter(e -> FILES_TO_COPY.stream().anyMatch(e::endsWith)) + .collect(Collectors.toList()); + } +} From 59f088ee633d01b8b0bfa92e1502d479f959aa67 Mon Sep 17 00:00:00 2001 From: Dongie Agnir Date: Wed, 14 May 2025 09:47:22 -0700 Subject: [PATCH 2/5] Include Arn class --- .../emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java index bf58246eb3d2..ead82e6aa3f1 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java @@ -33,7 +33,8 @@ public final class RulesEngineRuntimeLiteGeneratorTask extends RulesEngineRuntim "RegionOverride.java.resource", "Partition.java.resource", "PartitionDataProvider.java.resource", - "AwsEndpointProviderUtils.java.resource") + "AwsEndpointProviderUtils.java.resource", + "Arn.java.resource") .collect(Collectors.toList()); public RulesEngineRuntimeLiteGeneratorTask(GeneratorTaskParams generatorTaskParams) { From b786dc59f750085af3bdb8b452ceec27072ceaeb Mon Sep 17 00:00:00 2001 From: Dongie Agnir Date: Wed, 14 May 2025 09:58:14 -0700 Subject: [PATCH 3/5] Include separator to disambiguate names --- .../tasks/RulesEngineRuntimeLiteGeneratorTask.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java index ead82e6aa3f1..f789680306d2 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java @@ -29,12 +29,12 @@ * @see CustomizationConfig#isEnableGenerateCompiledEndpointRules() */ public final class RulesEngineRuntimeLiteGeneratorTask extends RulesEngineRuntimeGeneratorTask { - private static final List FILES_TO_COPY = Stream.of("Outputs.java.resource", - "RegionOverride.java.resource", - "Partition.java.resource", - "PartitionDataProvider.java.resource", - "AwsEndpointProviderUtils.java.resource", - "Arn.java.resource") + private static final List FILES_TO_COPY = Stream.of("/Outputs.java.resource", + "/RegionOverride.java.resource", + "/Partition.java.resource", + "/PartitionDataProvider.java.resource", + "/AwsEndpointProviderUtils.java.resource", + "/Arn.java.resource") .collect(Collectors.toList()); public RulesEngineRuntimeLiteGeneratorTask(GeneratorTaskParams generatorTaskParams) { From 44d5a4b0599490ca4becc716b9d4fe9feff81525 Mon Sep 17 00:00:00 2001 From: Dongie Agnir Date: Wed, 14 May 2025 11:08:03 -0700 Subject: [PATCH 4/5] Additional files to copy --- .../tasks/RulesEngineRuntimeLiteGeneratorTask.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java index f789680306d2..2c9f3888e259 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java @@ -34,7 +34,13 @@ public final class RulesEngineRuntimeLiteGeneratorTask extends RulesEngineRuntim "/Partition.java.resource", "/PartitionDataProvider.java.resource", "/AwsEndpointProviderUtils.java.resource", - "/Arn.java.resource") + "/Arn.java.resource", + "/Value.java.resource", + "/Identifier.java.resource", + "/EndpointAuthSchemeStrategy.java.resource", + "/EndpointAttributeProvider.java.resource", + "/EndpointAuthSchemeStrategyFactory.java.resource", + "/DefaultEndpointAuthSchemeStrategy.java.resource") .collect(Collectors.toList()); public RulesEngineRuntimeLiteGeneratorTask(GeneratorTaskParams generatorTaskParams) { From 044f56fc99499221e5bdd4edf4f5cd208d21a16c Mon Sep 17 00:00:00 2001 From: Dongie Agnir Date: Wed, 14 May 2025 11:20:34 -0700 Subject: [PATCH 5/5] Add comment about leading slash --- .../emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java | 1 + 1 file changed, 1 insertion(+) diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java index 2c9f3888e259..d223f2d6ace9 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/RulesEngineRuntimeLiteGeneratorTask.java @@ -29,6 +29,7 @@ * @see CustomizationConfig#isEnableGenerateCompiledEndpointRules() */ public final class RulesEngineRuntimeLiteGeneratorTask extends RulesEngineRuntimeGeneratorTask { + // Note: leading slashes are important to disambiguate between files that share the same suffix private static final List FILES_TO_COPY = Stream.of("/Outputs.java.resource", "/RegionOverride.java.resource", "/Partition.java.resource",