Buggy code:
public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter implements ISourceElementRequestor { protected ICompilationUnit unit ; protected CompilationUnitElementInfo unitInfo ; protected JavaElementInfo importContainerInfo = null ; protected Map newElements ; protected Stack infoStack ; protected Stack handleStack ; protected char [ ] sourceFileName = null ; protected char [ ] packageName = null ; protected int referenceCount = 0 ; protected boolean hasSyntaxErrors = false ; protected Parser parser ; protected static String [ ] NO_STRINGS = new String [ 0 ] ; protected static byte [ ] NO_BYTES = new byte [ ] { } ; protected HashtableOfObject fieldRefCache ; protected HashtableOfObject messageRefCache ; protected HashtableOfObject typeRefCache ; protected HashtableOfObject unknownRefCache ; protected CompilationUnitStructureRequestor ( ICompilationUnit unit , CompilationUnitElementInfo unitInfo , Map newElements ) { } public void acceptImport ( int declarationStart , int declarationEnd , char [ ] name , boolean onDemand , int modifiers ) { } public void acceptLineSeparatorPositions ( int [ ] positions ) { } public void acceptPackage ( int declarationStart , int declarationEnd , char [ ] name ) { } public void acceptProblem ( IProblem problem ) { } static String [ ] convertTypeNamesToSigs ( char [ ] [ ] typeNames ) { } public void enterClass ( ISourceElementRequestor . TypeInfo typeInfo ) { } public void enterCompilationUnit ( ) { } public void enterConstructor ( ISourceElementRequestor . MethodInfo methodInfo ) { } public void enterEnum ( ISourceElementRequestor . TypeInfo typeInfo ) { } public void enterField ( ISourceElementRequestor . FieldInfo fieldInfo ) { } public void enterInitializer ( int declarationSourceStart , int modifiers ) { } public void enterInterface ( ISourceElementRequestor . TypeInfo typeInfo ) { } public void enterMethod ( ISourceElementRequestor . MethodInfo methodInfo ) { } protected void enterType ( ISourceElementRequestor . TypeInfo typeInfo ) { } protected void enterTypeParameter ( ISourceElementRequestor . TypeParameterInfo typeParameterInfo ) { JavaElementInfo parentInfo = ( ( JavaElementInfo ) ( this . infoStack . peek ( ) ) ) ; JavaElement parentHandle = ( ( JavaElement ) ( this . handleStack . peek ( ) ) ) ; String nameString = new String ( typeParameterInfo . name ) ; TypeParameter handle = handle = new TypeParameter ( parentHandle , nameString ) ; resolveDuplicates ( handle ) ; TypeParameterElementInfo info = new TypeParameterElementInfo ( ) ; info . setSourceRangeStart ( typeParameterInfo . declarationStart ) ; info . nameStart = typeParameterInfo . nameSourceStart ; info . nameEnd = typeParameterInfo . nameSourceEnd ; <START_BUG> info . bounds = typeParameterInfo . typeParameterBounds ; <END_BUG> if ( parentInfo instanceof SourceTypeElementInfo ) { SourceTypeElementInfo elementInfo = ( ( SourceTypeElementInfo ) ( parentInfo ) ) ; ITypeParameter [ ] typeParameters = elementInfo . typeParameters ; int length = typeParameters . length ; System . arraycopy ( typeParameters , 0 , ( typeParameters = new ITypeParameter [ length + 1 ] ) , 0 , length ) ; typeParameters [ length ] = handle ; elementInfo . typeParameters = typeParameters ; } else { SourceMethodElementInfo elementInfo = ( ( SourceMethodElementInfo ) ( parentInfo ) ) ; ITypeParameter [ ] typeParameters = elementInfo . typeParameters ; int length = typeParameters . length ; System . arraycopy ( typeParameters , 0 , ( typeParameters = new ITypeParameter [ length + 1 ] ) , 0 , length ) ; typeParameters [ length ] = handle ; elementInfo . typeParameters = typeParameters ; } this . newElements . put ( handle , info ) ; this . infoStack . push ( info ) ; this . handleStack . push ( handle ) ; } public void exitClass ( int declarationEnd ) { } public void exitCompilationUnit ( int declarationEnd ) { } public void exitConstructor ( int declarationEnd ) { } public void exitEnum ( int declarationEnd ) { } public void exitField ( int initializationStart , int declarationEnd , int declarationSourceEnd ) { } public void exitInitializer ( int declarationEnd ) { } public void exitInterface ( int declarationEnd ) { } protected void exitMember ( int declarationEnd ) { } public void exitMethod ( int declarationEnd ) { } protected void resolveDuplicates ( SourceRefElement handle ) { } }

Fix:
info . bounds = typeParameterInfo . bounds ;