diff options
author | Greg Estren <gregce@google.com> | 2015-09-28 19:35:18 +0000 |
---|---|---|
committer | Florian Weikert <fwe@google.com> | 2015-09-30 09:32:05 +0000 |
commit | a6c88966a5dc7713df4ec64bbf935bc5023e2f9d (patch) | |
tree | 95a2905a2a3c55fe54e4dc1559bec6a41e254bfe /src/main/java/com/google/devtools/build/lib/analysis | |
parent | 1743660d416b00084a41b20ea383304cafad3600 (diff) |
Don't crash when building environment groups directly
(following PackageGroup's precedent).
Also cleanup: generalize the pattern by which we determine
non-configurable target types.
--
MOS_MIGRATED_REVID=104125803
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
4 files changed, 51 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java index e1c0defd2a..1a2488f881 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.ConstantRuleVisibility; +import com.google.devtools.build.lib.packages.EnvironmentGroup; import com.google.devtools.build.lib.packages.InputFile; import com.google.devtools.build.lib.packages.OutputFile; import com.google.devtools.build.lib.packages.PackageGroup; @@ -201,6 +202,8 @@ public final class ConfiguredTargetFactory { } else if (target instanceof PackageGroup) { PackageGroup packageGroup = (PackageGroup) target; return new PackageGroupConfiguredTarget(targetContext, packageGroup); + } else if (target instanceof EnvironmentGroup) { + return new EnvironmentGroupConfiguredTarget(targetContext, (EnvironmentGroup) target); } else { throw new AssertionError("Unexpected target class: " + target.getClass().getName()); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/EnvironmentGroupConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/EnvironmentGroupConfiguredTarget.java new file mode 100644 index 0000000000..41741c7201 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/analysis/EnvironmentGroupConfiguredTarget.java @@ -0,0 +1,46 @@ +// Copyright 2015 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.analysis; + +import com.google.common.base.Preconditions; +import com.google.common.collect.UnmodifiableIterator; +import com.google.devtools.build.lib.packages.EnvironmentGroup; + +/** + * Dummy ConfiguredTarget for environment groups. Contains no functionality, since + * environment groups are not really first-class Targets. + */ +public final class EnvironmentGroupConfiguredTarget extends AbstractConfiguredTarget { + EnvironmentGroupConfiguredTarget(TargetContext targetContext, EnvironmentGroup envGroup) { + super(targetContext); + Preconditions.checkArgument(targetContext.getConfiguration() == null); + } + + @Override + public EnvironmentGroup getTarget() { + return (EnvironmentGroup) super.getTarget(); + } + + @Override + public Object get(String providerKey) { + // No providers. + return null; + } + + @Override + public UnmodifiableIterator<TransitiveInfoProvider> iterator() { + throw new UnsupportedOperationException(); + } +} diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PackageGroupConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/PackageGroupConfiguredTarget.java index c238b74ea5..d0382dc967 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/PackageGroupConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/PackageGroupConfiguredTarget.java @@ -73,6 +73,6 @@ public final class PackageGroupConfiguredTarget extends AbstractConfiguredTarget @Override public UnmodifiableIterator<TransitiveInfoProvider> iterator() { - throw new IllegalStateException(); + throw new UnsupportedOperationException(); } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java index 6fada4c226..82d8e49bb9 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java @@ -23,8 +23,6 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.SplitTransition; import com.google.devtools.build.lib.packages.Attribute.Transition; -import com.google.devtools.build.lib.packages.InputFile; -import com.google.devtools.build.lib.packages.PackageGroup; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.Target; @@ -77,7 +75,7 @@ public final class BuildConfigurationCollection { public static BuildConfiguration configureTopLevelTarget(BuildConfiguration topLevelConfiguration, Target toTarget) { - if (toTarget instanceof InputFile || toTarget instanceof PackageGroup) { + if (!toTarget.isConfigurable()) { return null; } return topLevelConfiguration.getTransitions().toplevelConfigurationHook(toTarget); |