hotspot/src/share/tools/ProjectCreator/FileTreeCreatorVC10.java
author mikael
Tue, 09 Oct 2012 10:09:34 -0700
changeset 13963 e5b53c306fb5
parent 13892 9ba13acea673
child 19270 607d97508c60
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 FileTreeCreatorVC10 extends FileTreeCreator {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    13
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    14
      public FileTreeCreatorVC10(Path startDir, Vector<BuildConfig> allConfigs, WinGammaPlatformVC10 wg) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    15
         super(startDir, allConfigs, wg);
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
         // TODO hideFile
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    27
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    28
         // usePch applies to all configs for a file.
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    29
         if (fileName.equals(BuildConfig.getFieldString(null, "UseToGeneratePch"))) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    30
            usePch = true;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    31
         }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    32
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    33
         for (BuildConfig cfg : allConfigs) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    34
            if (cfg.lookupHashFieldInContext("IgnoreFile", fileName) != null) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    35
               useIgnore = true;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    36
               currentFileAttr.setIgnore(cfg);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    37
            } else if (cfg.matchesIgnoredPath(file.toAbsolutePath().toString())) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    38
               useIgnore = true;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    39
               currentFileAttr.setIgnore(cfg);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    40
            }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    41
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    42
            if (cfg.lookupHashFieldInContext("DisablePch", fileName) != null) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    43
               disablePch = true;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    44
               currentFileAttr.setDisablePch(cfg);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    45
            }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    46
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    47
            Vector<String> rv = new Vector<String>();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    48
            cfg.collectRelevantVectors(rv, "AdditionalFile");
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    49
            for(String addFile : rv) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    50
               if (addFile.equals(fileName)) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    51
                  // supress any ignore
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    52
                  // TODO - may need some adjustments
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    53
                  if (file.toAbsolutePath().toString().contains(cfg.get("Flavour"))) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    54
                     currentFileAttr.removeFromIgnored(cfg);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    55
                  }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    56
               }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    57
            }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    58
         }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    59
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    60
         String tagName = wg.getFileTagFromSuffix(fileName);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    61
         String fileLoc = vcProjLocation.relativize(file).toString();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    62
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    63
         if (!useIgnore && !disablePch && !usePch) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    64
            wg.tag(tagName, new String[] { "Include", fileLoc});
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    65
         } else {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    66
            wg.startTag(
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    67
                  tagName,
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    68
                  new String[] { "Include", fileLoc});
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    69
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    70
            for (BuildConfig cfg : allConfigs) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    71
               boolean ignore = currentFileAttr.hasIgnore(cfg);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    72
               if (ignore) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    73
                  wg.tagData("ExcludedFromBuild", "true", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'");
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    74
               }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    75
               if (usePch) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    76
                  wg.tagData("PrecompiledHeader", "Create", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'");
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    77
               }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    78
               if (disablePch) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    79
                  wg.tag("PrecompiledHeader", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'");
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    80
               }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    81
            }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    82
            wg.endTag();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    83
         }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    84
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    85
         String filter = startDir.relativize(file.getParent().toAbsolutePath()).toString();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    86
         wg.addFilterDependency(fileLoc, filter);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    87
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    88
         return CONTINUE;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    89
      }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    90
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    91
      @Override
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    92
      public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attrs)
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    93
            throws IOException {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    94
         Boolean hide = false;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    95
         // TODO remove attrs, if path is matched in this dir, then it is too in every subdir.
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    96
         // And we will check anyway
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    97
         DirAttributes newAttr = attributes.peek().clone();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    98
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
    99
         // check per config ignorePaths!
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   100
         for (BuildConfig cfg : allConfigs) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   101
            if (cfg.matchesIgnoredPath(path.toAbsolutePath().toString())) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   102
               newAttr.setIgnore(cfg);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   103
            }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   104
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   105
            // Hide is always on all configs. And additional files are never hiddden
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   106
            if (cfg.matchesHidePath(path.toAbsolutePath().toString())) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   107
               hide = true;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   108
               break;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   109
            }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   110
         }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   111
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   112
         if (!hide) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   113
            String name = startDir.relativize(path.toAbsolutePath()).toString();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   114
            if (!"".equals(name)) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   115
               wg.addFilter(name);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   116
            }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   117
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   118
            attributes.push(newAttr);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   119
            return super.preVisitDirectory(path, attrs);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   120
         } else {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   121
            return FileVisitResult.SKIP_SUBTREE;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   122
         }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   123
      }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   124
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   125
      @Override
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   126
      public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   127
         //end matching attributes set by ignorepath
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   128
         attributes.pop();
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   129
         return CONTINUE;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   130
      }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   131
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   132
      @Override
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   133
      public FileVisitResult visitFileFailed(Path file, IOException exc) {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   134
         return CONTINUE;
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   135
      }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   136
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   137
      public void writeFileTree() throws IOException {
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   138
         Files.walkFileTree(this.startDir, this);
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   139
      }
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   140
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   141
9ba13acea673 7163863: Updated projectcreator
neliasso
parents:
diff changeset
   142
   }