Пример #1
0
 /**
  * Returns the host configuration trimmed to the same fragments as the input configuration. If the
  * input is null, returns the top-level host configuration.
  *
  * <p>For static configurations, this unconditionally returns the (sole) top-level configuration.
  *
  * <p>This may only be called after {@link #setTopLevelHostConfiguration} has set the correct host
  * configuration at the top-level.
  */
 public BuildConfiguration getHostConfiguration(BuildConfiguration config) {
   if (config == null || !config.useDynamicConfigurations()) {
     return topLevelHostConfiguration;
   }
   // TODO(bazel-team): have the fragment classes be those required by the consuming target's
   // transitive closure. This isn't the same as the input configuration's fragment classes -
   // the latter may be a proper subset of the former.
   //
   // ConfigurationFactory.getConfiguration provides the reason why: if a declared required
   // fragment is evaluated and returns null, it never gets added to the configuration. So if we
   // use the configuration's fragments as the source of truth, that excludes required fragments
   // that never made it in.
   //
   // If we're just trimming an existing configuration, this is no big deal (if the original
   // configuration doesn't need the fragment, the trimmed one doesn't either). But this method
   // trims a host configuration to the same scope as a target configuration. Since their options
   // are different, the host instance may actually be able to produce the fragment. So it's
   // wrong and potentially dangerous to unilaterally exclude it.
   Set<Class<? extends BuildConfiguration.Fragment>> fragmentClasses = config.fragmentClasses();
   BuildConfiguration hostConfig = hostConfigurationCache.get(fragmentClasses);
   if (hostConfig != null) {
     return hostConfig;
   }
   BuildConfiguration trimmedConfig =
       topLevelHostConfiguration.clone(fragmentClasses, ruleClassProvider);
   hostConfigurationCache.put(fragmentClasses, trimmedConfig);
   return trimmedConfig;
 }
Пример #2
0
 /**
  * Returns the host configuration trimmed to the same fragments as the input configuration. If the
  * input is null, returns the top-level host configuration.
  *
  * <p>For static configurations, this unconditionally returns the (sole) top-level configuration.
  *
  * <p>This may only be called after {@link #setTopLevelHostConfiguration} has set the correct host
  * configuration at the top-level.
  */
 public BuildConfiguration getHostConfiguration(BuildConfiguration config) {
   if (config == null || !config.useDynamicConfigurations()) {
     return topLevelHostConfiguration;
   }
   Set<Class<? extends BuildConfiguration.Fragment>> fragmentClasses = config.fragmentClasses();
   BuildConfiguration hostConfig = hostConfigurationCache.get(fragmentClasses);
   if (hostConfig != null) {
     return hostConfig;
   }
   BuildConfiguration trimmedConfig =
       topLevelHostConfiguration.clone(fragmentClasses, ruleClassProvider);
   hostConfigurationCache.put(fragmentClasses, trimmedConfig);
   return trimmedConfig;
 }