Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/***** BEGIN LICENSE BLOCK *****
* Version: CPL 1.0/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Common Public
* License Version 1.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.eclipse.org/legal/cpl-v10.html
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* Copyright (C) 2001-2004 Jan Arne Petersen
* Copyright (C) 2002 Benoit Cerrina
* Copyright (C) 2002-2004 Anders Bengtsson
* Copyright (C) 2004 Thomas E Enebo
* Copyright (C) 2004 Stefan Matthias Aust
* Copyright (C) 2005 Charles O Nutter
* Copyright (C) 2007 William N Dortch
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the CPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the CPL, the GPL or the LGPL.
***** END LICENSE BLOCK *****/
package org.jruby.javasupport;
import org.jruby.java.proxies.MapBasedProxyCache;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Member;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jruby.Ruby;
import org.jruby.RubyClass;
import org.jruby.RubyModule;
import org.jruby.exceptions.RaiseException;
import org.jruby.exceptions.Unrescuable;
import org.jruby.java.proxies.ProxyCache;
import org.jruby.javasupport.proxy.JavaProxyClass;
import org.jruby.javasupport.util.ObjectProxyCache;
import org.jruby.runtime.builtin.IRubyObject;
import org.jruby.util.WeakIdentityHashMap;
import org.jruby.util.cli.Options;
public class JavaSupport {
private static final Map PRIMITIVE_CLASSES = new HashMap();
static {
PRIMITIVE_CLASSES.put("boolean", Boolean.TYPE);
PRIMITIVE_CLASSES.put("byte", Byte.TYPE);
PRIMITIVE_CLASSES.put("char", Character.TYPE);
PRIMITIVE_CLASSES.put("short", Short.TYPE);
PRIMITIVE_CLASSES.put("int", Integer.TYPE);
PRIMITIVE_CLASSES.put("long", Long.TYPE);
PRIMITIVE_CLASSES.put("float", Float.TYPE);
PRIMITIVE_CLASSES.put("double", Double.TYPE);
}
public static Class getPrimitiveClass(String primitiveType) {
return PRIMITIVE_CLASSES.get(primitiveType);
}
private final Ruby runtime;
private final ObjectProxyCache objectProxyCache =
// TODO: specifying soft refs, may want to compare memory consumption,
// behavior with weak refs (specify WEAK in place of SOFT below)
new ObjectProxyCache(ObjectProxyCache.ReferenceType.WEAK) {
public IRubyObject allocateProxy(Object javaObject, RubyClass clazz) {
return Java.allocateProxy(javaObject, clazz);
}
};
private final ProxyCache proxyCache;
private static final Constructor extends ProxyCache> PROXY_CACHE_CONSTRUCTOR;
static {
Constructor extends ProxyCache> constructor = null;
if (Options.INVOKEDYNAMIC_CLASS_VALUES.load()) {
try {
// try to load the ClassValue class. If it succeeds, we can use our
// ClassValue-based cache.
Class.forName("java.lang.ClassValue");
constructor = (Constructor)Class.forName("org.jruby.java.proxies.ClassValueProxyCache").getConstructor(Ruby.class);
}
catch (Exception ex) {
// fall through to Map version
}
}
if (constructor == null) {
try {
constructor = MapBasedProxyCache.class.getConstructor(Ruby.class);
} catch (Exception ex2) {
throw new RuntimeException(ex2);
}
}
PROXY_CACHE_CONSTRUCTOR = constructor;
}
private RubyModule javaModule;
private RubyModule javaUtilitiesModule;
private RubyModule javaArrayUtilitiesModule;
private RubyClass javaObjectClass;
private JavaClass objectJavaClass;
private RubyClass javaClassClass;
private RubyClass javaArrayClass;
private RubyClass javaProxyClass;
private RubyClass arrayJavaProxyCreatorClass;
private RubyClass javaFieldClass;
private RubyClass javaMethodClass;
private RubyClass javaConstructorClass;
private RubyModule javaInterfaceTemplate;
private RubyModule packageModuleTemplate;
private RubyClass arrayProxyClass;
private RubyClass concreteProxyClass;
private RubyClass mapJavaProxy;
private final Map nameClassMap = new HashMap();
private final Map