1 /*
   2  * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package jdk.nashorn.internal.tools.nasgen;
  27 
  28 import java.lang.invoke.MethodHandle;
  29 import java.util.ArrayList;
  30 import java.util.Collection;
  31 import java.util.Collections;
  32 import java.util.List;
  33 import jdk.internal.org.objectweb.asm.Type;
  34 
  35 /**
  36  * String constants used for code generation/instrumentation.
  37  */
  38 @SuppressWarnings("javadoc")
  39 public interface StringConstants {
  40     static final String NASHORN_INTERNAL = "jdk/nashorn/internal/";
  41     static final String OBJ_PKG = NASHORN_INTERNAL + "objects/";
  42     static final String OBJ_ANNO_PKG = OBJ_PKG + "annotations/";
  43     static final String RUNTIME_PKG = NASHORN_INTERNAL + "runtime/";
  44     static final String SCRIPTS_PKG = NASHORN_INTERNAL + "scripts/";
  45 
  46     // standard jdk types, methods
  47     static final Type TYPE_METHODHANDLE         = Type.getType(MethodHandle.class);
  48     static final Type TYPE_SPECIALIZATION       = Type.getType("L" + RUNTIME_PKG + "Specialization;");
  49     static final Type TYPE_SPECIALIZATION_ARRAY = Type.getType("[L" + RUNTIME_PKG + "Specialization;");
  50     static final Type TYPE_OBJECT               = Type.getType(Object.class);
  51     static final Type TYPE_STRING               = Type.getType(String.class);
  52     static final Type TYPE_CLASS                = Type.getType(Class.class);
  53     static final Type TYPE_COLLECTION           = Type.getType(Collection.class);
  54     static final Type TYPE_COLLECTIONS          = Type.getType(Collections.class);
  55     static final Type TYPE_ARRAYLIST            = Type.getType(ArrayList.class);
  56     static final Type TYPE_LIST                 = Type.getType(List.class);
  57 
  58     static final String CLINIT = "<clinit>";
  59     static final String INIT = "<init>";
  60     static final String DEFAULT_INIT_DESC = Type.getMethodDescriptor(Type.VOID_TYPE);
  61 
  62     static final String SPECIALIZATION_TYPE = TYPE_SPECIALIZATION.getInternalName();
  63     static final String SPECIALIZATION_INIT2 = Type.getMethodDescriptor(Type.VOID_TYPE, TYPE_METHODHANDLE, Type.BOOLEAN_TYPE, Type.BOOLEAN_TYPE);
  64     static final String SPECIALIZATION_INIT3 = Type.getMethodDescriptor(Type.VOID_TYPE, TYPE_METHODHANDLE, TYPE_CLASS, Type.BOOLEAN_TYPE, Type.BOOLEAN_TYPE);
  65     static final String OBJECT_TYPE = TYPE_OBJECT.getInternalName();
  66     static final String OBJECT_DESC = TYPE_OBJECT.getDescriptor();
  67     static final String STRING_DESC = TYPE_STRING.getDescriptor();
  68     static final String OBJECT_ARRAY_DESC = Type.getDescriptor(Object[].class);
  69     static final String ARRAYLIST_TYPE = TYPE_ARRAYLIST.getInternalName();
  70     static final String COLLECTION_TYPE = TYPE_COLLECTION.getInternalName();
  71     static final String COLLECTIONS_TYPE = TYPE_COLLECTIONS.getInternalName();
  72 
  73     // java.util.Collection.add(Object)
  74     static final String COLLECTION_ADD = "add";
  75     static final String COLLECTION_ADD_DESC = Type.getMethodDescriptor(Type.BOOLEAN_TYPE, TYPE_OBJECT);
  76     // java.util.ArrayList.<init>(int)
  77     static final String ARRAYLIST_INIT_DESC = Type.getMethodDescriptor(Type.VOID_TYPE, Type.INT_TYPE);
  78     // java.util.Collections.EMPTY_LIST
  79     static final String COLLECTIONS_EMPTY_LIST = "EMPTY_LIST";
  80     static final String LIST_DESC = TYPE_LIST.getDescriptor();
  81 
  82     // Nashorn types, methods
  83     static final Type TYPE_ACCESSORPROPERTY   = Type.getType("L" + RUNTIME_PKG + "AccessorProperty;");
  84     static final Type TYPE_PROPERTYMAP        = Type.getType("L" + RUNTIME_PKG + "PropertyMap;");
  85     static final Type TYPE_PROTOTYPEOBJECT    = Type.getType("L" + RUNTIME_PKG + "PrototypeObject;");
  86     static final Type TYPE_SCRIPTFUNCTION     = Type.getType("L" + RUNTIME_PKG + "ScriptFunction;");
  87     static final Type TYPE_SCRIPTOBJECT       = Type.getType("L" + RUNTIME_PKG + "ScriptObject;");
  88     static final Type TYPE_NATIVESYMBOL       = Type.getType("L" + OBJ_PKG + "NativeSymbol;");
  89     static final Type TYPE_SYMBOL             = Type.getType("L" + RUNTIME_PKG + "Symbol;");
  90 
  91     static final String PROTOTYPE_SUFFIX = "$Prototype";
  92     static final String CONSTRUCTOR_SUFFIX = "$Constructor";
  93 
  94     // This field name is known to Nashorn runtime (Context).
  95     // Synchronize the name change, if needed at all.
  96     static final String PROPERTYMAP_FIELD_NAME = "$nasgenmap$";
  97     static final String $CLINIT$ = "$clinit$";
  98 
  99     // AccessorProperty
 100     static final String ACCESSORPROPERTY_TYPE = TYPE_ACCESSORPROPERTY.getInternalName();
 101     static final String ACCESSORPROPERTY_CREATE = "create";
 102     static final String ACCESSORPROPERTY_CREATE_DESC =
 103         Type.getMethodDescriptor(TYPE_ACCESSORPROPERTY, TYPE_OBJECT, Type.INT_TYPE, TYPE_METHODHANDLE, TYPE_METHODHANDLE);
 104 
 105     // PropertyMap
 106     static final String PROPERTYMAP_TYPE = TYPE_PROPERTYMAP.getInternalName();
 107     static final String PROPERTYMAP_DESC = TYPE_PROPERTYMAP.getDescriptor();
 108     static final String PROPERTYMAP_NEWMAP = "newMap";
 109     static final String PROPERTYMAP_NEWMAP_DESC = Type.getMethodDescriptor(TYPE_PROPERTYMAP, TYPE_COLLECTION);
 110 
 111     // PrototypeObject
 112     static final String PROTOTYPEOBJECT_TYPE = TYPE_PROTOTYPEOBJECT.getInternalName();
 113     static final String PROTOTYPEOBJECT_SETCONSTRUCTOR = "setConstructor";
 114     static final String PROTOTYPEOBJECT_SETCONSTRUCTOR_DESC = Type.getMethodDescriptor(Type.VOID_TYPE, TYPE_OBJECT, TYPE_OBJECT);
 115 
 116     // ScriptFunction
 117     static final String SCRIPTFUNCTION_TYPE = TYPE_SCRIPTFUNCTION.getInternalName();
 118     static final String SCRIPTFUNCTION_SETARITY = "setArity";
 119     static final String SCRIPTFUNCTION_SETARITY_DESC = Type.getMethodDescriptor(Type.VOID_TYPE, Type.INT_TYPE);
 120     static final String SCRIPTFUNCTION_SETDOCUMENTATIONKEY = "setDocumentationKey";
 121     static final String SCRIPTFUNCTION_SETDOCUMENTATIONKEY_DESC = Type.getMethodDescriptor(Type.VOID_TYPE, TYPE_STRING);
 122     static final String SCRIPTFUNCTION_SETPROTOTYPE = "setPrototype";
 123     static final String SCRIPTFUNCTION_SETPROTOTYPE_DESC = Type.getMethodDescriptor(Type.VOID_TYPE, TYPE_OBJECT);
 124     static final String SCRIPTFUNCTION_CREATEBUILTIN = "createBuiltin";
 125     static final String SCRIPTFUNCTION_CREATEBUILTIN_DESC =
 126         Type.getMethodDescriptor(TYPE_SCRIPTFUNCTION, TYPE_STRING, TYPE_METHODHANDLE);
 127     static final String SCRIPTFUNCTION_CREATEBUILTIN_SPECS_DESC =
 128         Type.getMethodDescriptor(TYPE_SCRIPTFUNCTION, TYPE_STRING, TYPE_METHODHANDLE, TYPE_SPECIALIZATION_ARRAY);
 129     static final String SCRIPTFUNCTION_INIT_DESC3 =
 130         Type.getMethodDescriptor(Type.VOID_TYPE, TYPE_STRING, TYPE_METHODHANDLE, TYPE_SPECIALIZATION_ARRAY);
 131     static final String SCRIPTFUNCTION_INIT_DESC4 =
 132         Type.getMethodDescriptor(Type.VOID_TYPE, TYPE_STRING, TYPE_METHODHANDLE, TYPE_PROPERTYMAP, TYPE_SPECIALIZATION_ARRAY);
 133 
 134     // ScriptObject
 135     static final String SCRIPTOBJECT_TYPE = TYPE_SCRIPTOBJECT.getInternalName();
 136     static final String SCRIPTOBJECT_DESC = TYPE_SCRIPTOBJECT.getDescriptor();
 137     static final String SCRIPTOBJECT_INIT_DESC = Type.getMethodDescriptor(Type.VOID_TYPE, TYPE_PROPERTYMAP);
 138 
 139     static final String GETTER_PREFIX = "G$";
 140     static final String SETTER_PREFIX = "S$";
 141 
 142     // ScriptObject.getClassName() method.
 143     static final String GET_CLASS_NAME = "getClassName";
 144     static final String GET_CLASS_NAME_DESC = Type.getMethodDescriptor(TYPE_STRING);
 145 
 146     // NativeSymbol
 147     static final String NATIVESYMBOL_TYPE = TYPE_NATIVESYMBOL.getInternalName();
 148     static final String SYMBOL_DESC = TYPE_SYMBOL.getDescriptor();
 149     static final String SYMBOL_PREFIX = "@@";
 150 }