Buggy code:
@ Override public void visit ( WhileStatement statement ) { } @ Override public void visit ( BlockStatement statement ) { } @ Override public void visit ( BreakStatement statement ) { } @ Override public void visit ( ContinueStatement statement ) { } @ Override public void visit ( ReturnStatement statement ) { } @ Override public void visit ( ThrowStatement statement ) { } @ Override public void visit ( InitClassStatement statement ) { } @ Override public void visit ( TryCatchStatement statement ) { } @ Override public void visit ( RestoreAsyncStatement statement ) { } @ Override public void visit ( BinaryExpr expr ) { } @ Override public void visit ( UnaryExpr expr ) { } @ Override public void visit ( ConditionalExpr expr ) { } @ Override public void visit ( ConstantExpr expr ) { } @ Override public void visit ( VariableExpr expr ) { } @ Override public void visit ( SubscriptExpr expr ) { } @ Override public void visit ( UnwrapArrayExpr expr ) { } @ Override public void visit ( InvocationExpr expr ) { } @ Override public void visit ( QualificationExpr expr ) { } @ Override public void visit ( NewExpr expr ) { } @ Override public void visit ( NewArrayExpr expr ) { } @ Override public void visit ( NewMultiArrayExpr expr ) { } @ Override public void visit ( InstanceOfExpr expr ) { } @ Override public void visit ( StaticClassExpr expr ) { } @ Override public void visit ( MonitorEnterStatement statement ) { } @ Override public void visit ( MonitorExitStatement statement ) { } } private NodeLocation readLocation ( DataInput input ) throws IOException { } private Statement readStatement ( DataInput input ) throws IOException { } private void readSequence ( DataInput input , List < Statement > statements ) throws IOException { } private String readNullableString ( DataInput input ) throws IOException { } private Expr readExpr ( DataInput input ) throws IOException { } private Expr readExprWithoutLocation ( DataInput input ) throws IOException { byte type = input . readByte ( ) ; switch ( type ) { case 0 : { BinaryExpr expr = new BinaryExpr ( ) ; expr . setOperation ( AstIO . binaryOperations [ input . readByte ( ) ] ) ; expr . setFirstOperand ( readExpr ( input ) ) ; expr . setSecondOperand ( readExpr ( input ) ) ; return expr ; } case 1 : { UnaryExpr expr = new UnaryExpr ( ) ; expr . setOperation ( AstIO . unaryOperations [ input . readByte ( ) ] ) ; expr . setOperand ( readExpr ( input ) ) ; return expr ; } case 2 : { ConditionalExpr expr = new ConditionalExpr ( ) ; expr . setCondition ( readExpr ( input ) ) ; expr . setConsequent ( readExpr ( input ) ) ; expr . setAlternative ( readExpr ( input ) ) ; return expr ; } case 3 : { ConstantExpr expr = new ConstantExpr ( ) ; return expr ; } case 4 : { ConstantExpr expr = new ConstantExpr ( ) ; expr . setValue ( input . readInt ( ) ) ; return expr ; } case 5 : { ConstantExpr expr = new ConstantExpr ( ) ; expr . setValue ( input . readLong ( ) ) ; return expr ; } case 6 : { ConstantExpr expr = new ConstantExpr ( ) ; expr . setValue ( input . readFloat ( ) ) ; return expr ; } case 7 : { ConstantExpr expr = new ConstantExpr ( ) ; expr . setValue ( input . readDouble ( ) ) ; return expr ; } case 8 : { ConstantExpr expr = new ConstantExpr ( ) ; expr . setValue ( input . readUTF ( ) ) ; return expr ; } case 9 : { ConstantExpr expr = new ConstantExpr ( ) ; <START_BUG> expr . setValue ( symbolTable . at ( input . readInt ( ) ) ) ; <END_BUG> return expr ; } case 10 : { VariableExpr expr = new VariableExpr ( ) ; expr . setIndex ( input . readShort ( ) ) ; return expr ; } case 11 : { SubscriptExpr expr = new SubscriptExpr ( ) ; expr . setArray ( readExpr ( input ) ) ; expr . setIndex ( readExpr ( input ) ) ; return expr ; } case 12 : { UnwrapArrayExpr expr = new UnwrapArrayExpr ( AstIO . arrayElementTypes [ input . readByte ( ) ] ) ; expr . setArray ( readExpr ( input ) ) ; return expr ; } case 13 : return parseInvocationExpr ( CONSTRUCTOR , input ) ; case 14 : return parseInvocationExpr ( STATIC , input ) ; case 15 : return parseInvocationExpr ( SPECIAL , input ) ; case 16 : return parseInvocationExpr ( DYNAMIC , input ) ; case 17 : { QualificationExpr expr = new QualificationExpr ( ) ; expr . setQualified ( readExpr ( input ) ) ; String className = symbolTable . at ( input . readInt ( ) ) ; String fieldName = symbolTable . at ( input . readInt ( ) ) ; expr . setField ( new FieldReference ( className , fieldName ) ) ; return expr ; } case 18 : { NewExpr expr = new NewExpr ( ) ; expr . setConstructedClass ( symbolTable . at ( input . readInt ( ) ) ) ; return expr ; } case 19 : { NewArrayExpr expr = new NewArrayExpr ( ) ; expr . setLength ( readExpr ( input ) ) ; expr . setType ( ValueType . parse ( symbolTable . at ( input . readInt ( ) ) ) ) ; return expr ; } case 20 : { NewMultiArrayExpr expr = new NewMultiArrayExpr ( ) ; int dimensionCount = input . readByte ( ) ;

Fix:
expr . setValue ( ValueType . parse ( symbolTable . at ( input . readInt ( ) ) ) ) ;