<!--

    Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<FindBugsFilter>
    <!--
        From Tim Quinn:

        The current structure of the code makes it complicated to arrange a
        series of method returns back to the main method return to accomplish
        the same as invoking System.exit.  If the user ran "appclient -help"
        then we're not going to even try to run the ACC, just display the
        help, so exit seems OK here.
    -->
    <Match>
        <Class name="org.glassfish.appclient.client.AppClientFacade"/>
        <Method name="help"/>
        <Bug pattern="DM_EXIT"/>
    </Match>

    <!--
        From Tim Quinn:

        The only (supported) way that JWSAppClientContainerMain's main method
        is invoked is during a Java Web Start launch of a client, in which
        case the usage method in question would be invoked only if there was
        an error in how GF prepared the URL and/or the JNLP document.  A user
        could cause GF to add the equivalent of the -usage option to the JNLP
        but there's no good reason to do that and exiting in that case is fine
        as far as I'm concerned.
    -->
    <Match>
        <Class name="org.glassfish.appclient.client.AppClientFacade"/>
        <Method name="usage"/>
        <Bug pattern="DM_EXIT"/>
    </Match>

    <!--
        From Tim Quinn:

        This call to exit supports a seldom-used feature of the Java Web Start
        support for app clients in which the caller can ask that the ACC exit
        right away after returning from the client.  (Normally we'll wait
        until the event dispatcher thread runs down.)  This has been useful,
        at least in the past, when oddities in the vendor's Java Web Start
        implementation caused the VM to hang around when the client is a non-
        GUI client (as in our devtests).  This primarily affected Apple's VM a
        few releases ago, IIRC.
    -->
    <Match>
        <Class name="org.glassfish.appclient.client.jws.boot.JWSACCMain$1"/>
        <Method name="run"/>
        <Bug pattern="DM_EXIT"/>
    </Match>

    <!--
        From Tim Quinn:

        Refactoring is possible, but at the cost of greater complexity.  Plus
        I think FindBugs has missed something.  It is correct that the "this"
        of the containing class is used only during construction, but part of
        what the constructor does is to instantiate other inner classes of the
        same common containing object and those constructors use the implicit
        "this" argument.  Changing the UserVMArgs inner class to be static
        would force refactoring of several other inner classes.  That seems to
        me to be a fair amount of work and added complexity to suppress this
        FindBugs notification.
    -->
    <Match>
        <Class name="org.glassfish.appclient.client.CLIBootstrap$UserVMArgs"/>
        <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS"/>
    </Match>
</FindBugsFilter>
