JDK 11 jdk.jshell.jmod - JShell Tool

JDK 11 jdk.jshell.jmod is the JMOD file for JDK 11 JShell tool, which can be invoked by the "jshell" command.

JDK 11 JShell tool compiled class files are stored in \fyicenter\jdk-11.0.1\jmods\jdk.jshell.jmod.

JDK 11 JShell tool compiled class files are also linked and stored in the \fyicenter\jdk-11.0.1\lib\modules JImage file.

JDK 11 JShell tool source code files are stored in \fyicenter\jdk-11.0.1\lib\src.zip\jdk.jshell.

You can click and view the content of each source code file in the list below.

✍: FYIcenter

jdk/jshell/Key.java

/*
 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package jdk.jshell;

import jdk.jshell.Snippet.Kind;
import jdk.jshell.Snippet.SubKind;

/**
 * The Key is unique for a given signature.  Used internal to the implementation
 * to group signature matched Snippets.  Snippet kinds without a signature
 * (for example expressions) each have their own UniqueKey.
 * @author Robert Field
 */
abstract class Key {

    /**
     * The unique index for this Key
     */
    private final int index;

    /**
     * The JShell corresponding to this Key
     */
    private final JShell state;

    Key(JShell state) {
        this.index = state.nextKeyIndex();
        this.state = state;
    }

    /**
     * The unique numeric identifier for the snippet.  Snippets which replace or
     * redefine existing snippets take on the same key index as the replaced or
     * redefined snippet.
     * The index values are monotonically increasing integers.
     * @return the Key index
     */
    int index() { return index; }

    /**
     * The kind for the key.  Indicates the subinterface of Key.
     * @return the Kind of the Key
     */
    abstract Kind kind();

    /**
     * For foreign key testing.
     */
    JShell state() { return state; }

    /**
     * Grouping for snippets which persist and influence future code.
     * They are keyed off at least the name.  They may be Modified/Replaced
     * with new input.
     */
    static abstract class PersistentKey extends Key {

        private final String name;

        PersistentKey(JShell state, String name) {
            super(state);
            this.name = name;
        }
        /**
         * Name of the snippet.
         *
         * @return the name of the snippet.
         */
        String name() { return name; }
    }

    /**
     * Grouping for snippets which reference declarations
     */
    static abstract class DeclarationKey extends PersistentKey {

        DeclarationKey(JShell state, String name) {
            super(state, name);
        }
    }

    /**
     * Key for a class definition Keys of TYPE_DECL. Keyed off class name.
     */
    static class TypeDeclKey extends DeclarationKey {

        TypeDeclKey(JShell state, String name) {
            super(state, name);
        }

        @Override
        Kind kind() { return Kind.TYPE_DECL; }

        @Override
        public String toString() { return "ClassKey(" + name() + ")#" + index(); }
    }

    /**
     * Key for a method definition Keys of METHOD. Keyed off method name and
     * parameter types.
     */
    static class MethodKey extends DeclarationKey {

        private final String parameterTypes;

        MethodKey(JShell state, String name, String parameterTypes) {
            super(state, name);
            this.parameterTypes = parameterTypes;
        }

        @Override
        Kind kind() { return Kind.METHOD; }

        /**
         * The parameter types of the method. Because of overloading of methods,
         * the parameter types are part of the key.
         *
         * @return a String representation of the parameter types of the method.
         */
        String parameterTypes() { return parameterTypes; }


        @Override
        public String toString() { return "MethodKey(" + name() +
                "(" + parameterTypes() + "))#" + index(); }
    }

    /**
     * Key for a variable definition Keys of VARIABLE. Keyed off variable
     * name.
     */
    static class VarKey extends DeclarationKey {

        VarKey(JShell state, String name) {
            super(state, name);
        }

        @Override
        public Kind kind() { return Kind.VAR; }

        @Override
        public String toString() { return "VariableKey(" + name() + ")#" + index(); }
    }

    /**
     * Key for an import. Keys of IMPORT. Keyed off import text and whether
     * import is static.
     */
    static class ImportKey extends PersistentKey {

        private final SubKind snippetKind;

        ImportKey(JShell state, String name,SubKind snippetKind) {
            super(state, name);
            this.snippetKind = snippetKind;
        }

        @Override
        public Kind kind() { return Kind.IMPORT; }

        /**
         * Which kind of import.
         *
         * @return the appropriate SubKind.
         */
        SubKind snippetKind() {
            return snippetKind;
        }


        @Override
        public String toString() { return "ImportKey(" + name() + "," +
                snippetKind + ")#" + index(); }
    }

    /**
     * Grouping for snippets which are the key for only one input -- even if the
     * exactly same entry is made again. The referenced snippets are thus
     * unmodifiable.
     */
    static abstract class UniqueKey extends Key {

        UniqueKey(JShell state) {
            super(state);
        }
    }

    /**
     * Key for a statement snippet. Keys of STATEMENT. Uniquely keyed, see
     * UniqueKey.
     */
    static class StatementKey extends UniqueKey {

        StatementKey(JShell state) {
            super(state);
        }


        @Override
        public Kind kind() {
            return Kind.STATEMENT;
        }

        @Override
        public String toString() { return "StatementKey#" + index(); }
    }

    /**
     * Key for an expression. Keys of EXPRESSION. Uniquely keyed, see
     * UniqueKey.
     */
    static class ExpressionKey extends UniqueKey {

        private final String name;
        private final String typeName;

        ExpressionKey(JShell state, String name, String typeName) {
            super(state);
            this.name = name;
            this.typeName = typeName;
        }

        @Override
        public Kind kind() { return Kind.EXPRESSION; }


        /**
         * Variable name which is the value of the expression. Since the
         * expression is either just an identifier which is a variable or it is
         * an assignment to a variable, there is always a variable which is the
         * subject of the expression. All other expression snippets become
         * temporary variables referenced by a VariableKey.
         *
         * @return the name of the variable which is the subject of the
         * expression.
         */
        String name() { return name; }

        /**
         * Type of the expression
         *
         * @return String representation of the type of the expression.
         */
        String typeName() { return typeName; }


        @Override
        public String toString() { return "ExpressionKey(" + name() + ")#" + index(); }
    }

    /**
     * Key for an erroneous snippet. Keys of ERRONEOUS. Uniquely keyed, see
     * UniqueKey.
     */
    static class ErroneousKey extends UniqueKey {

        ErroneousKey(JShell state) {
            super(state);
        }

        @Override
        Kind kind() { return Kind.ERRONEOUS; }

        @Override
        public String toString() { return "ErroneousKey#" + index(); }
    }
}

jdk/jshell/Key.java

 

JDK 11 jdk.jsobject.jmod - JS Object Module

JDK 11 jdk.jlink.jmod - JLink Tool

Download and Use JDK 11

⇑⇑ FAQ for JDK (Java Development Kit)

2020-06-30, 7879👍, 0💬