tree 017fb1f27ff146e42aa6202a082341a3776724d5
parent 1dc4b127ba4d916494974fe06158029ee0204d3d
author Edwin Kempin <ekempin@google.com> 1684234585 +0000
committer Edwin Kempin <ekempin@google.com> 1684240220 +0000

Fix warnings

* ChangeNotesStateTest:
  * Redundant specification of type arguments <String, String>

* EmailModule:
  * Statement unnecessarily nested within else clause. The corresponding
    then clause does not complete normally

* ChangeNotesParser:
  * The declared exception ConfigInvalidException is not actually thrown
    by the method parseCustomKeyedValues(ChangeNotesCommit) from type
    ChangeNotesParser

* ChangeEmail:
   * The declared exception EmailException is not actually thrown by the
     method shouldSendMessage() from type ChangeEmail.

* OutgoingEmail:
  * The declared exception EmailException is not actually thrown by the
    method shouldSendMessage() from type OutgoingEmail.EmailDecorator
  * The declared exception PermissionBackendException is not actually
    thrown by the method isRecipientAllowed(Account.Id) from type
    OutgoingEmail.EmailDecorator (fixed by adding javadoc for the
    exception, it cannot be dropped since it's thrown in a subclass
    that overrides this method)
  * The declared exception PermissionBackendException is not actually
    thrown by the method isRecipientAllowed(Address) from type
    OutgoingEmail.EmailDecorator (fixed by adding javadoc for the
    exception, it cannot be dropped since it's thrown in a subclass
    that overrides this method)
  * The value of the parameter rcpt is not used (fixed by adding
    javadoc for the parameter, it cannot be dropped since it's used
    in a subclass that overrides this method)
  * Unnecessary semicolon

* ChangeSchemaDefinitions:
  * Unnecessary @SuppressWarnings("deprecation")

* PublicKeyChecker:
  * Unnecessary @SuppressWarnings("unchecked")

* RestApiServlet:
  * Unnecessary @SuppressWarnings("unchecked")

Release-Notes: skip
Change-Id: Idbd1a58718b8b4b40a73c39a4dd4c4c17f08cff6
Signed-off-by: Edwin Kempin <ekempin@google.com>
Forward-Compatible: checked
