package me.tomassetti.turin.symbols; import me.tomassetti.turin.typesystem.TypeUsage; import java.util.Map; public class FormalParameterSymbol implements FormalParameter { private String name; private TypeUsage typeUsage; private boolean defaultValue; public FormalParameterSymbol(TypeUsage typeUsage, String name) { this(typeUsage, name, false); } public FormalParameterSymbol(TypeUsage typeUsage, String name, boolean defaultValue) { this.name = name; this.typeUsage = typeUsage; this.defaultValue = defaultValue; } @Override public String toString() { return "FormalParameterSymbol{" + "name='" + name + '\'' + ", typeUsage=" + typeUsage + ", defaultValue=" + defaultValue + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof FormalParameterSymbol)) return false; FormalParameterSymbol that = (FormalParameterSymbol) o; if (defaultValue != that.defaultValue) return false; if (!name.equals(that.name)) return false; if (!typeUsage.equals(that.typeUsage)) return false; return true; } @Override public int hashCode() { int result = name.hashCode(); result = 31 * result + typeUsage.hashCode(); result = 31 * result + (defaultValue ? 1 : 0); return result; } @Override public boolean hasDefaultValue() { return defaultValue; } @Override public TypeUsage getType() { return typeUsage; } @Override public String getName() { return name; } @Override public TypeUsage calcType() { return typeUsage; } @Override public FormalParameter apply(Map<String, TypeUsage> typeParams) { return new FormalParameterSymbol(typeUsage.replaceTypeVariables(typeParams), name, defaultValue); } }