SymbolReference extends TypedPropertiesBag implements SymbolContainer, SymbolDependencyContainer, ToSmithyBuilder<SymbolReference> { public static Builder builder() { return new Builder(); } SymbolReference(Symbol symbol, Option... options);  SymbolReference(Symbol symbol, Map<String, Object> properties, Option... options); private  SymbolReference(Builder builder); static Builder builder(); Symbol getSymbol(); String getAlias(); Set<Option> getOptions(); boolean hasOption(Option option); @Override List<Symbol> getSymbols(); @Override List<SymbolDependency> getDependencies(); @Override Builder toBuilder(); @Override boolean equals(Object o); @Override int hashCode(); @Override String toString();  }
@Test public void propertiesAndOptionsAreUsedInEquals() { Symbol symbol = Symbol.builder().name("foo").build(); SymbolReference ref1 = new SymbolReference(symbol); SymbolReference ref2 = new SymbolReference( symbol, MapUtils.of("foo", true), SymbolReference.ContextOption.USE); SymbolReference ref3 = new SymbolReference(symbol, SymbolReference.ContextOption.USE); assertThat(ref1, equalTo(ref1)); assertThat(ref1, not(equalTo(ref2))); assertThat(ref1, not(equalTo(ref3))); assertThat(ref2, not(equalTo(ref3))); }