/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.harmony.kernel.vm; /** * This class must be implemented by the vm vendor. Represents the running * virtual machine. All VM specific API are implemented on this class. * <p> * Note that all methods in VM are static. There is no singleton instance which * represents the actively running VM. */ public final class VM { /* * kernelVersion has the format: aabbxxyy where: aa - major version of * kernel. Must equal that stored in jcl. bb - minor version of kernel. Must * be >= that in jcl. xx - major version of jcl. Must equal that stored in * kernel. yy - minor version of jcl. Must be >= that in kernel. */ private static final int kernelVersion = 0x01000100; /** * This method must be provided by the vm vendor, as it is used by * org.apache.harmony.kernel.vm.MsgHelp.setLocale() to get the bootstrap * ClassLoader. MsgHelp uses the bootstrap ClassLoader to find the resource * bundle of messages packaged with the bootstrap classes. Returns the * ClassLoader of the method (including natives) at the specified depth on * the stack of the calling thread. Frames representing the VM * implementation of java.lang.reflect are not included in the list. This is * not a public method as it can return the bootstrap class loader, which * should not be accessed by non-bootstrap classes. Notes: * <ul> * <li>This method operates on the defining classes of methods on stack. * NOT the classes of receivers.</li> * <li>The item at depth zero is the caller of this method</li> * </ul> * * @param depth the stack depth of the requested ClassLoader * @return the ClassLoader at the specified depth * @see java.lang.ClassLoader#getStackClassLoader */ static final ClassLoader getStackClassLoader(int depth) { return null; }; /** * This method must be provided by the vm vendor, as it is used by other * provided class implementations. For example, * java.io.ObjectInputStream.readObject() and * java.io.ObjectInputStream.resolveProxyClass(). It is also useful for * other classes, such as java.rmi.server.RMIClassLoader. Walk the stack and * answer the most recent non-null and non-bootstrap ClassLoader on the * stack of the calling thread. If no such ClassLoader is found, null is * returned. Notes: 1) This method operates on the defining classes of * methods on stack. NOT the classes of receivers. * * @return the first non-bootstrap ClassLoader on the stack */ static public final ClassLoader getNonBootstrapClassLoader() { return null; }; /** * Initialize the classloader. * * @param loader ClassLoader the ClassLoader instance * @param bootLoader boolean true for the bootstrap class loader */ public final static void initializeClassLoader(ClassLoader loader, boolean bootLoader) { return; }; /** * This method must be provided by the vm vendor. * * Searches an internal table of strings for a string equal to the specified * String. If the string is not in the table, it is added. Returns the * string contained in the table which is equal to the specified String. The * same string object is always answered for strings which are equal. * * @param string the String to intern * * @return the interned string equal to the specified String */ public static final String intern(String string) { return null; } /** * Native used to find and load a class using the VM * * @return java.lang.Class the class or null. * @param className String the name of the class to search for. * @param classLoader the classloader to do the work */ static Class<?> findClassOrNull(String className, ClassLoader classLoader) { return null; } /** * This method must be included, as it is used by * ResourceBundle.getBundle(), and other places as well. The reference * implementation of this method uses the getStackClassLoader() method. * Returns the ClassLoader of the method that called the caller. i.e. A.x() * calls B.y() calls callerClassLoader(), A's ClassLoader will be returned. * Returns null for the bootstrap ClassLoader. * * @return a ClassLoader or null for the bootstrap ClassLoader * @throws SecurityException when called from a non-bootstrap Class */ public static ClassLoader callerClassLoader() { return null; } /** * This method must be provided by the vm vendor, as it is used by * org.apache.harmony.luni.util.MsgHelp.setLocale() to get the bootstrap * ClassLoader. MsgHelp uses the bootstrap ClassLoader to find the resource * bundle of messages packaged with the bootstrap classes. The reference * implementation of this method uses the getStackClassLoader() method. * * Returns the ClassLoader of the method that called the caller. i.e. A.x() * calls B.y() calls callerClassLoader(), A's ClassLoader will be returned. * Returns null for the bootstrap ClassLoader. * * @return a ClassLoader * * @throws SecurityException when called from a non-bootstrap Class */ public static ClassLoader bootCallerClassLoader() { return null; } /** * Native used to dump a string to the system console for debugging. * * @param str String the String to display */ public static void dumpString(String str) { return; } /** * Get the classpath entry that was used to load the class that is the arg. * <p> * This method is for internal use only. * * @param targetClass Class the class to set the classpath of. * @see java.lang.Class */ static int getCPIndexImpl(Class<?> targetClass) { return 0; } /** * Does internal initialization required by VM. * */ static void initializeVM() { } /** * Registers a new virtual-machine shutdown hook. This is equivalent to the * 1.3 API of the same name. * * @param hook the hook (a Thread) to register */ public static void addShutdownHook(Thread hook) { return; } /** * De-registers a previously-registered virtual-machine shutdown hook. This * is equivalent to the 1.3 API of the same name. * * @param hook the hook (a Thread) to de-register * @return true if the hook could be de-registered */ public static boolean removeShutdownHook(Thread hook) { return false; } /** * This method must be provided by the vm vendor. Called to signal that the * org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnection * class has been loaded and JarURLConnection.closeCachedFiles() should be * called on VM shutdown. */ public static void closeJars() { return; } /** * This method must be provided by the vm vendor. Called to signal that the * org.apache.harmony.luni.util.DeleteOnExit class has been loaded and * DeleteOnExit.deleteOnExit() should be called on VM shutdown. */ public static void deleteOnExit() { return; } // Constants used by getClassPathEntryType to indicate the class path entry // type static final int CPE_TYPE_UNKNOWN = 0; static final int CPE_TYPE_DIRECTORY = 1; static final int CPE_TYPE_JAR = 2; static final int CPE_TYPE_TCP = 3; static final int CPE_TYPE_UNUSABLE = 5; /** * Return the type of the specified entry on the class path for a * ClassLoader. Valid types are: CPE_TYPE_UNKNOWN CPE_TYPE_DIRECTORY * CPE_TYPE_JAR CPE_TYPE_TCP - this is obsolete CPE_TYPE_UNUSABLE * * @param classLoader the ClassLoader * @param cpIndex the index on the class path * * @return a int which specifies the class path entry type */ static final int getClassPathEntryType(Object classLoader, int cpIndex) { return 0; } /** * Returns command line arguments passed to the VM. Internally these are * broken into optionString and extraInfo. This only returns the * optionString part. * <p> * * @return a String array containing the optionString part of command line * arguments */ public static String[] getVMArgs() { return null; } /** * Return the number of entries on the bootclasspath. * * @return an int which is the number of entries on the bootclasspath */ static int getClassPathCount() { return 0; } /** * Return the specified bootclasspath entry. * * @param index the index of the bootclasspath entry * * @return a byte array containing the bootclasspath entry * specified in the vm options */ static byte[] getPathFromClassPath(int index) { return null; } /** * This method must be provided by the vm vendor. * * Returns an int containing the version number of the kernel. Used to check for kernel * compatibility. * * @return an int containing the kernel version number */ public static int getKernelVersion() { return kernelVersion; } }