//version 7: public class EqualsAndHashCodeWithGenericsOnInners<A> { class Inner<B> { int x; @java.lang.Override @java.lang.SuppressWarnings("all") public boolean equals(final java.lang.Object o) { if (o == this) return true; if (!(o instanceof EqualsAndHashCodeWithGenericsOnInners.Inner)) return false; final EqualsAndHashCodeWithGenericsOnInners<?>.Inner<?> other = (EqualsAndHashCodeWithGenericsOnInners<?>.Inner<?>) o; if (!other.canEqual((java.lang.Object) this)) return false; if (this.x != other.x) return false; return true; } @java.lang.SuppressWarnings("all") protected boolean canEqual(final java.lang.Object other) { return other instanceof EqualsAndHashCodeWithGenericsOnInners.Inner; } @java.lang.Override @java.lang.SuppressWarnings("all") public int hashCode() { final int PRIME = 59; int result = 1; result = result * PRIME + this.x; return result; } } }