hotspot/src/share/tools/ProjectCreator/FileTreeCreatorVC7.java
author mikael
Tue, 09 Oct 2012 10:09:34 -0700
changeset 13963 e5b53c306fb5
parent 13892 9ba13acea673
child 19277 8952a5e25673
permissions -rw-r--r--
7197424: update copyright year to match last edit in jdk8 hotspot repository Summary: Update copyright year to 2012 for relevant files Reviewed-by: dholmes, coleenp
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13892
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
     1
import static java.nio.file.FileVisitResult.CONTINUE;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
     2
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
     3
import java.io.IOException;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
     4
import java.nio.file.FileSystems;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
     5
import java.nio.file.FileVisitResult;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
     6
import java.nio.file.Files;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
     7
import java.nio.file.Path;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
     8
import java.nio.file.attribute.BasicFileAttributes;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
     9
import java.util.Stack;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    10
import java.util.Vector;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    11
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    12
public class FileTreeCreatorVC7 extends FileTreeCreator {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    13
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    14
      public FileTreeCreatorVC7(Path startDir, Vector<BuildConfig> allConfigs, WinGammaPlatform wg) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    15
         super(startDir, allConfigs, null);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    16
      }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    17
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    18
      @Override
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    19
      public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    20
         DirAttributes currentFileAttr = attributes.peek().clone();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    21
         boolean usePch = false;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    22
         boolean disablePch = false;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    23
         boolean useIgnore = false;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    24
         String fileName = file.getFileName().toString();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    25
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    26
         // usePch applies to all configs for a file.
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    27
         if (fileName.equals(BuildConfig.getFieldString(null, "UseToGeneratePch"))) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    28
            usePch = true;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    29
         }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    30
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    31
         for (BuildConfig cfg : allConfigs) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    32
            if (cfg.lookupHashFieldInContext("IgnoreFile", fileName) != null) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    33
               useIgnore = true;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    34
               currentFileAttr.setIgnore(cfg);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    35
            } else if (cfg.matchesIgnoredPath(file.toAbsolutePath().toString())) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    36
               useIgnore = true;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    37
               currentFileAttr.setIgnore(cfg);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    38
            }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    39
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    40
            if (cfg.lookupHashFieldInContext("DisablePch", fileName) != null) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    41
               disablePch = true;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    42
               currentFileAttr.setDisablePch(cfg);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    43
            }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    44
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    45
            Vector<String> rv = new Vector<String>();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    46
            cfg.collectRelevantVectors(rv, "AdditionalFile");
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    47
            for(String addFile : rv) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    48
               if (addFile.equals(fileName)) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    49
                  // supress any ignore
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    50
                  currentFileAttr.removeFromIgnored(cfg);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    51
               }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    52
            }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    53
         }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    54
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    55
         if (!useIgnore && !disablePch && !usePch) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    56
            wg.tag("File", new String[] { "RelativePath", vcProjLocation.relativize(file).toString()});
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    57
         } else {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    58
            wg.startTag(
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    59
                  "File",
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    60
                  new String[] { "RelativePath", vcProjLocation.relativize(file).toString()});
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    61
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    62
            for (BuildConfig cfg : allConfigs) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    63
               boolean ignore = currentFileAttr.hasIgnore(cfg);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    64
               String [] fileConfAttr;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    65
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    66
               if (ignore) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    67
                  fileConfAttr = new String[] {"Name", cfg.get("Name"), "ExcludedFromBuild", "TRUE" };
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    68
               } else {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    69
                  fileConfAttr = new String[] {"Name", cfg.get("Name")};
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    70
               }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    71
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    72
               if (!disablePch && !usePch && !ignore) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    73
                  continue;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    74
               } else if (!disablePch && !usePch) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    75
                  wg.tag("FileConfiguration", fileConfAttr);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    76
               } else {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    77
                  wg.startTag("FileConfiguration", fileConfAttr);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    78
                  if (usePch) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    79
                     // usePch always applies to all configs, might not always be so.
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    80
                     wg.tag("Tool", new String[] {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    81
                           "Name", "VCCLCompilerTool", "UsePrecompiledHeader",
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    82
                     "1" });
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    83
                     assert(!disablePch);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    84
                  }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    85
                  if (disablePch) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    86
                     if (currentFileAttr.hasDisablePch(cfg)) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    87
                        wg.tag("Tool", new String[] {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    88
                              "Name", "VCCLCompilerTool", "UsePrecompiledHeader",
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    89
                        "0" });
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    90
                     }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    91
                     assert(!usePch);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    92
                  }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    93
                  wg.endTag();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    94
               }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    95
            }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    96
            wg.endTag();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    97
         }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    98
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    99
         return CONTINUE;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   100
      }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   101
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   102
      @Override
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   103
      public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attrs)
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   104
            throws IOException {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   105
         Boolean hide = false;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   106
         DirAttributes newAttr = attributes.peek().clone();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   107
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   108
         String rPath;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   109
         if (path.toAbsolutePath().toString().equals(this.startDir.toAbsolutePath().toString())){
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   110
            rPath = startDir.toString();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   111
         } else {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   112
            rPath = path.getFileName().toString();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   113
         }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   114
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   115
         // check per config ignorePaths!
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   116
         for (BuildConfig cfg : allConfigs) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   117
            if (cfg.matchesIgnoredPath(path.toAbsolutePath().toString())) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   118
               newAttr.setIgnore(cfg);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   119
            }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   120
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   121
            // Hide is always on all configs. And additional files are never hiddden
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   122
            if (cfg.matchesHidePath(path.toAbsolutePath().toString())) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   123
               hide = true;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   124
               break;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   125
            }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   126
         }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   127
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   128
         if (!hide) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   129
            wg.startTag("Filter", new String[] {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   130
                  "Name", rPath});
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   131
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   132
            attributes.push(newAttr);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   133
            return super.preVisitDirectory(path, attrs);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   134
         } else {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   135
            return FileVisitResult.SKIP_SUBTREE;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   136
         }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   137
      }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   138
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   139
      @Override
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   140
      public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   141
         //end matching attributes set by ignorepath
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   142
         wg.endTag();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   143
         attributes.pop();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   144
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   145
         return CONTINUE;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   146
      }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   147
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   148
      @Override
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   149
      public FileVisitResult visitFileFailed(Path file, IOException exc) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   150
         return CONTINUE;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   151
      }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   152
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   153
      public void writeFileTree() throws IOException {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   154
         Files.walkFileTree(this.startDir, this);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   155
      }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   156
   }