package me.tomassetti.turin.parser.ast.properties;
import com.google.common.collect.ImmutableList;
import me.tomassetti.turin.parser.analysis.exceptions.UnsolvedSymbolException;
import me.tomassetti.turin.resolvers.SymbolResolver;
import me.tomassetti.turin.parser.ast.Node;
import me.tomassetti.turin.typesystem.TypeUsage;
import java.util.Optional;
public class PropertyReference extends Node {
public String getName() {
return name;
}
private String name;
public PropertyReference(String name) {
this.name = name;
}
@Override
public Iterable<Node> getChildren() {
return ImmutableList.of();
}
public TypeUsage getType(SymbolResolver resolver) {
Optional<PropertyDefinition> propertyDefinition = resolver.findDefinition(this);
if (propertyDefinition.isPresent()) {
return propertyDefinition.get().getType();
} else {
throw new UnsolvedSymbolException(this);
}
}
@Override
public String toString() {
return "PropertyReference{" +
"name='" + name + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PropertyReference that = (PropertyReference) o;
if (!name.equals(that.name)) return false;
return true;
}
@Override
public int hashCode() {
return name.hashCode();
}
}