41
41
*/
42
42
final class SourcesForRelease implements Closeable {
43
43
/**
44
- * The release for this set of sources. For this class, the
45
- * {@link SourceVersion#RELEASE_0} value means "no version".
44
+ * The release for this set of sources, or {@code null} if the user did not specified a release.
46
45
*
47
46
* @see SourceDirectory#release
48
47
*/
@@ -80,12 +79,12 @@ final class SourcesForRelease implements Closeable {
80
79
/**
81
80
* Creates an initially empty instance for the given Java release.
82
81
*
83
- * @param release the release for this set of sources, or {@link SourceVersion#RELEASE_0} for no version.
82
+ * @param release the release for this set of sources, or {@code null} if the user did not specified a release
84
83
*/
85
84
private SourcesForRelease (SourceVersion release ) {
86
85
this .release = release ;
87
- roots = new LinkedHashMap <>();
88
86
files = new ArrayList <>(256 );
87
+ roots = new LinkedHashMap <>();
89
88
moduleInfos = new LinkedHashMap <>();
90
89
}
91
90
@@ -103,12 +102,25 @@ private void add(SourceFile source) {
103
102
if (moduleName == null ) {
104
103
moduleName = "" ;
105
104
}
106
- roots . computeIfAbsent ( moduleName , ( key ) -> new LinkedHashSet <>()). add ( directory .root );
105
+ add ( roots , moduleName , directory .root );
107
106
directory .getModuleInfo ().ifPresent ((path ) -> moduleInfos .put (directory , null ));
108
107
}
109
108
files .add (source .file );
110
109
}
111
110
111
+ /**
112
+ * Adds the given directory in the given map.
113
+ *
114
+ * @param target the map where to add the specified directory
115
+ * @param moduleName name of the module, or an empty string if none
116
+ * @param directory the directory to add, or {@code null} if none
117
+ */
118
+ private static void add (Map <String , Set <Path >> target , String moduleName , Path directory ) {
119
+ if (directory != null ) {
120
+ target .computeIfAbsent (moduleName , (key ) -> new LinkedHashSet <>()).add (directory );
121
+ }
122
+ }
123
+
112
124
/**
113
125
* Groups all sources files first by Java release versions, then by module names.
114
126
* The elements in the returned collection are sorted in the order of {@link SourceVersion}
@@ -117,14 +129,14 @@ private void add(SourceFile source) {
117
129
* @param sources the sources to group.
118
130
* @return the given sources grouped by Java release versions and module names.
119
131
*/
120
- public static Collection <SourcesForRelease > groupByReleaseAndModule (List <SourceFile > sources ) {
132
+ static Collection <SourcesForRelease > groupByReleaseAndModule (List <SourceFile > sources ) {
121
133
var result = new EnumMap <SourceVersion , SourcesForRelease >(SourceVersion .class );
122
134
for (SourceFile source : sources ) {
123
- SourceVersion release = source .directory .release ;
124
- if ( release == null ) {
125
- release = SourceVersion . RELEASE_0 ; // No release sub-directory for the compiled classes.
126
- }
127
- result . computeIfAbsent ( release , SourcesForRelease :: new ) .add (source );
135
+ final SourceVersion release = source .directory .release ;
136
+ result . computeIfAbsent (
137
+ ( release != null ) ? release : SourceVersion . latest (),
138
+ ( key ) -> new SourcesForRelease ( release ))
139
+ .add (source );
128
140
}
129
141
return result .values ();
130
142
}
@@ -190,6 +202,7 @@ public void close() throws IOException {
190
202
*/
191
203
@ Override
192
204
public String toString () {
193
- return getClass ().getSimpleName () + '[' + release + ": " + files .size () + " files]" ;
205
+ return getClass ().getSimpleName () + '[' + (release != null ? release : "default" ) + ": " + files .size ()
206
+ + " files]" ;
194
207
}
195
208
}
0 commit comments