Example usage for jdk.nashorn.api.scripting ScriptObjectMirror getSlot

List of usage examples for jdk.nashorn.api.scripting ScriptObjectMirror getSlot

Introduction

In this page you can find the example usage for jdk.nashorn.api.scripting ScriptObjectMirror getSlot.

Prototype

@Override
    public Object getSlot(final int index) 

Source Link

Usage

From source file:JavaScriptTest.java

public static String serialize(Object obj) {
    StringBuilder ret = new StringBuilder();
    if (obj instanceof ScriptObjectMirror) {
        ScriptObjectMirror om = (ScriptObjectMirror) obj;
        //System.out.println(om+" isArray "+om.isArray());
        //System.out.println(om+" isEmpty "+om.isEmpty());
        //System.out.println(om+" isExtensible "+om.isExtensible());
        //System.out.println(om+" isFrozen "+om.isFrozen());
        //System.out.println(om+" isFunction "+om.isFunction());
        //System.out.println(om+" isSealed "+om.isSealed());
        //System.out.println(om+" isStrictFunction "+om.isStrictFunction());            
        //System.out.println(om+" getOwnKeys "+Arrays.asList(om.getOwnKeys(true)));  

        if (om.isFunction()) {
            ret.append(om.toString());//from  www  .j a  va2s  .  c  om
        } else if (om.isArray()) {
            ret.append("[");
            //ret.append("isArray:"+om.toString());
            for (int x = 0; x < om.size(); x++) {
                Object o = om.getSlot(x);
                ret.append(serialize(o));
                if (x + 1 < om.size()) {
                    ret.append(",");
                }
            }
            ret.append("]");
        } else if (om.toString().indexOf("global") > -1) {
            Iterator<Map.Entry<String, Object>> it = om.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry<String, Object> entry = it.next();
                ret.append("var " + entry.getKey() + "=" + serialize(entry.getValue()) + ";\n");
            }
        } else {
            ret.append("{");
            Iterator<Map.Entry<String, Object>> it = om.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry<String, Object> entry = it.next();
                ret.append(entry.getKey() + ":" + serialize(entry.getValue()));
                if (it.hasNext()) {
                    ret.append(",");
                }
            }
            ret.append("}");
        }
    } else if (obj instanceof String) {
        ret.append("\"" + obj + "\"");
    } else {
        ret.append(obj);
    }
    return ret.toString();
}

From source file:com.threecrickets.jvm.json.nashorn.ScriptObjectMirrorEncoder.java

License:Mozilla Public License

public void encode(Object object, JsonContext context) throws IOException {
    ScriptObjectMirror scriptObjectMirror = (ScriptObjectMirror) object;

    Object wrapped = ScriptObjectMirror.unwrap(scriptObjectMirror, Context.getGlobal());
    if (!(wrapped instanceof ScriptObjectMirror)) {
        context.encode(wrapped);//from ww  w  .  j  a v  a2  s .  co m
        return;
    }

    if (scriptObjectMirror.isArray()) {
        context.out.append('[');

        int length = scriptObjectMirror.size();
        if (length > 0) {
            context.newline();

            for (int i = 0; i < length; i++) {
                Object value = scriptObjectMirror.getSlot(i);

                context.indentNested();
                context.nest().encode(value);

                if (i < length - 1)
                    context.comma();
            }

            context.newline();
            context.indent();
        }

        context.out.append(']');
    } else {
        context.out.append('{');

        String[] keys = scriptObjectMirror.getOwnKeys(true);
        int length = keys.length;
        if (length > 0) {
            context.newline();

            for (int i = 0; i < length; i++) {
                String key = keys[i];
                Object value = scriptObjectMirror.get(key);

                context.indentNested();
                context.quoted(key);
                context.colon();
                context.nest().encode(value);

                if (i < length - 1)
                    context.comma();
            }

            context.newline();
            context.indent();
        }

        context.out.append('}');
    }
}

From source file:org.bson.jvm.nashorn.ScriptObjectMirrorCodec.java

License:Apache License

@SuppressWarnings("unchecked")
public void encode(BsonWriter writer, ScriptObjectMirror scriptObjectMirror, EncoderContext encoderContext) {
    Object wrapped = ScriptObjectMirror.unwrap(scriptObjectMirror, Context.getGlobal());
    if (!(wrapped instanceof ScriptObjectMirror)) {
        // Attempt to encode the wrapped object
        Codec<Object> codec = null;
        try {//from   w  w  w .j  a  v a  2s  .  com
            codec = (Codec<Object>) codecRegistry.get(wrapped.getClass());
        } catch (CodecConfigurationException x) {
        }
        if (codec != null) {
            codec.encode(writer, wrapped, encoderContext);
            return;
        }
    }

    if (scriptObjectMirror.isArray()) {
        writer.writeStartArray();
        for (int i = 0, length = scriptObjectMirror.size(); i < length; i++) {
            Object item = scriptObjectMirror.getSlot(i);
            BsonUtil.writeChild(item, writer, encoderContext, codecRegistry);
        }
        writer.writeEndArray();
    } else {
        writer.writeStartDocument();
        for (String key : scriptObjectMirror.getOwnKeys(true)) {
            Object value = scriptObjectMirror.get(key);
            writer.writeName(key);
            BsonUtil.writeChild(value, writer, encoderContext, codecRegistry);
        }
        writer.writeEndDocument();
    }
}

