src/java.compiler/share/classes/javax/lang/model/element/ModuleElement.java
author darcy
Wed, 27 Sep 2017 14:23:41 -0700
changeset 47283 ce5fd3ba3fea
parent 47216 71c04702a3d5
child 48597 b6bb930cd488
permissions -rw-r--r--
8187982: Update SourceVersion to mention restricted keywords Reviewed-by: mcimadamore
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
     1
/*
43376
f165c71d9e03 8172810: ModuleElement should declare and provide appropriate modifiers
jjg
parents: 42407
diff changeset
     2
 * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
     4
 *
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    10
 *
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    15
 * accompanied this code).
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    16
 *
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    20
 *
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    23
 * questions.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    24
 */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    25
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    26
package javax.lang.model.element;
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    27
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    28
import java.util.List;
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    29
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    30
/**
44809
931f88b3014d 8178916: Update annotation processing API for terminology changes in modules
darcy
parents: 44179
diff changeset
    31
 * Represents a module program element.  Provides access to
931f88b3014d 8178916: Update annotation processing API for terminology changes in modules
darcy
parents: 44179
diff changeset
    32
 * information about the module, its directives, and its members.
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    33
 *
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    34
 * @see javax.lang.model.util.Elements#getModuleOf
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    35
 * @since 9
44809
931f88b3014d 8178916: Update annotation processing API for terminology changes in modules
darcy
parents: 44179
diff changeset
    36
 * @jls 7.7 Module Declarations
43767
9cff98a149cb 8173393: Module system implementation refresh (2/2017)
alanb
parents: 43567
diff changeset
    37
 * @spec JPMS
44809
931f88b3014d 8178916: Update annotation processing API for terminology changes in modules
darcy
parents: 44179
diff changeset
    38
 */
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    39
public interface ModuleElement extends Element, QualifiedNameable {
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    40
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    41
    /**
43567
d0d89c3da7be 8173676: Improvements to javax.annotation.processing and javax.lang.model doc
darcy
parents: 43376
diff changeset
    42
     * Returns the fully qualified name of this module.  For an
d0d89c3da7be 8173676: Improvements to javax.annotation.processing and javax.lang.model doc
darcy
parents: 43376
diff changeset
    43
     * {@linkplain #isUnnamed() unnamed module}, an empty name is returned.
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    44
     *
45687
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    45
     * @apiNote If the module name consists of one identifier, then
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    46
     * this method returns that identifier, which is deemed to be
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    47
     * module's fully qualified name despite not being in qualified
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    48
     * form.  If the module name consists of more than one identifier,
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    49
     * then this method returns the entire name.
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    50
     *
43567
d0d89c3da7be 8173676: Improvements to javax.annotation.processing and javax.lang.model doc
darcy
parents: 43376
diff changeset
    51
     * @return the fully qualified name of this module, or an
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    52
     * empty name if this is an unnamed module
45687
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    53
     *
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    54
     * @jls 6.2 Names and Identifiers
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    55
     */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    56
    @Override
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    57
    Name getQualifiedName();
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    58
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    59
    /**
43567
d0d89c3da7be 8173676: Improvements to javax.annotation.processing and javax.lang.model doc
darcy
parents: 43376
diff changeset
    60
     * Returns the simple name of this module.  For an {@linkplain
d0d89c3da7be 8173676: Improvements to javax.annotation.processing and javax.lang.model doc
darcy
parents: 43376
diff changeset
    61
     * #isUnnamed() unnamed module}, an empty name is returned.
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    62
     *
45687
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    63
     * @apiNote If the module name consists of one identifier, then
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    64
     * this method returns that identifier.  If the module name
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    65
     * consists of more than one identifier, then this method returns
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    66
     * the rightmost such identifier, which is deemed to be the
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    67
     * module's simple name.
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    68
     *
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    69
     * @return the simple name of this module or an empty name if
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    70
     * this is an unnamed module
45687
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    71
     *
07463ccee73b 8163989: Clarify ModuleElement spec
darcy
parents: 44878
diff changeset
    72
     * @jls 6.2 Names and Identifiers
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    73
     */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    74
    @Override
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    75
    Name getSimpleName();
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    76
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    77
    /**
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    78
     * Returns the packages within this module.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    79
     * @return the packages within this module
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    80
     */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    81
    @Override
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    82
    List<? extends Element> getEnclosedElements();
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    83
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    84
    /**
43376
f165c71d9e03 8172810: ModuleElement should declare and provide appropriate modifiers
jjg
parents: 42407
diff changeset
    85
     * Returns {@code true} if this is an open module and {@code
f165c71d9e03 8172810: ModuleElement should declare and provide appropriate modifiers
jjg
parents: 42407
diff changeset
    86
     * false} otherwise.
f165c71d9e03 8172810: ModuleElement should declare and provide appropriate modifiers
jjg
parents: 42407
diff changeset
    87
     *
f165c71d9e03 8172810: ModuleElement should declare and provide appropriate modifiers
jjg
parents: 42407
diff changeset
    88
     * @return {@code true} if this is an open module and {@code
f165c71d9e03 8172810: ModuleElement should declare and provide appropriate modifiers
jjg
parents: 42407
diff changeset
    89
     * false} otherwise
47283
ce5fd3ba3fea 8187982: Update SourceVersion to mention restricted keywords
darcy
parents: 47216
diff changeset
    90
     */
43376
f165c71d9e03 8172810: ModuleElement should declare and provide appropriate modifiers
jjg
parents: 42407
diff changeset
    91
    boolean isOpen();
f165c71d9e03 8172810: ModuleElement should declare and provide appropriate modifiers
jjg
parents: 42407
diff changeset
    92
f165c71d9e03 8172810: ModuleElement should declare and provide appropriate modifiers
jjg
parents: 42407
diff changeset
    93
    /**
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    94
     * Returns {@code true} if this is an unnamed module and {@code
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    95
     * false} otherwise.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    96
     *
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    97
     * @return {@code true} if this is an unnamed module and {@code
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
    98
     * false} otherwise
47283
ce5fd3ba3fea 8187982: Update SourceVersion to mention restricted keywords
darcy
parents: 47216
diff changeset
    99
     *
ce5fd3ba3fea 8187982: Update SourceVersion to mention restricted keywords
darcy
parents: 47216
diff changeset
   100
     * @jls 7.7.5 Unnamed Modules
ce5fd3ba3fea 8187982: Update SourceVersion to mention restricted keywords
darcy
parents: 47216
diff changeset
   101
     */
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   102
    boolean isUnnamed();
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   103
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   104
    /**
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   105
     * Returns {@code null} since a module is not enclosed by another
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   106
     * element.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   107
     *
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   108
     * @return {@code null}
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   109
     */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   110
    @Override
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   111
    Element getEnclosingElement();
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   112
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   113
    /**
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   114
     * Returns the directives contained in the declaration of this module.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   115
     * @return  the directives in the declaration of this module
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   116
     */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   117
    List<? extends Directive> getDirectives();
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   118
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   119
    /**
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   120
     * The {@code kind} of a directive.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   121
     *
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   122
     * <p>Note that it is possible additional directive kinds will be added
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   123
     * to accommodate new, currently unknown, language structures added to
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   124
     * future versions of the Java&trade; programming language.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   125
     *
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   126
     * @since 9
43767
9cff98a149cb 8173393: Module system implementation refresh (2/2017)
alanb
parents: 43567
diff changeset
   127
     * @spec JPMS
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   128
     */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   129
    enum DirectiveKind {
42407
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   130
        /** A "requires (static|transitive)* module-name" directive. */
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   131
        REQUIRES,
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   132
        /** An "exports package-name [to module-name-list]" directive. */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   133
        EXPORTS,
42407
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   134
        /** An "opens package-name [to module-name-list]" directive. */
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   135
        OPENS,
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   136
        /** A "uses service-name" directive. */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   137
        USES,
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   138
        /** A "provides service-name with implementation-name" directive. */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   139
        PROVIDES
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   140
    };
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   141
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   142
    /**
44809
931f88b3014d 8178916: Update annotation processing API for terminology changes in modules
darcy
parents: 44179
diff changeset
   143
     * Represents a directive within the declaration of this
931f88b3014d 8178916: Update annotation processing API for terminology changes in modules
darcy
parents: 44179
diff changeset
   144
     * module. The directives of a module declaration configure the
931f88b3014d 8178916: Update annotation processing API for terminology changes in modules
darcy
parents: 44179
diff changeset
   145
     * module in the Java Platform Module System.
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   146
     *
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   147
     * @since 9
43767
9cff98a149cb 8173393: Module system implementation refresh (2/2017)
alanb
parents: 43567
diff changeset
   148
     * @spec JPMS
44809
931f88b3014d 8178916: Update annotation processing API for terminology changes in modules
darcy
parents: 44179
diff changeset
   149
     */
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   150
    interface Directive {
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   151
        /**
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   152
         * Returns the {@code kind} of this directive.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   153
         *
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   154
         * @return the kind of this directive
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   155
         */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   156
        DirectiveKind getKind();
44062
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   157
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   158
        /**
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   159
         * Applies a visitor to this directive.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   160
         *
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   161
         * @param <R> the return type of the visitor's methods
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   162
         * @param <P> the type of the additional parameter to the visitor's methods
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   163
         * @param v   the visitor operating on this directive
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   164
         * @param p   additional parameter to the visitor
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   165
         * @return a visitor-specified result
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   166
         */
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   167
        <R, P> R accept(DirectiveVisitor<R, P> v, P p);
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   168
    }
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   169
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   170
    /**
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   171
     * A visitor of module directives, in the style of the visitor design
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   172
     * pattern.  Classes implementing this interface are used to operate
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   173
     * on a directive when the kind of directive is unknown at compile time.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   174
     * When a visitor is passed to a directive's {@link Directive#accept
44878
9dd9cf7919ff 8179299: Fix HTML 5 errors in java.compiler module
jjg
parents: 44809
diff changeset
   175
     * accept} method, the <code>visit<i>Xyz</i></code> method applicable
44062
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   176
     * to that directive is invoked.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   177
     *
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   178
     * <p> Classes implementing this interface may or may not throw a
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   179
     * {@code NullPointerException} if the additional parameter {@code p}
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   180
     * is {@code null}; see documentation of the implementing class for
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   181
     * details.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   182
     *
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   183
     * <p> <b>WARNING:</b> It is possible that methods will be added to
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   184
     * this interface to accommodate new, currently unknown, language
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   185
     * structures added to future versions of the Java&trade; programming
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   186
     * language. Methods to accommodate new language constructs will
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   187
     * be added in a source <em>compatible</em> way using
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   188
     * <em>default methods</em>.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   189
     *
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   190
     * @param <R> the return type of this visitor's methods.  Use {@link
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   191
     *            Void} for visitors that do not need to return results.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   192
     * @param <P> the type of the additional parameter to this visitor's
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   193
     *            methods.  Use {@code Void} for visitors that do not need an
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   194
     *            additional parameter.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   195
     *
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   196
     * @since 9
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   197
     * @spec JPMS
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   198
     */
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   199
    interface DirectiveVisitor<R, P> {
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   200
        /**
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   201
         * Visits any directive as if by passing itself to that
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   202
         * directive's {@link Directive#accept accept} method and passing
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   203
         * {@code null} for the additional parameter.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   204
         * The invocation {@code v.visit(d)} is equivalent to
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   205
         * {@code d.accept(v, null)}.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   206
         * @param d  the directive to visit
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   207
         * @return a visitor-specified result
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   208
         * @implSpec This implementation is {@code visit(d, null)}
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   209
         */
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   210
        default R visit(Directive d) {
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   211
            return d.accept(this, null);
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   212
        }
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   213
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   214
        /**
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   215
         * Visits any directive as if by passing itself to that
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   216
         * directive's {@link Directive#accept accept} method.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   217
         * The invocation {@code v.visit(d, p)} is equivalent to
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   218
         * {@code d.accept(v, p)}.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   219
         * @param d  the directive to visit
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   220
         * @param p  a visitor-specified parameter
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   221
         * @return a visitor-specified result
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   222
         */
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   223
        default R visit(Directive d, P p) {
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   224
            return d.accept(this, p);
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   225
        }
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   226
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   227
        /**
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   228
         * Visits a {@code requires} directive.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   229
         * @param d  the directive to visit
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   230
         * @param p  a visitor-specified parameter
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   231
         * @return a visitor-specified result
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   232
         */
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   233
        R visitRequires(RequiresDirective d, P p);
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   234
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   235
        /**
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   236
         * Visits an {@code exports} directive.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   237
         * @param d  the directive to visit
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   238
         * @param p  a visitor-specified parameter
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   239
         * @return a visitor-specified result
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   240
         */
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   241
        R visitExports(ExportsDirective d, P p);
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   242
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   243
        /**
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   244
         * Visits an {@code opens} directive.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   245
         * @param d  the directive to visit
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   246
         * @param p  a visitor-specified parameter
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   247
         * @return a visitor-specified result
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   248
         */
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   249
        R visitOpens(OpensDirective d, P p);
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   250
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   251
        /**
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   252
         * Visits a {@code uses} directive.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   253
         * @param d  the directive to visit
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   254
         * @param p  a visitor-specified parameter
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   255
         * @return a visitor-specified result
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   256
         */
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   257
        R visitUses(UsesDirective d, P p);
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   258
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   259
        /**
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   260
         * Visits a {@code provides} directive.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   261
         * @param d  the directive to visit
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   262
         * @param p  a visitor-specified parameter
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   263
         * @return a visitor-specified result
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   264
         */
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   265
        R visitProvides(ProvidesDirective d, P p);
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   266
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   267
        /**
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   268
         * Visits an unknown directive.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   269
         * This can occur if the language evolves and new kinds of directive are added.
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   270
         * @param d  the directive to visit
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   271
         * @param p  a visitor-specified parameter
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   272
         * @return a visitor-specified result
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   273
         * @throws UnknownDirectiveException a visitor implementation may optionally throw this exception
44179
4fa9641810db 8176266: Make visitUnknown specification more explicit
darcy
parents: 44062
diff changeset
   274
         * @implSpec This implementation throws {@code new UnknownDirectiveException(d, p)}.
44062
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   275
         */
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   276
        default R visitUnknown(Directive d, P p) {
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   277
            throw new UnknownDirectiveException(d, p);
9a579f258574 8175118: Revisit modeling of module directives
jjg
parents: 43767
diff changeset
   278
        }
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   279
    }
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   280
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   281
    /**
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   282
     * A dependency of a module.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   283
     * @since 9
43767
9cff98a149cb 8173393: Module system implementation refresh (2/2017)
alanb
parents: 43567
diff changeset
   284
     * @spec JPMS
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   285
     */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   286
    interface RequiresDirective extends Directive {
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   287
        /**
42407
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   288
         * Returns whether or not this is a static dependency.
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   289
         * @return whether or not this is a static dependency
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   290
         */
42407
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   291
        boolean isStatic();
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   292
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   293
        /**
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   294
         * Returns whether or not this is a transitive dependency.
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   295
         * @return whether or not this is a transitive dependency
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   296
         */
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   297
        boolean isTransitive();
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   298
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   299
        /**
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   300
         * Returns the module that is required
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   301
         * @return the module that is required
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   302
         */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   303
        ModuleElement getDependency();
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   304
    }
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   305
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   306
    /**
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   307
     * An exported package of a module.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   308
     * @since 9
43767
9cff98a149cb 8173393: Module system implementation refresh (2/2017)
alanb
parents: 43567
diff changeset
   309
     * @spec JPMS
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   310
     */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   311
    interface ExportsDirective extends Directive {
42407
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   312
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   313
        /**
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   314
         * Returns the package being exported.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   315
         * @return the package being exported
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   316
         */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   317
        PackageElement getPackage();
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   318
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   319
        /**
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   320
         * Returns the specific modules to which the package is being exported,
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   321
         * or null, if the package is exported to all modules which
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   322
         * have readability to this module.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   323
         * @return the specific modules to which the package is being exported
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   324
         */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   325
        List<? extends ModuleElement> getTargetModules();
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   326
    }
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   327
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   328
    /**
42407
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   329
     * An opened package of a module.
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   330
     * @since 9
43767
9cff98a149cb 8173393: Module system implementation refresh (2/2017)
alanb
parents: 43567
diff changeset
   331
     * @spec JPMS
42407
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   332
     */
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   333
    interface OpensDirective extends Directive {
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   334
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   335
        /**
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   336
         * Returns the package being opened.
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   337
         * @return the package being opened
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   338
         */
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   339
        PackageElement getPackage();
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   340
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   341
        /**
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   342
         * Returns the specific modules to which the package is being open
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   343
         * or null, if the package is open all modules which
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   344
         * have readability to this module.
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   345
         * @return the specific modules to which the package is being opened
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   346
         */
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   347
        List<? extends ModuleElement> getTargetModules();
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   348
    }
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   349
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   350
    /**
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   351
     * An implementation of a service provided by a module.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   352
     * @since 9
43767
9cff98a149cb 8173393: Module system implementation refresh (2/2017)
alanb
parents: 43567
diff changeset
   353
     * @spec JPMS
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   354
     */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   355
    interface ProvidesDirective extends Directive {
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   356
        /**
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   357
         * Returns the service being provided.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   358
         * @return the service being provided
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   359
         */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   360
        TypeElement getService();
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   361
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   362
        /**
42407
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   363
         * Returns the implementations of the service being provided.
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   364
         * @return the implementations of the service being provided
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   365
         */
42407
f3702cff2933 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36526
diff changeset
   366
        List<? extends TypeElement> getImplementations();
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   367
    }
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   368
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   369
    /**
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   370
     * A reference to a service used by a module.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   371
     * @since 9
43767
9cff98a149cb 8173393: Module system implementation refresh (2/2017)
alanb
parents: 43567
diff changeset
   372
     * @spec JPMS
36526
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   373
     */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   374
    interface UsesDirective extends Directive {
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   375
        /**
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   376
         * Returns the service that is used.
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   377
         * @return the service that is used
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   378
         */
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   379
        TypeElement getService();
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   380
    }
3b41f1c69604 8142968: Module System implementation
alanb
parents:
diff changeset
   381
}