Skip to content

Commit

Permalink
Move platform providers to a new package to break cyclic dependencies.
Browse files Browse the repository at this point in the history
Part of bazelbuild#2219.

Change-Id: I87c7bc9fbfb38d3dbdf193b46247901d0f2a838d
  • Loading branch information
katre committed Apr 28, 2017
1 parent 5038016 commit eeabb18
Show file tree
Hide file tree
Showing 20 changed files with 340 additions and 225 deletions.
2 changes: 2 additions & 0 deletions src/main/java/com/google/devtools/build/lib/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ filegroup(
"//src/main/java/com/google/devtools/build/lib/rules/genquery:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/genrule:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/objc:srcs",
"//src/main/java/com/google/devtools/build/lib/analysis/platform:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/platform:srcs",
"//src/main/java/com/google/devtools/build/lib/sandbox:srcs",
"//src/main/java/com/google/devtools/build/lib/ssd:srcs",
Expand Down Expand Up @@ -1221,6 +1222,7 @@ filegroup(
"//src/main/java/com/google/devtools/build/lib/rules/genquery:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/genrule:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/objc:srcs",
"//src/main/java/com/google/devtools/build/lib/analysis/platform:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/platform:srcs",
],
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Description:
# Providers defined for platforms, constraints, and toolchains.

package(
default_visibility = ["//src:__subpackages__"],
)

java_library(
name = "platform",
srcs = glob([
"*.java",
]),
deps = [
"//src/main/java/com/google/devtools/build/lib:packages",
"//src/main/java/com/google/devtools/build/lib:skylarkinterface",
"//third_party:guava",
],
)

filegroup(
name = "srcs",
testonly = 0, # All srcs should be not test only, overwrite package default.
srcs = glob(["**"]),
)
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,9 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.devtools.build.lib.rules.platform;
package com.google.devtools.build.lib.analysis.platform;

import com.google.common.base.Function;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.ClassObjectConstructor;
Expand All @@ -26,7 +23,6 @@
import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.util.Preconditions;

/** Provider for a platform constraint setting that is available to be fulfilled. */
@SkylarkModule(
Expand All @@ -38,10 +34,10 @@
public class ConstraintSettingInfo extends SkylarkClassObject {

/** Name used in Skylark for accessing this provider. */
static final String SKYLARK_NAME = "ConstraintSettingInfo";
public static final String SKYLARK_NAME = "ConstraintSettingInfo";

/** Skylark constructor and identifier for this provider. */
static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
new NativeClassObjectConstructor(SKYLARK_NAME) {};

/** Identifier used to retrieve this provider from rules which export it. */
Expand All @@ -60,29 +56,6 @@ public Label label() {
return label;
}

/** Retrieves and casts the provider from the given target. */
public static ConstraintSettingInfo fromTarget(TransitiveInfoCollection target) {
Object provider = target.get(SKYLARK_IDENTIFIER);
if (provider == null) {
return null;
}
Preconditions.checkState(provider instanceof ConstraintSettingInfo);
return (ConstraintSettingInfo) provider;
}

/** Retrieves and casts the providers from the given targets. */
public static Iterable<ConstraintSettingInfo> fromTargets(
Iterable<? extends TransitiveInfoCollection> targets) {
return Iterables.transform(
targets,
new Function<TransitiveInfoCollection, ConstraintSettingInfo>() {
@Override
public ConstraintSettingInfo apply(TransitiveInfoCollection target) {
return fromTarget(target);
}
});
}

/** Returns a new {@link ConstraintSettingInfo} with the given data. */
public static ConstraintSettingInfo create(Label constraintSetting) {
return new ConstraintSettingInfo(constraintSetting);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,9 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.devtools.build.lib.rules.platform;
package com.google.devtools.build.lib.analysis.platform;

import com.google.common.base.Function;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.ClassObjectConstructor;
Expand All @@ -26,7 +23,6 @@
import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.util.Preconditions;

/** Provider for a platform constraint value that fulfills a {@link ConstraintSettingInfo}. */
@SkylarkModule(
Expand All @@ -38,10 +34,10 @@
public class ConstraintValueInfo extends SkylarkClassObject {

/** Name used in Skylark for accessing this provider. */
static final String SKYLARK_NAME = "ConstraintValueInfo";
public static final String SKYLARK_NAME = "ConstraintValueInfo";

/** Skylark constructor and identifier for this provider. */
static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
new NativeClassObjectConstructor(SKYLARK_NAME) {};

/** Identifier used to retrieve this provider from rules which export it. */
Expand Down Expand Up @@ -70,29 +66,6 @@ public Label label() {
return label;
}

/** Retrieves and casts the provider from the given target. */
public static ConstraintValueInfo fromTarget(TransitiveInfoCollection target) {
Object provider = target.get(SKYLARK_IDENTIFIER);
if (provider == null) {
return null;
}
Preconditions.checkState(provider instanceof ConstraintValueInfo);
return (ConstraintValueInfo) provider;
}

/** Retrieves and casts the providers from the given targets. */
public static Iterable<ConstraintValueInfo> fromTargets(
Iterable<? extends TransitiveInfoCollection> targets) {
return Iterables.transform(
targets,
new Function<TransitiveInfoCollection, ConstraintValueInfo>() {
@Override
public ConstraintValueInfo apply(TransitiveInfoCollection target) {
return fromTarget(target);
}
});
}

/** Returns a new {@link ConstraintValueInfo} with the given data. */
public static ConstraintValueInfo create(ConstraintSettingInfo constraint, Label value) {
return new ConstraintValueInfo(constraint, value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,13 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.devtools.build.lib.rules.platform;
package com.google.devtools.build.lib.analysis.platform;

import com.google.common.base.Function;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Multimap;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.ClassObjectConstructor;
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
Expand All @@ -30,7 +27,6 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.util.Preconditions;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
Expand All @@ -46,10 +42,10 @@
public class PlatformInfo extends SkylarkClassObject {

/** Name used in Skylark for accessing this provider. */
static final String SKYLARK_NAME = "PlatformInfo";
public static final String SKYLARK_NAME = "PlatformInfo";

/** Skylark constructor and identifier for this provider. */
static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
new NativeClassObjectConstructor(SKYLARK_NAME) {};

/** Identifier used to retrieve this provider from rules which export it. */
Expand Down Expand Up @@ -81,29 +77,6 @@ public ImmutableMap<String, String> remoteExecutionProperties() {
return remoteExecutionProperties;
}

/** Retrieves and casts the provider from the given target. */
public static PlatformInfo fromTarget(TransitiveInfoCollection target) {
Object provider = target.get(SKYLARK_IDENTIFIER);
if (provider == null) {
return null;
}
Preconditions.checkState(provider instanceof PlatformInfo);
return (PlatformInfo) provider;
}

/** Retrieves and casts the providers from the given targets. */
public static Iterable<PlatformInfo> fromTargets(
Iterable<? extends TransitiveInfoCollection> targets) {
return Iterables.transform(
targets,
new Function<TransitiveInfoCollection, PlatformInfo>() {
@Override
public PlatformInfo apply(TransitiveInfoCollection target) {
return fromTarget(target);
}
});
}

/** Returns a new {@link Builder} for creating a fresh {@link PlatformInfo} instance. */
public static Builder builder() {
return new Builder();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.devtools.build.lib.rules.platform;
package com.google.devtools.build.lib.analysis.platform;

import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.ClassObjectConstructor;
Expand All @@ -29,7 +25,6 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.util.Preconditions;
import java.util.Map;

/**
Expand All @@ -42,17 +37,17 @@
category = SkylarkModuleCategory.PROVIDER
)
@Immutable
public class ToolchainInfo extends SkylarkClassObject implements TransitiveInfoProvider {
public class ToolchainInfo extends SkylarkClassObject {

/** Name used in Skylark for accessing this provider. */
static final String SKYLARK_NAME = "ToolchainInfo";
public static final String SKYLARK_NAME = "ToolchainInfo";

/** Skylark constructor and identifier for this provider. */
static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
new NativeClassObjectConstructor(SKYLARK_NAME) {};

/** Identifier used to retrieve this provider from rules which export it. */
private static final SkylarkProviderIdentifier SKYLARK_IDENTIFIER =
public static final SkylarkProviderIdentifier SKYLARK_IDENTIFIER =
SkylarkProviderIdentifier.forKey(SKYLARK_CONSTRUCTOR.getKey());

private final ImmutableList<ConstraintValueInfo> execConstraints;
Expand Down Expand Up @@ -105,27 +100,4 @@ public ImmutableList<ConstraintValueInfo> execConstraints() {
public ImmutableList<ConstraintValueInfo> targetConstraints() {
return targetConstraints;
}

/** Retrieves and casts the provider from the given target. */
public static ToolchainInfo fromTarget(TransitiveInfoCollection target) {
Object provider = target.get(SKYLARK_IDENTIFIER);
if (provider == null) {
return null;
}
Preconditions.checkState(provider instanceof ToolchainInfo);
return (ToolchainInfo) provider;
}

/** Retrieves and casts the providers from the given targets. */
public static Iterable<ToolchainInfo> fromTargets(
Iterable<? extends TransitiveInfoCollection> targets) {
return Iterables.transform(
targets,
new Function<TransitiveInfoCollection, ToolchainInfo>() {
@Override
public ToolchainInfo apply(TransitiveInfoCollection target) {
return fromTarget(target);
}
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib:build-base",
"//src/main/java/com/google/devtools/build/lib:packages",
"//src/main/java/com/google/devtools/build/lib:skylarkinterface",
"//src/main/java/com/google/devtools/build/lib/analysis/platform",
"//third_party:guava",
],
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,18 @@

package com.google.devtools.build.lib.rules.platform;

import com.google.common.base.Function;
import com.google.common.collect.Iterables;
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.RuleConfiguredTargetBuilder;
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.analysis.platform.ConstraintSettingInfo;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
import com.google.devtools.build.lib.util.Preconditions;

/**
* Defines a category of constraint that can be fulfilled by a constraint_value rule in a platform
Expand All @@ -39,4 +44,27 @@ public ConfiguredTarget create(RuleContext ruleContext)
.addNativeDeclaredProvider(ConstraintSettingInfo.create(ruleContext.getLabel()))
.build();
}

/** Retrieves and casts the provider from the given target. */
public static ConstraintSettingInfo constraintSetting(TransitiveInfoCollection target) {
Object provider = target.get(ConstraintSettingInfo.SKYLARK_IDENTIFIER);
if (provider == null) {
return null;
}
Preconditions.checkState(provider instanceof ConstraintSettingInfo);
return (ConstraintSettingInfo) provider;
}

/** Retrieves and casts the providers from the given targets. */
public static Iterable<ConstraintSettingInfo> constraintSettings(
Iterable<? extends TransitiveInfoCollection> targets) {
return Iterables.transform(
targets,
new Function<TransitiveInfoCollection, ConstraintSettingInfo>() {
@Override
public ConstraintSettingInfo apply(TransitiveInfoCollection target) {
return constraintSetting(target);
}
});
}
}
Loading

0 comments on commit eeabb18

Please sign in to comment.