diff --git a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/Enums.java b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/Enums.java index 501c80effdfc..4964fb9bc07b 100644 --- a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/Enums.java +++ b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/Enums.java @@ -14,7 +14,8 @@ */ package foo.bar; - +import software.amazon.awssdk.services.s3.model.Event; +import software.amazon.awssdk.services.s3.model.StorageClass; import software.amazon.awssdk.services.sqs.model.MessageAttributeValue; import software.amazon.awssdk.services.sqs.model.QueueAttributeName; import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest; @@ -27,6 +28,9 @@ public class Enums { public static void main(String... args) { QueueAttributeName qan = QueueAttributeName.DELAY_SECONDS; QueueAttributeName qan2 = QueueAttributeName.ALL; + StorageClass sc1 = StorageClass.STANDARD_IA; + StorageClass sc2 = StorageClass.ONEZONE_IA; + Event se = Event.S3_OBJECT_CREATED; System.out.println(qan); System.out.println(qan2); diff --git a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/before/src/main/java/foo/bar/Enums.java b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/before/src/main/java/foo/bar/Enums.java index 867cc2ce195f..e81bb087510c 100644 --- a/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/before/src/main/java/foo/bar/Enums.java +++ b/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/before/src/main/java/foo/bar/Enums.java @@ -15,6 +15,8 @@ package foo.bar; +import com.amazonaws.services.s3.model.S3Event; +import com.amazonaws.services.s3.model.StorageClass; import com.amazonaws.services.sqs.model.QueueAttributeName; import com.amazonaws.services.sqs.model.ReceiveMessageRequest; import software.amazon.awssdk.services.sqs.model.MessageAttributeValue; @@ -27,6 +29,9 @@ public class Enums { public static void main(String... args) { QueueAttributeName qan = QueueAttributeName.DelaySeconds; QueueAttributeName qan2 = QueueAttributeName.All; + StorageClass sc1 = StorageClass.StandardInfrequentAccess; + StorageClass sc2 = StorageClass.OneZoneInfrequentAccess; + S3Event se = S3Event.ObjectCreated; System.out.println(qan); System.out.println(qan2); diff --git a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/EnumCasingToV2.java b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/EnumCasingToV2.java index 2e3dbf30ab8f..7bd873cf9ca3 100644 --- a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/EnumCasingToV2.java +++ b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/EnumCasingToV2.java @@ -17,7 +17,9 @@ import static software.amazon.awssdk.utils.internal.CodegenNamingUtils.splitOnWordBoundaries; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; import org.openrewrite.ExecutionContext; import org.openrewrite.Recipe; @@ -35,6 +37,15 @@ public class EnumCasingToV2 extends Recipe { private static Set<String> ENUMS = new HashSet<>(); + private static final Map<String, String> SPECIAL_CASES = new HashMap<>(); + + static { + SPECIAL_CASES.put("StandardInfrequentAccess", "STANDARD_IA"); + SPECIAL_CASES.put("OneZoneInfrequentAccess", "ONEZONE_IA"); + SPECIAL_CASES.put("GlacierInstantRetrieval", "GLACIER_IR"); + SPECIAL_CASES.put("textORcsv", "TEXT_OR_CSV"); + } + @Override public String getDisplayName() { return "V1 Enum Casing to V2"; @@ -51,8 +62,11 @@ public TreeVisitor<?, ExecutionContext> getVisitor() { } private static String v2Casing(String enumValue) { + if (SPECIAL_CASES.containsKey(enumValue)) { + return SPECIAL_CASES.get(enumValue); + } + String result = enumValue; - result = result.replaceAll("textORcsv", "TEXT_OR_CSV"); result = String.join("_", splitOnWordBoundaries(result)); return StringUtils.upperCase(result); } @@ -64,6 +78,9 @@ public J.FieldAccess visitFieldAccess(J.FieldAccess fieldAccess, ExecutionContex if (isV2EnumValue(fa)) { String v2Casing = v2Casing(fa.getSimpleName()); + if (isS3EventsEnum(fa)) { + v2Casing = "S3_" + v2Casing; + } ENUMS.add(v2Casing); return fa.withName(fa.getName().withSimpleName(v2Casing)); } @@ -96,5 +113,14 @@ public boolean isV2EnumValue(J.FieldAccess fa) { } return false; } + + private boolean isS3EventsEnum(J.FieldAccess fa) { + JavaType javaType = fa.getTarget().getType(); + JavaType.FullyQualified fullyQualified = TypeUtils.asFullyQualified(javaType); + return fullyQualified != null && fullyQualified.getClassName().equals("Event") + && fullyQualified.getPackageName().equals("software.amazon.awssdk.services.s3.model") + && !fa.getSimpleName().startsWith("S3_"); + } + } } diff --git a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/internal/utils/NamingConversionUtils.java b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/internal/utils/NamingConversionUtils.java index 339e4080e66c..e7580e0f99b1 100644 --- a/v2-migration/src/main/java/software/amazon/awssdk/v2migration/internal/utils/NamingConversionUtils.java +++ b/v2-migration/src/main/java/software/amazon/awssdk/v2migration/internal/utils/NamingConversionUtils.java @@ -182,6 +182,9 @@ public final class NamingConversionUtils { S3_POJO_MAPPING.put("ReplicationFilter", "ReplicationRuleFilter"); S3_POJO_MAPPING.put("ReplicationAndOperator", "ReplicationRuleAndOperator"); S3_POJO_MAPPING.put("PartETag", "CompletedPart"); + + //Special Enum mapping + S3_POJO_MAPPING.put("S3Event", "Event"); } static {