Buggy code:
public class Javadoc extends ASTNode { public JavadocSingleNameReference [ ] paramReferences ; public JavadocSingleTypeReference [ ] paramTypeParameters ; public TypeReference [ ] exceptionReferences ; public JavadocReturnStatement returnStatement ; public Expression [ ] seeReferences ; public long inheritedPositions = - 1 ; public JavadocSingleNameReference [ ] invalidParameters ; public long valuePositions = - 1 ; public Javadoc ( int sourceStart , int sourceEnd ) { } boolean canBeSeen ( int visibility , int modifiers ) { } public ASTNode getNodeStartingAt ( int start ) { } public StringBuffer print ( int indent , StringBuffer output ) { } public void resolve ( ClassScope scope ) { } public void resolve ( CompilationUnitScope unitScope ) { } public void resolve ( MethodScope methScope ) { } private void resolveReference ( Expression reference , Scope scope ) { } private void resolveParamTags ( MethodScope scope , boolean reportMissing , boolean considerParamRefAsUsage ) { } private void resolveTypeParameterTags ( Scope scope , boolean reportMissing ) { int paramTypeParamLength = ( ( this . paramTypeParameters ) == null ) ? 0 : this . paramTypeParameters . length ; TypeParameter [ ] parameters = null ; TypeVariableBinding [ ] typeVariables = null ; int modifiers = - 1 ; switch ( scope . kind ) { case Scope . METHOD_SCOPE : AbstractMethodDeclaration methodDeclaration = ( ( MethodScope ) ( scope ) ) . referenceMethod ( ) ; if ( methodDeclaration == null ) { for ( int i = 0 ; i < paramTypeParamLength ; i ++ ) { <START_BUG> JavadocSingleNameReference param = this . paramReferences [ i ] ; <END_BUG> scope . problemReporter ( ) . javadocUnexpectedTag ( param . tagSourceStart , param . tagSourceEnd ) ; } return ; } parameters = methodDeclaration . typeParameters ( ) ; typeVariables = methodDeclaration . binding . typeVariables ; modifiers = methodDeclaration . binding . modifiers ; break ; case Scope . CLASS_SCOPE : TypeDeclaration typeDeclaration = ( ( ClassScope ) ( scope ) ) . referenceContext ; parameters = typeDeclaration . typeParameters ; typeVariables = typeDeclaration . binding . typeVariables ; modifiers = typeDeclaration . binding . modifiers ; break ; } if ( ( typeVariables == null ) || ( ( typeVariables . length ) == 0 ) ) { for ( int i = 0 ; i < paramTypeParamLength ; i ++ ) { JavadocSingleTypeReference param = this . paramTypeParameters [ i ] ; scope . problemReporter ( ) . javadocUnexpectedTag ( param . tagSourceStart , param . tagSourceEnd ) ; } return ; } if ( parameters != null ) { int typeParametersLength = parameters . length ; if ( paramTypeParamLength == 0 ) { if ( reportMissing ) { for ( int i = 0 , l = typeParametersLength ; i < l ; i ++ ) { scope . problemReporter ( ) . javadocMissingParamTag ( parameters [ i ] . name , parameters [ i ] . sourceStart , parameters [ i ] . sourceEnd , modifiers ) ; } } } else if ( ( typeVariables . length ) == typeParametersLength ) { TypeVariableBinding [ ] bindings = new TypeVariableBinding [ paramTypeParamLength ] ; for ( int i = 0 ; i < paramTypeParamLength ; i ++ ) { JavadocSingleTypeReference param = this . paramTypeParameters [ i ] ; TypeBinding paramBindind = param . internalResolveType ( scope ) ; if ( ( paramBindind != null ) && ( paramBindind . isValidBinding ( ) ) ) { if ( paramBindind . isTypeVariable ( ) ) { boolean duplicate = false ; for ( int j = 0 ; ( j < i ) && ( ! duplicate ) ; j ++ ) { if ( ( bindings [ j ] ) == ( param . resolvedType ) ) { scope . problemReporter ( ) . javadocDuplicatedParamTag ( param . token , param . sourceStart , param . sourceEnd , modifiers ) ; duplicate = true ; } } if ( ! duplicate ) { bindings [ i ] = ( ( TypeVariableBinding ) ( param . resolvedType ) ) ; } } else { scope . problemReporter ( ) . javadocUndeclaredParamTagName ( param . token , param . sourceStart , param . sourceEnd , modifiers ) ; } } } for ( int i = 0 ; i < typeParametersLength ; i ++ ) { TypeParameter parameter = parameters [ i ] ; boolean found = false ; for ( int j = 0 ; ( j < paramTypeParamLength ) && ( ! found ) ; j ++ ) { if ( ( parameter . binding ) == ( bindings [ j ] ) ) { found = true ; bindings [ j ] = null ; } } if ( ( ! found ) && reportMissing ) { scope . problemReporter ( ) . javadocMissingParamTag ( parameter . name , parameter . sourceStart , parameter . sourceEnd , modifiers ) ; } } for ( int i = 0 ; i < paramTypeParamLength ; i ++ ) { if ( ( bindings [ i ] ) != null ) { JavadocSingleTypeReference param = this . paramTypeParameters [ i ] ; scope . problemReporter ( ) . javadocUndeclaredParamTagName ( param . token , param . sourceStart , param . sourceEnd , modifiers ) ; } } } } } private void resolveThrowsTags ( MethodScope methScope , boolean reportMissing ) { } private void verifyTypeReference ( Expression reference , Expression typeReference , Scope scope , boolean source15 , ReferenceBinding resolvedType , int modifiers ) { } public void traverse ( ASTVisitor visitor , BlockScope scope ) { } public void traverse ( ASTVisitor visitor , ClassScope scope ) { } }

Fix:
JavadocSingleTypeReference param = this . paramTypeParameters [ i ] ;