Mercurial > hg > truffle
annotate src/share/tools/ProjectCreator/FileTreeCreatorVC10.java @ 14083:1b84e499127b
Wrap access to ThreadPoolExecutor to avoid ConcurrentModificationExceptions
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Wed, 05 Mar 2014 16:22:42 -0800 |
parents | 3cce976666d9 |
children |
rev | line source |
---|---|
12014
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
1 /* |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
4 * |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
7 * published by the Free Software Foundation. |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
8 * |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
13 * accompanied this code). |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
14 * |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
18 * |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
21 * questions. |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
22 * |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
23 */ |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
24 |
6801 | 25 import static java.nio.file.FileVisitResult.CONTINUE; |
26 | |
27 import java.io.IOException; | |
28 import java.nio.file.FileSystems; | |
29 import java.nio.file.FileVisitResult; | |
30 import java.nio.file.Files; | |
31 import java.nio.file.Path; | |
32 import java.nio.file.attribute.BasicFileAttributes; | |
33 import java.util.Stack; | |
34 import java.util.Vector; | |
35 | |
36 public class FileTreeCreatorVC10 extends FileTreeCreator { | |
37 | |
38 public FileTreeCreatorVC10(Path startDir, Vector<BuildConfig> allConfigs, WinGammaPlatformVC10 wg) { | |
39 super(startDir, allConfigs, wg); | |
40 } | |
41 | |
42 @Override | |
43 public FileVisitResult visitFile(Path file, BasicFileAttributes attr) { | |
44 DirAttributes currentFileAttr = attributes.peek().clone(); | |
45 boolean usePch = false; | |
46 boolean disablePch = false; | |
47 boolean useIgnore = false; | |
12014
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
48 boolean isAltSrc = false; // only needed as a debugging crumb |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
49 boolean isReplacedByAltSrc = false; |
6801 | 50 String fileName = file.getFileName().toString(); |
51 | |
52 // TODO hideFile | |
53 | |
54 // usePch applies to all configs for a file. | |
55 if (fileName.equals(BuildConfig.getFieldString(null, "UseToGeneratePch"))) { | |
56 usePch = true; | |
57 } | |
58 | |
12014
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
59 String fileLoc = vcProjLocation.relativize(file).toString(); |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
60 |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
61 // isAltSrc and isReplacedByAltSrc applies to all configs for a file |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
62 if (BuildConfig.matchesRelativeAltSrcInclude( |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
63 file.toAbsolutePath().toString())) { |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
64 // current file is an alternate source file so track it |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
65 isAltSrc = true; |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
66 BuildConfig.trackRelativeAltSrcFile( |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
67 file.toAbsolutePath().toString()); |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
68 } else if (BuildConfig.matchesRelativeAltSrcFile( |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
69 file.toAbsolutePath().toString())) { |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
70 // current file is a regular file that matches an alternate |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
71 // source file so yack about replacing the regular file |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
72 isReplacedByAltSrc = true; |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
73 System.out.println("INFO: alternate source file '" + |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
74 BuildConfig.getMatchingRelativeAltSrcFile( |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
75 file.toAbsolutePath().toString()) + |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
76 "' replaces '" + fileLoc + "'"); |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
77 } |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
78 |
6801 | 79 for (BuildConfig cfg : allConfigs) { |
80 if (cfg.lookupHashFieldInContext("IgnoreFile", fileName) != null) { | |
81 useIgnore = true; | |
82 currentFileAttr.setIgnore(cfg); | |
83 } else if (cfg.matchesIgnoredPath(file.toAbsolutePath().toString())) { | |
84 useIgnore = true; | |
85 currentFileAttr.setIgnore(cfg); | |
86 } | |
87 | |
88 if (cfg.lookupHashFieldInContext("DisablePch", fileName) != null) { | |
89 disablePch = true; | |
90 currentFileAttr.setDisablePch(cfg); | |
91 } | |
92 | |
93 Vector<String> rv = new Vector<String>(); | |
94 cfg.collectRelevantVectors(rv, "AdditionalFile"); | |
95 for(String addFile : rv) { | |
96 if (addFile.equals(fileName)) { | |
97 // supress any ignore | |
98 // TODO - may need some adjustments | |
8266
482037339440
ProjectCreator: compare relative path against flavour.
Andreas Woess <andreas.woess@jku.at>
parents:
6801
diff
changeset
|
99 String relativePath = startDir.toUri().relativize(file.toUri()).getPath(); |
482037339440
ProjectCreator: compare relative path against flavour.
Andreas Woess <andreas.woess@jku.at>
parents:
6801
diff
changeset
|
100 if (relativePath.contains(cfg.get("Flavour"))) { |
6801 | 101 currentFileAttr.removeFromIgnored(cfg); |
102 } | |
103 } | |
104 } | |
105 } | |
106 | |
12021 | 107 String tagName = wg10.getFileTagFromSuffix(fileName); |
6801 | 108 |
12014
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
109 if (!useIgnore && !disablePch && !usePch && !isReplacedByAltSrc) { |
6801 | 110 wg.tag(tagName, new String[] { "Include", fileLoc}); |
111 } else { | |
112 wg.startTag( | |
113 tagName, | |
114 new String[] { "Include", fileLoc}); | |
115 | |
116 for (BuildConfig cfg : allConfigs) { | |
117 boolean ignore = currentFileAttr.hasIgnore(cfg); | |
118 if (ignore) { | |
119 wg.tagData("ExcludedFromBuild", "true", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'"); | |
120 } | |
121 if (usePch) { | |
122 wg.tagData("PrecompiledHeader", "Create", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'"); | |
123 } | |
124 if (disablePch) { | |
125 wg.tag("PrecompiledHeader", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'"); | |
126 } | |
12014
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
127 if (isReplacedByAltSrc) { |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
128 wg.tagData("ExcludedFromBuild", "true", "Condition", |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
129 "'$(Configuration)|$(Platform)'=='" + |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
130 cfg.get("Name") + "'"); |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
131 } |
6801 | 132 } |
133 wg.endTag(); | |
134 } | |
135 | |
136 String filter = startDir.relativize(file.getParent().toAbsolutePath()).toString(); | |
12021 | 137 wg10.addFilterDependency(fileLoc, filter); |
6801 | 138 |
139 return CONTINUE; | |
140 } | |
141 | |
142 @Override | |
143 public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attrs) | |
144 throws IOException { | |
145 Boolean hide = false; | |
146 // TODO remove attrs, if path is matched in this dir, then it is too in every subdir. | |
147 // And we will check anyway | |
148 DirAttributes newAttr = attributes.peek().clone(); | |
149 | |
150 // check per config ignorePaths! | |
151 for (BuildConfig cfg : allConfigs) { | |
152 if (cfg.matchesIgnoredPath(path.toAbsolutePath().toString())) { | |
153 newAttr.setIgnore(cfg); | |
154 } | |
155 | |
156 // Hide is always on all configs. And additional files are never hiddden | |
157 if (cfg.matchesHidePath(path.toAbsolutePath().toString())) { | |
158 hide = true; | |
159 break; | |
160 } | |
161 } | |
162 | |
163 if (!hide) { | |
164 String name = startDir.relativize(path.toAbsolutePath()).toString(); | |
165 if (!"".equals(name)) { | |
12021 | 166 wg10.addFilter(name); |
6801 | 167 } |
168 | |
169 attributes.push(newAttr); | |
170 return super.preVisitDirectory(path, attrs); | |
171 } else { | |
172 return FileVisitResult.SKIP_SUBTREE; | |
173 } | |
174 } | |
175 | |
176 @Override | |
177 public FileVisitResult postVisitDirectory(Path dir, IOException exc) { | |
178 //end matching attributes set by ignorepath | |
179 attributes.pop(); | |
180 return CONTINUE; | |
181 } | |
182 | |
183 @Override | |
184 public FileVisitResult visitFileFailed(Path file, IOException exc) { | |
185 return CONTINUE; | |
186 } | |
187 | |
188 public void writeFileTree() throws IOException { | |
189 Files.walkFileTree(this.startDir, this); | |
190 } | |
12014
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
191 } |