Skip to content

Commit c528be2

Browse files
authored
Skip transformation for S3 Transfer Manager and DynamoDB mapper (#5364)
* Skip transformation for S3 Transfer Manager and DynamoDB mapper * Fix tests
1 parent 0547c4e commit c528be2

File tree

6 files changed

+152
-20
lines changed

6 files changed

+152
-20
lines changed

migration-tool/pom.xml

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@
3939
<type>pom</type>
4040
<scope>import</scope>
4141
</dependency>
42+
<dependency>
43+
<groupId>com.amazonaws</groupId>
44+
<artifactId>aws-java-sdk-bom</artifactId>
45+
<version>1.12.472</version>
46+
<type>pom</type>
47+
<scope>import</scope>
48+
</dependency>
4249
</dependencies>
4350
</dependencyManagement>
4451

@@ -87,7 +94,17 @@
8794
<groupId>com.amazonaws</groupId>
8895
<artifactId>aws-java-sdk-sqs</artifactId>
8996
<scope>test</scope>
90-
<version>1.12.472</version>
97+
<exclusions>
98+
<exclusion>
99+
<groupId>com.fasterxml.jackson</groupId>
100+
<artifactId>jackson-core</artifactId>
101+
</exclusion>
102+
</exclusions>
103+
</dependency>
104+
<dependency>
105+
<groupId>com.amazonaws</groupId>
106+
<artifactId>aws-java-sdk-dynamodb</artifactId>
107+
<scope>test</scope>
91108
<exclusions>
92109
<exclusion>
93110
<groupId>com.fasterxml.jackson</groupId>
@@ -99,7 +116,6 @@
99116
<groupId>com.amazonaws</groupId>
100117
<artifactId>aws-java-sdk-s3</artifactId>
101118
<scope>test</scope>
102-
<version>1.12.472</version>
103119
<exclusions>
104120
<exclusion>
105121
<groupId>com.fasterxml.jackson</groupId>

migration-tool/src/main/java/software/amazon/awssdk/migration/recipe/ChangeSdkType.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static software.amazon.awssdk.migration.internal.utils.SdkTypeUtils.isV1ModelClass;
2222

2323
import java.util.ArrayList;
24+
import java.util.Arrays;
2425
import java.util.HashMap;
2526
import java.util.HashSet;
2627
import java.util.IdentityHashMap;
@@ -44,6 +45,7 @@
4445
import org.openrewrite.java.tree.TypeUtils;
4546
import org.openrewrite.java.tree.TypedTree;
4647
import software.amazon.awssdk.annotations.SdkInternalApi;
48+
import software.amazon.awssdk.utils.Logger;
4749
import software.amazon.awssdk.utils.Pair;
4850

4951
/**
@@ -58,10 +60,15 @@
5860
*/
5961
@SdkInternalApi
6062
public class ChangeSdkType extends Recipe {
63+
private static final Logger log = Logger.loggerFor(ChangeSdkType.class);
6164
private static final String V1_SERVICE_MODEL_WILD_CARD_CLASS_PATTERN =
6265
"com\\.amazonaws\\.services\\.[a-zA-Z0-9]+\\.model\\.\\*";
6366
private static final String V1_SERVICE_WILD_CARD_CLASS_PATTERN = "com\\.amazonaws\\.services\\.[a-zA-Z0-9]+\\.\\*";
6467

68+
private static final Set<String> PACKAGES_TO_SKIP = new HashSet<>(
69+
Arrays.asList("com.amazonaws.services.s3.transfer",
70+
"com.amazonaws.services.dynamodbv2.datamodeling"));
71+
6572
@Override
6673
public String getDisplayName() {
6774
return "Change AWS SDK for Java v1 types to v2 equivalents";
@@ -131,9 +138,20 @@ private static boolean isWildcard(String fullName) {
131138
}
132139

133140
private static boolean isV1Class(JavaType.FullyQualified fullyQualified) {
141+
String fullyQualifiedName = fullyQualified.getFullyQualifiedName();
142+
if (shouldSkip(fullyQualifiedName)) {
143+
log.info(() -> String.format("Skipping transformation for %s because it is not supported in the migration "
144+
+ "tooling at the moment", fullyQualifiedName));
145+
return false;
146+
}
147+
134148
return isV1ModelClass(fullyQualified) || isV1ClientClass(fullyQualified);
135149
}
136150

151+
private static boolean shouldSkip(String fqcn) {
152+
return PACKAGES_TO_SKIP.stream().anyMatch(fqcn::startsWith);
153+
}
154+
137155
@Override
138156
public JavaType visitType(JavaType javaType, ExecutionContext ctx) {
139157
if (javaType == null || javaType instanceof JavaType.Unknown) {

migration-tool/src/main/resources/META-INF/rewrite/upgrade-sdk-dependencies.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@ recipeList:
2121
groupId: software.amazon.awssdk
2222
artifactId: apache-client
2323
version: 2.23.16-SNAPSHOT
24+
onlyIfUsing: com.amazonaws.ClientConfiguration
2425
- org.openrewrite.maven.AddDependency:
2526
groupId: software.amazon.awssdk
2627
artifactId: netty-nio-client
2728
version: 2.23.16-SNAPSHOT
29+
onlyIfUsing: com.amazonaws.ClientConfiguration
2830
- org.openrewrite.maven.ChangeDependencyGroupIdAndArtifactId:
2931
oldGroupId: com.amazonaws
3032
oldArtifactId: aws-java-sdk-core

migration-tool/src/main/resources/scripts/generate_upgrade_sdk_dependencies_recipe.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,19 @@ def write_bom_recipe(f, version):
5959
newVersion: {0}'''
6060
f.write(change_bom.format(version))
6161

62-
def add_dependencies(f, version):
62+
# Only add apache-client and netty-nio-client if ClientConfiguration is used
63+
def add_http_client_dependencies_if_needed(f, version):
6364
add_dependencies_str = '''
6465
- org.openrewrite.maven.AddDependency:
6566
groupId: software.amazon.awssdk
6667
artifactId: apache-client
6768
version: {0}
69+
onlyIfUsing: com.amazonaws.ClientConfiguration
6870
- org.openrewrite.maven.AddDependency:
6971
groupId: software.amazon.awssdk
7072
artifactId: netty-nio-client
71-
version: {0}'''
73+
version: {0}
74+
onlyIfUsing: com.amazonaws.ClientConfiguration'''
7275
f.write(add_dependencies_str.format(version))
7376

7477
def replace_core_dependencies(f, version):
@@ -98,7 +101,7 @@ def write_recipe_yml_file(service_mapping):
98101
with open(filename, 'w') as f:
99102
write_copy_right_header(f)
100103
write_recipe_metadata(f, version)
101-
add_dependencies(f, version)
104+
add_http_client_dependencies_if_needed(f, version)
102105
replace_core_dependencies(f, version)
103106
write_bom_recipe(f, version)
104107
for s in service_mapping:

migration-tool/src/test/java/software/amazon/awssdk/migration/recipe/ChangeSdkTypeTest.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ public class ChangeSdkTypeTest implements RewriteTest {
2828

2929
@Override
3030
public void defaults(RecipeSpec spec) {
31-
spec.recipe(new ChangeSdkType()).parser(Java8Parser.builder().classpath("aws-java-sdk-sqs","sqs"));
31+
spec.recipe(new ChangeSdkType()).parser(Java8Parser.builder().classpath("aws-java-sdk-sqs","sqs", "aws-java-sdk-s3",
32+
"aws-java-sdk-dynamodb"));
3233
}
3334

3435
@Test
@@ -215,4 +216,30 @@ void shouldChangeFieldsInInnerClass() {
215216
)
216217
);
217218
}
219+
220+
@Test
221+
@EnabledOnJre({JRE.JAVA_8})
222+
void hasUnsupportedFeature_shouldSkip() {
223+
rewriteRun(
224+
java(
225+
"import com.amazonaws.services.s3.transfer.TransferManager;\n" +
226+
"import com.amazonaws.services.sqs.model.DeleteQueueRequest;\n" +
227+
"import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;\n" +
228+
"class Test {\n" +
229+
" private TransferManager transferManager;\n" +
230+
" private DeleteQueueRequest deleteQueue;\n" +
231+
" private DynamoDBMapper ddbMapper;\n" +
232+
"}\n",
233+
"import com.amazonaws.services.s3.transfer.TransferManager;\n"
234+
+ "import software.amazon.awssdk.services.sqs.model.DeleteQueueRequest;\n"
235+
+ "import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;\n"
236+
+ "\n"
237+
+ "class Test {\n"
238+
+ " private TransferManager transferManager;\n"
239+
+ " private DeleteQueueRequest deleteQueue;\n"
240+
+ " private DynamoDBMapper ddbMapper;\n"
241+
+ "}"
242+
)
243+
);
244+
}
218245
}

migration-tool/src/test/java/software/amazon/awssdk/migration/recipe/UpgradeSdkDependenciesTest.java

Lines changed: 80 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515

1616
package software.amazon.awssdk.migration.recipe;
1717

18+
import static org.openrewrite.java.Assertions.java;
19+
import static org.openrewrite.java.Assertions.mavenProject;
20+
import static org.openrewrite.java.Assertions.srcMainJava;
1821
import static org.openrewrite.maven.Assertions.pomXml;
1922

2023
import java.io.IOException;
@@ -25,13 +28,28 @@
2528
import java.util.Optional;
2629
import org.junit.jupiter.api.BeforeAll;
2730
import org.junit.jupiter.api.Test;
31+
import org.junit.jupiter.api.condition.EnabledOnJre;
32+
import org.junit.jupiter.api.condition.JRE;
33+
import org.openrewrite.java.Java8Parser;
2834
import org.openrewrite.test.RecipeSpec;
2935
import org.openrewrite.test.RewriteTest;
3036

3137
public class UpgradeSdkDependenciesTest implements RewriteTest {
3238

3339
private static String sdkVersion;
3440

41+
private final String useClientConfiguration = " import com.amazonaws.services.sqs.AmazonSQSClient;\n"
42+
+ " import com.amazonaws.ClientConfiguration;\n"
43+
+ " public class Test {\n"
44+
+ " private ClientConfiguration configuration;\n"
45+
+ " private AmazonSQSClient sqsClient;\n"
46+
+ " }";
47+
48+
private final String noClientConfiguration = " import com.amazonaws.services.sqs.AmazonSQSClient;\n"
49+
+ " public class Test {\n"
50+
+ " private AmazonSQSClient sqsClient;\n"
51+
+ " }";
52+
3553
@BeforeAll
3654
static void setUp() throws IOException {
3755
sdkVersion = getVersion();
@@ -40,7 +58,9 @@ static void setUp() throws IOException {
4058
@Override
4159
public void defaults(RecipeSpec spec) {
4260
try (InputStream stream = getClass().getResourceAsStream("/META-INF/rewrite/upgrade-sdk-dependencies.yml")) {
43-
spec.recipe(stream, "software.amazon.awssdk.UpgradeSdkDependencies");
61+
spec.recipe(stream, "software.amazon.awssdk.UpgradeSdkDependencies")
62+
.parser(Java8Parser.builder().classpath(
63+
"aws-java-sdk-sqs", "aws-java-sdk-core"));
4464
} catch (IOException e) {
4565
throw new RuntimeException(e);
4666
}
@@ -63,10 +83,11 @@ private static String getVersion() throws IOException {
6383
}
6484

6585
@Test
86+
@EnabledOnJre({JRE.JAVA_8})
6687
void standardClient_shouldChangeDependencyGroupIdAndArtifactId() throws IOException {
67-
getVersion();
6888
String currentVersion = getVersion();
6989
rewriteRun(
90+
mavenProject("project", srcMainJava(java(noClientConfiguration)),
7091
pomXml(
7192
" <project>\n"
7293
+ " <groupId>com.test.app</groupId>\n"
@@ -100,20 +121,65 @@ void standardClient_shouldChangeDependencyGroupIdAndArtifactId() throws IOExcept
100121
+ " <artifactId>sqs</artifactId>\n"
101122
+ " <version>2.23.16-SNAPSHOT</version>\n"
102123
+ " </dependency>\n"
103-
+ " <dependency>\n"
104-
+ " <groupId>software.amazon.awssdk</groupId>\n"
105-
+ " <artifactId>apache-client</artifactId>\n"
106-
+ " <version>2.23.16-SNAPSHOT</version>\n"
107-
+ " </dependency>\n"
108-
+ " <dependency>\n"
109-
+ " <groupId>software.amazon.awssdk</groupId>\n"
110-
+ " <artifactId>netty-nio-client</artifactId>\n"
111-
+ " <version>2.23.16-SNAPSHOT</version>\n"
112-
+ " </dependency>\n"
113124
+ " </dependencies>\n"
114125
+ "</project>", currentVersion)
115126

116-
)
117-
);
127+
)));
128+
}
129+
130+
@Test
131+
@EnabledOnJre({JRE.JAVA_8})
132+
void useClientConfiguration_shouldAddHttpDependencies() throws IOException {
133+
String currentVersion = getVersion();
134+
rewriteRun(
135+
mavenProject("project", srcMainJava(java(useClientConfiguration)),
136+
pomXml(
137+
" <project>\n"
138+
+ " <groupId>com.test.app</groupId>\n"
139+
+ " <artifactId>my-app</artifactId>\n"
140+
+ " <version>1</version>\n"
141+
+ " <dependencies>\n"
142+
+ " <dependency>\n"
143+
+ " <groupId>com.amazonaws</groupId>\n"
144+
+ " <artifactId>aws-java-sdk-core</artifactId>\n"
145+
+ " <version>1.12.100</version>\n"
146+
+ " </dependency>\n"
147+
+ " <dependency>\n"
148+
+ " <groupId>com.amazonaws</groupId>\n"
149+
+ " <artifactId>aws-java-sdk-sqs</artifactId>\n"
150+
+ " <version>1.12.100</version>\n"
151+
+ " </dependency>\n"
152+
+ " </dependencies>\n"
153+
+ " </project>",
154+
String.format("<project>\n"
155+
+ " <groupId>com.test.app</groupId>\n"
156+
+ " <artifactId>my-app</artifactId>\n"
157+
+ " <version>1</version>\n"
158+
+ " <dependencies>\n"
159+
+ " <dependency>\n"
160+
+ " <groupId>software.amazon.awssdk</groupId>\n"
161+
+ " <artifactId>aws-core</artifactId>\n"
162+
+ " <version>2.23.16-SNAPSHOT</version>\n"
163+
+ " </dependency>\n"
164+
+ " <dependency>\n"
165+
+ " <groupId>software.amazon.awssdk</groupId>\n"
166+
+ " <artifactId>sqs</artifactId>\n"
167+
+ " <version>2.23.16-SNAPSHOT</version>\n"
168+
+ " </dependency>\n"
169+
+ " <dependency>\n"
170+
+ " <groupId>software.amazon.awssdk</groupId>\n"
171+
+ " <artifactId>apache-client</artifactId>\n"
172+
+ " <version>2.23.16-SNAPSHOT</version>\n"
173+
+ " </dependency>\n"
174+
+ " <dependency>\n"
175+
+ " <groupId>software.amazon.awssdk</groupId>\n"
176+
+ " <artifactId>netty-nio-client</artifactId>\n"
177+
+ " <version>2.23.16-SNAPSHOT</version>\n"
178+
+ " </dependency>\n"
179+
+ " </dependencies>\n"
180+
+ "</project>", currentVersion)
181+
182+
)));
118183
}
184+
119185
}

0 commit comments

Comments
 (0)