| // Copyright 2014 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.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; | |
| import com.google.devtools.build.lib.util.Pair; | |
| import com.google.devtools.build.lib.util.Preconditions; | |
| /** | |
| * 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<TargetLicense> getTransitiveLicenses() { | |
| return getProvider(LicensesProvider.class, LicensesProviderImpl.EMPTY) | |
| .getTransitiveLicenses(); | |
| } | |
| @Override | |
| public NestedSet<Artifact> getInstrumentedFiles() { | |
| return getProvider(InstrumentedFilesProvider.class, InstrumentedFilesProviderImpl.EMPTY) | |
| .getInstrumentedFiles(); | |
| } | |
| @Override | |
| public NestedSet<Artifact> getInstrumentationMetadataFiles() { | |
| return getProvider(InstrumentedFilesProvider.class, InstrumentedFilesProviderImpl.EMPTY) | |
| .getInstrumentationMetadataFiles(); | |
| } | |
| @Override | |
| public NestedSet<Artifact> getBaselineCoverageInstrumentedFiles() { | |
| return getProvider(InstrumentedFilesProvider.class, InstrumentedFilesProviderImpl.EMPTY) | |
| .getBaselineCoverageInstrumentedFiles(); | |
| } | |
| @Override | |
| public NestedSet<Artifact> getBaselineCoverageArtifacts() { | |
| return getProvider(InstrumentedFilesProvider.class, InstrumentedFilesProviderImpl.EMPTY) | |
| .getBaselineCoverageArtifacts(); | |
| } | |
| @Override | |
| public NestedSet<Artifact> getCoverageSupportFiles() { | |
| return getProvider(InstrumentedFilesProvider.class, InstrumentedFilesProviderImpl.EMPTY) | |
| .getCoverageSupportFiles(); | |
| } | |
| @Override | |
| public NestedSet<Pair<String, String>> getCoverageEnvironment() { | |
| return getProvider(InstrumentedFilesProvider.class, InstrumentedFilesProviderImpl.EMPTY) | |
| .getCoverageEnvironment(); | |
| } | |
| /** | |
| * Returns the corresponding provider from the generating rule, if it is non-null, or {@code | |
| * defaultValue} otherwise. | |
| */ | |
| private <T extends TransitiveInfoProvider> T getProvider(Class<T> clazz, T defaultValue) { | |
| if (generatingRule != null) { | |
| T result = generatingRule.getProvider(clazz); | |
| if (result != null) { | |
| return result; | |
| } | |
| } | |
| return defaultValue; | |
| } | |
| } |