diff --git a/src/main/java/seedu/address/logic/commands/AddCommand.java b/src/main/java/seedu/address/logic/commands/AddCommand.java index 0484b2847110..77d5ead50c6d 100644 --- a/src/main/java/seedu/address/logic/commands/AddCommand.java +++ b/src/main/java/seedu/address/logic/commands/AddCommand.java @@ -54,7 +54,7 @@ public CommandResult execute() throws CommandException { model.commitAddressBook(); return new CommandResult(String.format(MESSAGE_SUCCESS, toAdd)); } catch (DuplicatePersonException e) { - throw new CommandException(MESSAGE_DUPLICATE_PERSON); + throw new CommandException(MESSAGE_DUPLICATE_PERSON, e); } } diff --git a/src/main/java/seedu/address/logic/commands/DeleteCommand.java b/src/main/java/seedu/address/logic/commands/DeleteCommand.java index 46ab97022831..360303a8fc66 100644 --- a/src/main/java/seedu/address/logic/commands/DeleteCommand.java +++ b/src/main/java/seedu/address/logic/commands/DeleteCommand.java @@ -42,7 +42,7 @@ public CommandResult execute() throws CommandException { model.deletePerson(personToDelete); model.commitAddressBook(); } catch (PersonNotFoundException pnfe) { - throw new AssertionError("The target person cannot be missing"); + throw new AssertionError("The target person cannot be missing", pnfe); } return new CommandResult(String.format(MESSAGE_DELETE_PERSON_SUCCESS, personToDelete)); diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java index 08e37ee8f409..f0798f3fa00b 100644 --- a/src/main/java/seedu/address/logic/commands/EditCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCommand.java @@ -80,9 +80,9 @@ public CommandResult execute() throws CommandException { try { model.updatePerson(personToEdit, editedPerson); } catch (DuplicatePersonException dpe) { - throw new CommandException(MESSAGE_DUPLICATE_PERSON); + throw new CommandException(MESSAGE_DUPLICATE_PERSON, dpe); } catch (PersonNotFoundException pnfe) { - throw new AssertionError("The target person cannot be missing"); + throw new AssertionError("The target person cannot be missing", pnfe); } model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); model.commitAddressBook(); diff --git a/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java b/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java index ed23ad42eb26..a16bd14f2cde 100644 --- a/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java +++ b/src/main/java/seedu/address/logic/commands/exceptions/CommandException.java @@ -7,4 +7,11 @@ public class CommandException extends Exception { public CommandException(String message) { super(message); } + + /** + * Constructs a new {@code CommandException} with the specified detail {@code message} and {@code cause}. + */ + public CommandException(String message, Throwable cause) { + super(message, cause); + } } diff --git a/src/main/java/seedu/address/logic/parser/DeleteCommandParser.java b/src/main/java/seedu/address/logic/parser/DeleteCommandParser.java index 9ff051f3942c..4d1f4bb0e4ec 100644 --- a/src/main/java/seedu/address/logic/parser/DeleteCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/DeleteCommandParser.java @@ -22,7 +22,7 @@ public DeleteCommand parse(String args) throws ParseException { return new DeleteCommand(index); } catch (ParseException pe) { throw new ParseException( - String.format(MESSAGE_INVALID_COMMAND_FORMAT, DeleteCommand.MESSAGE_USAGE)); + String.format(MESSAGE_INVALID_COMMAND_FORMAT, DeleteCommand.MESSAGE_USAGE), pe); } } diff --git a/src/main/java/seedu/address/logic/parser/EditCommandParser.java b/src/main/java/seedu/address/logic/parser/EditCommandParser.java index 0f347f85a428..db85d3e83341 100644 --- a/src/main/java/seedu/address/logic/parser/EditCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/EditCommandParser.java @@ -39,7 +39,7 @@ public EditCommand parse(String args) throws ParseException { try { index = ParserUtil.parseIndex(argMultimap.getPreamble()); } catch (ParseException pe) { - throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE)); + throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE), pe); } EditPersonDescriptor editPersonDescriptor = new EditPersonDescriptor(); diff --git a/src/main/java/seedu/address/logic/parser/SelectCommandParser.java b/src/main/java/seedu/address/logic/parser/SelectCommandParser.java index b10b7870fd8e..565b7f04bfe1 100644 --- a/src/main/java/seedu/address/logic/parser/SelectCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/SelectCommandParser.java @@ -22,7 +22,7 @@ public SelectCommand parse(String args) throws ParseException { return new SelectCommand(index); } catch (ParseException pe) { throw new ParseException( - String.format(MESSAGE_INVALID_COMMAND_FORMAT, SelectCommand.MESSAGE_USAGE)); + String.format(MESSAGE_INVALID_COMMAND_FORMAT, SelectCommand.MESSAGE_USAGE), pe); } } } diff --git a/src/main/java/seedu/address/model/AddressBook.java b/src/main/java/seedu/address/model/AddressBook.java index 8b867bbe11cd..f5124edcf466 100644 --- a/src/main/java/seedu/address/model/AddressBook.java +++ b/src/main/java/seedu/address/model/AddressBook.java @@ -54,7 +54,7 @@ public void resetData(ReadOnlyAddressBook newData) { try { setPersons(newData.getPersonList()); } catch (DuplicatePersonException e) { - throw new AssertionError("AddressBooks should not have duplicate persons"); + throw new AssertionError("AddressBooks should not have duplicate persons", e); } } diff --git a/src/main/java/seedu/address/storage/XmlFileStorage.java b/src/main/java/seedu/address/storage/XmlFileStorage.java index abc51e66197f..d8f65dc036ab 100644 --- a/src/main/java/seedu/address/storage/XmlFileStorage.java +++ b/src/main/java/seedu/address/storage/XmlFileStorage.java @@ -20,7 +20,7 @@ public static void saveDataToFile(Path file, XmlSerializableAddressBook addressB try { XmlUtil.saveDataToFile(file, addressBook); } catch (JAXBException e) { - throw new AssertionError("Unexpected exception " + e.getMessage()); + throw new AssertionError("Unexpected exception " + e.getMessage(), e); } } diff --git a/src/test/java/seedu/address/TestApp.java b/src/test/java/seedu/address/TestApp.java index f03b4562a362..ef580f67088f 100644 --- a/src/test/java/seedu/address/TestApp.java +++ b/src/test/java/seedu/address/TestApp.java @@ -77,9 +77,9 @@ public AddressBook readStorageAddressBook() { try { return new AddressBook(storage.readAddressBook().get()); } catch (DataConversionException dce) { - throw new AssertionError("Data is not in the AddressBook format."); + throw new AssertionError("Data is not in the AddressBook format.", dce); } catch (IOException ioe) { - throw new AssertionError("Storage file cannot be found."); + throw new AssertionError("Storage file cannot be found.", ioe); } } diff --git a/src/test/java/seedu/address/testutil/AddressBookBuilder.java b/src/test/java/seedu/address/testutil/AddressBookBuilder.java index d34f9c47f0da..a466e39bf3f9 100644 --- a/src/test/java/seedu/address/testutil/AddressBookBuilder.java +++ b/src/test/java/seedu/address/testutil/AddressBookBuilder.java @@ -28,7 +28,7 @@ public AddressBookBuilder withPerson(Person person) { try { addressBook.addPerson(person); } catch (DuplicatePersonException dpe) { - throw new IllegalArgumentException("person is expected to be unique."); + throw new IllegalArgumentException("person is expected to be unique.", dpe); } return this; } diff --git a/src/test/java/seedu/address/testutil/Assert.java b/src/test/java/seedu/address/testutil/Assert.java index 2f422e40bc67..c72a7622b080 100644 --- a/src/test/java/seedu/address/testutil/Assert.java +++ b/src/test/java/seedu/address/testutil/Assert.java @@ -35,7 +35,7 @@ public static void assertThrows(Class expectedException, St return; } - throw new AssertionError(errorMessage); + throw new AssertionError(errorMessage, actualException); } throw new AssertionError(String.format( diff --git a/src/test/java/seedu/address/testutil/TypicalPersons.java b/src/test/java/seedu/address/testutil/TypicalPersons.java index baa34b247398..cd5762f2bcd7 100644 --- a/src/test/java/seedu/address/testutil/TypicalPersons.java +++ b/src/test/java/seedu/address/testutil/TypicalPersons.java @@ -69,7 +69,7 @@ public static AddressBook getTypicalAddressBook() { try { ab.addPerson(person); } catch (DuplicatePersonException e) { - throw new AssertionError("not possible"); + throw new AssertionError("not possible", e); } } return ab; diff --git a/src/test/java/systemtests/AddCommandSystemTest.java b/src/test/java/systemtests/AddCommandSystemTest.java index 5aa3cd1f3ae9..4dee13251f3f 100644 --- a/src/test/java/systemtests/AddCommandSystemTest.java +++ b/src/test/java/systemtests/AddCommandSystemTest.java @@ -210,7 +210,7 @@ private void assertCommandSuccess(String command, Person toAdd) { try { expectedModel.addPerson(toAdd); } catch (DuplicatePersonException dpe) { - throw new IllegalArgumentException("toAdd already exists in the model."); + throw new IllegalArgumentException("toAdd already exists in the model.", dpe); } String expectedResultMessage = String.format(AddCommand.MESSAGE_SUCCESS, toAdd); diff --git a/src/test/java/systemtests/AddressBookSystemTest.java b/src/test/java/systemtests/AddressBookSystemTest.java index acf22dd5af1a..986c82360359 100644 --- a/src/test/java/systemtests/AddressBookSystemTest.java +++ b/src/test/java/systemtests/AddressBookSystemTest.java @@ -218,7 +218,7 @@ protected void assertSelectedCardChanged(Index expectedSelectedCardIndex) { try { expectedUrl = new URL(BrowserPanel.SEARCH_PAGE_URL + selectedCardName.replaceAll(" ", "%20")); } catch (MalformedURLException mue) { - throw new AssertionError("URL expected to be valid."); + throw new AssertionError("URL expected to be valid.", mue); } assertEquals(expectedUrl, getBrowserPanel().getLoadedUrl()); diff --git a/src/test/java/systemtests/DeleteCommandSystemTest.java b/src/test/java/systemtests/DeleteCommandSystemTest.java index 90bdaf43d664..97d42add1209 100644 --- a/src/test/java/systemtests/DeleteCommandSystemTest.java +++ b/src/test/java/systemtests/DeleteCommandSystemTest.java @@ -121,7 +121,7 @@ private Person removePerson(Model model, Index index) { try { model.deletePerson(targetPerson); } catch (PersonNotFoundException pnfe) { - throw new AssertionError("targetPerson is retrieved from model."); + throw new AssertionError("targetPerson is retrieved from model.", pnfe); } return targetPerson; } diff --git a/src/test/java/systemtests/EditCommandSystemTest.java b/src/test/java/systemtests/EditCommandSystemTest.java index dd656caad90c..38d82c61aaf0 100644 --- a/src/test/java/systemtests/EditCommandSystemTest.java +++ b/src/test/java/systemtests/EditCommandSystemTest.java @@ -242,7 +242,7 @@ private void assertCommandSuccess(String command, Index toEdit, Person editedPer expectedModel.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); } catch (DuplicatePersonException | PersonNotFoundException e) { throw new IllegalArgumentException( - "editedPerson is a duplicate in expectedModel, or it isn't found in the model."); + "editedPerson is a duplicate in expectedModel, or it isn't found in the model.", e); } assertCommandSuccess(command, expectedModel, diff --git a/src/test/java/systemtests/SystemTestSetupHelper.java b/src/test/java/systemtests/SystemTestSetupHelper.java index 2f2928cf2726..82811ba874f0 100644 --- a/src/test/java/systemtests/SystemTestSetupHelper.java +++ b/src/test/java/systemtests/SystemTestSetupHelper.java @@ -26,7 +26,7 @@ public TestApp setupApplication(Supplier addressBook, Path FxToolkit.registerStage(Stage::new); FxToolkit.setupApplication(() -> testApp = new TestApp(addressBook, saveFileLocation)); } catch (TimeoutException te) { - throw new AssertionError("Application takes too long to set up."); + throw new AssertionError("Application takes too long to set up.", te); } return testApp; @@ -55,7 +55,7 @@ public MainWindowHandle setupMainWindowHandle() { }); FxToolkit.showStage(); } catch (TimeoutException te) { - throw new AssertionError("Stage takes too long to set up."); + throw new AssertionError("Stage takes too long to set up.", te); } return mainWindowHandle; @@ -68,7 +68,7 @@ public void tearDownStage() { try { FxToolkit.cleanupStages(); } catch (TimeoutException te) { - throw new AssertionError("Stage takes too long to tear down."); + throw new AssertionError("Stage takes too long to tear down.", te); } } }