<!--

    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>
