aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Ulf Adams <ulfjack@google.com>2016-08-29 08:00:39 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-08-29 08:31:21 +0000
commit6bfd2c59a2391e1d34f8fb277a7c25027dcceab3 (patch)
treeec3304b2efe618f5d88660b6f390d7ad73341d20 /src/main/java
parent262013ef1d91e6d005e317b452cead2c1ec84d51 (diff)
Move QueryFunctions and InfoItems to ServerBuilder.
Initialize these from BlazeModule.serverInit instead of on-the-fly. -- MOS_MIGRATED_REVID=131564738
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java33
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java35
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/ServerBuilder.java30
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/InfoCommand.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java38
5 files changed, 81 insertions, 71 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
index 4a487607f3..7304a26c07 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
@@ -28,12 +28,8 @@ import com.google.devtools.build.lib.packages.NoSuchThingException;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.PackageFactory;
import com.google.devtools.build.lib.packages.RuleClassProvider;
-import com.google.devtools.build.lib.query2.AbstractBlazeQueryEnvironment;
-import com.google.devtools.build.lib.query2.QueryEnvironmentFactory;
-import com.google.devtools.build.lib.query2.engine.QueryEnvironment.QueryFunction;
import com.google.devtools.build.lib.query2.output.OutputFormatter;
import com.google.devtools.build.lib.rules.test.CoverageReportActionFactory;
-import com.google.devtools.build.lib.runtime.commands.InfoItem;
import com.google.devtools.build.lib.util.AbruptExitException;
import com.google.devtools.build.lib.util.Clock;
import com.google.devtools.build.lib.vfs.FileSystem;
@@ -227,26 +223,6 @@ public abstract class BlazeModule {
}
/**
- * Returns the additional information this module provides to "blaze info".
- *
- * <p>This method will be called at the beginning of each "blaze info" command (after
- * #beforeCommand).
- */
- public Iterable<InfoItem> getInfoItems() {
- return ImmutableList.of();
- }
-
- /**
- * Returns the list of query functions this module provides to "blaze query".
- *
- * <p>This method will be called at the beginning of each "blaze query" command (after
- * #beforeCommand).
- */
- public Iterable<QueryFunction> getQueryFunctions() {
- return ImmutableList.of();
- }
-
- /**
* Returns the action context providers the module contributes to Blaze, if any.
*
* <p>This method will be called at the beginning of the execution phase, e.g. of the
@@ -311,15 +287,6 @@ public abstract class BlazeModule {
}
/**
- * Returns a factory for creating {@link AbstractBlazeQueryEnvironment} objects.
- * If the module does not provide any {@link QueryEnvironmentFactory}, it should return null. Note
- * that only one factory per Bazel/Blaze runtime is allowed.
- */
- public QueryEnvironmentFactory getQueryEnvironmentFactory() {
- return null;
- }
-
- /**
* Optionally returns a provider for project files that can be used to bundle targets and
* command-line options.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index 808759628a..d8a07d2421 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -17,6 +17,7 @@ package com.google.devtools.build.lib.runtime;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.eventbus.SubscriberExceptionContext;
import com.google.common.eventbus.SubscriberExceptionHandler;
@@ -43,9 +44,11 @@ import com.google.devtools.build.lib.profiler.Profiler.ProfiledTaskKinds;
import com.google.devtools.build.lib.profiler.ProfilerTask;
import com.google.devtools.build.lib.query2.AbstractBlazeQueryEnvironment;
import com.google.devtools.build.lib.query2.QueryEnvironmentFactory;
+import com.google.devtools.build.lib.query2.engine.QueryEnvironment.QueryFunction;
import com.google.devtools.build.lib.query2.output.OutputFormatter;
import com.google.devtools.build.lib.rules.test.CoverageReportActionFactory;
import com.google.devtools.build.lib.runtime.BlazeCommandDispatcher.LockingMode;
+import com.google.devtools.build.lib.runtime.commands.InfoItem;
import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
import com.google.devtools.build.lib.server.AfUnixServer;
import com.google.devtools.build.lib.server.RPCServer;
@@ -121,6 +124,11 @@ public final class BlazeRuntime {
private final PackageFactory packageFactory;
private final ConfigurationFactory configurationFactory;
private final ConfiguredRuleClassProvider ruleClassProvider;
+ // For bazel info.
+ private final ImmutableMap<String, InfoItem> infoItems;
+ // For bazel query.
+ private final QueryEnvironmentFactory queryEnvironmentFactory;
+ private final ImmutableList<QueryFunction> queryFunctions;
private final AtomicInteger storedExitCode = new AtomicInteger();
@@ -131,7 +139,6 @@ public final class BlazeRuntime {
@Nullable
private final InvocationPolicy invocationPolicy;
private final String defaultsPackageContent;
- private final QueryEnvironmentFactory queryEnvironmentFactory;
private final SubscriberExceptionHandler eventBusExceptionHandler;
private final String productName;
@@ -140,12 +147,18 @@ public final class BlazeRuntime {
private BlazeRuntime(
QueryEnvironmentFactory queryEnvironmentFactory,
- PackageFactory pkgFactory, ConfiguredRuleClassProvider ruleClassProvider,
- ConfigurationFactory configurationFactory, Clock clock,
- OptionsProvider startupOptionsProvider, Iterable<BlazeModule> blazeModules,
+ ImmutableList<QueryFunction> queryFunctions,
+ PackageFactory pkgFactory,
+ ConfiguredRuleClassProvider ruleClassProvider,
+ ConfigurationFactory configurationFactory,
+ ImmutableMap<String, InfoItem> infoItems,
+ Clock clock,
+ OptionsProvider startupOptionsProvider,
+ Iterable<BlazeModule> blazeModules,
SubscriberExceptionHandler eventBusExceptionHandler,
ProjectFile.Provider projectFileProvider,
- InvocationPolicy invocationPolicy, Iterable<BlazeCommand> commands,
+ InvocationPolicy invocationPolicy,
+ Iterable<BlazeCommand> commands,
String productName) {
// Server state
this.blazeModules = blazeModules;
@@ -157,9 +170,11 @@ public final class BlazeRuntime {
this.ruleClassProvider = ruleClassProvider;
this.configurationFactory = configurationFactory;
+ this.infoItems = infoItems;
this.clock = clock;
this.startupOptionsProvider = startupOptionsProvider;
this.queryEnvironmentFactory = queryEnvironmentFactory;
+ this.queryFunctions = queryFunctions;
this.eventBusExceptionHandler = eventBusExceptionHandler;
this.defaultsPackageContent =
@@ -280,6 +295,10 @@ public final class BlazeRuntime {
return queryEnvironmentFactory;
}
+ public ImmutableList<QueryFunction> getQueryFunctions() {
+ return queryFunctions;
+ }
+
/**
* Returns the package factory.
*/
@@ -304,6 +323,10 @@ public final class BlazeRuntime {
return ruleClassProvider;
}
+ public ImmutableMap<String, InfoItem> getInfoItems() {
+ return infoItems;
+ }
+
public Iterable<BlazeModule> getBlazeModules() {
return blazeModules;
}
@@ -1100,9 +1123,11 @@ public final class BlazeRuntime {
return new BlazeRuntime(
serverBuilder.getQueryEnvironmentFactory(),
+ serverBuilder.getQueryFunctions(),
packageFactory,
ruleClassProvider,
configurationFactory,
+ serverBuilder.getInfoItems(),
clock,
startupOptionsProvider,
ImmutableList.copyOf(blazeModules),
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/ServerBuilder.java b/src/main/java/com/google/devtools/build/lib/runtime/ServerBuilder.java
index d99e22c352..13f56463d4 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/ServerBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/ServerBuilder.java
@@ -16,10 +16,13 @@ package com.google.devtools.build.lib.runtime;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.packages.AttributeContainer;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.query2.AbstractBlazeQueryEnvironment;
import com.google.devtools.build.lib.query2.QueryEnvironmentFactory;
+import com.google.devtools.build.lib.query2.engine.QueryEnvironment.QueryFunction;
+import com.google.devtools.build.lib.runtime.commands.InfoItem;
import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
import com.google.devtools.build.lib.util.Preconditions;
@@ -32,6 +35,8 @@ public final class ServerBuilder {
private final InvocationPolicy.Builder invocationPolicyBuilder = InvocationPolicy.newBuilder();
private Function<RuleClass, AttributeContainer> attributeContainerFactory;
private final ImmutableList.Builder<BlazeCommand> commands = ImmutableList.builder();
+ private final ImmutableMap.Builder<String, InfoItem> infoItems = ImmutableMap.builder();
+ private final ImmutableList.Builder<QueryFunction> queryFunctions = ImmutableList.builder();
@VisibleForTesting
public ServerBuilder() {}
@@ -52,6 +57,14 @@ public final class ServerBuilder {
: attributeContainerFactory;
}
+ ImmutableMap<String, InfoItem> getInfoItems() {
+ return infoItems.build();
+ }
+
+ ImmutableList<QueryFunction> getQueryFunctions() {
+ return queryFunctions.build();
+ }
+
@VisibleForTesting
public ImmutableList<BlazeCommand> getCommands() {
return commands.build();
@@ -111,4 +124,21 @@ public final class ServerBuilder {
this.commands.add(commands);
return this;
}
+
+ /**
+ * Adds the given items as info items to the info command. It is an error to add info items with
+ * the same name to the same builder, regardless of whether that happens within the same module or
+ * across modules.
+ */
+ public ServerBuilder addInfoItems(InfoItem... infoItems) {
+ for (InfoItem item : infoItems) {
+ this.infoItems.put(item.getName(), item);
+ }
+ return this;
+ }
+
+ public ServerBuilder addQueryFunctions(QueryFunction... functions) {
+ this.queryFunctions.add(functions);
+ return this;
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoCommand.java
index 3f0dc5ceae..0d7fb6abab 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoCommand.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.lib.runtime.commands;
import com.google.common.base.Supplier;
-import com.google.common.base.Verify;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.NoBuildEvent;
@@ -23,7 +22,6 @@ import com.google.devtools.build.lib.analysis.config.InvalidConfigurationExcepti
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.pkgcache.PackageCacheOptions;
import com.google.devtools.build.lib.runtime.BlazeCommand;
-import com.google.devtools.build.lib.runtime.BlazeModule;
import com.google.devtools.build.lib.runtime.BlazeRuntime;
import com.google.devtools.build.lib.runtime.Command;
import com.google.devtools.build.lib.runtime.CommandEnvironment;
@@ -234,15 +232,9 @@ public class InfoCommand implements BlazeCommand {
}
static Map<String, InfoItem> getInfoItemMap(
- CommandEnvironment env, OptionsProvider commandOptions) {
- Map<String, InfoItem> result = new TreeMap<>(); // order by key
- for (BlazeModule module : env.getRuntime().getBlazeModules()) {
- for (InfoItem item : module.getInfoItems()) {
- Verify.verify(!result.containsKey(item.getName()));
- result.put(item.getName(), item);
- }
- }
- result.putAll(getHardwiredInfoItemMap(commandOptions, env.getRuntime().getProductName()));
- return result;
+ CommandEnvironment env, OptionsProvider optionsProvider) {
+ Map<String, InfoItem> items = new TreeMap<>(env.getRuntime().getInfoItems());
+ items.putAll(getHardwiredInfoItemMap(optionsProvider, env.getRuntime().getProductName()));
+ return items;
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java
index 1e587d787a..9be185eea0 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java
@@ -26,7 +26,6 @@ import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.pkgcache.PackageCacheOptions;
import com.google.devtools.build.lib.query2.AbstractBlazeQueryEnvironment;
import com.google.devtools.build.lib.query2.engine.OutputFormatterCallback;
-import com.google.devtools.build.lib.query2.engine.QueryEnvironment.QueryFunction;
import com.google.devtools.build.lib.query2.engine.QueryEnvironment.Setting;
import com.google.devtools.build.lib.query2.engine.QueryEvalResult;
import com.google.devtools.build.lib.query2.engine.QueryException;
@@ -36,7 +35,6 @@ import com.google.devtools.build.lib.query2.output.OutputFormatter.StreamedForma
import com.google.devtools.build.lib.query2.output.QueryOptions;
import com.google.devtools.build.lib.query2.output.QueryOutputUtils;
import com.google.devtools.build.lib.runtime.BlazeCommand;
-import com.google.devtools.build.lib.runtime.BlazeModule;
import com.google.devtools.build.lib.runtime.BlazeRuntime;
import com.google.devtools.build.lib.runtime.Command;
import com.google.devtools.build.lib.runtime.CommandEnvironment;
@@ -272,25 +270,23 @@ public final class QueryCommand implements BlazeCommand {
public static AbstractBlazeQueryEnvironment<Target> newQueryEnvironment(CommandEnvironment env,
boolean keepGoing, boolean orderedResults, List<String> universeScope,
int loadingPhaseThreads, Set<Setting> settings) {
- ImmutableList.Builder<QueryFunction> functions = ImmutableList.builder();
- for (BlazeModule module : env.getRuntime().getBlazeModules()) {
- functions.addAll(module.getQueryFunctions());
- }
- return env.getRuntime().getQueryEnvironmentFactory().create(
- env.getPackageManager().newTransitiveLoader(),
- env.getSkyframeExecutor(),
- env.getPackageManager(),
- env.newTargetPatternEvaluator(),
- keepGoing,
- /*strictScope=*/ true,
- orderedResults,
- universeScope,
- loadingPhaseThreads,
- /*labelFilter=*/ ALL_LABELS,
- env.getReporter(),
- settings,
- functions.build(),
- env.getPackageManager().getPackagePath());
+ return env.getRuntime()
+ .getQueryEnvironmentFactory()
+ .create(
+ env.getPackageManager().newTransitiveLoader(),
+ env.getSkyframeExecutor(),
+ env.getPackageManager(),
+ env.newTargetPatternEvaluator(),
+ keepGoing,
+ /*strictScope=*/ true,
+ orderedResults,
+ universeScope,
+ loadingPhaseThreads,
+ /*labelFilter=*/ ALL_LABELS,
+ env.getReporter(),
+ settings,
+ env.getRuntime().getQueryFunctions(),
+ env.getPackageManager().getPackagePath());
}
private static class AggregateAllOutputFormatterCallback<T> extends OutputFormatterCallback<T> {