@Override public Integer visitDeclared(DeclaredType t, Set<Element> visiting) { Element element = t.asElement(); if (visiting.contains(element)) { return 0; } Set<Element> newVisiting = new HashSet<Element>(visiting); newVisiting.add(element); int result = hashKind(HASH_SEED, t); result *= HASH_MULTIPLIER; result += t.asElement().hashCode(); result *= HASH_MULTIPLIER; result += t.getEnclosingType().accept(this, newVisiting); result *= HASH_MULTIPLIER; result += hashList(t.getTypeArguments(), newVisiting); return result; }
@Override public Integer visitExecutable(ExecutableType t, Set<Element> visiting) { int result = hashKind(HASH_SEED, t); result *= HASH_MULTIPLIER; result += hashList(t.getParameterTypes(), visiting); result *= HASH_MULTIPLIER; result += t.getReturnType().accept(this, visiting); result *= HASH_MULTIPLIER; result += hashList(t.getThrownTypes(), visiting); result *= HASH_MULTIPLIER; result += hashList(t.getTypeVariables(), visiting); return result; }
@Override protected Integer defaultAction(TypeMirror e, Set<Element> visiting) { return hashKind(HASH_SEED, e); }
@Override public Integer visitTypeVariable(TypeVariable t, Set<Element> visiting) { int result = hashKind(HASH_SEED, t); result *= HASH_MULTIPLIER; result += t.getLowerBound().accept(this, visiting); TypeParameterElement element = (TypeParameterElement) t.asElement(); for (TypeMirror bound : element.getBounds()) { result *= HASH_MULTIPLIER; result += bound.accept(this, visiting); } return result; }
@Override public Integer visitArray(ArrayType t, Set<Element> visiting) { int result = hashKind(HASH_SEED, t); result *= HASH_MULTIPLIER; result += t.getComponentType().accept(this, visiting); return result; }
@Override public Integer visitWildcard(WildcardType t, Set<Element> visiting) { int result = hashKind(HASH_SEED, t); result *= HASH_MULTIPLIER; result += (t.getExtendsBound() == null) ? 0 : t.getExtendsBound().accept(this, visiting); result *= HASH_MULTIPLIER; result += (t.getSuperBound() == null) ? 0 : t.getSuperBound().accept(this, visiting); return result; }