Mercurial > hg > truffle
view src/share/tools/ProjectCreator/FileTreeCreatorVC7.java @ 8514:32e57c4e0e9d
-Fix compilation error
author | Christos Kotselidis <christos.kotselidis@oracle.com> |
---|---|
date | Mon, 25 Mar 2013 16:20:07 +0100 |
parents | 1a9b9cfcef41 |
children | bd0e82136b03 |
line wrap: on
line source
import static java.nio.file.FileVisitResult.CONTINUE; import java.io.IOException; import java.nio.file.FileSystems; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.BasicFileAttributes; import java.util.Stack; import java.util.Vector; public class FileTreeCreatorVC7 extends FileTreeCreator { public FileTreeCreatorVC7(Path startDir, Vector<BuildConfig> allConfigs, WinGammaPlatform wg) { super(startDir, allConfigs, null); } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attr) { DirAttributes currentFileAttr = attributes.peek().clone(); boolean usePch = false; boolean disablePch = false; boolean useIgnore = false; String fileName = file.getFileName().toString(); // usePch applies to all configs for a file. if (fileName.equals(BuildConfig.getFieldString(null, "UseToGeneratePch"))) { usePch = true; } for (BuildConfig cfg : allConfigs) { if (cfg.lookupHashFieldInContext("IgnoreFile", fileName) != null) { useIgnore = true; currentFileAttr.setIgnore(cfg); } else if (cfg.matchesIgnoredPath(file.toAbsolutePath().toString())) { useIgnore = true; currentFileAttr.setIgnore(cfg); } if (cfg.lookupHashFieldInContext("DisablePch", fileName) != null) { disablePch = true; currentFileAttr.setDisablePch(cfg); } Vector<String> rv = new Vector<String>(); cfg.collectRelevantVectors(rv, "AdditionalFile"); for(String addFile : rv) { if (addFile.equals(fileName)) { // supress any ignore currentFileAttr.removeFromIgnored(cfg); } } } if (!useIgnore && !disablePch && !usePch) { wg.tag("File", new String[] { "RelativePath", vcProjLocation.relativize(file).toString()}); } else { wg.startTag( "File", new String[] { "RelativePath", vcProjLocation.relativize(file).toString()}); for (BuildConfig cfg : allConfigs) { boolean ignore = currentFileAttr.hasIgnore(cfg); String [] fileConfAttr; if (ignore) { fileConfAttr = new String[] {"Name", cfg.get("Name"), "ExcludedFromBuild", "TRUE" }; } else { fileConfAttr = new String[] {"Name", cfg.get("Name")}; } if (!disablePch && !usePch && !ignore) { continue; } else if (!disablePch && !usePch) { wg.tag("FileConfiguration", fileConfAttr); } else { wg.startTag("FileConfiguration", fileConfAttr); if (usePch) { // usePch always applies to all configs, might not always be so. wg.tag("Tool", new String[] { "Name", "VCCLCompilerTool", "UsePrecompiledHeader", "1" }); assert(!disablePch); } if (disablePch) { if (currentFileAttr.hasDisablePch(cfg)) { wg.tag("Tool", new String[] { "Name", "VCCLCompilerTool", "UsePrecompiledHeader", "0" }); } assert(!usePch); } wg.endTag(); } } wg.endTag(); } return CONTINUE; } @Override public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attrs) throws IOException { Boolean hide = false; DirAttributes newAttr = attributes.peek().clone(); String rPath; if (path.toAbsolutePath().toString().equals(this.startDir.toAbsolutePath().toString())){ rPath = startDir.toString(); } else { rPath = path.getFileName().toString(); } // check per config ignorePaths! for (BuildConfig cfg : allConfigs) { if (cfg.matchesIgnoredPath(path.toAbsolutePath().toString())) { newAttr.setIgnore(cfg); } // Hide is always on all configs. And additional files are never hiddden if (cfg.matchesHidePath(path.toAbsolutePath().toString())) { hide = true; break; } } if (!hide) { wg.startTag("Filter", new String[] { "Name", rPath}); attributes.push(newAttr); return super.preVisitDirectory(path, attrs); } else { return FileVisitResult.SKIP_SUBTREE; } } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) { //end matching attributes set by ignorepath wg.endTag(); attributes.pop(); return CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) { return CONTINUE; } public void writeFileTree() throws IOException { Files.walkFileTree(this.startDir, this); } }