diff --git a/test/v2-migration-tests/pom.xml b/test/v2-migration-tests/pom.xml index 007032fc9ec9..0066b81536e8 100644 --- a/test/v2-migration-tests/pom.xml +++ b/test/v2-migration-tests/pom.xml @@ -136,6 +136,11 @@ test-utils test + + commons-io + commons-io + test + diff --git a/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/GradleProjectTest.java b/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/GradleProjectTest.java index 6fdf0018102b..2a77a993e5cd 100644 --- a/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/GradleProjectTest.java +++ b/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/GradleProjectTest.java @@ -36,7 +36,6 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIf; -import software.amazon.awssdk.testutils.SdkVersionUtils; import software.amazon.awssdk.utils.Logger; public class GradleProjectTest { diff --git a/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java b/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java index db23674b1554..a7b6a5befe1d 100644 --- a/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java +++ b/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java @@ -51,7 +51,7 @@ protected static void verifyTransformation() throws IOException { String recipeCmd = "-Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2"; List rewriteArgs = new ArrayList<>(); // pin version since updates have broken tests - String rewriteMavenPluginVersion = "5.46.0"; + String rewriteMavenPluginVersion = "6.17.0"; addAll(rewriteArgs, "mvn", "org.openrewrite.maven:rewrite-maven-plugin:" + rewriteMavenPluginVersion + ":run", "-Drewrite.recipeArtifactCoordinates=software.amazon.awssdk:v2-migration:"+ getMigrationToolVersion() + "-PREVIEW", recipeCmd); diff --git a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/gradle/before/init.gradle b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/gradle/before/init.gradle index 25eb4abdc9c1..8e1300870bc2 100644 --- a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/gradle/before/init.gradle +++ b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/gradle/before/init.gradle @@ -3,7 +3,7 @@ initscript { maven { url "https://plugins.gradle.org/m2" } } dependencies { - classpath("org.openrewrite:plugin:6.28.0") + classpath("org.openrewrite:plugin:7.15.0") } } diff --git a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven-nocompile/after/src/main/java/foo/bar/S3EnDateTime.java b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven-nocompile/after/src/main/java/foo/bar/S3EnDateTime.java index bee0b278b9af..ecab91a6b763 100644 --- a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven-nocompile/after/src/main/java/foo/bar/S3EnDateTime.java +++ b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven-nocompile/after/src/main/java/foo/bar/S3EnDateTime.java @@ -25,7 +25,7 @@ public class S3EnDateTime { public void parseEvent(String jsonInput) { S3EventNotification notification = S3EventNotification.fromJson(jsonInput); - for (S3EventNotification.S3EventNotificationRecord record : notification.getRecords()) { + for (S3EventNotificationRecord record : notification.getRecords()) { DateTime eventTime = /*AWS SDK for Java v2 migration: getEventTime returns Instant instead of DateTime in v2. AWS SDK v2 does not include org.joda.time as a dependency. If you want to keep using DateTime, you'll need to manually add "org.joda.time:joda-time" dependency to your project after migration.*/new DateTime(record.getEventTime().toEpochMilli()); GlacierEventData glacierEventData = record.getGlacierEventData(); diff --git a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/Application.java b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/Application.java index fcb5b1da2862..bc3f83e38420 100644 --- a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/Application.java +++ b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/Application.java @@ -70,11 +70,11 @@ public static void main(String... args) { } catch (SqsException exception) { System.out.println(String.format("Error code: %s. RequestId: %s. Raw response content: %s", - exception.awsErrorDetails().errorCode(), exception.requestId(), - exception.awsErrorDetails().rawResponse().asUtf8String())); + exception.awsErrorDetails().errorCode(), exception.requestId(), + exception.awsErrorDetails().rawResponse().asUtf8String())); } catch (AwsServiceException exception) { System.out.println(String.format("Error message: %s. Service Name: %s", - exception.awsErrorDetails().errorMessage(), exception.awsErrorDetails().serviceName())); + exception.awsErrorDetails().errorMessage(), exception.awsErrorDetails().serviceName())); } catch (SdkException exception) { System.out.println("Error message " + exception.getMessage()); } diff --git a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3.java b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3.java index 51244f6e1ac4..c28f71bdd5c5 100644 --- a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3.java +++ b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3.java @@ -170,8 +170,7 @@ private void completeMpu(S3Client s3, String bucket, String key) { .build(); CompleteMultipartUploadRequest completeMpuRequest2 = - CompleteMultipartUploadRequest.builder().bucket(bucket).key(key).uploadId("uploadId").multipartUpload(CompletedMultipartUpload.builder().parts(partETags).build()) - .build(); + CompleteMultipartUploadRequest.builder().bucket(bucket).key(key).uploadId("uploadId").multipartUpload(CompletedMultipartUpload.builder().parts(partETags).build()).build(); } private void listObjects(S3Client s3, String bucket) { diff --git a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3RequestConstructor.java b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3RequestConstructor.java index e884c669749f..19b4b6e2036c 100644 --- a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3RequestConstructor.java +++ b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3RequestConstructor.java @@ -147,8 +147,7 @@ public void requestconstructor() { s3.abortMultipartUpload(AbortMultipartUploadRequest.builder().bucket("name").key("key").uploadId("upload") .build()); - s3.completeMultipartUpload(CompleteMultipartUploadRequest.builder().bucket("name").key("key").uploadId("upload").multipartUpload(CompletedMultipartUpload.builder().parts(new ArrayList<>()).build()) - .build()); + s3.completeMultipartUpload(CompleteMultipartUploadRequest.builder().bucket("name").key("key").uploadId("upload").multipartUpload(CompletedMultipartUpload.builder().parts(new ArrayList<>()).build()).build()); s3.copyObject(CopyObjectRequest.builder() .build()); @@ -458,8 +457,7 @@ public void requestconstructor() { .build(); List tags = new ArrayList<>(); - GetObjectTaggingResponse getObjectTaggingResult = GetObjectTaggingResponse.builder().tagSet(tags) - .build(); + GetObjectTaggingResponse getObjectTaggingResult = GetObjectTaggingResponse.builder().tagSet(tags).build(); PutBucketVersioningRequest setBucketVersioningConfigurationRequest = PutBucketVersioningRequest.builder().bucket(bucketName).versioningConfiguration(VersioningConfiguration.builder() diff --git a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3Streaming.java b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3Streaming.java index bccb2eae944b..b0b6cca9cfe8 100644 --- a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3Streaming.java +++ b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3Streaming.java @@ -61,7 +61,7 @@ void putObject_bucketKeyStreamMetadata(String bucket, String key, InputStream st HeadObjectResponse metadataWithLength = HeadObjectResponse.builder() .build(); s3.putObject(PutObjectRequest.builder().bucket(bucket).key(key).contentLength(22L) - .build(), RequestBody.fromInputStream(stream, 22L)); + .build(), RequestBody.fromInputStream(stream, 22)); HeadObjectResponse metadataWithoutLength = HeadObjectResponse.builder() @@ -105,7 +105,7 @@ void putObject_requestPojoWithInputStream(String bucket, String key) { HeadObjectResponse metadata = HeadObjectResponse.builder() .build(); s3.putObject(PutObjectRequest.builder().bucket(bucket).key(key).websiteRedirectLocation("location").contentLength(11L) - .build(), RequestBody.fromInputStream(inputStream2, 11L)); + .build(), RequestBody.fromInputStream(inputStream2, 11)); } void putObject_requestPojoWithoutPayload(String bucket, String key) { @@ -117,8 +117,7 @@ void putObject_requestPojoWithoutPayload(String bucket, String key) { void putObjectSetters() { List tags = new ArrayList<>(); - Tagging objectTagging = Tagging.builder().tagSet(tags) - .build(); + Tagging objectTagging = Tagging.builder().tagSet(tags).build(); PutObjectRequest putObjectRequest = PutObjectRequest.builder().bucket("bucket").key("key").websiteRedirectLocation("location") diff --git a/v2-migration/pom.xml b/v2-migration/pom.xml index f15eccad356f..478ce4054c0b 100644 --- a/v2-migration/pom.xml +++ b/v2-migration/pom.xml @@ -34,7 +34,7 @@ ${project.parent.version} - 2.23.0 + 3.14.0 5.10.3 1.12.472 @@ -74,7 +74,7 @@ org.openrewrite rewrite-java-8 - runtime + test org.openrewrite.recipe diff --git a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/ConstructorToFluent.java b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/ConstructorToFluent.java index 51e8c726b8dc..f0e7d65ae36e 100644 --- a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/ConstructorToFluent.java +++ b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/ConstructorToFluent.java @@ -147,6 +147,8 @@ private static J.MethodInvocation addWither(Expression select, String simpleName Collections.singletonList(simpleName), Collections.singletonList(parameterType), null, + null, + null, null ); diff --git a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/HttpSettingsToHttpClient.java b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/HttpSettingsToHttpClient.java index b29ce8b40791..b32a02291e84 100644 --- a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/HttpSettingsToHttpClient.java +++ b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/HttpSettingsToHttpClient.java @@ -308,6 +308,8 @@ private J.MethodInvocation addHttpClientBuilderIfNeeded( Collections.emptyList(), parametersTypes, Collections.emptyList(), + Collections.emptyList(), + Collections.emptyList(), Collections.emptyList() ); @@ -359,6 +361,8 @@ private JContainer httpClientBuilderInvoke(Map h Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), + Collections.emptyList(), + Collections.emptyList(), Collections.emptyList() ); @@ -403,6 +407,8 @@ private static J.MethodInvocation invokeHttpSetting(Map.Entry names, names, types, null, + null, + null, null ); diff --git a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3PojoToV2.java b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3PojoToV2.java new file mode 100644 index 000000000000..3503b038d4d3 --- /dev/null +++ b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3PojoToV2.java @@ -0,0 +1,95 @@ +/* + * 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.v2migration; + +import static software.amazon.awssdk.v2migration.internal.utils.S3TransformUtils.V1_S3_MODEL_PKG; +import static software.amazon.awssdk.v2migration.internal.utils.S3TransformUtils.V2_S3_MODEL_PKG; + +import java.util.List; +import java.util.regex.Pattern; +import org.openrewrite.ExecutionContext; +import org.openrewrite.Recipe; +import org.openrewrite.TreeVisitor; +import org.openrewrite.java.AddImport; +import org.openrewrite.java.JavaTemplate; +import org.openrewrite.java.JavaVisitor; +import org.openrewrite.java.tree.Expression; +import org.openrewrite.java.tree.J; +import org.openrewrite.java.tree.JavaType; +import software.amazon.awssdk.annotations.SdkInternalApi; + +@SdkInternalApi +public class S3PojoToV2 extends Recipe { + + private static final Pattern COMPETE_MPU = Pattern.compile(V1_S3_MODEL_PKG + "CompleteMultipartUploadRequest"); + private static final Pattern OBJECT_TAGGING = Pattern.compile(V1_S3_MODEL_PKG + "ObjectTagging"); + private static final Pattern GET_OBJECT_TAGGING_RESULT = Pattern.compile(V1_S3_MODEL_PKG + "GetObjectTaggingResult"); + + @Override + public String getDisplayName() { + return "S3 POJOs to V2"; + } + + @Override + public String getDescription() { + return "S3 POJOs to V2"; + } + + @Override + public TreeVisitor getVisitor() { + return new Visitor(); + } + + private static final class Visitor extends JavaVisitor { + + @Override + public J visitNewClass(J.NewClass newClass, ExecutionContext executionContext) { + JavaType type = newClass.getType(); + if (!(type instanceof JavaType.FullyQualified)) { + return newClass; + } + + if (type.isAssignableFrom(COMPETE_MPU) && newClass.getArguments().size() == 4) { + addV2S3ModelImport("CompleteMultipartUploadRequest"); + addV2S3ModelImport("CompletedMultipartUpload"); + List params = newClass.getArguments(); + String v2Builder = "CompleteMultipartUploadRequest.builder().bucket(#{any()}).key(#{any()}).uploadId(#{any()})" + + ".multipartUpload(CompletedMultipartUpload.builder().parts(#{any()}).build()).build()"; + return JavaTemplate.builder(v2Builder) + .build().apply(getCursor(), newClass.getCoordinates().replace(), + params.get(0), params.get(1), params.get(2), params.get(3)); + } + if (type.isAssignableFrom(OBJECT_TAGGING) && newClass.getArguments().size() == 1) { + String v2Builder = "Tagging.builder().tagSet(#{any()}).build();"; + return JavaTemplate.builder(v2Builder) + .build().apply(getCursor(), newClass.getCoordinates().replace(), + newClass.getArguments().get(0)); + } + if (type.isAssignableFrom(GET_OBJECT_TAGGING_RESULT) && newClass.getArguments().size() == 1) { + String v2Builder = "GetObjectTaggingResponse.builder().tagSet(#{any()}).build();"; + return JavaTemplate.builder(v2Builder) + .build().apply(getCursor(), newClass.getCoordinates().replace(), + newClass.getArguments().get(0)); + } + + return super.visitNewClass(newClass, executionContext); + } + + private void addV2S3ModelImport(String className) { + doAfterVisit(new AddImport<>(V2_S3_MODEL_PKG + className, null, false)); + } + } +} diff --git a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3PutObjectRequestToV2.java b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3PutObjectRequestToV2.java index 151d24a95c24..db9601b045e5 100644 --- a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3PutObjectRequestToV2.java +++ b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3PutObjectRequestToV2.java @@ -305,13 +305,8 @@ private J.MethodInvocation addInputStreamToPutObject(J.MethodInvocation method, .withComments(inputStreamBufferingWarningComment()); } - StringBuilder sb = new StringBuilder("#{any()}, RequestBody.fromInputStream(#{any()}, #{any()}"); - if (contentLen instanceof J.Literal) { - sb.append("L"); - } - sb.append(")"); - - return JavaTemplate.builder(sb.toString()).build() + v2Method = "#{any()}, RequestBody.fromInputStream(#{any()}, #{any()})"; + return JavaTemplate.builder(v2Method).build() .apply(getCursor(), method.getCoordinates().replaceArguments(), method.getArguments().get(0), inputStream, contentLen); } @@ -346,12 +341,7 @@ private J.MethodInvocation transformPutObjectWithStreamAndMetadata(J.MethodInvoc .withComments(inputStreamBufferingWarningComment()); } - sb.append(".build(), RequestBody.fromInputStream(#{any()}, #{any()}"); - - if (contentLen instanceof J.Literal) { - sb.append("L"); - } - sb.append(")"); + sb.append(".build(), RequestBody.fromInputStream(#{any()}, #{any()})"); params = Arrays.copyOf(params, 4); params[3] = contentLen; diff --git a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3StreamingRequestToV2.java b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3StreamingRequestToV2.java index 9d9c237acc1c..403bd213a6bd 100644 --- a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3StreamingRequestToV2.java +++ b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3StreamingRequestToV2.java @@ -123,6 +123,8 @@ private J.MethodInvocation stringToRequestBody(Expression fileExpr) { Collections.singletonList("stringContent"), Collections.singletonList(JavaType.buildType("java.lang.String")), null, + null, + null, null ); @@ -186,6 +188,8 @@ private J.MethodInvocation fileToRequestBody(Expression fileExpr) { Collections.singletonList("file"), Collections.singletonList(JavaType.buildType("java.io.File")), null, + null, + null, null ); @@ -217,6 +221,8 @@ private Expression bucketAndKeyToPutObject(Expression bucketExpr, Expression key Arrays.asList("bucket", "key"), Arrays.asList(bucketExpr.getType(), keyExpr.getType()), null, + null, + null, null ); diff --git a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3StreamingResponseToV2.java b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3StreamingResponseToV2.java index 3504afb21e51..1c7e8adce40c 100644 --- a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3StreamingResponseToV2.java +++ b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3StreamingResponseToV2.java @@ -149,6 +149,8 @@ public J visitMethodInvocation(J.MethodInvocation method, ExecutionContext execu Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), + Collections.emptyList(), + Collections.emptyList(), Collections.emptyList() ); diff --git a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/SdkExceptionToV2.java b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/SdkExceptionToV2.java new file mode 100644 index 000000000000..8e244787bdb6 --- /dev/null +++ b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/SdkExceptionToV2.java @@ -0,0 +1,94 @@ +/* + * 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.v2migration; + +import static software.amazon.awssdk.v2migration.internal.utils.NamingUtils.transformMethodName; + +import org.openrewrite.ExecutionContext; +import org.openrewrite.Recipe; +import org.openrewrite.TreeVisitor; +import org.openrewrite.java.JavaIsoVisitor; +import org.openrewrite.java.MethodMatcher; +import org.openrewrite.java.tree.J; +import software.amazon.awssdk.annotations.SdkInternalApi; + +@SdkInternalApi +public class SdkExceptionToV2 extends Recipe { + + public static MethodMatcher v1ExceptionMethod(String methodSignature) { + return new MethodMatcher("com.amazonaws.AmazonServiceException " + methodSignature, true); + } + + @Override + public String getDisplayName() { + return "SDK Exceptions Methods to V2"; + } + + @Override + public String getDescription() { + return "SDK Exceptions Methods to V2"; + } + + @Override + public TreeVisitor getVisitor() { + return new Visitor(); + } + + private static final class Visitor extends JavaIsoVisitor { + + @Override + public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, ExecutionContext executionContext) { + if (v1ExceptionMethod("getErrorCode()").matches(method)) { + String newMethodName = "awsErrorDetails().errorCode()"; + method = transformMethodName(method, newMethodName, getCursor()); + return super.visitMethodInvocation(method, executionContext); + } + if (v1ExceptionMethod("getServiceName()").matches(method)) { + String newMethodName = "awsErrorDetails().serviceName()"; + method = transformMethodName(method, newMethodName, getCursor()); + return super.visitMethodInvocation(method, executionContext); + } + if (v1ExceptionMethod("getErrorMessage()").matches(method)) { + String newMethodName = "awsErrorDetails().errorMessage()"; + method = transformMethodName(method, newMethodName, getCursor()); + return super.visitMethodInvocation(method, executionContext); + } + if (v1ExceptionMethod("getStatusCode()").matches(method)) { + String newMethodName = "awsErrorDetails().sdkHttpResponse().statusCode()"; + method = transformMethodName(method, newMethodName, getCursor()); + return super.visitMethodInvocation(method, executionContext); + } + if (v1ExceptionMethod("getHttpHeaders()").matches(method)) { + // TODO: v2 returns Map>. Convert it to Map + String newMethodName = "awsErrorDetails().sdkHttpResponse().headers()"; + method = transformMethodName(method, newMethodName, getCursor()); + return super.visitMethodInvocation(method, executionContext); + } + if (v1ExceptionMethod("getRawResponse()").matches(method)) { + String newMethodName = "awsErrorDetails().rawResponse().asByteArray()"; + method = transformMethodName(method, newMethodName, getCursor()); + return super.visitMethodInvocation(method, executionContext); + } + if (v1ExceptionMethod("getRawResponseContent()").matches(method)) { + String newMethodName = "awsErrorDetails().rawResponse().asUtf8String()"; + method = transformMethodName(method, newMethodName, getCursor()); + return super.visitMethodInvocation(method, executionContext); + } + + return super.visitMethodInvocation(method, executionContext); + } + } +} diff --git a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/TransferManagerMethodsToV2.java b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/TransferManagerMethodsToV2.java index 749d94d1ed8a..c97a83125791 100644 --- a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/TransferManagerMethodsToV2.java +++ b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/TransferManagerMethodsToV2.java @@ -15,10 +15,12 @@ package software.amazon.awssdk.v2migration; +import static software.amazon.awssdk.v2migration.internal.utils.NamingUtils.transformMethodName; import static software.amazon.awssdk.v2migration.internal.utils.S3TransformUtils.V2_S3_MODEL_PKG; import static software.amazon.awssdk.v2migration.internal.utils.S3TransformUtils.V2_TM_CLIENT; import static software.amazon.awssdk.v2migration.internal.utils.S3TransformUtils.V2_TM_MODEL_PKG; import static software.amazon.awssdk.v2migration.internal.utils.S3TransformUtils.v2TmMethodMatcher; +import static software.amazon.awssdk.v2migration.internal.utils.S3TransformUtils.v2TransferProgressMethodMatcher; import java.util.regex.Pattern; import org.openrewrite.ExecutionContext; @@ -55,8 +57,12 @@ public class TransferManagerMethodsToV2 extends Recipe { private static final MethodMatcher UPLOAD_DIR = v2TmMethodMatcher("uploadDirectory(String, String, java.io.File, boolean)"); + private static final MethodMatcher GET_BYTES_TRANSFERRED = v2TransferProgressMethodMatcher("getBytesTransferred()"); + private static final MethodMatcher GET_TOTAL_BYTES_TO_TRANSFER = v2TransferProgressMethodMatcher("getTotalBytesToTransfer()"); + private static final MethodMatcher GET_PERCENT_TRANSFERRED = v2TransferProgressMethodMatcher("getPercentTransferred()"); + private static final Pattern S3_TM_CREDENTIAL = Pattern.compile(V2_TM_CLIENT); - private static final Pattern V2_AWSCREDENTAIL = Pattern.compile("software.amazon.awssdk.auth.credentials.AwsCredentials"); + private static final Pattern V2_AWS_CREDENTIALS = Pattern.compile("software.amazon.awssdk.auth.credentials.AwsCredentials"); private static final Pattern V2_CREDENTIAL_PROVIDER = Pattern.compile("software.amazon.awssdk.auth.credentials" + ".AwsCredentialsProvider"); @@ -116,6 +122,21 @@ public J visitMethodInvocation(J.MethodInvocation method, ExecutionContext execu method = transformUploadDirectory(method); return super.visitMethodInvocation(method, executionContext); } + if (GET_BYTES_TRANSFERRED.matches(method, false)) { + String newMethodName = "snapshot().transferredBytes()"; + method = transformMethodName(method, newMethodName, getCursor()); + return super.visitMethodInvocation(method, executionContext); + } + if (GET_TOTAL_BYTES_TO_TRANSFER.matches(method, false)) { + String newMethodName = "snapshot().totalBytes()"; + method = transformMethodName(method, newMethodName, getCursor()); + return super.visitMethodInvocation(method, executionContext); + } + if (GET_PERCENT_TRANSFERRED.matches(method, false)) { + String newMethodName = "snapshot().ratioTransferred()"; + method = transformMethodName(method, newMethodName, getCursor()); + return super.visitMethodInvocation(method, executionContext); + } return super.visitMethodInvocation(method, executionContext); } @@ -131,7 +152,7 @@ public J visitNewClass(J.NewClass newClass, ExecutionContext executionContext) { newClass.getArguments().size() == 1 && newClass.getArguments().get(0).getType() != null) { Expression arg = newClass.getArguments().get(0); - if (arg.getType().isAssignableFrom(V2_AWSCREDENTAIL)) { + if (arg.getType().isAssignableFrom(V2_AWS_CREDENTIALS)) { addS3AsyncClientImport(); addStaticCredentialsProviderImport(); diff --git a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/V1BuilderVariationsToV2Builder.java b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/V1BuilderVariationsToV2Builder.java index 2264637619a9..d8bb986e03b9 100644 --- a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/V1BuilderVariationsToV2Builder.java +++ b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/V1BuilderVariationsToV2Builder.java @@ -135,6 +135,8 @@ private J.MethodInvocation renameStandardToBuilderOrDefaultClientToCreate(J.Meth Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), + Collections.emptyList(), + Collections.emptyList(), Collections.emptyList() ); diff --git a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/internal/utils/NamingUtils.java b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/internal/utils/NamingUtils.java index 3e1c71f800e0..64f8a3858d28 100644 --- a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/internal/utils/NamingUtils.java +++ b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/internal/utils/NamingUtils.java @@ -15,6 +15,9 @@ package software.amazon.awssdk.v2migration.internal.utils; +import org.openrewrite.Cursor; +import org.openrewrite.java.JavaTemplate; +import org.openrewrite.java.tree.J; import software.amazon.awssdk.annotations.SdkInternalApi; import software.amazon.awssdk.utils.StringUtils; import software.amazon.awssdk.utils.internal.CodegenNamingUtils; @@ -59,6 +62,11 @@ public static boolean isSetter(String name) { } public static boolean isGetter(String name) { - return !StringUtils.isBlank(name) && name.startsWith("get") && !name.equals("get"); + return !StringUtils.isBlank(name) && name.startsWith("get") && !"get".equals(name); + } + + public static J.MethodInvocation transformMethodName(J.MethodInvocation method, String newMethodName, Cursor cursor) { + return JavaTemplate.builder("#{any()}." + newMethodName).build() + .apply(cursor, method.getCoordinates().replace(), method.getSelect()); } } diff --git a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/internal/utils/S3TransformUtils.java b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/internal/utils/S3TransformUtils.java index 87981c4f8bca..a4390027f79b 100644 --- a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/internal/utils/S3TransformUtils.java +++ b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/internal/utils/S3TransformUtils.java @@ -46,6 +46,7 @@ public final class S3TransformUtils { public static final String V2_TM_CLIENT = "software.amazon.awssdk.transfer.s3.S3TransferManager"; public static final String V2_TM_MODEL_PKG = "software.amazon.awssdk.transfer.s3.model."; + public static final String V2_TM_PROGRESS = "software.amazon.awssdk.transfer.s3.progress.TransferProgress"; public static final Set SUPPORTED_METADATA_TRANSFORMS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( "contentLength", @@ -91,6 +92,10 @@ public static MethodMatcher v2TmMethodMatcher(String methodSignature) { return new MethodMatcher(V2_TM_CLIENT + " " + methodSignature, true); } + public static MethodMatcher v2TransferProgressMethodMatcher(String methodSignature) { + return new MethodMatcher(V2_TM_PROGRESS + " " + methodSignature, true); + } + public static void addMetadataFields(StringBuilder sb, String metadataName, Map> metadataMap) { Map map = metadataMap.get(metadataName); diff --git a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/openrewrite/ChangeMethodInvocationReturnType.java b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/openrewrite/ChangeMethodInvocationReturnType.java deleted file mode 100644 index 40b3706d96f5..000000000000 --- a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/openrewrite/ChangeMethodInvocationReturnType.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * 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.v2migration.openrewrite; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Collections; -import org.openrewrite.ExecutionContext; -import org.openrewrite.Option; -import org.openrewrite.Recipe; -import org.openrewrite.TreeVisitor; -import org.openrewrite.internal.ListUtils; -import org.openrewrite.java.JavaIsoVisitor; -import org.openrewrite.java.MethodMatcher; -import org.openrewrite.java.tree.J; -import org.openrewrite.java.tree.JavaType; -import org.openrewrite.java.tree.TypeUtils; -import org.openrewrite.marker.Markers; -import software.amazon.awssdk.annotations.SdkInternalApi; - -/** - * This class contains source imported from https://github - * .com/openrewrite/rewrite/blob/main/rewrite-java/src/main/java/org/openrewrite/java/ChangeMethodInvocationReturnType.java, - * licensed under the Apache License 2.0, available at the time of the fork (4/11/2025) here: - * https://github.com/openrewrite/rewrite/blob/main/LICENSE - *

- * All original source licensed under the Apache License 2.0. All modifications are licensed under the Apache - * License 2.0 by Amazon Web Services. - */ -@SdkInternalApi -public class ChangeMethodInvocationReturnType extends Recipe { - - @Option(displayName = "Method pattern", - description = "A method pattern is used to find matching method invocations.", - example = "org.mockito.Matchers anyVararg()") - private final String methodPattern; - - @Option(displayName = "New method invocation return type", - description = "The fully qualified new return type of method invocation.", - example = "long") - private final String newReturnType; - - @JsonCreator - public ChangeMethodInvocationReturnType(@JsonProperty("methodPattern") String methodPattern, - @JsonProperty("newReturnType") String newReturnType) { - this.methodPattern = methodPattern; - this.newReturnType = newReturnType; - } - - @Override - public String getDisplayName() { - return "Change method invocation return type"; - } - - @Override - public String getDescription() { - return "Changes the return type of a method invocation."; - } - - @Override - public TreeVisitor getVisitor() { - return new JavaIsoVisitor() { - private final MethodMatcher methodMatcher = new MethodMatcher(methodPattern, false); - - private boolean methodUpdated; - - @Override - public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, ExecutionContext ctx) { - J.MethodInvocation m = super.visitMethodInvocation(method, ctx); - JavaType.Method type = m.getMethodType(); - if (methodMatcher.matches(method) && type != null && !newReturnType.equals(type.getReturnType().toString())) { - type = type.withReturnType(JavaType.buildType(newReturnType)); - m = m.withMethodType(type); - if (m.getName().getType() != null) { - m = m.withName(m.getName().withType(type)); - } - methodUpdated = true; - } - return m; - } - - @Override - public J.VariableDeclarations visitVariableDeclarations(J.VariableDeclarations multiVariable, ExecutionContext ctx) { - methodUpdated = false; - JavaType.FullyQualified originalType = multiVariable.getTypeAsFullyQualified(); - J.VariableDeclarations mv = super.visitVariableDeclarations(multiVariable, ctx); - - if (methodUpdated) { - JavaType newType = JavaType.buildType(newReturnType); - JavaType.FullyQualified newFieldType = TypeUtils.asFullyQualified(newType); - - maybeAddImport(newFieldType); - maybeRemoveImport(originalType); - - mv = mv.withTypeExpression(mv.getTypeExpression() == null ? - null : - new J.Identifier(mv.getTypeExpression().getId(), - mv.getTypeExpression().getPrefix(), - Markers.EMPTY, - Collections.emptyList(), - newReturnType.substring(newReturnType.lastIndexOf('.') + 1), - newType, - null - ) - ); - - mv = mv.withVariables(ListUtils.map(mv.getVariables(), var -> { - JavaType.FullyQualified varType = TypeUtils.asFullyQualified(var.getType()); - if (varType != null && !varType.equals(newType)) { - return var.withType(newType).withName(var.getName().withType(newType)); - } - return var; - })); - } - - return mv; - } - }; - } -} \ No newline at end of file diff --git a/v2-migration/src/main/resources/META-INF/rewrite/aws-sdk-java-v1-to-v2.yml b/v2-migration/src/main/resources/META-INF/rewrite/aws-sdk-java-v1-to-v2.yml index c040f4a7cf71..3a427b78bfef 100644 --- a/v2-migration/src/main/resources/META-INF/rewrite/aws-sdk-java-v1-to-v2.yml +++ b/v2-migration/src/main/resources/META-INF/rewrite/aws-sdk-java-v1-to-v2.yml @@ -32,12 +32,14 @@ recipeList: - software.amazon.awssdk.v2migration.S3NonStreamingRequestToV2 - software.amazon.awssdk.v2migration.S3MethodsToV2 - software.amazon.awssdk.v2migration.S3EventNotificationMethodsToV2 + - software.amazon.awssdk.v2migration.S3PojoToV2 - software.amazon.awssdk.v2migration.S3MethodsConstructorToFluent - software.amazon.awssdk.v2migration.S3UriToV2 - software.amazon.awssdk.v2migration.EnumGettersToV2 - software.amazon.awssdk.v2migration.ChangeTransferManagerTypes - software.amazon.awssdk.v2migration.ChangeS3EventNotificationTypes - software.amazon.awssdk.v2migration.ChangeSdkType + - software.amazon.awssdk.v2migration.SdkExceptionToV2 - software.amazon.awssdk.v2migration.ChangeSdkCoreTypes # At this point, all classes should be changed to v2 equivalents - software.amazon.awssdk.v2migration.V1BuilderVariationsToV2Builder diff --git a/v2-migration/src/main/resources/META-INF/rewrite/change-exception-types.yml b/v2-migration/src/main/resources/META-INF/rewrite/change-exception-types.yml index ac28f9e1ea5d..601c78dc6cf9 100644 --- a/v2-migration/src/main/resources/META-INF/rewrite/change-exception-types.yml +++ b/v2-migration/src/main/resources/META-INF/rewrite/change-exception-types.yml @@ -31,28 +31,6 @@ recipeList: - org.openrewrite.java.ChangeMethodName: methodPattern: com.amazonaws.AmazonServiceException getRequestId() newMethodName: requestId - - org.openrewrite.java.ChangeMethodName: - methodPattern: com.amazonaws.AmazonServiceException getErrorCode() - newMethodName: awsErrorDetails().errorCode - - org.openrewrite.java.ChangeMethodName: - methodPattern: com.amazonaws.AmazonServiceException getServiceName() - newMethodName: awsErrorDetails().serviceName - - org.openrewrite.java.ChangeMethodName: - methodPattern: com.amazonaws.AmazonServiceException getErrorMessage() - newMethodName: awsErrorDetails().errorMessage - - org.openrewrite.java.ChangeMethodName: - methodPattern: com.amazonaws.AmazonServiceException getStatusCode() - newMethodName: awsErrorDetails().sdkHttpResponse().statusCode - ### TODO: v2 returns Map>. Convert it to Map - - org.openrewrite.java.ChangeMethodName: - methodPattern: com.amazonaws.AmazonServiceException getHttpHeaders() - newMethodName: awsErrorDetails().sdkHttpResponse().headers - - org.openrewrite.java.ChangeMethodName: - methodPattern: com.amazonaws.AmazonServiceException getRawResponse() - newMethodName: awsErrorDetails().rawResponse().asByteArray - - org.openrewrite.java.ChangeMethodName: - methodPattern: com.amazonaws.AmazonServiceException getRawResponseContent() - newMethodName: awsErrorDetails().rawResponse().asUtf8String - software.amazon.awssdk.v2migration.AddCommentToMethod: methodPattern: com.amazonaws.AmazonServiceException getErrorType() comment: getErrorType is not supported in v2. AwsServiceException is a service error in v2. Consider removing it. diff --git a/v2-migration/src/main/resources/META-INF/rewrite/change-s3-event-notification-methods.yml b/v2-migration/src/main/resources/META-INF/rewrite/change-s3-event-notification-methods.yml index d43fc06bdb39..3d590ef614cd 100644 --- a/v2-migration/src/main/resources/META-INF/rewrite/change-s3-event-notification-methods.yml +++ b/v2-migration/src/main/resources/META-INF/rewrite/change-s3-event-notification-methods.yml @@ -17,7 +17,7 @@ name: software.amazon.awssdk.v2migration.S3EventNotificationMethodsToV2 displayName: Change S3EventNotification methods to v2. description: Change S3EventNotification methods to v2. recipeList: - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.event.S3EventNotification.S3EventNotificationRecord getEventNameAsEnum() newReturnType: String - org.openrewrite.java.ChangeMethodName: diff --git a/v2-migration/src/main/resources/META-INF/rewrite/change-s3-types.yml b/v2-migration/src/main/resources/META-INF/rewrite/change-s3-types.yml index 0c8096334214..0d0e3391c8e1 100644 --- a/v2-migration/src/main/resources/META-INF/rewrite/change-s3-types.yml +++ b/v2-migration/src/main/resources/META-INF/rewrite/change-s3-types.yml @@ -17,82 +17,82 @@ name: software.amazon.awssdk.v2migration.S3TypesToV2 displayName: Change S3 types to v2. description: Change S3 types to v2. recipeList: - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3 getObject(com.amazonaws.services.s3.model.GetObjectRequest, java.io.File) newReturnType: software.amazon.awssdk.services.s3.model.GetObjectResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3 getBucketAcl(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketAclResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3 getObjectAcl(..) newReturnType: software.amazon.awssdk.services.s3.model.GetObjectAclResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3 getBucketAccelerateConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketAccelerateConfigurationResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3 getBucketLifecycleConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketLifecycleConfigurationResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3 getBucketCrossOriginConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketCorsResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3 getBucketLoggingConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketLoggingResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3 getBucketNotificationConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketNotificationConfigurationResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3 getBucketPolicy(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketPolicyResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3 getBucketReplicationConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketReplicationResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3 getBucketTaggingConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketTaggingResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3 getBucketVersioningConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketVersioningResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3 getBucketWebsiteConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketWebsiteResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3Client getObject(com.amazonaws.services.s3.model.GetObjectRequest, java.io.File) newReturnType: software.amazon.awssdk.services.s3.model.GetObjectResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3Client getBucketAcl(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketAclResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3Client getObjectAcl(..) newReturnType: software.amazon.awssdk.services.s3.model.GetObjectAclResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3Client getBucketAccelerateConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketAccelerateConfigurationResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3Client getBucketLifecycleConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketLifecycleConfigurationResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3Client getBucketCrossOriginConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketCorsResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3Client getBucketLoggingConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketLoggingResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3Client getBucketNotificationConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketNotificationConfigurationResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3Client getBucketPolicy(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketPolicyResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3Client getBucketReplicationConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketReplicationResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3Client getBucketTaggingConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketTaggingResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3Client getBucketVersioningConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketVersioningResponse - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.AmazonS3Client getBucketWebsiteConfiguration(..) newReturnType: software.amazon.awssdk.services.s3.model.GetBucketWebsiteResponse \ No newline at end of file diff --git a/v2-migration/src/main/resources/META-INF/rewrite/change-transfer-manager-simple-methods.yml b/v2-migration/src/main/resources/META-INF/rewrite/change-transfer-manager-simple-methods.yml index 8fbc8dee0856..d4dc3f6f3cc2 100644 --- a/v2-migration/src/main/resources/META-INF/rewrite/change-transfer-manager-simple-methods.yml +++ b/v2-migration/src/main/resources/META-INF/rewrite/change-transfer-manager-simple-methods.yml @@ -34,13 +34,4 @@ recipeList: newMethodName: serializeToString - org.openrewrite.java.ChangeMethodName: methodPattern: software.amazon.awssdk.transfer.s3.model.ResumableTransfer serialize(java.io.OutputStream) - newMethodName: serializeToOutputStream - - org.openrewrite.java.ChangeMethodName: - methodPattern: software.amazon.awssdk.transfer.s3.progress.TransferProgress getBytesTransferred() - newMethodName: snapshot().transferredBytes - - org.openrewrite.java.ChangeMethodName: - methodPattern: software.amazon.awssdk.transfer.s3.progress.TransferProgress getTotalBytesToTransfer() - newMethodName: snapshot().totalBytes - - org.openrewrite.java.ChangeMethodName: - methodPattern: software.amazon.awssdk.transfer.s3.progress.TransferProgress getPercentTransferred() - newMethodName: snapshot().ratioTransferred \ No newline at end of file + newMethodName: serializeToOutputStream \ No newline at end of file diff --git a/v2-migration/src/main/resources/META-INF/rewrite/change-transfer-manager-types.yml b/v2-migration/src/main/resources/META-INF/rewrite/change-transfer-manager-types.yml index 159f7b123262..6739f5d74ae4 100644 --- a/v2-migration/src/main/resources/META-INF/rewrite/change-transfer-manager-types.yml +++ b/v2-migration/src/main/resources/META-INF/rewrite/change-transfer-manager-types.yml @@ -18,10 +18,10 @@ name: software.amazon.awssdk.v2migration.ChangeTransferManagerTypes displayName: Change SDK TransferManager types from v1 to v2 description: Change SDK TransferManager types from v1 to v2. recipeList: - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.transfer.TransferManager resumeDownload(..) newReturnType: software.amazon.awssdk.transfer.s3.model.FileDownload - - software.amazon.awssdk.v2migration.openrewrite.ChangeMethodInvocationReturnType: + - org.openrewrite.java.ChangeMethodInvocationReturnType: methodPattern: com.amazonaws.services.s3.transfer.TransferManager resumeUpload(..) newReturnType: software.amazon.awssdk.transfer.s3.model.FileUpload - org.openrewrite.java.ChangeType: diff --git a/v2-migration/src/main/resources/META-INF/rewrite/s3-methods-constructor-to-fluent.yml b/v2-migration/src/main/resources/META-INF/rewrite/s3-methods-constructor-to-fluent.yml index 1ff60af26d89..42ffb5200902 100644 --- a/v2-migration/src/main/resources/META-INF/rewrite/s3-methods-constructor-to-fluent.yml +++ b/v2-migration/src/main/resources/META-INF/rewrite/s3-methods-constructor-to-fluent.yml @@ -662,18 +662,6 @@ recipeList: fluentNames: - withPartNumber - withETag - - software.amazon.awssdk.v2migration.ConstructorToFluent: - clzzFqcn: com.amazonaws.services.s3.model.CompleteMultipartUploadRequest - parameterTypes: - - java.lang.String - - java.lang.String - - java.lang.String - - java.util.List - fluentNames: - - withBucket - - withKey - - withUploadId - - withMultipartUpload - software.amazon.awssdk.v2migration.ConstructorToFluent: clzzFqcn: com.amazonaws.services.s3.model.ListPartsRequest parameterTypes: @@ -805,10 +793,4 @@ recipeList: - java.lang.String fluentNames: - withBucket - - withPolicy - - software.amazon.awssdk.v2migration.ConstructorToFluent: - clzzFqcn: com.amazonaws.services.s3.model.GetObjectTaggingResult - parameterTypes: - - java.util.List - fluentNames: - - withTagSet \ No newline at end of file + - withPolicy \ No newline at end of file diff --git a/v2-migration/src/test/java/software/amazon/awssdk/v2migration/ChangeConfigTypesTest.java b/v2-migration/src/test/java/software/amazon/awssdk/v2migration/ChangeConfigTypesTest.java index 3ea66b1e7ebd..11ef971526d2 100644 --- a/v2-migration/src/test/java/software/amazon/awssdk/v2migration/ChangeConfigTypesTest.java +++ b/v2-migration/src/test/java/software/amazon/awssdk/v2migration/ChangeConfigTypesTest.java @@ -29,6 +29,7 @@ import org.openrewrite.java.Java8Parser; import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; +import org.openrewrite.test.TypeValidation; public class ChangeConfigTypesTest implements RewriteTest { @@ -46,7 +47,8 @@ public void defaults(RecipeSpec spec) { throw new RuntimeException(e); } - spec.parser(Java8Parser.builder().classpath("aws-java-sdk-sqs", "sdk-core")); + spec.parser(Java8Parser.builder().classpath("aws-java-sdk-sqs", "sdk-core")) + .typeValidationOptions(TypeValidation.all().immutableExecutionContext(false)); } @Test diff --git a/v2-migration/src/test/java/software/amazon/awssdk/v2migration/ChangeExceptionTypesTest.java b/v2-migration/src/test/java/software/amazon/awssdk/v2migration/ChangeExceptionTypesTest.java index f0007840e9a1..f5c63bbcb4f2 100644 --- a/v2-migration/src/test/java/software/amazon/awssdk/v2migration/ChangeExceptionTypesTest.java +++ b/v2-migration/src/test/java/software/amazon/awssdk/v2migration/ChangeExceptionTypesTest.java @@ -29,13 +29,15 @@ import org.openrewrite.java.Java8Parser; import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; +import org.openrewrite.test.TypeValidation; public class ChangeExceptionTypesTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { try (InputStream stream = getClass().getResourceAsStream("/META-INF/rewrite/change-exception-types.yml")) { - spec.recipes(Environment.builder() + spec.recipes(new SdkExceptionToV2(), + Environment.builder() .load(new YamlResourceLoader(stream, URI.create("rewrite.yml"), new Properties())) .build() .activateRecipes("software.amazon.awssdk.v2migration.ChangeExceptionTypes")); @@ -43,7 +45,8 @@ public void defaults(RecipeSpec spec) { throw new RuntimeException(e); } - spec.parser(Java8Parser.builder().classpath("aws-java-sdk-sqs", "sdk-core")); + spec.parser(Java8Parser.builder().classpath("aws-java-sdk-sqs", "sdk-core")) + .typeValidationOptions(TypeValidation.all().methodInvocations(false)); } @Test