1 package java.lang.reflect.code.type; 2 3 import java.lang.reflect.code.TypeElement; 4 import java.util.List; 5 import java.util.Objects; 6 7 /** 8 * A variable type. 9 */ 10 public final class VarType implements TypeElement { 11 static final String NAME = "Var"; 12 13 final TypeElement variableType; 14 15 VarType(TypeElement variableType) { 16 this.variableType = variableType; 17 } 18 19 /** 20 * {@return the variable type's value type} 21 */ 22 public TypeElement valueType() { 23 return variableType; 24 } 25 26 @Override 27 public ExternalizedTypeElement externalize() { 28 return new ExternalizedTypeElement(NAME, List.of(variableType.externalize())); 29 } 30 31 @Override 32 public String toString() { 33 return externalize().toString(); 34 } 35 36 @Override 37 public boolean equals(Object o) { 38 if (this == o) return true; 39 return o instanceof VarType that && 40 variableType.equals(that.variableType); 41 } 42 43 @Override 44 public int hashCode() { 45 return variableType.hashCode(); 46 } 47 48 /** 49 * Constructs a variable type. 50 * 51 * @param valueType the variable's value type. 52 * @return a variable type. 53 */ 54 public static VarType varType(TypeElement valueType) { 55 Objects.requireNonNull(valueType); 56 return new VarType(valueType); 57 } 58 }