4141 */
4242final class SourcesForRelease implements Closeable {
4343 /**
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.
4645 *
4746 * @see SourceDirectory#release
4847 */
@@ -80,12 +79,12 @@ final class SourcesForRelease implements Closeable {
8079 /**
8180 * Creates an initially empty instance for the given Java release.
8281 *
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
8483 */
8584 private SourcesForRelease (SourceVersion release ) {
8685 this .release = release ;
87- roots = new LinkedHashMap <>();
8886 files = new ArrayList <>(256 );
87+ roots = new LinkedHashMap <>();
8988 moduleInfos = new LinkedHashMap <>();
9089 }
9190
@@ -103,12 +102,25 @@ private void add(SourceFile source) {
103102 if (moduleName == null ) {
104103 moduleName = "" ;
105104 }
106- roots . computeIfAbsent ( moduleName , ( key ) -> new LinkedHashSet <>()). add ( directory .root );
105+ add ( roots , moduleName , directory .root );
107106 directory .getModuleInfo ().ifPresent ((path ) -> moduleInfos .put (directory , null ));
108107 }
109108 files .add (source .file );
110109 }
111110
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+
112124 /**
113125 * Groups all sources files first by Java release versions, then by module names.
114126 * The elements in the returned collection are sorted in the order of {@link SourceVersion}
@@ -117,14 +129,14 @@ private void add(SourceFile source) {
117129 * @param sources the sources to group.
118130 * @return the given sources grouped by Java release versions and module names.
119131 */
120- public static Collection <SourcesForRelease > groupByReleaseAndModule (List <SourceFile > sources ) {
132+ static Collection <SourcesForRelease > groupByReleaseAndModule (List <SourceFile > sources ) {
121133 var result = new EnumMap <SourceVersion , SourcesForRelease >(SourceVersion .class );
122134 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 );
128140 }
129141 return result .values ();
130142 }
@@ -190,6 +202,7 @@ public void close() throws IOException {
190202 */
191203 @ Override
192204 public String toString () {
193- return getClass ().getSimpleName () + '[' + release + ": " + files .size () + " files]" ;
205+ return getClass ().getSimpleName () + '[' + (release != null ? release : "default" ) + ": " + files .size ()
206+ + " files]" ;
194207 }
195208}
0 commit comments