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
/******************************************************************************* * 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.
/** * 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()); } } } } } } }