<?xml version="1.0" encoding="utf-8"?>
<!--
 Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.

 This code is free software; you can redistribute it and/or modify it
 under the terms of the GNU General Public License version 2 only, as
 published by the Free Software Foundation.

 This code is distributed in the hope that it will be useful, but WITHOUT
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 version 2 for more details (a copy is included in the LICENSE file that
 accompanied this code).

 You should have received a copy of the GNU General Public License version
 2 along with this work; if not, write to the Free Software Foundation,
 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.

 Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 or visit www.oracle.com if you need additional information or have any
 questions.
-->
<sampleapi>
    <module name="my.first.module" id="first">
        <exports package="$exported"/>
        <exports package="$exported.to">
            <to module="$second"/>
        </exports>
        <opens package="$internal">
            <to module="$second"/>
        </opens>
        <uses service="$service"/>
        <package name="sampleapi.exported" id="exported">
            <class basename="API" id="service">
                <modifier>public</modifier>
                <member>
                    <method basename="get">
                        <modifier>public</modifier>
                        <type>Object</type>
                    </method>
                </member>
            </class>
        </package>
        <package name="sampleapi.exported.to"  id="exported.to">
            <class basename="API" id="baseclass">
                <modifier>public</modifier>
                <member>
                    <method basename="put">
                        <param>Object</param>
                        <type>void</type>
                    </method>
                </member>
            </class>
        </package>
        <package name="sampleapi.not.exported" id="internal">
            <class basename="AnImplementationDetail"/>
        </package>
    </module>
    <module name="my.second.module" id="second" kind="open">
        <requires module="$first" transitive="true"/>
        <requires module="java.xml" static="true"/>
        <provides service="$service">
            <implementation class="$second.impl"/>
            <implementation class="$third.impl"/>
        </provides>
        <package name="sampleapi.exported.second">
            <class basename="API" id="second.impl">
                <extend id="baseclass"/>
            </class>
            <class basename="OtherAPI" id="third.impl">
                <extend id="baseclass"/>
            </class>
            <class basename="TClass">
                <modifier>public</modifier>
                <modifier>none|abstract</modifier>
                <implement>SInterface0</implement>
                <member>
                    <field basename="id">
                        <modifier>public</modifier>
                        <type>int</type>
                    </field>
                    <method basename="get">
                        <modifier>public</modifier>
                        <type>int</type>
                        <throw>SException0</throw>
                    </method>
                    <method basename="put">
                        <modifier>public</modifier>
                        <param>int</param>
                        <type>void</type>
                        <throw>SException0</throw>
                    </method>
                </member>
            </class>
        </package>
    </module>
</sampleapi>
