src/share/tools/ProjectCreator/FileTreeCreatorVC7.java

Thu, 29 Mar 2012 16:43:21 +0200

author
neliasso
date
Thu, 29 Mar 2012 16:43:21 +0200
changeset 4112
1a9b9cfcef41
child 5507
bd0e82136b03
permissions
-rw-r--r--

7163863: Updated projectcreator
Summary: Enable source browsing for all platform dependent code
Reviewed-by: brutisso, coleenp

     1 import static java.nio.file.FileVisitResult.CONTINUE;
     3 import java.io.IOException;
     4 import java.nio.file.FileSystems;
     5 import java.nio.file.FileVisitResult;
     6 import java.nio.file.Files;
     7 import java.nio.file.Path;
     8 import java.nio.file.attribute.BasicFileAttributes;
     9 import java.util.Stack;
    10 import java.util.Vector;
    12 public class FileTreeCreatorVC7 extends FileTreeCreator {
    14       public FileTreeCreatorVC7(Path startDir, Vector<BuildConfig> allConfigs, WinGammaPlatform wg) {
    15          super(startDir, allConfigs, null);
    16       }
    18       @Override
    19       public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
    20          DirAttributes currentFileAttr = attributes.peek().clone();
    21          boolean usePch = false;
    22          boolean disablePch = false;
    23          boolean useIgnore = false;
    24          String fileName = file.getFileName().toString();
    26          // usePch applies to all configs for a file.
    27          if (fileName.equals(BuildConfig.getFieldString(null, "UseToGeneratePch"))) {
    28             usePch = true;
    29          }
    31          for (BuildConfig cfg : allConfigs) {
    32             if (cfg.lookupHashFieldInContext("IgnoreFile", fileName) != null) {
    33                useIgnore = true;
    34                currentFileAttr.setIgnore(cfg);
    35             } else if (cfg.matchesIgnoredPath(file.toAbsolutePath().toString())) {
    36                useIgnore = true;
    37                currentFileAttr.setIgnore(cfg);
    38             }
    40             if (cfg.lookupHashFieldInContext("DisablePch", fileName) != null) {
    41                disablePch = true;
    42                currentFileAttr.setDisablePch(cfg);
    43             }
    45             Vector<String> rv = new Vector<String>();
    46             cfg.collectRelevantVectors(rv, "AdditionalFile");
    47             for(String addFile : rv) {
    48                if (addFile.equals(fileName)) {
    49                   // supress any ignore
    50                   currentFileAttr.removeFromIgnored(cfg);
    51                }
    52             }
    53          }
    55          if (!useIgnore && !disablePch && !usePch) {
    56             wg.tag("File", new String[] { "RelativePath", vcProjLocation.relativize(file).toString()});
    57          } else {
    58             wg.startTag(
    59                   "File",
    60                   new String[] { "RelativePath", vcProjLocation.relativize(file).toString()});
    62             for (BuildConfig cfg : allConfigs) {
    63                boolean ignore = currentFileAttr.hasIgnore(cfg);
    64                String [] fileConfAttr;
    66                if (ignore) {
    67                   fileConfAttr = new String[] {"Name", cfg.get("Name"), "ExcludedFromBuild", "TRUE" };
    68                } else {
    69                   fileConfAttr = new String[] {"Name", cfg.get("Name")};
    70                }
    72                if (!disablePch && !usePch && !ignore) {
    73                   continue;
    74                } else if (!disablePch && !usePch) {
    75                   wg.tag("FileConfiguration", fileConfAttr);
    76                } else {
    77                   wg.startTag("FileConfiguration", fileConfAttr);
    78                   if (usePch) {
    79                      // usePch always applies to all configs, might not always be so.
    80                      wg.tag("Tool", new String[] {
    81                            "Name", "VCCLCompilerTool", "UsePrecompiledHeader",
    82                      "1" });
    83                      assert(!disablePch);
    84                   }
    85                   if (disablePch) {
    86                      if (currentFileAttr.hasDisablePch(cfg)) {
    87                         wg.tag("Tool", new String[] {
    88                               "Name", "VCCLCompilerTool", "UsePrecompiledHeader",
    89                         "0" });
    90                      }
    91                      assert(!usePch);
    92                   }
    93                   wg.endTag();
    94                }
    95             }
    96             wg.endTag();
    97          }
    99          return CONTINUE;
   100       }
   102       @Override
   103       public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attrs)
   104             throws IOException {
   105          Boolean hide = false;
   106          DirAttributes newAttr = attributes.peek().clone();
   108          String rPath;
   109          if (path.toAbsolutePath().toString().equals(this.startDir.toAbsolutePath().toString())){
   110             rPath = startDir.toString();
   111          } else {
   112             rPath = path.getFileName().toString();
   113          }
   115          // check per config ignorePaths!
   116          for (BuildConfig cfg : allConfigs) {
   117             if (cfg.matchesIgnoredPath(path.toAbsolutePath().toString())) {
   118                newAttr.setIgnore(cfg);
   119             }
   121             // Hide is always on all configs. And additional files are never hiddden
   122             if (cfg.matchesHidePath(path.toAbsolutePath().toString())) {
   123                hide = true;
   124                break;
   125             }
   126          }
   128          if (!hide) {
   129             wg.startTag("Filter", new String[] {
   130                   "Name", rPath});
   132             attributes.push(newAttr);
   133             return super.preVisitDirectory(path, attrs);
   134          } else {
   135             return FileVisitResult.SKIP_SUBTREE;
   136          }
   137       }
   139       @Override
   140       public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
   141          //end matching attributes set by ignorepath
   142          wg.endTag();
   143          attributes.pop();
   145          return CONTINUE;
   146       }
   148       @Override
   149       public FileVisitResult visitFileFailed(Path file, IOException exc) {
   150          return CONTINUE;
   151       }
   153       public void writeFileTree() throws IOException {
   154          Files.walkFileTree(this.startDir, this);
   155       }
   156    }

mercurial