Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changes/next-release/bugfix-AWSSDKforJavav2-baa7ce5.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"type": "bugfix",
"category": "AWS SDK for Java v2",
"contributor": "",
"description": "Correctly handle unions with members named \"type\" by renaming the member variable to avoid conflicts with the existing SDK added \"type\" field."
}
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ private MemberModel generateMemberModel(String c2jMemberName, Member c2jMemberDe
Map<String, Shape> allC2jShapes) {
String c2jShapeName = c2jMemberDefinition.getShape();
Shape shape = allC2jShapes.get(c2jShapeName);
String variableName = getNamingStrategy().getVariableName(c2jMemberName);
String variableName = getNamingStrategy().getVariableName(c2jMemberName, parentShape);
String variableType = getTypeUtils().getJavaDataType(allC2jShapes, c2jShapeName);
String variableDeclarationType = getTypeUtils().getJavaDataType(allC2jShapes, c2jShapeName);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,16 @@ public String getVariableName(String name) {
return unCapitalize(name);
}

@Override
public String getVariableName(String name, Shape parentShape) {
if (isJavaKeyword(name) ||
isDisallowedNameForShape(unCapitalize(name), parentShape)) {
return unCapitalize(name + CONFLICTING_NAME_SUFFIX);
}

return unCapitalize(name);
}

@Override
public String getEnumValueName(String enumValue) {
String result = enumValue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,13 @@ public interface NamingStrategy {
*/
String getVariableName(String name);

/**
* @param name Some contextual name to derive variable name from (i.e. member name, java class name, etc).
* @param parentShape The shape containing the member, used to check for shape-specific reserved names.
* @return Appropriate name to use for a Java variable or field.
*/
String getVariableName(String name, Shape parentShape);

/**
* @param enumValue Enum value as defined in the service model used to derive the java name.
* @return Appropriate name to use for a Java enum value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,16 +35,26 @@ public final class OperationWithReservedKeywordMemberRequest extends JsonProtoco
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("ReservedKeywordMember").build())
.build();

private static final List<SdkField<?>> SDK_FIELDS = Collections
.unmodifiableList(Arrays.asList(RESERVED_KEYWORD_MEMBER_FIELD));
private static final SdkField<UnionWithTypeMember> UNION_WITH_TYPE_MEMBER_FIELD = SdkField
.<UnionWithTypeMember> builder(MarshallingType.SDK_POJO).memberName("UnionWithTypeMember")
.getter(getter(OperationWithReservedKeywordMemberRequest::unionWithTypeMember))
.setter(setter(Builder::unionWithTypeMember)).constructor(UnionWithTypeMember::builder)
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("UnionWithTypeMember").build())
.build();

private static final List<SdkField<?>> SDK_FIELDS = Collections.unmodifiableList(Arrays.asList(RESERVED_KEYWORD_MEMBER_FIELD,
UNION_WITH_TYPE_MEMBER_FIELD));

private static final Map<String, SdkField<?>> SDK_NAME_TO_FIELD = memberNameToFieldInitializer();

private final ContainsReservedKeyword reservedKeywordMember;

private final UnionWithTypeMember unionWithTypeMember;

private OperationWithReservedKeywordMemberRequest(BuilderImpl builder) {
super(builder);
this.reservedKeywordMember = builder.reservedKeywordMember;
this.unionWithTypeMember = builder.unionWithTypeMember;
}

/**
Expand All @@ -56,6 +66,15 @@ public final ContainsReservedKeyword reservedKeywordMember() {
return reservedKeywordMember;
}

/**
* Returns the value of the UnionWithTypeMember property for this object.
*
* @return The value of the UnionWithTypeMember property for this object.
*/
public final UnionWithTypeMember unionWithTypeMember() {
return unionWithTypeMember;
}

@Override
public Builder toBuilder() {
return new BuilderImpl(this);
Expand All @@ -74,6 +93,7 @@ public final int hashCode() {
int hashCode = 1;
hashCode = 31 * hashCode + super.hashCode();
hashCode = 31 * hashCode + Objects.hashCode(reservedKeywordMember());
hashCode = 31 * hashCode + Objects.hashCode(unionWithTypeMember());
return hashCode;
}

Expand All @@ -94,7 +114,8 @@ public final boolean equalsBySdkFields(Object obj) {
return false;
}
OperationWithReservedKeywordMemberRequest other = (OperationWithReservedKeywordMemberRequest) obj;
return Objects.equals(reservedKeywordMember(), other.reservedKeywordMember());
return Objects.equals(reservedKeywordMember(), other.reservedKeywordMember())
&& Objects.equals(unionWithTypeMember(), other.unionWithTypeMember());
}

/**
Expand All @@ -104,13 +125,15 @@ public final boolean equalsBySdkFields(Object obj) {
@Override
public final String toString() {
return ToString.builder("OperationWithReservedKeywordMemberRequest")
.add("ReservedKeywordMember", reservedKeywordMember()).build();
.add("ReservedKeywordMember", reservedKeywordMember()).add("UnionWithTypeMember", unionWithTypeMember()).build();
}

public final <T> Optional<T> getValueForField(String fieldName, Class<T> clazz) {
switch (fieldName) {
case "ReservedKeywordMember":
return Optional.ofNullable(clazz.cast(reservedKeywordMember()));
case "UnionWithTypeMember":
return Optional.ofNullable(clazz.cast(unionWithTypeMember()));
default:
return Optional.empty();
}
Expand All @@ -129,6 +152,7 @@ public final Map<String, SdkField<?>> sdkFieldNameToField() {
private static Map<String, SdkField<?>> memberNameToFieldInitializer() {
Map<String, SdkField<?>> map = new HashMap<>();
map.put("ReservedKeywordMember", RESERVED_KEYWORD_MEMBER_FIELD);
map.put("UnionWithTypeMember", UNION_WITH_TYPE_MEMBER_FIELD);
return Collections.unmodifiableMap(map);
}

Expand Down Expand Up @@ -172,6 +196,34 @@ default Builder reservedKeywordMember(Consumer<ContainsReservedKeyword.Builder>
return reservedKeywordMember(ContainsReservedKeyword.builder().applyMutation(reservedKeywordMember).build());
}

/**
* Sets the value of the UnionWithTypeMember property for this object.
*
* @param unionWithTypeMember
* The new value for the UnionWithTypeMember property for this object.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder unionWithTypeMember(UnionWithTypeMember unionWithTypeMember);

/**
* Sets the value of the UnionWithTypeMember property for this object.
*
* This is a convenience method that creates an instance of the {@link UnionWithTypeMember.Builder} avoiding the
* need to create one manually via {@link UnionWithTypeMember#builder()}.
*
* <p>
* When the {@link Consumer} completes, {@link UnionWithTypeMember.Builder#build()} is called immediately and
* its result is passed to {@link #unionWithTypeMember(UnionWithTypeMember)}.
*
* @param unionWithTypeMember
* a consumer that will call methods on {@link UnionWithTypeMember.Builder}
* @return Returns a reference to this object so that method calls can be chained together.
* @see #unionWithTypeMember(UnionWithTypeMember)
*/
default Builder unionWithTypeMember(Consumer<UnionWithTypeMember.Builder> unionWithTypeMember) {
return unionWithTypeMember(UnionWithTypeMember.builder().applyMutation(unionWithTypeMember).build());
}

@Override
Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration);

Expand All @@ -182,12 +234,15 @@ default Builder reservedKeywordMember(Consumer<ContainsReservedKeyword.Builder>
static final class BuilderImpl extends JsonProtocolTestsRequest.BuilderImpl implements Builder {
private ContainsReservedKeyword reservedKeywordMember;

private UnionWithTypeMember unionWithTypeMember;

private BuilderImpl() {
}

private BuilderImpl(OperationWithReservedKeywordMemberRequest model) {
super(model);
reservedKeywordMember(model.reservedKeywordMember);
unionWithTypeMember(model.unionWithTypeMember);
}

public final ContainsReservedKeyword.Builder getReservedKeywordMember() {
Expand All @@ -204,6 +259,20 @@ public final Builder reservedKeywordMember(ContainsReservedKeyword reservedKeywo
return this;
}

public final UnionWithTypeMember.Builder getUnionWithTypeMember() {
return unionWithTypeMember != null ? unionWithTypeMember.toBuilder() : null;
}

public final void setUnionWithTypeMember(UnionWithTypeMember.BuilderImpl unionWithTypeMember) {
this.unionWithTypeMember = unionWithTypeMember != null ? unionWithTypeMember.build() : null;
}

@Override
public final Builder unionWithTypeMember(UnionWithTypeMember unionWithTypeMember) {
this.unionWithTypeMember = unionWithTypeMember;
return this;
}

@Override
public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) {
super.overrideConfiguration(overrideConfiguration);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,18 @@
"AllTypesUnionStructure":{"shape":"AllTypesUnionStructure"}
}
},
"UnionWithTypeMember": {
"type": "structure",
"union": true,
"members": {
"StringMember": {
"shape": "String"
},
"Type": {
"shape": "String"
}
}
},
"BaseType":{
"type":"structure",
"members":{
Expand Down Expand Up @@ -278,7 +290,8 @@
"members": {
"ReservedKeywordMember": {
"shape": "ContainsReservedKeyword"
}
},
"UnionWithTypeMember": {"shape": "UnionWithTypeMember"}
}
},
"Double":{"type":"double"},
Expand Down
Loading
Loading