aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Janak Ramakrishnan <janakr@google.com>2016-01-13 21:39:20 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-01-14 09:54:03 +0000
commit5938419f751d5f45053a75db25e977e80f54d3f1 (patch)
treecf38eedfb72d4a0e29ff1b507f210ba03fe0a266 /src
parent5febc9fd2d51af4f8f4a8cf8ff901e1db204a367 (diff)
Require all PackageSpecification objects to implement an asString method to avoid silly stack overflow when getting the object's hash code or string representation.
-- MOS_MIGRATED_REVID=112085348
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/PackageSpecification.java33
1 files changed, 23 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageSpecification.java b/src/main/java/com/google/devtools/build/lib/packages/PackageSpecification.java
index fb2073e600..7d37f10c50 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageSpecification.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageSpecification.java
@@ -26,21 +26,34 @@ public abstract class PackageSpecification {
private static final String PACKAGE_LABEL = "__pkg__";
private static final String SUBTREE_LABEL = "__subpackages__";
private static final String ALL_BENEATH_SUFFIX = "/...";
- public static final PackageSpecification EVERYTHING = new PackageSpecification() {
- @Override
- public boolean containsPackage(PackageIdentifier packageName) {
- return true;
- }
- };
+ public static final PackageSpecification EVERYTHING =
+ new PackageSpecification() {
+ @Override
+ public boolean containsPackage(PackageIdentifier packageName) {
+ return true;
+ }
+
+ @Override
+ protected String asString() {
+ return "//...";
+ }
+ };
public abstract boolean containsPackage(PackageIdentifier packageName);
@Override
public int hashCode() {
- return toString().hashCode();
+ return asString().hashCode();
}
@Override
+ public final String toString() {
+ return asString();
+ }
+
+ protected abstract String asString();
+
+ @Override
public boolean equals(Object that) {
if (this == that) {
return true;
@@ -50,7 +63,7 @@ public abstract class PackageSpecification {
return false;
}
- return this.toString().equals(that.toString());
+ return this.asString().equals(((PackageSpecification) that).asString());
}
/**
@@ -122,7 +135,7 @@ public abstract class PackageSpecification {
}
@Override
- public String toString() {
+ protected String asString() {
return singlePackageName.toString();
}
}
@@ -141,7 +154,7 @@ public abstract class PackageSpecification {
}
@Override
- public String toString() {
+ protected String asString() {
return prefix.equals(new PathFragment("")) ? "..." : prefix + "/...";
}
}