diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/packages/InputFile.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/packages/InputFile.java | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/InputFile.java b/src/main/java/com/google/devtools/build/lib/packages/InputFile.java new file mode 100644 index 0000000000..130e2b7b87 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/packages/InputFile.java @@ -0,0 +1,124 @@ +// 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.packages; + +import com.google.common.base.Preconditions; +import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; +import com.google.devtools.build.lib.events.Location; +import com.google.devtools.build.lib.syntax.Label; +import com.google.devtools.build.lib.vfs.Path; +import com.google.devtools.build.lib.vfs.PathFragment; + +/** + * A file that is an input to the build system. + * + * <p>In the build system, a file is considered an <i>input</i> file iff it is + * not generated by the build system (e.g. it's maintained under version + * control, or created by the test harness). It has nothing to do with the + * type of the file; a generated file containing <code>Java</code> source code + * is an OutputFile, not an InputFile. + */ +@Immutable @ThreadSafe +public final class InputFile extends FileTarget { + private final Location location; + private final RuleVisibility visibility; + private final License license; + + /** + * Constructs an input file with the given label, which must be a label for + * the given package, and package-default visibility. + */ + InputFile(Package pkg, Label label, Location location) { + this(pkg, label, location, null, License.NO_LICENSE); + } + + /** + * Constructs an input file with the given label, which must be a label for the given package + * that was parsed from the specified location, and has the specified visibility. + */ + InputFile(Package pkg, Label label, Location location, RuleVisibility visibility, + License license) { + super(pkg, label); + Preconditions.checkNotNull(location); + this.location = location; + this.visibility = visibility; + this.license = license; + } + + public boolean isVisibilitySpecified() { + return visibility != null; + } + + @Override + public RuleVisibility getVisibility() { + if (visibility != null) { + return visibility; + } else { + return pkg.getDefaultVisibility(); + } + } + + public boolean isLicenseSpecified() { + return license != null && license != License.NO_LICENSE; + } + + @Override + public License getLicense() { + if (license != null) { + return license; + } else { + return pkg.getDefaultLicense(); + } + } + + /** + * Returns the path to the location of the input file (which is necessarily + * within the source tree, not beneath <code>bin</code> or + * <code>genfiles</code>. + * + * <p>Prefer {@link #getExecPath} if possible. + */ + public Path getPath() { + return pkg.getPackageDirectory().getRelative(label.getName()); + } + + /** + * Returns the exec path of the file, i.e. the path relative to the package source root. + */ + public PathFragment getExecPath() { + return label.toPathFragment(); + } + + @Override + public int hashCode() { + return label.hashCode(); + } + + @Override + public String getTargetKind() { + return "source file"; + } + + @Override + public Rule getAssociatedRule() { + return null; + } + + @Override + public Location getLocation() { + return location; + } +} |