From 3aae85f50773bf037cd02196437a904949332dd9 Mon Sep 17 00:00:00 2001 From: Googler Date: Mon, 11 Apr 2016 14:57:06 +0000 Subject: Make NoSuchTargetException a concrete class. Removed BadWorkspaceFileException and BadPreludeFileException. BadWorkspaceFileException and BadPreludeFileException are not doing anythings special rather than providing a custom message. Replace them by using NoSuchTargetException directly. -- MOS_MIGRATED_REVID=119530878 --- .../packages/BuildFileContainsErrorsException.java | 10 ++++-- .../build/lib/packages/NoSuchPackageException.java | 30 ++++++++-------- .../build/lib/packages/NoSuchTargetException.java | 20 ----------- .../build/lib/skyframe/PackageFunction.java | 41 +++++++++++----------- 4 files changed, 44 insertions(+), 57 deletions(-) (limited to 'src/main/java/com') diff --git a/src/main/java/com/google/devtools/build/lib/packages/BuildFileContainsErrorsException.java b/src/main/java/com/google/devtools/build/lib/packages/BuildFileContainsErrorsException.java index 525d6189f0..b527b92203 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/BuildFileContainsErrorsException.java +++ b/src/main/java/com/google/devtools/build/lib/packages/BuildFileContainsErrorsException.java @@ -23,6 +23,7 @@ import java.io.IOException; * be read or had syntax errors. */ public class BuildFileContainsErrorsException extends NoSuchPackageException { + public BuildFileContainsErrorsException(PackageIdentifier packageIdentifier) { super( packageIdentifier, @@ -30,11 +31,16 @@ public class BuildFileContainsErrorsException extends NoSuchPackageException { } public BuildFileContainsErrorsException(PackageIdentifier packageIdentifier, String message) { - super(packageIdentifier, "error loading package", message); + super(packageIdentifier, message); } public BuildFileContainsErrorsException(PackageIdentifier packageIdentifier, String message, IOException cause) { - super(packageIdentifier, "error loading package", message, cause); + super(packageIdentifier, message, cause); + } + + @Override + public String getMessage() { + return String.format("%s '%s': %s", "error loading package", getPackageId(), getRawMessage()); } } diff --git a/src/main/java/com/google/devtools/build/lib/packages/NoSuchPackageException.java b/src/main/java/com/google/devtools/build/lib/packages/NoSuchPackageException.java index aff72fb65a..1ea372e8dc 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/NoSuchPackageException.java +++ b/src/main/java/com/google/devtools/build/lib/packages/NoSuchPackageException.java @@ -19,33 +19,33 @@ import com.google.devtools.build.lib.cmdline.PackageIdentifier; /** * Exception indicating an attempt to access a package which is not found, does * not exist, or can't be parsed into a package. + * + *

Prefer using more-specific subclasses, when appropriate. */ -public abstract class NoSuchPackageException extends NoSuchThingException { +public class NoSuchPackageException extends NoSuchThingException { private final PackageIdentifier packageId; public NoSuchPackageException(PackageIdentifier packageId, String message) { - this(packageId, "no such package", message); - } - - public NoSuchPackageException(PackageIdentifier packageId, String message, - Exception cause) { - this(packageId, "no such package", message, cause); - } - - protected NoSuchPackageException( - PackageIdentifier packageId, String messagePrefix, String message) { - super(messagePrefix + " '" + packageId + "': " + message); + super(message); this.packageId = packageId; } - protected NoSuchPackageException(PackageIdentifier packageId, String messagePrefix, - String message, Exception cause) { - super(messagePrefix + " '" + packageId + "': " + message, cause); + public NoSuchPackageException(PackageIdentifier packageId, String message, Exception cause) { + super(message, cause); this.packageId = packageId; } public PackageIdentifier getPackageId() { return packageId; } + + public String getRawMessage() { + return super.getMessage(); + } + + @Override + public String getMessage() { + return String.format("%s '%s': %s", "no such package", packageId, getRawMessage()); + } } diff --git a/src/main/java/com/google/devtools/build/lib/packages/NoSuchTargetException.java b/src/main/java/com/google/devtools/build/lib/packages/NoSuchTargetException.java index b8837245d4..eacfdfa558 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/NoSuchTargetException.java +++ b/src/main/java/com/google/devtools/build/lib/packages/NoSuchTargetException.java @@ -16,8 +16,6 @@ package com.google.devtools.build.lib.packages; import com.google.devtools.build.lib.cmdline.Label; -import java.util.Objects; - import javax.annotation.Nullable; /** @@ -67,22 +65,4 @@ public class NoSuchTargetException extends NoSuchThingException { public boolean hasTarget() { return hasTarget; } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof NoSuchTargetException)) { - return false; - } - NoSuchTargetException that = (NoSuchTargetException) o; - return Objects.equals(this.label, that.label) - && Objects.equals(this.hasTarget, that.hasTarget); - } - - @Override - public int hashCode() { - return Objects.hash(label, hasTarget); - } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java index 90aee2df45..fc5f189564 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java @@ -348,7 +348,10 @@ public class PackageFunction implements SkyFunction { EvalException.class, SkylarkImportFailedException.class); } catch (IOException | FileSymlinkException | InconsistentFilesystemException | EvalException | SkylarkImportFailedException e) { - throw new PackageFunctionException(new BadWorkspaceFileException(e.getMessage()), + throw new PackageFunctionException( + new NoSuchPackageException( + Label.EXTERNAL_PACKAGE_IDENTIFIER, + "Error encountered while dealing with the WORKSPACE file: " + e.getMessage()), Transience.PERSISTENT); } if (workspace == null) { @@ -378,7 +381,7 @@ public class PackageFunction implements SkyFunction { } catch (InconsistentFilesystemException e) { // This error is not transient from the perspective of the PackageFunction. throw new PackageFunctionException( - new InternalInconsistentFilesystemException(packageId, e), Transience.PERSISTENT); + new NoSuchPackageException(packageId, e.getMessage(), e), Transience.PERSISTENT); } if (packageLookupValue == null) { return null; @@ -445,7 +448,9 @@ public class PackageFunction implements SkyFunction { ErrorReadingSkylarkExtensionException.class, InconsistentFilesystemException.class); } catch (ErrorReadingSkylarkExtensionException | InconsistentFilesystemException e) { throw new PackageFunctionException( - new BadPreludeFileException(packageId, e.getMessage()), Transience.PERSISTENT); + new NoSuchPackageException( + packageId, "Error encountered while reading the prelude file: " + e.getMessage()), + Transience.PERSISTENT); } if (astLookupValue == null) { return null; @@ -481,7 +486,8 @@ public class PackageFunction implements SkyFunction { packageLookupValue.getRoot(), packageId, legacyPkgBuilder, env); } catch (InternalInconsistentFilesystemException e) { packageFunctionCache.invalidate(packageId); - throw new PackageFunctionException(e, + throw new PackageFunctionException( + e.toNoSuchPackageException(), e.isTransient() ? Transience.TRANSIENT : Transience.PERSISTENT); } Set globKeys = packageBuilderAndGlobDeps.globDepKeys; @@ -493,7 +499,8 @@ public class PackageFunction implements SkyFunction { env, globKeys, subincludes, packageId, legacyPkgBuilder.containsErrors()); } catch (InternalInconsistentFilesystemException e) { packageFunctionCache.invalidate(packageId); - throw new PackageFunctionException(e, + throw new PackageFunctionException( + e.toNoSuchPackageException(), e.isTransient() ? Transience.TRANSIENT : Transience.PERSISTENT); } if (env.valuesMissing()) { @@ -647,7 +654,7 @@ public class PackageFunction implements SkyFunction { new BuildFileContainsErrorsException(packageId, e.getMessage()), Transience.PERSISTENT); } catch (InconsistentFilesystemException e) { throw new PackageFunctionException( - new InternalInconsistentFilesystemException(packageId, e), Transience.PERSISTENT); + new NoSuchPackageException(packageId, e.getMessage(), e), Transience.PERSISTENT); } if (valuesMissing) { @@ -1184,16 +1191,19 @@ public class PackageFunction implements SkyFunction { return packageFunctionCacheEntry; } - private static class InternalInconsistentFilesystemException extends NoSuchPackageException { + private static class InternalInconsistentFilesystemException extends Exception { private boolean isTransient; + private PackageIdentifier packageIdentifier; + /** * Used to represent a filesystem inconsistency discovered outside the * {@link PackageFunction}. */ public InternalInconsistentFilesystemException(PackageIdentifier packageIdentifier, InconsistentFilesystemException e) { - super(packageIdentifier, e.getMessage(), e); + super(e.getMessage(), e); + this.packageIdentifier = packageIdentifier; // This is not a transient error from the perspective of the PackageFunction. this.isTransient = false; } @@ -1208,19 +1218,10 @@ public class PackageFunction implements SkyFunction { public boolean isTransient() { return isTransient; } - } - - private static class BadWorkspaceFileException extends NoSuchPackageException { - private BadWorkspaceFileException(String message) { - super( - Label.EXTERNAL_PACKAGE_IDENTIFIER, - "Error encountered while dealing with the WORKSPACE file: " + message); - } - } - private static class BadPreludeFileException extends NoSuchPackageException { - private BadPreludeFileException(PackageIdentifier packageIdentifier, String message) { - super(packageIdentifier, "Error encountered while reading the prelude file: " + message); + private NoSuchPackageException toNoSuchPackageException() { + return new NoSuchPackageException( + packageIdentifier, this.getMessage(), (Exception) this.getCause()); } } -- cgit v1.2.3