org.eclipse.jdt.internal.compiler.batch.FileFinder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ecj Show documentation
Show all versions of ecj Show documentation
Eclipse Compiler for Java(TM)
/*******************************************************************************
* 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 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 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());
}
}
}
}
}
}
}