From source file:org.eclipse.wst.jsdt.internal.esprima.DOMASTConverter.java

License:Open Source License

private void setRange(final ScriptObjectMirror object, final ASTNode node) {
    Object o = object.getMember("range"); //$NON-NLS-1$
    if (ScriptObjectMirror.isUndefined(o))
        return;/*from   www .jav a 2 s.c  om*/
    ScriptObjectMirror range = (ScriptObjectMirror) o;
    Number x = (Number) range.getSlot(0);
    Number y = (Number) range.getSlot(1);
    final int startPosition = x.intValue();
    final int length = y.intValue() - x.intValue();
    node.setSourceRange(startPosition, length);

    switch (node.getNodeType()) {
    case ASTNode.FUNCTION_DECLARATION_STATEMENT:
        FunctionDeclarationStatement fd = (FunctionDeclarationStatement) node;
        if (fd.getDeclaration().getJavadoc() == null)
            fd.getDeclaration().setSourceRange(startPosition, length);
        else {
            final int jsdocStart = fd.getDeclaration().getJavadoc().getStartPosition();
            fd.getDeclaration().setSourceRange(jsdocStart, length + startPosition - jsdocStart);
        }
        break;
    case ASTNode.FUNCTION_EXPRESSION:
        FunctionExpression fe = (FunctionExpression) node;
        if (fe.getMethod().getJavadoc() == null)
            fe.getMethod().setSourceRange(startPosition, length);
        else {
            final int jsdocStart = fe.getMethod().getJavadoc().getStartPosition();
            fe.getMethod().setSourceRange(jsdocStart, length + startPosition - jsdocStart);
        }
        break;
    case ASTNode.FUNCTION_DECLARATION:
        FunctionDeclaration fdec = (FunctionDeclaration) node;
        if (fdec.getJavadoc() != null) {
            final int jsdocStart = fdec.getJavadoc().getStartPosition();
            fdec.setSourceRange(jsdocStart, length + startPosition - jsdocStart);
        }
        break;
    case ASTNode.VARIABLE_DECLARATION_STATEMENT:
        VariableDeclarationStatement vds = (VariableDeclarationStatement) node;
        if (vds.getJavadoc() != null) {
            final int jsdocStart = vds.getJavadoc().getStartPosition();
            vds.setSourceRange(jsdocStart, length + startPosition - jsdocStart);
        }
        break;
    }
}

From source file:org.eclipse.wst.jsdt.internal.esprima.EsprimaParser.java

License:Open Source License

/**
 * Add the errors reported on the "errors" array to
 * result.//from  w w w  .j  a  v  a2s  .  co m
 *
 * @param jsObject
 * @param result
 */
private void reportErrors(final ScriptObjectMirror jsObject, final JavaScriptUnit result) {
    ScriptObjectMirror errors = (ScriptObjectMirror) jsObject.getMember("errors"); //$NON-NLS-1$
    if (errors == null || errors.size() < 1)
        return;
    DefaultProblem[] problems = new DefaultProblem[errors.size()];
    for (int i = 0; i < errors.size(); ++i)
        problems[i] = createProblem(((ScriptObjectMirror) errors.getSlot(i)));
    result.setFlags(ASTNode.MALFORMED);
    result.setProblems(problems);
}

From source file:org.eclipse.wst.jsdt.internal.esprima.EsprimaParser.java

License:Open Source License

/**
 * @param jsObject//  w ww  .j  a  v  a 2 s.c o  m
 * @param result
 */
private void buildComments(ScriptObjectMirror jsObject, JavaScriptUnit result, AST t) {
    ScriptObjectMirror comments = (ScriptObjectMirror) jsObject.getMember("comments"); //$NON-NLS-1$

    int commentSize = comments.size();
    Comment[] resultComments = new Comment[commentSize];
    for (int i = 0; i < commentSize; ++i) {
        ScriptObjectMirror obj = (ScriptObjectMirror) comments.getSlot(i);
        Comment newComment = createComment(obj, t);
        newComment.setAlternateRoot(result);
        resultComments[i] = newComment;
    }
    result.setCommentTable(resultComments);
}

From source file:org.eclipse.wst.jsdt.internal.esprima.EsprimaParser.java

License:Open Source License

/**
 * @param m/* ww w  .  ja v  a2 s.c o  m*/
 * @return
 */
static Comment createComment(ScriptObjectMirror m, AST t) {
    String type = (String) m.getMember("type"); //$NON-NLS-1$
    String value = (String) m.getMember("value"); //$NON-NLS-1$
    Comment $ = "Line".equals(type) ? t.newLineComment() //$NON-NLS-1$
            : !value.startsWith("*") ? t.newBlockComment() : t.newJSdoc(); //$NON-NLS-1$
    if ($.isDocComment())
        ((JSdoc) $).setComment("/*" + value + "*/"); //$NON-NLS-1$//$NON-NLS-2$
    ScriptObjectMirror r = (ScriptObjectMirror) m.getMember("range"); //$NON-NLS-1$
    Number x = (Number) r.getSlot(0);
    Number y = (Number) r.getSlot(1);
    $.setSourceRange(x.intValue(), y.intValue() - x.intValue());
    return $;
}