Damien Martin-Guillerez | f88f4d8 | 2015-09-25 13:56:55 +0000 | [diff] [blame] | 1 | // Copyright 2014 The Bazel Authors. All rights reserved. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 2 | // |
| 3 | // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | // you may not use this file except in compliance with the License. |
| 5 | // You may obtain a copy of the License at |
| 6 | // |
| 7 | // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 | // |
| 9 | // Unless required by applicable law or agreed to in writing, software |
| 10 | // distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | // See the License for the specific language governing permissions and |
| 13 | // limitations under the License. |
| 14 | package com.google.devtools.build.lib.runtime; |
| 15 | |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 16 | import com.google.common.collect.ImmutableList; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 17 | import com.google.devtools.build.lib.analysis.BlazeDirectories; |
| 18 | import com.google.devtools.build.lib.analysis.BlazeVersionInfo; |
| 19 | import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; |
Ulf Adams | 15a23b9 | 2016-08-09 11:46:00 +0000 | [diff] [blame] | 20 | import com.google.devtools.build.lib.analysis.ServerDirectories; |
ulfjack | ab21d18 | 2017-08-10 15:36:14 +0200 | [diff] [blame] | 21 | import com.google.devtools.build.lib.analysis.test.CoverageReportActionFactory; |
Ulf Adams | a0e3af4 | 2016-10-31 16:52:48 +0000 | [diff] [blame] | 22 | import com.google.devtools.build.lib.buildtool.BuildRequest; |
Lukacs Berki | 6e91eb9 | 2015-09-21 09:12:37 +0000 | [diff] [blame] | 23 | import com.google.devtools.build.lib.cmdline.Label; |
Ulf Adams | dba3c83 | 2016-12-21 16:50:02 +0000 | [diff] [blame] | 24 | import com.google.devtools.build.lib.exec.ExecutorBuilder; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 25 | import com.google.devtools.build.lib.packages.NoSuchThingException; |
Nathan Harmata | 42fb560 | 2016-05-25 20:32:08 +0000 | [diff] [blame] | 26 | import com.google.devtools.build.lib.packages.Package; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 27 | import com.google.devtools.build.lib.packages.PackageFactory; |
Nathan Harmata | caa000a | 2016-06-07 17:46:19 +0000 | [diff] [blame] | 28 | import com.google.devtools.build.lib.packages.RuleClassProvider; |
ulfjack | bc4eb27 | 2017-08-10 17:33:22 +0200 | [diff] [blame] | 29 | import com.google.devtools.build.lib.skyframe.OutputService; |
kchodorow | dfcd5da8 | 2017-04-19 18:58:50 +0200 | [diff] [blame] | 30 | import com.google.devtools.build.lib.skyframe.PrecomputedValue; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 31 | import com.google.devtools.build.lib.util.AbruptExitException; |
| 32 | import com.google.devtools.build.lib.util.Clock; |
Klaus Aehlig | d000e0c | 2017-04-28 13:35:05 +0200 | [diff] [blame] | 33 | import com.google.devtools.build.lib.util.io.OutErr; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 34 | import com.google.devtools.build.lib.vfs.FileSystem; |
| 35 | import com.google.devtools.build.lib.vfs.Path; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 36 | import com.google.devtools.common.options.OptionsBase; |
Ulf Adams | 33644a4 | 2016-08-10 11:32:41 +0000 | [diff] [blame] | 37 | import com.google.devtools.common.options.OptionsClassProvider; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 38 | import com.google.devtools.common.options.OptionsProvider; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 39 | import java.io.IOException; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 40 | import java.util.UUID; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 41 | import javax.annotation.Nullable; |
| 42 | |
| 43 | /** |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 44 | * A module Bazel can load at the beginning of its execution. Modules are supplied with extension |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 45 | * points to augment the functionality at specific, well-defined places. |
| 46 | * |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 47 | * <p>The constructors of individual Bazel modules should be empty. All work should be done in the |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 48 | * methods (e.g. {@link #blazeStartup}). |
| 49 | */ |
| 50 | public abstract class BlazeModule { |
| 51 | |
| 52 | /** |
| 53 | * Returns the extra startup options this module contributes. |
| 54 | * |
Ulf Adams | 124bd0a | 2016-08-10 13:10:46 +0000 | [diff] [blame] | 55 | * <p>This method will be called at the beginning of Blaze startup (before {@link #globalInit}). |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 56 | * The startup options need to be parsed very early in the process, which requires this to be |
| 57 | * separate from {@link #serverInit}. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 58 | */ |
| 59 | public Iterable<Class<? extends OptionsBase>> getStartupOptions() { |
| 60 | return ImmutableList.of(); |
| 61 | } |
| 62 | |
| 63 | /** |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 64 | * Called at the beginning of Bazel startup, before {@link #getFileSystem} and |
| 65 | * {@link #blazeStartup}. |
Ulf Adams | 124bd0a | 2016-08-10 13:10:46 +0000 | [diff] [blame] | 66 | * |
| 67 | * @param startupOptions the server's startup options |
| 68 | * |
| 69 | * @throws AbruptExitException to shut down the server immediately |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 70 | */ |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 71 | public void globalInit(OptionsProvider startupOptions) throws AbruptExitException { |
| 72 | } |
| 73 | |
| 74 | /** |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 75 | * Returns the file system implementation used by Bazel. It is an error if more than one module |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 76 | * returns a file system. If all return null, the default unix file system is used. |
| 77 | * |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 78 | * <p>This method will be called at the beginning of Bazel startup (in-between {@link #globalInit} |
| 79 | * and {@link #blazeStartup}). |
Ulf Adams | 124bd0a | 2016-08-10 13:10:46 +0000 | [diff] [blame] | 80 | * |
| 81 | * @param startupOptions the server's startup options |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 82 | */ |
Ulf Adams | 124bd0a | 2016-08-10 13:10:46 +0000 | [diff] [blame] | 83 | public FileSystem getFileSystem(OptionsProvider startupOptions) { |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 84 | return null; |
| 85 | } |
| 86 | |
| 87 | /** |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 88 | * Called when Bazel starts up after {@link #getStartupOptions}, {@link #globalInit}, and |
| 89 | * {@link #getFileSystem}. |
| 90 | * |
| 91 | * @param startupOptions the server's startup options |
| 92 | * @param versionInfo the Bazel version currently running |
| 93 | * @param instanceId the id of the current Bazel server |
| 94 | * @param directories the install directory |
| 95 | * @param clock the clock |
| 96 | * |
| 97 | * @throws AbruptExitException to shut down the server immediately |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 98 | */ |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 99 | public void blazeStartup(OptionsProvider startupOptions, |
Ulf Adams | 15a23b9 | 2016-08-09 11:46:00 +0000 | [diff] [blame] | 100 | BlazeVersionInfo versionInfo, UUID instanceId, ServerDirectories directories, |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 101 | Clock clock) throws AbruptExitException { |
| 102 | } |
| 103 | |
| 104 | /** |
Ulf Adams | 345e15e | 2016-07-07 13:27:28 +0000 | [diff] [blame] | 105 | * Called to initialize a new server ({@link BlazeRuntime}). Modules can override this method to |
| 106 | * affect how the server is configured. This is called after the startup options have been |
| 107 | * collected and parsed, and after the file system was setup. |
| 108 | * |
| 109 | * @param startupOptions the server startup options |
| 110 | * @param builder builder class that collects the server configuration |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 111 | * |
| 112 | * @throws AbruptExitException to shut down the server immediately |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 113 | */ |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 114 | public void serverInit(OptionsProvider startupOptions, ServerBuilder builder) |
| 115 | throws AbruptExitException { |
| 116 | } |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 117 | |
| 118 | /** |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 119 | * Sets up the configured rule class provider, which contains the built-in rule classes, aspects, |
| 120 | * configuration fragments, and other things; called during Blaze startup (after |
| 121 | * {@link #blazeStartup}). |
| 122 | * |
| 123 | * <p>Bazel only creates one provider per server, so it is not possible to have different contents |
| 124 | * for different workspaces. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 125 | * |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 126 | * @param builder the configured rule class provider builder |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 127 | */ |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 128 | public void initializeRuleClasses(ConfiguredRuleClassProvider.Builder builder) { |
| 129 | } |
| 130 | |
| 131 | /** |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 132 | * Called when Bazel initializes a new workspace; this is only called after {@link #serverInit}, |
| 133 | * and only if the server initialization was successful. Modules can override this method to |
| 134 | * affect how the workspace is configured. |
| 135 | * |
ulfjack | 94bee75 | 2017-06-13 19:13:35 +0200 | [diff] [blame] | 136 | * @param runtime the blaze runtime |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 137 | * @param directories the workspace directories |
| 138 | * @param builder the workspace builder |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 139 | */ |
ulfjack | 94bee75 | 2017-06-13 19:13:35 +0200 | [diff] [blame] | 140 | public void workspaceInit( |
| 141 | BlazeRuntime runtime, BlazeDirectories directories, WorkspaceBuilder builder) { |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 142 | } |
| 143 | |
| 144 | /** |
ulfjack | a6a9910 | 2017-06-13 17:15:45 +0200 | [diff] [blame] | 145 | * Called to notify modules that the given command is about to be executed. This allows capturing |
| 146 | * the {@link com.google.common.eventbus.EventBus}, {@link Command}, or {@link OptionsProvider}. |
| 147 | * |
| 148 | * @param env the command |
| 149 | * @throws AbruptExitException modules can throw this exception to abort the command |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 150 | */ |
ulfjack | a6a9910 | 2017-06-13 17:15:45 +0200 | [diff] [blame] | 151 | public void beforeCommand(CommandEnvironment env) throws AbruptExitException { |
Ulf Adams | 633f539 | 2015-09-15 11:13:08 +0000 | [diff] [blame] | 152 | } |
| 153 | |
| 154 | /** |
Klaus Aehlig | d000e0c | 2017-04-28 13:35:05 +0200 | [diff] [blame] | 155 | * Returns additional listeners to the console output stream. Called at the beginning of each |
| 156 | * command (after #beforeCommand). |
| 157 | */ |
| 158 | @SuppressWarnings("unused") |
| 159 | @Nullable |
| 160 | public OutErr getOutputListener() { |
| 161 | return null; |
| 162 | } |
| 163 | |
| 164 | /** |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 165 | * Returns the output service to be used. It is an error if more than one module returns an |
| 166 | * output service. |
| 167 | * |
| 168 | * <p>This method will be called at the beginning of each command (after #beforeCommand). |
| 169 | */ |
| 170 | @SuppressWarnings("unused") |
| 171 | public OutputService getOutputService() throws AbruptExitException { |
| 172 | return null; |
| 173 | } |
| 174 | |
| 175 | /** |
Ulf Adams | 755dd84 | 2016-06-22 13:43:38 +0000 | [diff] [blame] | 176 | * Returns extra options this module contributes to a specific command. Note that option |
| 177 | * inheritance applies: if this method returns a non-empty list, then the returned options are |
| 178 | * added to every command that depends on this command. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 179 | * |
Ulf Adams | 755dd84 | 2016-06-22 13:43:38 +0000 | [diff] [blame] | 180 | * <p>This method may be called at any time, and the returned value may be cached. Implementations |
| 181 | * must be thread-safe and never return different lists for the same command object. Typical |
| 182 | * implementations look like this: |
Philipp Wollermann | 49c20aa | 2016-08-25 12:59:52 +0000 | [diff] [blame] | 183 | * |
Ulf Adams | 755dd84 | 2016-06-22 13:43:38 +0000 | [diff] [blame] | 184 | * <pre> |
| 185 | * return "build".equals(command.name()) |
| 186 | * ? ImmutableList.<Class<? extends OptionsBase>>of(MyOptions.class) |
| 187 | * : ImmutableList.<Class<? extends OptionsBase>>of(); |
| 188 | * </pre> |
Philipp Wollermann | 49c20aa | 2016-08-25 12:59:52 +0000 | [diff] [blame] | 189 | * |
Ulf Adams | 755dd84 | 2016-06-22 13:43:38 +0000 | [diff] [blame] | 190 | * Note that this example adds options to all commands that inherit from the build command. |
| 191 | * |
| 192 | * <p>This method is also used to generate command-line documentation; in order to avoid |
| 193 | * duplicated options descriptions, this method should never return the same options class for two |
| 194 | * different commands if one of them inherits the other. |
| 195 | * |
| 196 | * <p>If you want to add options to all commands, override {@link #getCommonCommandOptions} |
| 197 | * instead. |
| 198 | * |
| 199 | * @param command the command |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 200 | */ |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 201 | public Iterable<Class<? extends OptionsBase>> getCommandOptions(Command command) { |
| 202 | return ImmutableList.of(); |
| 203 | } |
| 204 | |
| 205 | /** |
Ulf Adams | 755dd84 | 2016-06-22 13:43:38 +0000 | [diff] [blame] | 206 | * Returns extra options this module contributes to all commands. |
| 207 | */ |
| 208 | public Iterable<Class<? extends OptionsBase>> getCommonCommandOptions() { |
| 209 | return ImmutableList.of(); |
| 210 | } |
| 211 | |
| 212 | /** |
Ulf Adams | a0e3af4 | 2016-10-31 16:52:48 +0000 | [diff] [blame] | 213 | * Called when Bazel initializes the action execution subsystem. This is called once per build if |
| 214 | * action execution is enabled. Modules can override this method to affect how execution is |
| 215 | * performed. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 216 | * |
Ulf Adams | a0e3af4 | 2016-10-31 16:52:48 +0000 | [diff] [blame] | 217 | * @param env the command environment |
| 218 | * @param request the build request |
| 219 | * @param builder the builder to add action context providers and consumers to |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 220 | */ |
Ulf Adams | a0e3af4 | 2016-10-31 16:52:48 +0000 | [diff] [blame] | 221 | public void executorInit(CommandEnvironment env, BuildRequest request, ExecutorBuilder builder) { |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 222 | } |
| 223 | |
| 224 | /** |
| 225 | * Called after each command. |
| 226 | */ |
| 227 | public void afterCommand() { |
| 228 | } |
| 229 | |
| 230 | /** |
| 231 | * Called when Blaze shuts down. |
Julio Merino | d1619b75 | 2016-10-17 09:50:11 +0000 | [diff] [blame] | 232 | * |
| 233 | * <p>If you are also implementing {@link #shutdownOnCrash()}, consider putting the common |
| 234 | * shutdown code in the latter and calling that other hook from here. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 235 | */ |
| 236 | public void blazeShutdown() { |
| 237 | } |
| 238 | |
| 239 | /** |
Julio Merino | d1619b75 | 2016-10-17 09:50:11 +0000 | [diff] [blame] | 240 | * Called when Blaze shuts down due to a crash. |
| 241 | * |
| 242 | * <p>Modules may use this to flush pending state, but they must be careful to only do a minimal |
| 243 | * number of things. Keep in mind that we are crashing so who knows what state we are in. Modules |
| 244 | * rarely need to implement this. |
| 245 | */ |
| 246 | public void blazeShutdownOnCrash() {} |
| 247 | |
| 248 | /** |
Ulf Adams | 4b004af | 2015-09-16 10:22:26 +0000 | [diff] [blame] | 249 | * Perform module specific check of current command environment. |
Marian Lobur | 7beee71 | 2015-08-17 11:48:57 +0000 | [diff] [blame] | 250 | */ |
Ulf Adams | 4b004af | 2015-09-16 10:22:26 +0000 | [diff] [blame] | 251 | public void checkEnvironment(CommandEnvironment env) { |
Marian Lobur | 7beee71 | 2015-08-17 11:48:57 +0000 | [diff] [blame] | 252 | } |
| 253 | |
| 254 | /** |
Nathan Harmata | 42fb560 | 2016-05-25 20:32:08 +0000 | [diff] [blame] | 255 | * Returns a helper that the {@link PackageFactory} will use during package loading. If the module |
Nathan Harmata | caa000a | 2016-06-07 17:46:19 +0000 | [diff] [blame] | 256 | * does not provide any helper, it should return null. Note that only one helper per Bazel/Blaze |
Nathan Harmata | 42fb560 | 2016-05-25 20:32:08 +0000 | [diff] [blame] | 257 | * runtime is allowed. |
| 258 | */ |
Nathan Harmata | caa000a | 2016-06-07 17:46:19 +0000 | [diff] [blame] | 259 | public Package.Builder.Helper getPackageBuilderHelper(RuleClassProvider ruleClassProvider, |
| 260 | FileSystem fs) { |
Nathan Harmata | 42fb560 | 2016-05-25 20:32:08 +0000 | [diff] [blame] | 261 | return null; |
| 262 | } |
| 263 | |
| 264 | /** |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 265 | * Optionally returns a provider for project files that can be used to bundle targets and |
| 266 | * command-line options. |
| 267 | */ |
| 268 | @Nullable |
| 269 | public ProjectFile.Provider createProjectFileProvider() { |
| 270 | return null; |
| 271 | } |
| 272 | |
| 273 | /** |
Ulf Adams | 33644a4 | 2016-08-10 11:32:41 +0000 | [diff] [blame] | 274 | * Optionally returns a factory to create coverage report actions; this is called once per build, |
| 275 | * such that it can be affected by command options. |
| 276 | * |
| 277 | * <p>It is an error if multiple modules return non-null values. |
| 278 | * |
| 279 | * @param commandOptions the options for the current command |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 280 | */ |
| 281 | @Nullable |
Ulf Adams | 33644a4 | 2016-08-10 11:32:41 +0000 | [diff] [blame] | 282 | public CoverageReportActionFactory getCoverageReportFactory(OptionsClassProvider commandOptions) { |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 283 | return null; |
| 284 | } |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 285 | |
| 286 | /** |
| 287 | * Services provided for Blaze modules via BlazeRuntime. |
| 288 | */ |
| 289 | public interface ModuleEnvironment { |
| 290 | /** |
| 291 | * Gets a file from the depot based on its label and returns the {@link Path} where it can |
| 292 | * be found. |
| 293 | */ |
| 294 | Path getFileFromWorkspace(Label label) |
| 295 | throws NoSuchThingException, InterruptedException, IOException; |
| 296 | |
| 297 | /** |
Michael Staib | 6e5e8fb | 2016-10-04 21:26:37 +0000 | [diff] [blame] | 298 | * Exits Blaze as early as possible by sending an interrupt to the command's main thread. |
Ulf Adams | 5c54c1c | 2016-08-17 13:31:22 +0000 | [diff] [blame] | 299 | */ |
| 300 | void exit(AbruptExitException exception); |
| 301 | } |
kchodorow | dfcd5da8 | 2017-04-19 18:58:50 +0200 | [diff] [blame] | 302 | |
| 303 | public ImmutableList<PrecomputedValue.Injected> getPrecomputedValues() { |
| 304 | return ImmutableList.of(); |
| 305 | } |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 306 | } |