diff options
author | 2016-01-13 21:39:20 +0000 | |
---|---|---|
committer | 2016-01-14 09:54:03 +0000 | |
commit | 5938419f751d5f45053a75db25e977e80f54d3f1 (patch) | |
tree | cf38eedfb72d4a0e29ff1b507f210ba03fe0a266 /src | |
parent | 5febc9fd2d51af4f8f4a8cf8ff901e1db204a367 (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.java | 33 |
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 + "/..."; } } |