aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/packages/InputFile.java
diff options
context:
space:
mode:
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.java124
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;
+ }
+}