blob: 6bcbfade9fd2859f80f6d3a51e4f3a6484cd8e4c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2016 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.batch;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jdt.internal.compiler.env.IModule;
public class FileFinder {
/**
* Although the file finder is meant to be generic for any file name patters,
* at the moment it is used only for *.java files. This method handles the
* module-info.java in a special way by always placing it as the first element
* of the resulting array.
*/
public static String[] find(File f, String pattern) {
List<String> files = new ArrayList<>();
find0(f, pattern, files);
String[] result = new String[files.size()];
files.toArray(result);
return result;
}
private static void find0(File f, String pattern, List<String> collector) {
if (f.isDirectory()) {
String[] files = f.list();
if (files == null) return;
for (int i = 0, max = files.length; i < max; i++) {
File current = new File(f, files[i]);
if (current.isDirectory()) {
find0(current, pattern, collector);
} else {
String name = current.getName().toLowerCase();
if (name.endsWith(pattern)) {
// NOTE: This handles only the lower case name. Check with the spec about
// Naming of the module descriptor before making this code code insensitive.
if (name.endsWith(IModule.MODULE_INFO_JAVA)) {
collector.add(0, current.getAbsolutePath());
} else {
collector.add(current.getAbsolutePath());
}
}
}
}
}
}
}