author | alundblad |
Mon, 29 Feb 2016 13:24:01 +0100 | |
changeset 36161 | a025c0619f25 |
parent 34991 | ff8be37d1164 |
child 36526 | 3b41f1c69604 |
permissions | -rw-r--r-- |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
1 |
/* |
31115
8d8e98052d5d
8054717: SJavac should track changes in the public apis of classpath classes!
alundblad
parents:
26275
diff
changeset
|
2 |
* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
4 |
* |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. Oracle designates this |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
8 |
* particular file as subject to the "Classpath" exception as provided |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
9 |
* by Oracle in the LICENSE file that accompanied this code. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
10 |
* |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
11 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
12 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
13 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
14 |
* version 2 for more details (a copy is included in the LICENSE file that |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
15 |
* accompanied this code). |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
16 |
* |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
17 |
* You should have received a copy of the GNU General Public License version |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
18 |
* 2 along with this work; if not, write to the Free Software Foundation, |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
19 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
20 |
* |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
21 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
22 |
* or visit www.oracle.com if you need additional information or have any |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
23 |
* questions. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
24 |
*/ |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
25 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
26 |
package com.sun.tools.sjavac; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
27 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
28 |
import java.io.File; |
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
29 |
import java.io.IOException; |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
30 |
import java.nio.file.FileSystem; |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
31 |
import java.nio.file.FileVisitResult; |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
32 |
import java.nio.file.Files; |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
33 |
import java.nio.file.Path; |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
34 |
import java.nio.file.PathMatcher; |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
35 |
import java.nio.file.SimpleFileVisitor; |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
36 |
import java.nio.file.attribute.BasicFileAttributes; |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
37 |
import java.util.Set; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
38 |
import java.util.Collections; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
39 |
import java.util.List; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
40 |
import java.util.ArrayList; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
41 |
import java.util.Map; |
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
42 |
import java.util.regex.PatternSyntaxException; |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
43 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
44 |
/** A Source object maintains information about a source file. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
45 |
* For example which package it belongs to and kind of source it is. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
46 |
* The class also knows how to find source files (scanRoot) given include/exclude |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
47 |
* patterns and a root. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
48 |
* |
26098
32588700060b
8048457: Sjavac should not use portfiles, sockets, etc if background=false
alundblad
parents:
24295
diff
changeset
|
49 |
* <p><b>This is NOT part of any supported API. |
32588700060b
8048457: Sjavac should not use portfiles, sockets, etc if background=false
alundblad
parents:
24295
diff
changeset
|
50 |
* If you write code that depends on this, you do so at your own risk. |
32588700060b
8048457: Sjavac should not use portfiles, sockets, etc if background=false
alundblad
parents:
24295
diff
changeset
|
51 |
* This code and its internal interfaces are subject to change or |
32588700060b
8048457: Sjavac should not use portfiles, sockets, etc if background=false
alundblad
parents:
24295
diff
changeset
|
52 |
* deletion without notice.</b> |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
53 |
*/ |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
54 |
public class Source implements Comparable<Source> { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
55 |
// The package the source belongs to. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
56 |
private Package pkg; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
57 |
// Name of this source file, relative its source root. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
58 |
// For example: java/lang/Object.java |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
59 |
// Or if the source file is inside a module: |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
60 |
// jdk.base/java/lang/Object.java |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
61 |
private String name; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
62 |
// What kind of file is this. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
63 |
private String suffix; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
64 |
// When this source file was last_modified |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
65 |
private long lastModified; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
66 |
// The source File. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
67 |
private File file; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
68 |
// If the source is generated. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
69 |
private boolean isGenerated; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
70 |
// If the source is only linked to, not compiled. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
71 |
private boolean linkedOnly; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
72 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
73 |
@Override |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
74 |
public boolean equals(Object o) { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
75 |
return (o instanceof Source) && name.equals(((Source)o).name); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
76 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
77 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
78 |
@Override |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
79 |
public int compareTo(Source o) { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
80 |
return name.compareTo(o.name); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
81 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
82 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
83 |
@Override |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
84 |
public int hashCode() { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
85 |
return name.hashCode(); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
86 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
87 |
|
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
88 |
public Source(Module m, String n, File f) { |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
89 |
name = n; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
90 |
int dp = n.lastIndexOf("."); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
91 |
if (dp != -1) { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
92 |
suffix = n.substring(dp); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
93 |
} else { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
94 |
suffix = ""; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
95 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
96 |
file = f; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
97 |
lastModified = f.lastModified(); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
98 |
linkedOnly = false; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
99 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
100 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
101 |
public Source(Package p, String n, long lm) { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
102 |
pkg = p; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
103 |
name = n; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
104 |
int dp = n.lastIndexOf("."); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
105 |
if (dp != -1) { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
106 |
suffix = n.substring(dp); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
107 |
} else { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
108 |
suffix = ""; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
109 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
110 |
file = null; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
111 |
lastModified = lm; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
112 |
linkedOnly = false; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
113 |
int ls = n.lastIndexOf('/'); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
114 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
115 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
116 |
public String name() { return name; } |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
117 |
public String suffix() { return suffix; } |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
118 |
public Package pkg() { return pkg; } |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
119 |
public File file() { return file; } |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
120 |
public long lastModified() { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
121 |
return lastModified; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
122 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
123 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
124 |
public void setPackage(Package p) { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
125 |
pkg = p; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
126 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
127 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
128 |
public void markAsGenerated() { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
129 |
isGenerated = true; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
130 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
131 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
132 |
public boolean isGenerated() { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
133 |
return isGenerated; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
134 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
135 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
136 |
public void markAsLinkedOnly() { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
137 |
linkedOnly = true; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
138 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
139 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
140 |
public boolean isLinkedOnly() { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
141 |
return linkedOnly; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
142 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
143 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
144 |
private void save(StringBuilder b) { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
145 |
String CL = linkedOnly?"L":"C"; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
146 |
String GS = isGenerated?"G":"S"; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
147 |
b.append(GS+" "+CL+" "+name+" "+file.lastModified()+"\n"); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
148 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
149 |
// Parse a line that looks like this: |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
150 |
// S C /code/alfa/A.java 1357631228000 |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
151 |
static public Source load(Package lastPackage, String l, boolean isGenerated) { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
152 |
int sp = l.indexOf(' ',4); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
153 |
if (sp == -1) return null; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
154 |
String name = l.substring(4,sp); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
155 |
long last_modified = Long.parseLong(l.substring(sp+1)); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
156 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
157 |
boolean isLinkedOnly = false; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
158 |
if (l.charAt(2) == 'L') { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
159 |
isLinkedOnly = true; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
160 |
} else if (l.charAt(2) == 'C') { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
161 |
isLinkedOnly = false; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
162 |
} else return null; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
163 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
164 |
Source s = new Source(lastPackage, name, last_modified); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
165 |
s.file = new File(name); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
166 |
if (isGenerated) s.markAsGenerated(); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
167 |
if (isLinkedOnly) s.markAsLinkedOnly(); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
168 |
return s; |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
169 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
170 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
171 |
public static void saveSources(Map<String,Source> sources, StringBuilder b) { |
22163 | 172 |
List<String> sorted_sources = new ArrayList<>(); |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
173 |
for (String key : sources.keySet()) { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
174 |
sorted_sources.add(key); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
175 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
176 |
Collections.sort(sorted_sources); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
177 |
for (String key : sorted_sources) { |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
178 |
Source s = sources.get(key); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
179 |
s.save(b); |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
180 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
181 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
182 |
|
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
183 |
/** |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
184 |
* Recurse into the directory root and find all files matchine the excl/incl/exclfiles/inclfiles rules. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
185 |
* Detects the existence of module-info.java files and presumes that the directory it resides in |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
186 |
* is the name of the current module. |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
187 |
*/ |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
188 |
static public void scanRoot(File root, |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
189 |
Set<String> suffixes, |
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
190 |
List<String> excludes, |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
191 |
List<String> includes, |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
192 |
Map<String,Source> foundFiles, |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
193 |
Map<String,Module> foundModules, |
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
194 |
final Module currentModule, |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
195 |
boolean permitSourcesWithoutPackage, |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
196 |
boolean inGensrc, |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
197 |
boolean inLinksrc) |
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
198 |
throws IOException, ProblemException { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
199 |
|
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
200 |
if (root == null) |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
201 |
return; |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
202 |
|
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
203 |
FileSystem fs = root.toPath().getFileSystem(); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
204 |
|
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
205 |
if (includes.isEmpty()) { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
206 |
includes = Collections.singletonList("**"); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
207 |
} |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
208 |
|
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
209 |
List<PathMatcher> includeMatchers = createPathMatchers(fs, includes); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
210 |
List<PathMatcher> excludeMatchers = createPathMatchers(fs, excludes); |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
211 |
|
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
212 |
Files.walkFileTree(root.toPath(), new SimpleFileVisitor<Path>() { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
213 |
@Override |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
214 |
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
215 |
|
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
216 |
Path relToRoot = root.toPath().relativize(file); |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
217 |
|
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
218 |
if (includeMatchers.stream().anyMatch(im -> im.matches(relToRoot)) |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
219 |
&& excludeMatchers.stream().noneMatch(em -> em.matches(relToRoot)) |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
220 |
&& suffixes.contains(Util.fileSuffix(file))) { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
221 |
|
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
222 |
// TODO: Test this. |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
223 |
Source existing = foundFiles.get(file); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
224 |
if (existing != null) { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
225 |
throw new IOException("You have already added the file "+file+" from "+existing.file().getPath()); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
226 |
} |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
227 |
existing = currentModule.lookupSource(file.toString()); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
228 |
if (existing != null) { |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
229 |
|
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
230 |
// Oups, the source is already added, could be ok, could be not, lets check. |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
231 |
if (inLinksrc) { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
232 |
// So we are collecting sources for linking only. |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
233 |
if (existing.isLinkedOnly()) { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
234 |
// Ouch, this one is also for linking only. Bad. |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
235 |
throw new IOException("You have already added the link only file " + file + " from " + existing.file().getPath()); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
236 |
} |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
237 |
// Ok, the existing source is to be compiled. Thus this link only is redundant |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
238 |
// since all compiled are also linked to. Continue to the next source. |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
239 |
// But we need to add the source, so that it will be visible to linking, |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
240 |
// if not the multi core compile will fail because a JavaCompiler cannot |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
241 |
// find the necessary dependencies for its part of the source. |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
242 |
foundFiles.put(file.toString(), existing); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
243 |
} else { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
244 |
// We are looking for sources to compile, if we find an existing to be compiled |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
245 |
// source with the same name, it is an internal error, since we must |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
246 |
// find the sources to be compiled before we find the sources to be linked to. |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
247 |
throw new IOException("Internal error: Double add of file " + file + " from " + existing.file().getPath()); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
248 |
} |
24067
76e7b6bbbd85
8035063: Option handling in sjavac needs to be rewritten
alundblad
parents:
22449
diff
changeset
|
249 |
|
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
250 |
} else { |
24067
76e7b6bbbd85
8035063: Option handling in sjavac needs to be rewritten
alundblad
parents:
22449
diff
changeset
|
251 |
|
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
252 |
////////////////////////////////////////////////////////////// |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
253 |
// Add source |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
254 |
Source s = new Source(currentModule, file.toString(), file.toFile()); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
255 |
if (inGensrc) { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
256 |
s.markAsGenerated(); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
257 |
} |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
258 |
if (inLinksrc) { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
259 |
s.markAsLinkedOnly(); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
260 |
} |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
261 |
String pkg = packageOfJavaFile(root.toPath(), file); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
262 |
pkg = currentModule.name() + ":" + pkg; |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
263 |
foundFiles.put(file.toString(), s); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
264 |
currentModule.addSource(pkg, s); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
265 |
////////////////////////////////////////////////////////////// |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
266 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
267 |
} |
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
268 |
|
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
269 |
return FileVisitResult.CONTINUE; |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
270 |
} |
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
271 |
}); |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
272 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
273 |
|
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
274 |
private static List<PathMatcher> createPathMatchers(FileSystem fs, List<String> patterns) { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
275 |
List<PathMatcher> matchers = new ArrayList<>(); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
276 |
for (String pattern : patterns) { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
277 |
try { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
278 |
matchers.add(fs.getPathMatcher("glob:" + pattern)); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
279 |
} catch (PatternSyntaxException e) { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
280 |
Log.error("Invalid pattern: " + pattern); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
281 |
throw e; |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
282 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
283 |
} |
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
284 |
return matchers; |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
285 |
} |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
286 |
|
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
287 |
private static String packageOfJavaFile(Path sourceRoot, Path javaFile) { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
288 |
Path javaFileDir = javaFile.getParent(); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
289 |
Path packageDir = sourceRoot.relativize(javaFileDir); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
290 |
List<String> separateDirs = new ArrayList<>(); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
291 |
for (Path pathElement : packageDir) { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
292 |
separateDirs.add(pathElement.getFileName().toString()); |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
293 |
} |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
294 |
return String.join(".", separateDirs); |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
295 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
296 |
|
34991
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
297 |
@Override |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
298 |
public String toString() { |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
299 |
return String.format("%s[pkg: %s, name: %s, suffix: %s, file: %s, isGenerated: %b, linkedOnly: %b]", |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
300 |
getClass().getSimpleName(), |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
301 |
pkg, |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
302 |
name, |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
303 |
suffix, |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
304 |
file, |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
305 |
isGenerated, |
ff8be37d1164
8144226: Sjavac's handling of include/exclude patterns is buggy, redundant and inconsistent
alundblad
parents:
31115
diff
changeset
|
306 |
linkedOnly); |
15368
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
307 |
} |
2577ddb7e710
8004658: Add internal smart javac wrapper to solve JEP 139
ohrstrom
parents:
diff
changeset
|
308 |
} |