From d08b27fa9701fecfdb69e1b0d1ac2459efc2129b Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Wed, 25 Feb 2015 16:45:20 +0100 Subject: Update from Google. -- MOE_MIGRATED_REVID=85702957 --- .../lib/analysis/OutputFileConfiguredTarget.java | 80 ++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/main/java/com/google/devtools/build/lib/analysis/OutputFileConfiguredTarget.java (limited to 'src/main/java/com/google/devtools/build/lib/analysis/OutputFileConfiguredTarget.java') diff --git a/src/main/java/com/google/devtools/build/lib/analysis/OutputFileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/OutputFileConfiguredTarget.java new file mode 100644 index 0000000000..51122e2af3 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/analysis/OutputFileConfiguredTarget.java @@ -0,0 +1,80 @@ +// 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.base.Preconditions; +import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.packages.OutputFile; +import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider; +import com.google.devtools.build.lib.rules.test.InstrumentedFilesProviderImpl; + +/** + * A ConfiguredTarget for an OutputFile. + */ +public class OutputFileConfiguredTarget extends FileConfiguredTarget + implements InstrumentedFilesProvider { + + private final TransitiveInfoCollection generatingRule; + + OutputFileConfiguredTarget( + TargetContext targetContext, OutputFile outputFile, + TransitiveInfoCollection generatingRule, Artifact outputArtifact) { + super(targetContext, outputArtifact); + Preconditions.checkArgument(targetContext.getTarget() == outputFile); + this.generatingRule = generatingRule; + } + + @Override + public OutputFile getTarget() { + return (OutputFile) super.getTarget(); + } + + public TransitiveInfoCollection getGeneratingRule() { + return generatingRule; + } + + @Override + public NestedSet getTransitiveLicenses() { + return getProvider(LicensesProvider.class, LicensesProviderImpl.EMPTY) + .getTransitiveLicenses(); + } + + @Override + public NestedSet getInstrumentedFiles() { + return getProvider(InstrumentedFilesProvider.class, InstrumentedFilesProviderImpl.EMPTY) + .getInstrumentedFiles(); + } + + @Override + public NestedSet getInstrumentationMetadataFiles() { + return getProvider(InstrumentedFilesProvider.class, InstrumentedFilesProviderImpl.EMPTY) + .getInstrumentationMetadataFiles(); + } + + /** + * Returns the corresponding provider from the generating rule, if it is non-null, or {@code + * defaultValue} otherwise. + */ + private T getProvider(Class clazz, T defaultValue) { + if (generatingRule != null) { + T result = generatingRule.getProvider(clazz); + if (result != null) { + return result; + } + } + return defaultValue; + } +} -- cgit v1.2.3