Buggy code:
class BinaryMethod extends BinaryMember implements IMethod { protected String [ ] parameterTypes ; protected String [ ] parameterNames ; protected String [ ] exceptionTypes ; protected String returnType ; protected BinaryMethod ( JavaElement parent , String name , String [ ] paramTypes ) { } public boolean equals ( Object o ) { } public String [ ] getExceptionTypes ( ) throws JavaModelException { } public int getElementType ( ) { } public int getFlags ( ) throws JavaModelException { } protected void getHandleMemento ( StringBuffer buff ) { } protected char getHandleMementoDelimiter ( ) { } public String getKey ( boolean forceOpen ) throws JavaModelException { } public int getNumberOfParameters ( ) { } public String [ ] getParameterNames ( ) throws JavaModelException { if ( ( this . parameterNames ) != null ) return this . parameterNames ; IType type = ( ( IType ) ( getParent ( ) ) ) ; SourceMapper mapper = getSourceMapper ( ) ; if ( mapper != null ) { char [ ] [ ] paramNames = mapper . getMethodParameterNames ( this ) ; if ( paramNames == null ) { char [ ] source = mapper . findSource ( type ) ; if ( source != null ) { mapper . mapSource ( type , source ) ; } paramNames = mapper . getMethodParameterNames ( this ) ; } if ( paramNames != null ) { this . parameterNames = new String [ paramNames . length ] ; for ( int i = 0 ; i < ( paramNames . length ) ; i ++ ) { this . parameterNames [ i ] = new String ( paramNames [ i ] ) ; } return this . parameterNames ; } } IBinaryMethod info = ( ( IBinaryMethod ) ( getElementInfo ( ) ) ) ; final int paramCount = Signature . getParameterCount ( new String ( info . getMethodDescriptor ( ) ) ) ; if ( paramCount != 0 ) { String javadocContents = null ; IType declaringType = this . getDeclaringType ( ) ; JavaModelManager . PerProjectInfo projectInfo = JavaModelManager . getJavaModelManager ( ) . getPerProjectInfoCheckExistence ( this . getJavaProject ( ) . getProject ( ) ) ; synchronized ( projectInfo . javadocCache ) { javadocContents = ( ( String ) ( projectInfo . javadocCache . get ( declaringType ) ) ) ; if ( javadocContents == null ) { projectInfo . javadocCache . put ( declaringType , BinaryType . EMPTY_JAVADOC ) ; } } if ( javadocContents == null ) { long timeOut = 50 ; try { <START_BUG> String option = this . getJavaProject ( ) . getOption ( CODEASSIST_TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC , true ) ; <END_BUG> if ( option != null ) { timeOut = Long . parseLong ( option ) ; } } catch ( NumberFormatException e ) { } if ( timeOut == 0 ) { return this . parameterNames = getRawParameterNames ( paramCount ) ; } final class ParametersNameCollector { String javadoc ; public void setJavadoc ( String s ) { this . javadoc = s ; } public String getJavadoc ( ) { return this . javadoc ; } } final ParametersNameCollector nameCollector = new ParametersNameCollector ( ) ; Thread collect = new Thread ( ) { public void run ( ) { try { nameCollector . setJavadoc ( BinaryMethod . this . getAttachedJavadoc ( null , "UTF-8" ) ) ; } catch ( JavaModelException e ) { } synchronized ( nameCollector ) { nameCollector . notify ( ) ; } } } ; collect . start ( ) ; synchronized ( nameCollector ) { try { nameCollector . wait ( timeOut ) ; } catch ( InterruptedException e ) { } } javadocContents = nameCollector . getJavadoc ( ) ; } else if ( javadocContents != ( BinaryType . EMPTY_JAVADOC ) ) { javadocContents = extractJavadoc ( declaringType , javadocContents ) ; } else { return getRawParameterNames ( paramCount ) ; } if ( ( javadocContents != null ) && ( javadocContents != ( BinaryType . EMPTY_JAVADOC ) ) ) { final int indexOfOpenParen = javadocContents . indexOf ( '(' ) ; if ( indexOfOpenParen != ( - 1 ) ) { final int indexOfClosingParen = javadocContents . indexOf ( ')' , indexOfOpenParen ) ; if ( indexOfClosingParen != ( - 1 ) ) { final char [ ] paramsSource = CharOperation . replace ( javadocContents . substring ( ( indexOfOpenParen + 1 ) , indexOfClosingParen ) . toCharArray ( ) , "&nbsp;" . toCharArray ( ) , new char [ ] { '<seq2seq4repair_space>' } ) ; final char [ ] [ ] params = CharOperation . splitOn ( ',' , paramsSource ) ; final int paramsLength = params . length ; this . parameterNames = new String [ paramsLength ] ; for ( int i = 0 ; i < paramsLength ; i ++ ) { final char [ ] param = params [ i ] ; int indexOfSpace = CharOperation . lastIndexOf ( '<seq2seq4repair_space>' , param ) ; if ( indexOfSpace != ( - 1 ) ) { this . parameterNames [ i ] = String . valueOf ( param , ( indexOfSpace + 1 ) , ( ( ( param . length ) - indexOfSpace ) - 1 ) ) ; } else { this . parameterNames [ i ] = "arg" + i ; } } return this . parameterNames ; } } } } return this . parameterNames = getRawParameterNames ( paramCount ) ; } public String [ ] getParameterTypes ( ) { } public ITypeParameter getTypeParameter ( String typeParameterName ) { } public ITypeParameter [ ] getTypeParameters ( ) throws JavaModelException { } public String [ ] getTypeParameterSignatures ( ) throws JavaModelException { } public String [ ] getRawParameterNames ( ) throws JavaModelException { } private String [ ] getRawParameterNames ( int paramCount ) { } public String getReturnType ( ) throws JavaModelException { } private String getReturnType ( IBinaryMethod info ) { }

Fix:
String option = this . getJavaProject ( ) . getOption ( JavaCore . TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC , true ) ;