diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java new file mode 100644 index 0000000000..05b5f37703 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionArtifactsProvider.java @@ -0,0 +1,103 @@ +// Copyright 2014 Google Inc. 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.collect.ImmutableList; +import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.collect.nestedset.Order; +import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.syntax.Label; + +/** + * A {@link TransitiveInfoProvider} that creates extra actions. + */ +@Immutable +public final class ExtraActionArtifactsProvider implements TransitiveInfoProvider { + public static final ExtraActionArtifactsProvider EMPTY = + new ExtraActionArtifactsProvider( + ImmutableList.<Artifact>of(), + NestedSetBuilder.<ExtraArtifactSet>emptySet(Order.STABLE_ORDER)); + + /** + * The set of extra artifacts provided by a single configured target. + */ + @Immutable + public static final class ExtraArtifactSet { + private final Label label; + private final ImmutableList<Artifact> artifacts; + + private ExtraArtifactSet(Label label, Iterable<Artifact> artifacts) { + this.label = label; + this.artifacts = ImmutableList.copyOf(artifacts); + } + + public Label getLabel() { + return label; + } + + public ImmutableList<Artifact> getArtifacts() { + return artifacts; + } + + public static ExtraArtifactSet of(Label label, Iterable<Artifact> artifacts) { + return new ExtraArtifactSet(label, artifacts); + } + + @Override + public int hashCode() { + return label.hashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + + if (!(other instanceof ExtraArtifactSet)) { + return false; + } + + return label.equals(((ExtraArtifactSet) other).getLabel()); + } + } + + /** The outputs of the extra actions associated with this target. */ + private ImmutableList<Artifact> extraActionArtifacts = ImmutableList.of(); + private NestedSet<ExtraArtifactSet> transitiveExtraActionArtifacts = + NestedSetBuilder.emptySet(Order.STABLE_ORDER); + + public ExtraActionArtifactsProvider(ImmutableList<Artifact> extraActionArtifacts, + NestedSet<ExtraArtifactSet> transitiveExtraActionArtifacts) { + this.extraActionArtifacts = extraActionArtifacts; + this.transitiveExtraActionArtifacts = transitiveExtraActionArtifacts; + } + + /** + * The outputs of the extra actions associated with this target. + */ + public ImmutableList<Artifact> getExtraActionArtifacts() { + return extraActionArtifacts; + } + + /** + * The outputs of the extra actions in the whole transitive closure. + */ + public NestedSet<ExtraArtifactSet> getTransitiveExtraActionArtifacts() { + return transitiveExtraActionArtifacts; + } +} |