001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: /**
018: * @author Evgueni V. Brevnov
019: * @version $Revision: 1.1.2.3.4.3 $
020: */package org.apache.harmony.kernel.vm;
021:
022: import org.apache.harmony.vm.VMStack;
023:
024: public final class VM {
025:
026: public static boolean closeJars = false;
027: public static boolean deleteOnExit = false;
028:
029: private VM() {
030: }
031:
032: /* PUBLIC */
033:
034: /**
035: * 1) Our implementation uses null for bootstrap class loader. So we return
036: * first non-null class loader.
037: * 2) We expect this method will be removed since it's
038: * not safe to return class loader from the stack with out security checks.
039: * @deprecated
040: */
041: public static ClassLoader getNonBootstrapClassLoader() {
042:
043: for (int i = 0;; i++) {
044: Class clazz = VMStack.getCallerClass(i);
045: if (clazz == null) {
046: return null;
047: }
048: ClassLoader loader = getClassLoader(clazz);
049: if (loader != null) {
050: return loader;
051: }
052: }
053: }
054:
055: /**
056: * Always return null for bootstrap class loader
057: */
058: public static ClassLoader bootCallerClassLoader() {
059: return null;
060: }
061:
062: /**
063: * 1) We expect this method will be removed since it's
064: * not safe to return class loader from the stack with out security checks.
065: * @deprecated
066: */
067: public static ClassLoader callerClassLoader() {
068: return getStackClassLoader(2);
069: }
070:
071: private static native ClassLoader getClassLoader(Class clazz);
072:
073: /* PACKAGE PRIVATE */
074:
075: public static final ClassLoader getStackClassLoader(int depth) {
076: Class clazz = VMStack.getCallerClass(depth);
077: return clazz != null ? getClassLoader(clazz) : null;
078: }
079:
080: /* PRIVATE */
081:
082: /**
083: * 1) This is temporary implementation
084: * 2) We've proposed another approach to perform shutdown actions.
085: */
086: public static void closeJars() {
087: closeJars = true;
088: }
089:
090: /**
091: * 1) This is temporary implementation
092: * 2) We've proposed another approach to perform shutdown actions.
093: */
094: public static void deleteOnExit() {
095: deleteOnExit = true;
096: }
097:
098: /**
099: * Returns an intern-ed representation of the
100: * String
101: *
102: * @param s string to be interned
103: * @return String that has the same contents as
104: * argument, but from internal pool
105: */
106: public static synchronized String intern(String s) {
107: return internedStrings.intern(s);
108: }
109:
110: /**
111: * Invokes native string interning service.
112: */
113: private static InternMap internedStrings;
114:
115: static {
116: // initialize the storage for interned strings
117: internedStrings = new InternMap(32768);
118: }
119: }
|