/*
 * Copyright (c) 2015, 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.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * 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.
 */

package jdk.nashorn.internal.ir;

import java.util.List;

ES6 Module information.
/** * ES6 Module information. */
public final class Module {
The synthetic binding name assigned to export default declarations with unnamed expressions.
/** The synthetic binding name assigned to export default declarations with unnamed expressions. */
public static final String DEFAULT_EXPORT_BINDING_NAME = "*default*";
The export default name.
/** The {@code export default} name. */
public static final String DEFAULT_NAME = "default";
The export * name.
/** The {@code export *} name. */
public static final String STAR_NAME = "*";
A module ExportEntry record.
See Also:
/** * A module ExportEntry record. * * @see <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-source-text-module-records">es6 modules</a> */
public static final class ExportEntry { private final IdentNode exportName; private final IdentNode moduleRequest; private final IdentNode importName; private final IdentNode localName; private final int startPosition; private final int endPosition; private ExportEntry(final IdentNode exportName, final IdentNode moduleRequest, final IdentNode importName, final IdentNode localName, final int startPosition, final int endPosition) { this.exportName = exportName; this.moduleRequest = moduleRequest; this.importName = importName; this.localName = localName; this.startPosition = startPosition; this.endPosition = endPosition; }
Creates a export * export entry.
Params:
  • starName – the star name
  • moduleRequest – the module request
  • startPosition – the start position
  • endPosition – the end position
Returns:the export entry
/** * Creates a {@code export *} export entry. * * @param starName the star name * @param moduleRequest the module request * @param startPosition the start position * @param endPosition the end position * @return the export entry */
public static ExportEntry exportStarFrom(final IdentNode starName, final IdentNode moduleRequest, final int startPosition, final int endPosition) { return new ExportEntry(null, moduleRequest, starName, null, startPosition, endPosition); }
Creates a export default export entry with a local name.
Params:
  • defaultName – the default name
  • localName – the local name
  • startPosition – the start position
  • endPosition – the end position
Returns:the export entry
/** * Creates a {@code export default} export entry with a local name. * * @param defaultName the default name * @param localName the local name * @param startPosition the start position * @param endPosition the end position * @return the export entry */
public static ExportEntry exportDefault(final IdentNode defaultName, final IdentNode localName, final int startPosition, final int endPosition) { return new ExportEntry(defaultName, null, null, localName, startPosition, endPosition); }
Creates a export entry with a local name and export name.
Params:
  • exportName – the export name
  • localName – the local name
  • startPosition – the start position
  • endPosition – the end position
Returns:the export entry
/** * Creates a export entry with a local name and export name. * * @param exportName the export name * @param localName the local name * @param startPosition the start position * @param endPosition the end position * @return the export entry */
public static ExportEntry exportSpecifier(final IdentNode exportName, final IdentNode localName, final int startPosition, final int endPosition) { return new ExportEntry(exportName, null, null, localName, startPosition, endPosition); }
Creates a export entry with an export name.
Params:
  • exportName – the export name
  • startPosition – the start position
  • endPosition – the end position
Returns:the export entry
/** * Creates a export entry with an export name. * * @param exportName the export name * @param startPosition the start position * @param endPosition the end position * @return the export entry */
public static ExportEntry exportSpecifier(final IdentNode exportName, final int startPosition, final int endPosition) { return exportSpecifier(exportName, exportName, startPosition, endPosition); }
Create a copy of this entry with the specified module request string.
Params:
  • moduleRequest – the module request
  • endPosition – the new endPosition
Returns:the new export entry
/** * Create a copy of this entry with the specified {@code module request} string. * * @param moduleRequest the module request * @param endPosition the new endPosition * @return the new export entry */
public ExportEntry withFrom(@SuppressWarnings("hiding") final IdentNode moduleRequest, final int endPosition) { // Note that "from" moves localName to inputName, and localName becomes null return new ExportEntry(exportName, moduleRequest, localName, null, startPosition, endPosition); }
Returns the entry's export name.
Returns:the export name
/** * Returns the entry's export name. * * @return the export name */
public IdentNode getExportName() { return exportName; }
Returns the entry's module request.
Returns:the module request
/** * Returns the entry's module request. * * @return the module request */
public IdentNode getModuleRequest() { return moduleRequest; }
Returns the entry's import name.
Returns:the import name
/** * Returns the entry's import name. * * @return the import name */
public IdentNode getImportName() { return importName; }
Returns the entry's local name.
Returns:the local name
/** * Returns the entry's local name. * * @return the local name */
public IdentNode getLocalName() { return localName; }
Returns the entry's start position.
Returns:the start position
/** * Returns the entry's start position. * * @return the start position */
public int getStartPosition() { return startPosition; }
Returns the entry's end position.
Returns:the end position
/** * Returns the entry's end position. * * @return the end position */
public int getEndPosition() { return endPosition; } @Override public String toString() { return "ExportEntry [exportName=" + exportName + ", moduleRequest=" + moduleRequest + ", importName=" + importName + ", localName=" + localName + "]"; } }
An ImportEntry record.
See Also:
/** * An ImportEntry record. * * @see <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-source-text-module-records">es6 modules</a> */
public static final class ImportEntry { private final IdentNode moduleRequest; private final IdentNode importName; private final IdentNode localName; private final int startPosition; private final int endPosition; private ImportEntry(final IdentNode moduleRequest, final IdentNode importName, final IdentNode localName, final int startPosition, final int endPosition) { this.moduleRequest = moduleRequest; this.importName = importName; this.localName = localName; this.startPosition = startPosition; this.endPosition = endPosition; }
Creates an import entry with the given import and local names.
Params:
  • importName – the import name
  • localName – the local name
  • startPosition – the start position
  • endPosition – the end position
Returns:the import entry
/** * Creates an import entry with the given import and local names. * * @param importName the import name * @param localName the local name * @param startPosition the start position * @param endPosition the end position * @return the import entry */
public static ImportEntry importSpecifier(final IdentNode importName, final IdentNode localName, final int startPosition, final int endPosition) { return new ImportEntry(null, importName, localName, startPosition, endPosition); }
Creates a new import entry with the given import name.
Params:
  • importName – the import name
  • startPosition – the start position
  • endPosition – the end position
Returns:the import entry
/** * Creates a new import entry with the given import name. * * @param importName the import name * @param startPosition the start position * @param endPosition the end position * @return the import entry */
public static ImportEntry importSpecifier(final IdentNode importName, final int startPosition, final int endPosition) { return importSpecifier(importName, importName, startPosition, endPosition); }
Returns a copy of this import entry with the given module request and end position.
Params:
  • moduleRequest – the module request
  • endPosition – the new end position
Returns:the new import entry
/** * Returns a copy of this import entry with the given module request and end position. * * @param moduleRequest the module request * @param endPosition the new end position * @return the new import entry */
public ImportEntry withFrom(@SuppressWarnings("hiding") final IdentNode moduleRequest, final int endPosition) { return new ImportEntry(moduleRequest, importName, localName, startPosition, endPosition); }
Returns the entry's module request.
Returns:the module request
/** * Returns the entry's module request. * * @return the module request */
public IdentNode getModuleRequest() { return moduleRequest; }
Returns the entry's import name.
Returns:the import name
/** * Returns the entry's import name. * * @return the import name */
public IdentNode getImportName() { return importName; }
Returns the entry's local name.
Returns:the local name
/** * Returns the entry's local name. * * @return the local name */
public IdentNode getLocalName() { return localName; }
Returns the entry's start position.
Returns:the start position
/** * Returns the entry's start position. * * @return the start position */
public int getStartPosition() { return startPosition; }
Returns the entry's end position.
Returns:the end position
/** * Returns the entry's end position. * * @return the end position */
public int getEndPosition() { return endPosition; } @Override public String toString() { return "ImportEntry [moduleRequest=" + moduleRequest + ", importName=" + importName + ", localName=" + localName + "]"; } } private final List<String> requestedModules; private final List<ImportEntry> importEntries; private final List<ExportEntry> localExportEntries; private final List<ExportEntry> indirectExportEntries; private final List<ExportEntry> starExportEntries;
Creates a module with the specified requested modules and import and export entries.
Params:
  • requestedModules – the requested modules
  • importEntries – the import entries
  • localExportEntries – local export entries
  • indirectExportEntries – indirect export entries
  • starExportEntries – star export entries
/** * Creates a module with the specified requested modules and import and export entries. * * @param requestedModules the requested modules * @param importEntries the import entries * @param localExportEntries local export entries * @param indirectExportEntries indirect export entries * @param starExportEntries star export entries */
public Module(final List<String> requestedModules, final List<ImportEntry> importEntries, final List<ExportEntry> localExportEntries, final List<ExportEntry> indirectExportEntries, final List<ExportEntry> starExportEntries) { this.requestedModules = requestedModules; this.importEntries = importEntries; this.localExportEntries = localExportEntries; this.indirectExportEntries = indirectExportEntries; this.starExportEntries = starExportEntries; }
Returns the list of requested modules.
Returns:the requested modules
/** * Returns the list of requested modules. * * @return the requested modules */
public List<String> getRequestedModules() { return requestedModules; }
Returns the list of import entries.
Returns:the import entries
/** * Returns the list of import entries. * * @return the import entries */
public List<ImportEntry> getImportEntries() { return importEntries; }
Returns the list of local export entries.
Returns:the local export entries
/** * Returns the list of local export entries. * * @return the local export entries */
public List<ExportEntry> getLocalExportEntries() { return localExportEntries; }
Returns the list of indirect export entries.
Returns:the indirect export entries
/** * Returns the list of indirect export entries. * * @return the indirect export entries */
public List<ExportEntry> getIndirectExportEntries() { return indirectExportEntries; }
Returns the list of star export entries.
Returns:the star export entries
/** * Returns the list of star export entries. * * @return the star export entries */
public List<ExportEntry> getStarExportEntries() { return starExportEntries; } @Override public String toString() { return "Module [requestedModules=" + requestedModules + ", importEntries=" + importEntries + ", localExportEntries=" + localExportEntries + ", indirectExportEntries=" + indirectExportEntries + ", starExportEntries=" + starExportEntries + "]"; } }