Buggy code:
acceptedAnnotation [ 0 ] = packageName ; acceptedAnnotation [ 1 ] = typeName ; if ( ( this . acceptedAnnotations ) == null ) { this . acceptedAnnotations = new char [ 10 ] [ ] [ ] ; this . acceptedAnnotationsModifiers = new int [ 10 ] ; this . acceptedAnnotationsCount = 0 ; } length = this . acceptedAnnotations . length ; if ( length == ( this . acceptedAnnotationsCount ) ) { int newLength = ( length + 1 ) * 2 ; System . arraycopy ( this . acceptedAnnotations , 0 , ( this . acceptedAnnotations = new char [ newLength ] [ ] [ ] ) , 0 , length ) ; System . arraycopy ( this . acceptedAnnotationsModifiers , 0 , ( this . acceptedAnnotationsModifiers = new int [ newLength ] ) , 0 , length ) ; } this . acceptedAnnotationsModifiers [ this . acceptedAnnotationsCount ] = modifiers ; this . acceptedAnnotations [ ( ( this . acceptedAnnotationsCount ) ++ ) ] = acceptedAnnotation ; break ; case IConstants . AccEnum : char [ ] [ ] acceptedEnum = new char [ 2 ] [ ] ; acceptedEnum [ 0 ] = packageName ; acceptedEnum [ 1 ] = typeName ; if ( ( this . acceptedEnums ) == null ) { this . acceptedEnums = new char [ 10 ] [ ] [ ] ; this . acceptedEnumsModifiers = new int [ 10 ] ; this . acceptedEnumsCount = 0 ; } length = this . acceptedEnums . length ; if ( length == ( this . acceptedEnumsCount ) ) { int newLength = ( length + 1 ) * 2 ; System . arraycopy ( this . acceptedEnums , 0 , ( this . acceptedEnums = new char [ newLength ] [ ] [ ] ) , 0 , length ) ; System . arraycopy ( this . acceptedEnumsModifiers , 0 , ( this . acceptedEnumsModifiers = new int [ newLength ] ) , 0 , length ) ; } this . acceptedEnumsModifiers [ this . acceptedEnumsCount ] = modifiers ; this . acceptedEnums [ ( ( this . acceptedEnumsCount ) ++ ) ] = acceptedEnum ; break ; case IConstants . AccInterface : char [ ] [ ] acceptedInterface = new char [ 2 ] [ ] ; acceptedInterface [ 0 ] = packageName ; acceptedInterface [ 1 ] = typeName ; if ( ( this . acceptedInterfaces ) == null ) { this . acceptedInterfaces = new char [ 10 ] [ ] [ ] ; this . acceptedInterfacesModifiers = new int [ 10 ] ; this . acceptedInterfacesCount = 0 ; } length = this . acceptedInterfaces . length ; if ( length == ( this . acceptedInterfacesCount ) ) { int newLength = ( length + 1 ) * 2 ; System . arraycopy ( this . acceptedInterfaces , 0 , ( this . acceptedInterfaces = new char [ newLength ] [ ] [ ] ) , 0 , length ) ; System . arraycopy ( this . acceptedInterfacesModifiers , 0 , ( this . acceptedInterfacesModifiers = new int [ newLength ] ) , 0 , length ) ; } this . acceptedInterfacesModifiers [ this . acceptedInterfacesCount ] = modifiers ; this . acceptedInterfaces [ ( ( this . acceptedInterfacesCount ) ++ ) ] = acceptedInterface ; break ; default : char [ ] [ ] acceptedClass = new char [ 2 ] [ ] ; acceptedClass [ 0 ] = packageName ; acceptedClass [ 1 ] = typeName ; if ( ( this . acceptedClasses ) == null ) { this . acceptedClasses = new char [ 10 ] [ ] [ ] ; this . acceptedClassesModifiers = new int [ 10 ] ; this . acceptedClassesCount = 0 ; } length = this . acceptedClasses . length ; if ( length == ( this . acceptedClassesCount ) ) { int newLength = ( length + 1 ) * 2 ; System . arraycopy ( this . acceptedClasses , 0 , ( this . acceptedClasses = new char [ newLength ] [ ] [ ] ) , 0 , length ) ; <START_BUG> System . arraycopy ( this . acceptedClasses , 0 , ( this . acceptedClassesModifiers = new int [ newLength ] ) , 0 , length ) ; <END_BUG> } this . acceptedClassesModifiers [ this . acceptedClassesCount ] = modifiers ; this . acceptedClasses [ ( ( this . acceptedClassesCount ) ++ ) ] = acceptedClass ; break ; } } else { this . noProposal = false ; this . requestor . acceptType ( packageName , typeName , modifiers , false , null , this . actualSelectionStart , this . actualSelectionEnd ) ; this . acceptedAnswer = true ; } } } public void acceptPackage ( char [ ] packageName ) { } private void acceptQualifiedTypes ( ) { } private boolean checkSelection ( char [ ] source , int selectionStart , int selectionEnd ) { } private boolean checkTypeArgument ( Scanner scanner ) throws InvalidInputException { } public AssistParser getParser ( ) { } private boolean isLocal ( ReferenceBinding binding ) { } public void select ( ICompilationUnit sourceUnit , int selectionSourceStart , int selectionSourceEnd ) { } private void selectStaticFieldFromStaticImport ( CompilationUnitDeclaration parsedUnit , char [ ] lastToken , ReferenceBinding ref ) { } private void selectStaticMethodFromStaticImport ( CompilationUnitDeclaration parsedUnit , char [ ] lastToken , ReferenceBinding ref ) { } private void selectFrom ( Binding binding , CompilationUnitDeclaration parsedUnit , boolean isDeclaration ) { } private void selectLocalDeclaration ( ASTNode node ) { } public void selectType ( ISourceType sourceType , char [ ] typeName , SourceTypeElementInfo [ ] topLevelTypes , boolean searchInEnvironment ) { } private boolean selectDeclaration ( CompilationUnitDeclaration compilationUnit ) { } private boolean selectDeclaration ( TypeDeclaration typeDeclaration , char [ ] assistIdentifier , char [ ] packageName ) { } }

Fix:
System . arraycopy ( this . acceptedClassesModifiers , 0 , ( this . acceptedClassesModifiers = new int [ newLength ] ) , 0 , length ) ;