Buggy code:
public class SourceMapper extends ReferenceInfoAdapter implements ISourceElementRequestor { protected BinaryType fType ; protected IPath fZipPath ; protected String fRootPath ; protected static String [ ] fgEmptyStringArray = new String [ 0 ] ; protected HashMap fParameterNames ; protected HashMap fSourceRanges ; protected static SourceRange fgUnknownRange = new SourceRange ( ( - 1 ) , 0 ) ; protected int [ ] fMemberDeclarationStart ; protected SourceRange [ ] fMemberNameRange ; protected String [ ] fMemberName ; protected char [ ] [ ] [ ] fMethodParameterNames ; protected char [ ] [ ] [ ] fMethodParameterTypes ; protected IJavaElement searchedElement ; private HashMap importsTable ; private HashMap importsCounterTable ; IType [ ] types ; int [ ] typeDeclarationStarts ; SourceRange [ ] typeNameRanges ; int typeDepth ; int anonymousCounter ; int anonymousClassName ; String encoding ; public SourceMapper ( IPath zipPath , String rootPath ) { } public void acceptImport ( int declarationStart , int declarationEnd , char [ ] name , boolean onDemand ) { } public void acceptLineSeparatorPositions ( int [ ] positions ) { } public void acceptPackage ( int declarationStart , int declarationEnd , char [ ] name ) { } public void acceptProblem ( IProblem problem ) { } public void close ( ) throws JavaModelException { } private String [ ] convertTypeNamesToSigs ( char [ ] [ ] typeNames ) { } public void enterClass ( int declarationStart , int modifiers , char [ ] name , int nameSourceStart , int nameSourceEnd , char [ ] superclass , char [ ] [ ] superinterfaces ) { } public void enterCompilationUnit ( ) { } public void enterConstructor ( int declarationStart , int modifiers , char [ ] name , int nameSourceStart , int nameSourceEnd , char [ ] [ ] parameterTypes , char [ ] [ ] parameterNames , char [ ] [ ] exceptionTypes ) { } public void enterField ( int declarationStart , int modifiers , char [ ] type , char [ ] name , int nameSourceStart , int nameSourceEnd ) { } public void enterInitializer ( int declarationSourceStart , int modifiers ) { } public void enterInterface ( int declarationStart , int modifiers , char [ ] name , int nameSourceStart , int nameSourceEnd , char [ ] [ ] superinterfaces ) { } public void enterMethod ( int declarationStart , int modifiers , char [ ] returnType , char [ ] name , int nameSourceStart , int nameSourceEnd , char [ ] [ ] parameterTypes , char [ ] [ ] parameterNames , char [ ] [ ] exceptionTypes ) { } public void exitClass ( int declarationEnd ) { } public void exitCompilationUnit ( int declarationEnd ) { } public void exitConstructor ( int declarationEnd ) { } public void exitField ( int declarationEnd ) { } public void exitInitializer ( int declarationEnd ) { } public void exitInterface ( int declarationEnd ) { } public void exitMethod ( int declarationEnd ) { } public char [ ] findSource ( IType type ) { } public char [ ] findSource ( IType type , IBinaryType info ) { } public SourceRange getNameRange ( IJavaElement element ) { } public char [ ] [ ] getMethodParameterNames ( IMethod method ) { } public SourceRange getSourceRange ( IJavaElement element ) { } protected IType getType ( String typeName ) { } protected IJavaElement [ ] getUnqualifiedMethodHandle ( IMethod method , boolean noDollar ) { } public ZipFile getZip ( ) throws CoreException { } public void mapSource ( IType type , char [ ] contents ) { } public ISourceRange mapSource ( IType type , char [ ] contents , IJavaElement searchedElement ) { } protected void setMethodParameterNames ( IMethod method , char [ ] [ ] parameterNames ) { if ( parameterNames == null ) { <START_BUG> parameterNames = new char [ 0 ] [ ] ; <END_BUG> } fParameterNames . put ( method , parameterNames ) ; } protected void setSourceRange ( IJavaElement element , SourceRange sourceRange , SourceRange nameRange ) { } public char [ ] [ ] getImports ( BinaryType type ) { } private boolean hasToRetrieveSourceRangesForLocalClass ( char [ ] eltName ) { } }

Fix:
parameterNames = CharOperation . NO_CHAR_CHAR ;