Buggy code:
public abstract class ExpVector implements AbelianGroupElem < ExpVector > { protected transient int hash = - 1 ; protected transient long blen = - 1 ; private static final Random random = new Random ( ) ; public static enum StorUnit { LONG , INT , SHORT , BYTE ; } public static final ExpVector . StorUnit storunit = ExpVector . StorUnit . LONG ; public ExpVector ( ) { } public static ExpVector create ( int n ) { } public static ExpVector create ( int n , int i , long e ) { } public static ExpVector create ( long [ ] v ) { } public static ExpVector create ( String s ) { } public static ExpVector create ( Collection < Long > v ) { } public AbelianGroupFactory < ExpVector > factory ( ) { } public boolean isFinite ( ) { } @ Override public abstract ExpVector copy ( ) { } public abstract long [ ] getVal ( ) { } public abstract long getVal ( int i ) { } protected abstract long setVal ( int i , long e ) { } public abstract int length ( ) { } public abstract ExpVector extend ( int i , int j , long e ) { } public abstract ExpVector extendLower ( int i , int j , long e ) { } public abstract ExpVector contract ( int i , int len ) { } public abstract ExpVector reverse ( ) { } public abstract ExpVector reverse ( int j ) { } public abstract ExpVector combine ( ExpVector V ) { } public abstract ExpVector permutation ( List < Integer > P ) { } @ Override public String toString ( ) { } public String toString ( String [ ] vars ) { } public static String varsToString ( String [ ] vars ) { } @ Override public String toScript ( ) { } public String toScript ( String [ ] vars ) { } @ Override public String toScriptFactory ( ) { } public String indexVarName ( int idx , String ... vars ) { } public int varIndex ( int idx ) { } public int indexVar ( String x , String ... vars ) { } public < C extends RingElem < C > > C evaluate ( RingFactory < C > cf , List < C > a ) { } @ Override public boolean equals ( Object B ) { } @ Override public int hashCode ( ) { if ( ( hash ) < 0 ) { int h = 0 ; for ( int i = 0 ; i < ( length ( ) ) ; i ++ ) { <START_BUG> h = h << ( 4 + ( getVal ( i ) ) ) ; <END_BUG> } hash = h ; } return hash ; } public long bitLength ( ) { } public boolean isZERO ( ) { } public String [ ] stdVars ( ) { } public String [ ] stdVars ( String prefix ) { } public static String [ ] STDVARS ( int n ) { } public static String [ ] STDVARS ( String prefix , int n ) { } public static ExpVector EVABS ( ExpVector U ) { } public abstract ExpVector abs ( ) { } public static ExpVector EVNEG ( ExpVector U ) { } public abstract ExpVector negate ( ) { } public static ExpVector EVSUM ( ExpVector U , ExpVector V ) { } public abstract ExpVector sum ( ExpVector V ) { } public static ExpVector EVDIF ( ExpVector U , ExpVector V ) { } public abstract ExpVector subtract ( ExpVector V ) { } public static ExpVector EVSU ( ExpVector U , int i , long d ) { } public ExpVector subst ( int i , long d ) { } public static ExpVector EVRAND ( int r , long k , float q ) { } public static ExpVector EVRAND ( int r , long k , float q , Random rnd ) { } public static ExpVector random ( int r , long k , float q ) { } public static ExpVector random ( int r , long k , float q , Random rnd ) { } public static int EVSIGN ( ExpVector U ) { } public abstract int signum ( ) { } public static long EVTDEG ( ExpVector U ) { } public long degree ( ) { } public abstract long totalDeg ( ) { } public static long EVMDEG ( ExpVector U ) { } public abstract long maxDeg ( ) { } public static long EVWDEG ( long [ ] [ ] w , ExpVector U ) { } public abstract long weightDeg ( long [ ] [ ] w ) { } public static ExpVector EVLCM ( ExpVector U , ExpVector V ) { } public abstract ExpVector lcm ( ExpVector V ) { } public static ExpVector EVGCD ( ExpVector U , ExpVector V ) { } public abstract ExpVector gcd ( ExpVector V ) { } public static int [ ] EVDOV ( ExpVector U ) { } public abstract int dependentVariables ( ) { } public abstract int [ ] dependencyOnVariables ( ) { } public static boolean EVMT ( ExpVector U , ExpVector V ) { } public abstract boolean multipleOf ( ExpVector V ) { } public boolean divides ( ExpVector V ) { } @ Override public int compareTo ( ExpVector V ) { } public static int EVILCP ( ExpVector U , ExpVector V ) { } public abstract int invLexCompareTo ( ExpVector V ) { } public static int EVILCP ( ExpVector U , ExpVector V , int begin , int end ) { } public abstract int invLexCompareTo ( ExpVector V , int begin , int end ) { }

Fix:
h = ( h << 4 ) + ( ( int ) ( getVal ( i ) ) ) ;