package org.webpieces.compiler.impl;
import java.util.List;
import org.webpieces.util.file.VirtualFile;
public class FileLookup {
private List<VirtualFile> javaPath;
private CompileMetaMgr appClassMgr;
public FileLookup(CompileMetaMgr appClassMgr, List<VirtualFile> javaPath) {
this.appClassMgr = appClassMgr;
this.javaPath = javaPath;
}
// ~~ Utils
/**
* Retrieve the corresponding source file for a given class name.
* It handles innerClass too !
* @param name The fully qualified class name
* @return The virtualFile if found
*/
public VirtualFile getJava(String name) {
String fileName = name;
if (fileName.contains("$")) {
fileName = fileName.substring(0, fileName.indexOf("$"));
}
fileName = fileName.replace(".", "/") + ".java";
for (VirtualFile path : javaPath) {
VirtualFile javaFile = path.child(fileName);
if (javaFile.exists()) {
return javaFile;
}
}
return null;
}
// ~~~ Intern
void scanFilesWithFilter(String filterToPackage) {
for (VirtualFile virtualFile : javaPath) {
scanFilesWithFilter(virtualFile, filterToPackage);
}
}
void scanFilesWithFilter(VirtualFile path, String filterToPackage) {
for (VirtualFile virtualFile : path.list()) {
scanForJavaFiles("", virtualFile, filterToPackage);
}
}
void scanForJavaFiles(String packageName, VirtualFile current, String filterToPackage) {
if (!current.isDirectory()) {
if(filterToPackage != null && !packageName.startsWith(filterToPackage))
return;
else if (current.getName().endsWith(".java") && !current.getName().startsWith(".")) {
String classname = packageName + current.getName().substring(0, current.getName().length() - 5);
appClassMgr.getOrCreateApplicationClass(classname, current);
}
} else {
for (VirtualFile virtualFile : current.list()) {
scanForJavaFiles(packageName + current.getName() + ".", virtualFile, filterToPackage);
}
}
}
}