/*
* Copyright (c) 2006-2011 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.coverage.reporting.sourceFiles;
import java.io.*;
import java.util.*;
public final class InputFile
{
final String filePath;
final File sourceFile;
final BufferedReader input;
public InputFile(List<File> sourceDirs, String filePath) throws FileNotFoundException
{
this.filePath = filePath;
sourceFile = findSourceFile(sourceDirs, filePath);
input = sourceFile == null ? null : new BufferedReader(new FileReader(sourceFile));
}
private File findSourceFile(List<File> sourceDirs, String filePath)
{
int p = filePath.indexOf('/');
String topLevelPackage = p < 0 ? "" : filePath.substring(0, p);
for (File sourceDir : sourceDirs) {
File file = getSourceFile(sourceDir, topLevelPackage, filePath);
if (file != null) {
return file;
}
}
return null;
}
private File getSourceFile(File sourceDir, String topLevelPackage, String filePath)
{
File file = new File(sourceDir, filePath);
if (file.exists()) {
return file;
}
File[] subDirs = sourceDir.listFiles();
for (File subDir : subDirs) {
if (
subDir.isDirectory() && !subDir.isHidden() && !subDir.getName().equals(topLevelPackage)
) {
file = getSourceFile(subDir, topLevelPackage, filePath);
if (file != null) {
return file;
}
}
}
return null;
}
public boolean wasFileFound()
{
return sourceFile != null;
}
}