Buggy code:
public class JavaBuilder extends IncrementalProjectBuilder { IProject currentProject ; IJavaProject javaProject ; IWorkspaceRoot workspaceRoot ; ClasspathLocation [ ] classpath ; IContainer outputFolder ; IContainer [ ] sourceFolders ; SimpleLookupTable binaryResources ; State lastState ; BuildNotifier notifier ; char [ ] [ ] fileFilters ; String [ ] folderFilters ; public static final String JAVA_EXTENSION = "java" ; public static final String CLASS_EXTENSION = "class" ; public static final String JAR_EXTENSION = "jar" ; public static final String ZIP_EXTENSION = "zip" ; public static boolean DEBUG = false ; static final String ProblemMarkerTag = IJavaModelMarker . JAVA_MODEL_PROBLEM_MARKER ; static ArrayList builtProjects = null ; public static IMarker [ ] getProblemsFor ( IResource resource ) { } public static void removeProblemsFor ( IResource resource ) { } public static State readState ( DataInputStream in ) throws IOException { } public static void writeState ( Object state , DataOutputStream out ) throws IOException { } public JavaBuilder ( ) { } protected IProject [ ] build ( int kind , Map ignored , IProgressMonitor monitor ) throws CoreException { } private void buildAll ( ) { } private void buildDeltas ( SimpleLookupTable deltas ) { } private void cleanup ( ) { } private void clearLastState ( ) { } private void createFolder ( IContainer folder ) throws CoreException { } boolean filterResource ( IResource resource ) { } private SimpleLookupTable findDeltas ( ) { } private State getLastState ( IProject project ) { } private IProject [ ] getRequiredProjects ( boolean includeBinaryPrerequisites ) { } private boolean hasClasspathChanged ( ) { } private boolean hasOutputLocationChanged ( ) { } private void initializeBuilder ( ) throws CoreException { this . javaProject = JavaCore . create ( currentProject ) ; this . workspaceRoot = currentProject . getWorkspace ( ) . getRoot ( ) ; this . outputFolder = ( ( IContainer ) ( workspaceRoot . findMember ( javaProject . getOutputLocation ( ) ) ) ) ; if ( ( this . outputFolder ) == null ) { this . outputFolder = workspaceRoot . getFolder ( javaProject . getOutputLocation ( ) ) ; createFolder ( this . outputFolder ) ; } String projectName = this . currentProject . getName ( ) ; if ( ( ( JavaBuilder . builtProjects ) == null ) || ( JavaBuilder . builtProjects . contains ( projectName ) ) ) { org . eclipse . jdt . internal . core . JavaModel . flushExternalFileCache ( ) ; JavaBuilder . builtProjects = new ArrayList ( ) ; } JavaBuilder . builtProjects . add ( projectName ) ; ArrayList sourceList = new ArrayList ( ) ; this . binaryResources = new SimpleLookupTable ( 3 ) ; this . classpath = NameEnvironment . computeLocations ( workspaceRoot , javaProject , outputFolder . getLocation ( ) . toString ( ) , sourceList , binaryResources ) ; this . sourceFolders = new IContainer [ sourceList . size ( ) ] ; sourceList . toArray ( this . sourceFolders ) ; String filterSequence = JavaCore . getOption ( JavaCore . CORE_JAVA_BUILD_RESOURCE_COPY_FILTER ) ; <START_BUG> char [ ] [ ] filters = ( ( filterSequence != null ) && ( ( filterSequence . length ( ) ) > 0 ) ) ? CharOperation . splitOn ( ',' , filterSequence . toCharArray ( ) ) : null ; <END_BUG> if ( filters == null ) { this . fileFilters = null ; this . folderFilters = null ; } else { int fileCount = 0 ; int folderCount = 0 ; for ( int i = 0 , length = filters . length ; i < length ; i ++ ) { char [ ] f = filters [ i ] ; if ( ( f [ ( ( f . length ) - 1 ) ] ) == '//' ) folderCount ++ ; else fileCount ++ ; } this . fileFilters = new char [ fileCount ] [ ] ; this . folderFilters = new String [ folderCount ] ; for ( int i = 0 , length = filters . length ; i < length ; i ++ ) { char [ ] f = filters [ i ] ; if ( ( f [ ( ( f . length ) - 1 ) ] ) == '//' ) folderFilters [ ( -- folderCount ) ] = new String ( CharOperation . subarray ( f , 0 , ( ( f . length ) - 1 ) ) ) ; else fileFilters [ ( -- fileCount ) ] = f ; } } } private boolean isWorthBuilding ( ) throws CoreException { } private void recordNewState ( State state ) { } public String toString ( ) { } }

Fix:
char [ ] [ ] filters = ( ( filterSequence != null ) && ( ( filterSequence . length ( ) ) > 0 ) ) ? CharOperation . splitAndTrimOn ( ',' , filterSequence . toCharArray ( ) ) : null ;