Buggy code:
public void enterClass ( int declarationStart , int [ ] javaDocPositions , int modifiers , int modifiersStart , int keywordStart , char [ ] name , int nameStart , int nameEnd , char [ ] superclass , int superclassStart , int superclassEnd , char [ ] [ ] superinterfaces , int [ ] superinterfaceStarts , int [ ] superinterfaceEnds , int bodyStart ) { } public void enterConstructor ( int declarationStart , int [ ] javaDocPositions , int modifiers , int modifiersStart , char [ ] name , int nameStart , int nameEnd , char [ ] [ ] parameterTypes , int [ ] parameterTypeStarts , int [ ] parameterTypeEnds , char [ ] [ ] parameterNames , int [ ] parameterNameStarts , int [ ] parameterNameEnds , int parametersEnd , char [ ] [ ] exceptionTypes , int [ ] exceptionTypeStarts , int [ ] exceptionTypeEnds , int bodyStart ) { } public void enterField ( int declarationStart , int [ ] javaDocPositions , int modifiers , int modifiersStart , char [ ] type , int typeStart , int typeEnd , int typeDimensionCount , char [ ] name , int nameStart , int nameEnd , int extendedTypeDimensionCount , int extendedTypeDimensionEnd ) { } public void enterInterface ( int declarationStart , int [ ] javaDocPositions , int modifiers , int modifiersStart , int keywordStart , char [ ] name , int nameStart , int nameEnd , char [ ] [ ] superinterfaces , int [ ] superinterfaceStarts , int [ ] superinterfaceEnds , int bodyStart ) { } public void enterMethod ( int declarationStart , int [ ] javaDocPositions , int modifiers , int modifiersStart , char [ ] returnType , int returnTypeStart , int returnTypeEnd , int returnTypeDimensionCount , char [ ] name , int nameStart , int nameEnd , char [ ] [ ] parameterTypes , int [ ] parameterTypeStarts , int [ ] parameterTypeEnds , char [ ] [ ] parameterNames , int [ ] parameterNameStarts , int [ ] parameterNameEnds , int parametersEnd , int extendedReturnTypeDimensionCount , int extendedReturnTypeDimensionEnd , char [ ] [ ] exceptionTypes , int [ ] exceptionTypeStarts , int [ ] exceptionTypeEnds , int bodyStart ) { } protected void enterType ( int declarationStart , int [ ] javaDocPositions , int modifiers , int modifiersStart , int keywordStart , char [ ] name , int nameStart , int nameEnd , char [ ] superclass , int superclassStart , int superclassEnd , char [ ] [ ] superinterfaces , int [ ] superinterfaceStarts , int [ ] superinterfaceEnds , int bodyStart , boolean isClass ) { if ( fBuildingType ) { int [ ] sourceRange = new int [ ] { declarationStart , - 1 } ; int [ ] commentRange = new int [ ] { - 1 , - 1 } ; if ( javaDocPositions != null ) { int length = javaDocPositions . length ; commentRange [ 0 ] = javaDocPositions [ 0 ] ; commentRange [ 1 ] = javaDocPositions [ ( length - 1 ) ] ; } int [ ] modifiersRange = new int [ ] { - 1 , - 1 } ; if ( modifiersStart > ( - 1 ) ) { modifiersRange [ 0 ] = modifiersStart ; modifiersRange [ 1 ] = ( modifiersStart > ( - 1 ) ) ? keywordStart - 1 : - 1 ; } int [ ] typeKeywordRange = new int [ ] { keywordStart , nameStart - 1 } ; int [ ] nameRange = new int [ ] { nameStart , nameEnd } ; int [ ] extendsKeywordRange = new int [ ] { - 1 , - 1 } ; int [ ] superclassRange = new int [ ] { - 1 , - 1 } ; int [ ] implementsKeywordRange = new int [ ] { - 1 , - 1 } ; int [ ] interfacesRange = new int [ ] { - 1 , - 1 } ; if ( isClass ) { if ( superclass != null ) { extendsKeywordRange [ 0 ] = nameEnd + 1 ; extendsKeywordRange [ 1 ] = superclassStart - 1 ; superclassRange [ 0 ] = superclassStart ; <START_BUG> superclassRange [ 1 ] = bodyStart - 1 ; <END_BUG> } if ( ( superinterfaces != null ) && ( ( superinterfaces . length ) > 0 ) ) { superclassRange [ 1 ] = superclassEnd ; if ( superclassEnd > ( - 1 ) ) { implementsKeywordRange [ 0 ] = superclassEnd + 1 ; } else { implementsKeywordRange [ 0 ] = nameEnd + 1 ; } implementsKeywordRange [ 1 ] = ( superinterfaceStarts [ 0 ] ) - 1 ; interfacesRange [ 0 ] = superinterfaceStarts [ 0 ] ; interfacesRange [ 1 ] = superinterfaceEnds [ ( ( superinterfaces . length ) - 1 ) ] ; } } else { if ( ( superinterfaces != null ) && ( ( superinterfaces . length ) > 0 ) ) { extendsKeywordRange [ 0 ] = nameEnd + 1 ; extendsKeywordRange [ 1 ] = ( superinterfaceStarts [ 0 ] ) - 1 ; interfacesRange [ 0 ] = superinterfaceStarts [ 0 ] ; interfacesRange [ 1 ] = superinterfaceEnds [ ( ( superinterfaces . length ) - 1 ) ] ; } }

Fix:
superclassRange [ 1 ] = superclassEnd ;