src/java.base/share/classes/java/lang/module/Resolver.java
changeset 59133 580fb715b29d
parent 53563 a4b7ea85d668
equal deleted inserted replaced
59132:189f47d990b5 59133:580fb715b29d
    26 package java.lang.module;
    26 package java.lang.module;
    27 
    27 
    28 import java.io.PrintStream;
    28 import java.io.PrintStream;
    29 import java.lang.module.ModuleDescriptor.Provides;
    29 import java.lang.module.ModuleDescriptor.Provides;
    30 import java.lang.module.ModuleDescriptor.Requires.Modifier;
    30 import java.lang.module.ModuleDescriptor.Requires.Modifier;
    31 import java.net.URI;
       
    32 import java.util.ArrayDeque;
    31 import java.util.ArrayDeque;
    33 import java.util.ArrayList;
    32 import java.util.ArrayList;
    34 import java.util.Arrays;
    33 import java.util.Arrays;
    35 import java.util.Collection;
    34 import java.util.Collection;
    36 import java.util.Deque;
    35 import java.util.Deque;
    43 import java.util.Set;
    42 import java.util.Set;
    44 import java.util.stream.Collectors;
    43 import java.util.stream.Collectors;
    45 
    44 
    46 import jdk.internal.module.ModuleHashes;
    45 import jdk.internal.module.ModuleHashes;
    47 import jdk.internal.module.ModuleReferenceImpl;
    46 import jdk.internal.module.ModuleReferenceImpl;
       
    47 import jdk.internal.module.ModuleResolution;
    48 import jdk.internal.module.ModuleTarget;
    48 import jdk.internal.module.ModuleTarget;
    49 
    49 
    50 /**
    50 /**
    51  * The resolver used by {@link Configuration#resolve} and {@link
    51  * The resolver used by {@link Configuration#resolve} and {@link
    52  * Configuration#resolveAndBind}.
    52  * Configuration#resolveAndBind}.
   213     /**
   213     /**
   214      * Augments the set of resolved modules with modules induced by the
   214      * Augments the set of resolved modules with modules induced by the
   215      * service-use relation.
   215      * service-use relation.
   216      */
   216      */
   217     Resolver bind() {
   217     Resolver bind() {
   218 
   218         return bind(/*bindIncubatorModules*/true);
       
   219     }
       
   220 
       
   221     /**
       
   222      * Augments the set of resolved modules with modules induced by the
       
   223      * service-use relation.
       
   224      *
       
   225      * @param bindIncubatorModules true if incubator modules are candidates to
       
   226      *        add to the module graph
       
   227      */
       
   228     Resolver bind(boolean bindIncubatorModules) {
   219         // Scan the finders for all available service provider modules. As
   229         // Scan the finders for all available service provider modules. As
   220         // java.base uses services then the module finders will be scanned
   230         // java.base uses services then the module finders will be scanned
   221         // anyway.
   231         // anyway.
   222         Map<String, Set<ModuleReference>> availableProviders = new HashMap<>();
   232         Map<String, Set<ModuleReference>> availableProviders = new HashMap<>();
   223         for (ModuleReference mref : findAll()) {
   233         for (ModuleReference mref : findAll()) {
   224             ModuleDescriptor descriptor = mref.descriptor();
   234             ModuleDescriptor descriptor = mref.descriptor();
   225             if (!descriptor.provides().isEmpty()) {
   235 
   226 
   236             boolean candidate;
       
   237             if (!bindIncubatorModules && (mref instanceof ModuleReferenceImpl)) {
       
   238                 ModuleResolution mres = ((ModuleReferenceImpl) mref).moduleResolution();
       
   239                 candidate = (mres == null) || (mres.hasIncubatingWarning() == false);
       
   240             } else {
       
   241                 candidate = true;
       
   242             }
       
   243             if (candidate && !descriptor.provides().isEmpty()) {
   227                 for (Provides provides :  descriptor.provides()) {
   244                 for (Provides provides :  descriptor.provides()) {
   228                     String sn = provides.service();
   245                     String sn = provides.service();
   229 
   246 
   230                     // computeIfAbsent
   247                     // computeIfAbsent
   231                     Set<ModuleReference> providers = availableProviders.get(sn);
   248                     Set<ModuleReference> providers = availableProviders.get(sn);