diff --git a/test/v2-migration-tests/pom.xml b/test/v2-migration-tests/pom.xml index 426b621896c9..29075b622f6c 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 4df43daf5712..24e947788aaf 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 @@ -55,7 +55,7 @@ protected static void verifyTransformation(boolean experimental) throws IOExcept List rewriteArgs = new ArrayList<>(); // pin version since updates have broken tests - String rewriteMavenPluginVersion = "5.46.0"; + String rewriteMavenPluginVersion = "6.6.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..90a0fd911ebb 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.4.1") } } 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..cc882dc887e6 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) { diff --git a/v2-migration/pom.xml b/v2-migration/pom.xml index 99540ad636f8..797b0020ea9e 100644 --- a/v2-migration/pom.xml +++ b/v2-migration/pom.xml @@ -34,7 +34,7 @@ ${project.parent.version} - 2.23.0 + 3.6.1 5.10.3 1.12.472 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/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/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/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