Delete Java `py_runtime` implementation.
It has been replaced by the builtins Starlark implementation.
Work towards #15897
PiperOrigin-RevId: 502641281
Change-Id: I8991638d9cb946c61819572b0b913943f999b9b7
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntime.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntime.java
deleted file mode 100644
index a01b384..0000000
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntime.java
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright 2017 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.rules.python;
-
-import com.google.common.base.Preconditions;
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException;
-import com.google.devtools.build.lib.analysis.ConfiguredTarget;
-import com.google.devtools.build.lib.analysis.FileProvider;
-import com.google.devtools.build.lib.analysis.FilesToRunProvider;
-import com.google.devtools.build.lib.analysis.PrerequisiteArtifacts;
-import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
-import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory;
-import com.google.devtools.build.lib.analysis.RuleContext;
-import com.google.devtools.build.lib.analysis.RunfilesProvider;
-import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
-import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.packages.Type;
-import com.google.devtools.build.lib.vfs.PathFragment;
-import javax.annotation.Nullable;
-
-/** Implementation for the {@code py_runtime} rule. */
-public final class PyRuntime implements RuleConfiguredTargetFactory {
-
- @Override
- @Nullable
- public ConfiguredTarget create(RuleContext ruleContext)
- throws ActionConflictException, InterruptedException {
- PythonConfiguration pyConfig = ruleContext.getFragment(PythonConfiguration.class);
-
- NestedSet<Artifact> files = PrerequisiteArtifacts.nestedSet(ruleContext, "files");
- Artifact interpreter = ruleContext.getPrerequisiteArtifact("interpreter");
- PathFragment interpreterPath =
- PathFragment.create(ruleContext.attributes().get("interpreter_path", Type.STRING));
- PythonVersion pythonVersion =
- PythonVersion.parseTargetOrSentinelValue(
- ruleContext.attributes().get("python_version", Type.STRING));
- String stubShebang = ruleContext.attributes().get("stub_shebang", Type.STRING);
-
- // Determine whether we're pointing to an in-build target (hermetic) or absolute system path
- // (non-hermetic).
- if ((interpreter == null) == interpreterPath.isEmpty()) {
- ruleContext.ruleError(
- "exactly one of the 'interpreter' or 'interpreter_path' attributes must be specified");
- }
- boolean hermetic = interpreter != null;
- // Validate attributes.
- if (!hermetic && !files.isEmpty()) {
- ruleContext.ruleError("if 'interpreter_path' is given then 'files' must be empty");
- }
- if (!hermetic && !interpreterPath.isAbsolute()) {
- ruleContext.attributeError("interpreter_path", "must be an absolute path.");
- }
-
- Artifact coverageTool = null;
- NestedSet<Artifact> coverageFiles = null;
- TransitiveInfoCollection coverageTarget = ruleContext.getPrerequisite("coverage_tool");
- if (coverageTarget != null) {
- NestedSet<Artifact> coverageToolFiles =
- coverageTarget.getProvider(FileProvider.class).getFilesToBuild();
- if (coverageToolFiles.isSingleton()) {
- coverageTool = coverageToolFiles.getSingleton();
- } else {
- FilesToRunProvider filesToRun = coverageTarget.getProvider(FilesToRunProvider.class);
- if (filesToRun == null) {
- ruleContext.attributeError(
- "coverage_tool", "must be an executable target or must produce exactly one file.");
- } else {
- coverageTool = filesToRun.getExecutable();
- }
- }
- NestedSetBuilder<Artifact> result = NestedSetBuilder.stableOrder();
- result.addTransitive(coverageToolFiles);
- RunfilesProvider runfilesProvider = coverageTarget.getProvider(RunfilesProvider.class);
- if (runfilesProvider != null) {
- result.addTransitive(runfilesProvider.getDefaultRunfiles().getArtifacts());
- }
- coverageFiles = result.build();
- }
-
- if (pythonVersion == PythonVersion._INTERNAL_SENTINEL) {
- if (pyConfig.useToolchains()) {
- ruleContext.attributeError(
- "python_version",
- "When using Python toolchains, this attribute must be set explicitly to either 'PY2' "
- + "or 'PY3'. See https://github.com/bazelbuild/bazel/issues/7899 for more "
- + "information. You can temporarily avoid this error by reverting to the legacy "
- + "Python runtime mechanism (`--incompatible_use_python_toolchains=false`).");
- } else {
- // Use the same default as py_binary/py_test would use for their python_version attribute.
- // (Of course, in our case there's no configuration transition involved.)
- pythonVersion = pyConfig.getDefaultPythonVersion();
- }
- }
-
- if (ruleContext.hasErrors()) {
- return null;
- }
- Preconditions.checkState(pythonVersion.isTargetValue());
- Artifact bootstrapTemplate = ruleContext.getPrerequisiteArtifact("bootstrap_template");
-
- PyRuntimeInfo provider =
- hermetic
- ? PyRuntimeInfo.createForInBuildRuntime(
- interpreter,
- files,
- coverageTool,
- coverageFiles,
- pythonVersion,
- stubShebang,
- bootstrapTemplate)
- : PyRuntimeInfo.createForPlatformRuntime(
- interpreterPath,
- coverageTool,
- coverageFiles,
- pythonVersion,
- stubShebang,
- bootstrapTemplate);
-
- return new RuleConfiguredTargetBuilder(ruleContext)
- .setFilesToBuild(files)
- .addProvider(RunfilesProvider.class, RunfilesProvider.EMPTY)
- .addNativeDeclaredProvider(provider)
- .build();
- }
-
-}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeRule.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeRule.java
index 46a5337..84cf378 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeRule.java
@@ -26,7 +26,7 @@
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.util.FileTypeSet;
-/** Rule definition for {@code py_runtime} */
+/** Fake rule definition for {@code py_runtime} for generated doc purposes. */
public final class PyRuntimeRule implements RuleDefinition {
@Override
@@ -112,7 +112,7 @@
return Metadata.builder()
.name("py_runtime")
.ancestors(BaseRuleClasses.NativeBuildRule.class)
- .factoryClass(PyRuntime.class)
+ .factoryClass(BaseRuleClasses.EmptyRuleConfiguredTargetFactory.class)
.build();
}
}