1 32 package net.sf.retrotranslator.runtime.impl; 33 34 import java.lang.reflect.*; 35 import java.util.Arrays ; 36 37 40 public class ParameterizedTypeImpl implements ParameterizedType { 41 42 private Type[] actualTypeArguments; 43 private Class rawType; 44 private Type ownerType; 45 46 public ParameterizedTypeImpl(Type[] actualTypeArguments, Class rawType, Type ownerType) { 47 this.actualTypeArguments = actualTypeArguments; 48 this.rawType = rawType; 49 this.ownerType = ownerType; 50 } 51 52 public Type[] getActualTypeArguments() { 53 return actualTypeArguments.clone(); 54 } 55 56 public Type getRawType() { 57 return rawType; 58 } 59 60 public Type getOwnerType() { 61 return ownerType; 62 } 63 64 public int hashCode() { 65 return Arrays.hashCode(actualTypeArguments) ^ rawType.hashCode() ^ 66 (ownerType == null ? 0 : ownerType.hashCode()); 67 } 68 69 public boolean equals(Object obj) { 70 if (obj instanceof ParameterizedType) { 71 if (obj == this) return true; 72 ParameterizedType type = ((ParameterizedType) obj); 73 return Arrays.equals(actualTypeArguments, type.getActualTypeArguments()) && 74 rawType.equals(type.getRawType()) && 75 (ownerType == null ? type.getOwnerType() == null : ownerType.equals(type.getOwnerType())); 76 } 77 return false; 78 } 79 80 public String toString() { 81 StringBuilder builder = new StringBuilder (); 82 if (ownerType != null) { 83 builder.append(RuntimeTools.getString(ownerType)).append('.'); 84 } 85 String rawName = rawType.getName(); 86 if (ownerType instanceof ParameterizedTypeImpl) { 87 rawName = rawName.substring(((ParameterizedTypeImpl) ownerType).rawType.getName().length() + 1); 88 } 89 builder.append(rawName); 90 if (actualTypeArguments.length > 0) { 91 builder.append('<'); 92 for (int i = 0; i < actualTypeArguments.length; i++) { 93 if (i > 0) builder.append(", "); 94 builder.append(RuntimeTools.getString(actualTypeArguments[i])); 95 } 96 builder.append('>'); 97 } 98 return builder.toString(); 99 } 100 101 } 102 | Popular Tags |