java.lang.Object
software.amazon.smithy.model.shapes.Shape
All Implemented Interfaces:
Comparable<Shape>, FromSourceLocation, ToShapeId, Tagged
Direct Known Subclasses:
CollectionShape, EntityShape, MapShape, MemberShape, OperationShape, SimpleShape, StructureShape, UnionShape

public abstract class Shape extends Object implements FromSourceLocation, Tagged, ToShapeId, Comparable<Shape>
A Shape defines a model component.

A Shape may have an arbitrary number of typed traits attached to it, allowing additional information to be associated with the shape.

Shape does implement Comparable, but comparisons are based solely on the ShapeId of the shape. This assumes that shapes are being compared in the context of a Model that forbids shape ID conflicts.

  • Method Details

    • validateMixins

      protected void validateMixins(Map<ShapeId,Shape> mixins, Map<ShapeId,Trait> introducedTraits)
    • getRequiredMixinMember

      protected MemberShape getRequiredMixinMember(AbstractShapeBuilder<?,?> builder, MemberShape onBuilder, String name)
    • validateMemberShapeIds

      protected final void validateMemberShapeIds()
    • shapeToBuilder

      public static <B extends AbstractShapeBuilder<B, S>, S extends Shape> B shapeToBuilder(S shape)
      Converts a shape, potentially of an unknown concrete type, into a Shape builder.
      Type Parameters:
      B - Shape builder to create.
      S - Shape that is being converted to a builder.
      Parameters:
      shape - Shape to create a builder from.
      Returns:
      Returns a shape fro the given shape.
    • getType

      public abstract ShapeType getType()
      Gets the type of the shape.
      Returns:
      Returns the type;
    • accept

      public abstract <R> R accept(ShapeVisitor<R> visitor)
      Dispatches the shape to the appropriate ShapeVisitor method.
      Type Parameters:
      R - Return type of the accept.
      Parameters:
      visitor - ShapeVisitor to use.
      Returns:
      Returns the result.
    • getId

      public final ShapeId getId()
      Get the ShapeId of the shape.
      Returns:
      Returns the shape ID.
    • hasTrait

      public boolean hasTrait(String id)
      Checks if the shape has a specific trait by name.

      Relative shape IDs are assumed to refer to the "smithy.api" namespace.

      Parameters:
      id - The possibly relative trait ID.
      Returns:
      Returns true if the shape has the given trait.
    • hasTrait

      public boolean hasTrait(ShapeId id)
      Checks if the shape has a specific trait by name.
      Parameters:
      id - The fully-qualified trait ID.
      Returns:
      Returns true if the shape has the given trait.
    • hasTrait

      public boolean hasTrait(Class<? extends Trait> traitClass)
      Checks if the shape has a specific trait by class.
      Parameters:
      traitClass - Trait class to check.
      Returns:
      Returns true if the shape has the given trait.
    • findTrait

      public Optional<Trait> findTrait(ShapeId id)
      Attempts to find a trait applied to the shape by name.
      Parameters:
      id - The trait shape ID.
      Returns:
      Returns the optionally found trait.
    • findTrait

      public Optional<Trait> findTrait(String id)
      Attempts to find a trait applied to the shape by ID.

      Relative shape IDs are assumed to refer to the "smithy.api" namespace.

      Parameters:
      id - The trait ID.
      Returns:
      Returns the optionally found trait.
    • getTrait

      public final <T extends Trait> Optional<T> getTrait(Class<T> traitClass)
      Attempt to retrieve a specific Trait by class from the shape.

      The first trait instance found matching the given type is returned.

      Type Parameters:
      T - The instance of the trait to retrieve.
      Parameters:
      traitClass - Trait class to retrieve.
      Returns:
      Returns the matching trait.
    • expectTrait

      public final <T extends Trait> T expectTrait(Class<T> traitClass)
      Gets specific Trait by class from the shape or throws if not found.
      Type Parameters:
      T - The instance of the trait to retrieve.
      Parameters:
      traitClass - Trait class to retrieve.
      Returns:
      Returns the matching trait.
      Throws:
      ExpectationNotMetException - if the trait cannot be found.
    • getAllTraits

      public final Map<ShapeId,Trait> getAllTraits()
      Gets all of the traits attached to the shape.
      Returns:
      Returns the attached traits.
    • getMemberTrait

      public <T extends Trait> Optional<T> getMemberTrait(Model model, Class<T> trait)
      Gets a trait from the member shape or from the shape targeted by the member.

      If the shape is not a member, then the method functions the same as getTrait(Class).

      Type Parameters:
      T - Trait type to get.
      Parameters:
      model - Model used to find member targets.
      trait - Trait type to get.
      Returns:
      Returns the optionally found trait on the shape or member.
      See Also:
    • findMemberTrait

      public Optional<Trait> findMemberTrait(Model model, String traitName)
      Gets a trait from the member shape or from the shape targeted by the member.

      If the shape is not a member, then the method functions the same as findTrait(String).

      Parameters:
      model - Model used to find member targets.
      traitName - Trait name to get.
      Returns:
      Returns the optionally found trait on the shape or member.
      See Also:
    • asBigDecimalShape

      public Optional<BigDecimalShape> asBigDecimalShape()
      Returns:
      Optionally returns the shape as a BigDecimalShape.
    • asBigIntegerShape

      public Optional<BigIntegerShape> asBigIntegerShape()
      Returns:
      Optionally returns the shape as a BigIntegerShape.
    • asBlobShape

      public Optional<BlobShape> asBlobShape()
      Returns:
      Optionally returns the shape as a BlobShape.
    • asBooleanShape

      public Optional<BooleanShape> asBooleanShape()
      Returns:
      Optionally returns the shape as a BooleanShape.
    • asByteShape

      public Optional<ByteShape> asByteShape()
      Returns:
      Optionally returns the shape as a ByteShape.
    • asShortShape

      public Optional<ShortShape> asShortShape()
      Returns:
      Optionally returns the shape as a ShortShape.
    • asFloatShape

      public Optional<FloatShape> asFloatShape()
      Returns:
      Optionally returns the shape as a FloatShape.
    • asDocumentShape

      public Optional<DocumentShape> asDocumentShape()
      Returns:
      Optionally returns the shape as a DocumentShape.
    • asDoubleShape

      public Optional<DoubleShape> asDoubleShape()
      Returns:
      Optionally returns the shape as a DoubleShape.
    • asIntegerShape

      public Optional<IntegerShape> asIntegerShape()
      Returns:
      Optionally returns the shape as a IntegerShape.
    • asIntEnumShape

      public Optional<IntEnumShape> asIntEnumShape()
      Returns:
      Optionally returns the shape as a IntEnumShape.
    • asListShape

      public Optional<ListShape> asListShape()
      Returns:
      Optionally returns the shape as a ListShape.
    • asSetShape

      @Deprecated public Optional<SetShape> asSetShape()
      Deprecated.
      Returns:
      Optionally returns the shape as a SetShape.
    • asLongShape

      public Optional<LongShape> asLongShape()
      Returns:
      Optionally returns the shape as a LongShape.
    • asMapShape

      public Optional<MapShape> asMapShape()
      Returns:
      Optionally returns the shape as a MapShape.
    • asMemberShape

      public Optional<MemberShape> asMemberShape()
      Returns:
      Optionally returns the shape as a MemberShape.
    • asOperationShape

      public Optional<OperationShape> asOperationShape()
      Returns:
      Optionally returns the shape as an OperationShape.
    • asResourceShape

      public Optional<ResourceShape> asResourceShape()
      Returns:
      Optionally returns the shape as a ResourceShape.
    • asServiceShape

      public Optional<ServiceShape> asServiceShape()
      Returns:
      Optionally returns the shape as a ServiceShape.
    • asStringShape

      public Optional<StringShape> asStringShape()
      Returns:
      Optionally returns the shape as a StringShape.
    • asEnumShape

      public Optional<EnumShape> asEnumShape()
      Returns:
      Optionally returns the shape as a EnumShape.
    • asStructureShape

      public Optional<StructureShape> asStructureShape()
      Returns:
      Optionally returns the shape as a StructureShape.
    • asUnionShape

      public Optional<UnionShape> asUnionShape()
      Returns:
      Optionally returns the shape as a UnionShape.
    • asTimestampShape

      public Optional<TimestampShape> asTimestampShape()
      Returns:
      Optionally returns the shape as a TimestampShape.
    • isBigDecimalShape

      public final boolean isBigDecimalShape()
      Returns:
      Returns true if the shape is a BigDecimalShape shape.
    • isBigIntegerShape

      public final boolean isBigIntegerShape()
      Returns:
      Returns true if the shape is a BigIntegerShape shape.
    • isBlobShape

      public final boolean isBlobShape()
      Returns:
      Returns true if the shape is a BlobShape shape.
    • isBooleanShape

      public final boolean isBooleanShape()
      Returns:
      Returns true if the shape is a BooleanShape shape.
    • isByteShape

      public final boolean isByteShape()
      Returns:
      Returns true if the shape is a ByteShape shape.
    • isShortShape

      public final boolean isShortShape()
      Returns:
      Returns true if the shape is a ShortShape shape.
    • isFloatShape

      public final boolean isFloatShape()
      Returns:
      Returns true if the shape is a FloatShape shape.
    • isDocumentShape

      public final boolean isDocumentShape()
      Returns:
      Returns true if the shape is an DocumentShape shape.
    • isDoubleShape

      public final boolean isDoubleShape()
      Returns:
      Returns true if the shape is an DoubleShape shape.
    • isListShape

      public final boolean isListShape()
      Returns:
      Returns true if the shape is a ListShape shape.
    • isSetShape

      @Deprecated public final boolean isSetShape()
      Deprecated.
      Returns:
      Returns true if the shape is a SetShape shape.
    • isIntegerShape

      public final boolean isIntegerShape()
      Returns:
      Returns true if the shape is a IntegerShape shape.
    • isIntEnumShape

      public final boolean isIntEnumShape()
      Returns:
      Returns true if the shape is a IntEnumShape shape.
    • isLongShape

      public final boolean isLongShape()
      Returns:
      Returns true if the shape is a LongShape shape.
    • isMapShape

      public final boolean isMapShape()
      Returns:
      Returns true if the shape is a MapShape shape.
    • isMemberShape

      public final boolean isMemberShape()
      Returns:
      Returns true if the shape is a MemberShape shape.
    • isOperationShape

      public final boolean isOperationShape()
      Returns:
      Returns true if the shape is an OperationShape shape.
    • isResourceShape

      public final boolean isResourceShape()
      Returns:
      Returns true if the shape is a ResourceShape shape.
    • isServiceShape

      public final boolean isServiceShape()
      Returns:
      Returns true if the shape is a ServiceShape shape.
    • isStringShape

      public final boolean isStringShape()
      Returns:
      Returns true if the shape is a StringShape shape.
    • isEnumShape

      public final boolean isEnumShape()
      Returns:
      Returns true if the shape is an EnumShape shape.
    • isStructureShape

      public final boolean isStructureShape()
      Returns:
      Returns true if the shape is a StructureShape shape.
    • isUnionShape

      public final boolean isUnionShape()
      Returns:
      Returns true if the shape is a UnionShape shape.
    • isTimestampShape

      public final boolean isTimestampShape()
      Returns:
      Returns true if the shape is a TimestampShape shape.
    • members

      public Collection<MemberShape> members()
      Gets all the members contained in the shape.
      Returns:
      Returns the members contained in the shape (if any).
    • getMember

      public Optional<MemberShape> getMember(String name)
      Get a specific member by name.

      Shapes with no members return an empty Optional.

      Parameters:
      name - Name of the member to retrieve.
      Returns:
      Returns the optional member.
    • getAllMembers

      public Map<String,MemberShape> getAllMembers()
      Gets the members of the shape, including mixin members.
      Returns:
      Returns the immutable member map.
    • getMemberNames

      public List<String> getMemberNames()
      Returns an ordered list of member names based on the order they are defined in the model, including mixin members.

      The order in which map key and value members are returned might not match the order in which they were defined in the model because their ordering is insignificant.

      Returns:
      Returns an immutable list of member names.
    • getMixins

      public Set<ShapeId> getMixins()
      Get an ordered set of mixins attached to the shape.
      Returns:
      Returns the ordered mixin shape IDs.
    • getIntroducedTraits

      public Map<ShapeId,Trait> getIntroducedTraits()
      Gets the traits introduced by the shape and not inherited from mixins.
      Returns:
      Returns the introduced traits.
    • toShapeId

      public ShapeId toShapeId()
      Specified by:
      toShapeId in interface ToShapeId
      Returns:
      Returns the shape ID of an object.
    • getTags

      public final List<String> getTags()
      Description copied from interface: Tagged
      Gets the tags applied to an object.
      Specified by:
      getTags in interface Tagged
      Returns:
      Returns the tag values.
    • getSourceLocation

      public final SourceLocation getSourceLocation()
      Description copied from interface: FromSourceLocation
      Gets the source location of a value.
      Specified by:
      getSourceLocation in interface FromSourceLocation
      Returns:
      Returns the source location of the value.
    • compareTo

      public int compareTo(Shape other)
      Specified by:
      compareTo in interface Comparable<Shape>
    • toString

      public final String toString()
      Overrides:
      toString in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object