Class SymbolReference

java.lang.Object
software.amazon.smithy.codegen.core.SymbolReference
All Implemented Interfaces:
SymbolContainer, SymbolDependencyContainer, ToSmithyBuilder<SymbolReference>

public final class SymbolReference extends Object implements SymbolContainer, SymbolDependencyContainer, ToSmithyBuilder<SymbolReference>
Represents a reference from a Symbol to another Symbol.

A reference from one symbol to another is used when a symbol definition refers to other symbols (for example, when using things like generic type parameters) or when using a symbol that has generic type parameters in its signature. References can contain arbitrary properties that can be accessed using getProperties(), getProperty(java.lang.String), and expectProperty(java.lang.String). Options can be added to a SymbolReference to give more context about the reference. For example, the SymbolReference.ContextOption enum is used to define the context in which a reference is relevant (e.g., only when defining a symbol vs only when using/importing a symbol). If no options are provided when creating a SymbolReference, the reference defaults to using both the SymbolReference.ContextOption.DECLARE and SymbolReference.ContextOption.USE options, meaning that the reference is necessary both when defining and when using a symbol.

  • Constructor Details

    • SymbolReference

      public SymbolReference(Symbol symbol, SymbolReference.Option... options)
      Parameters:
      symbol - Symbol that is referenced.
      options - Options to store with the reference.
    • SymbolReference

      public SymbolReference(Symbol symbol, Map<String,Object> properties, SymbolReference.Option... options)
      Parameters:
      symbol - Symbol that is referenced.
      properties - Bag of reference properties.
      options - Options to store with the reference.
  • Method Details

    • builder

      public static SymbolReference.Builder builder()
      Returns:
      Returns a new builder.
    • getSymbol

      public Symbol getSymbol()
      Gets the referenced symbol.
      Returns:
      Returns the symbol.
    • getAlias

      public String getAlias()
      Gets the alias to use when referring to the Symbol.

      The value of getSymbol().getName() is returned if no alias was explicitly configured on the reference.

      An alias is used in some programming languages to change the way a symbol is referenced in a source file. Aliases are often used for de-conflicting symbols.

      Returns:
      Returns the alias.
    • getOptions

      public Set<SymbolReference.Option> getOptions()
      Gets all of the reference options.
      Returns:
      Returns the options set.
    • hasOption

      public boolean hasOption(SymbolReference.Option option)
      Checks if the given option is set on the symbol.
      Parameters:
      option - Option to check.
      Returns:
      Returns true if this option is set.
    • getSymbols

      public List<Symbol> getSymbols()
      Description copied from interface: SymbolContainer
      Returns any Symbol objects contained in the object.
      Specified by:
      getSymbols in interface SymbolContainer
      Returns:
      Returns a collection of Symbols.
    • getDependencies

      public List<SymbolDependency> getDependencies()
      Description copied from interface: SymbolDependencyContainer
      Gets the list of dependencies that this object introduces.

      A dependency is a dependency on another package that a Symbol or type requires. It is quite different from a reference since a reference only refers to a symbol; a reference provides no context as to whether or not a dependency is required or the dependency's coordinates.

      Specified by:
      getDependencies in interface SymbolDependencyContainer
      Returns:
      Returns the dependencies.
    • toBuilder

      public SymbolReference.Builder toBuilder()
      Description copied from interface: ToSmithyBuilder
      Take this object and create a builder that contains all of the current property values of this object.
      Specified by:
      toBuilder in interface ToSmithyBuilder<SymbolReference>
      Returns:
      a builder for type T
    • equals

      public boolean equals(Object o)
    • hashCode

      public int hashCode()
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getProperties

      public Map<String,Object> getProperties()
      Gets the additional properties of the object.
      Returns:
      Returns a map of additional property strings.
    • getProperty

      public Optional<Object> getProperty(String name)
      Gets a specific property if present.
      Parameters:
      name - Property to retrieve.
      Returns:
      Returns the optionally found property.
    • getProperty

      public <T> Optional<T> getProperty(String name, Class<T> type)
      Gets an additional property of a specific type.
      Type Parameters:
      T - Type of value to expect.
      Parameters:
      name - Name of the property to get.
      type - Type of value to expect.
      Returns:
      Returns a map of additional property strings.
      Throws:
      IllegalArgumentException - if the value is not of the given type.
    • expectProperty

      public Object expectProperty(String name)
      Gets a specific additional property or throws if missing.
      Parameters:
      name - Property to retrieve.
      Returns:
      Returns the found property.
      Throws:
      IllegalArgumentException - if the property is not present.
    • expectProperty

      public <T> T expectProperty(String name, Class<T> type)
      Gets a specific additional property or throws if missing or if the property is not an instance of the given type.
      Type Parameters:
      T - Type of value to expect.
      Parameters:
      name - Property to retrieve.
      type - Type of value to expect.
      Returns:
      Returns the found property.
      Throws:
      IllegalArgumentException - if the property is not present.
      IllegalArgumentException - if the value is not of the given type.