diff --git a/ext/java/org/jruby/ext/ref/ReferencesService.java b/ext/java/org/jruby/ext/ref/ReferencesService.java deleted file mode 100644 index 5ef38f8..0000000 --- a/ext/java/org/jruby/ext/ref/ReferencesService.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.jruby.ext.ref; - -import java.io.IOException; -import org.jruby.Ruby; -import org.jruby.RubyClass; -import org.jruby.RubyModule; -import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.runtime.load.BasicLibraryService; - -/** - * This library adds native Java support for weak and soft references. - * - * @author Brian Durand - */ -public class ReferencesService implements BasicLibraryService { - public boolean basicLoad(Ruby runtime) throws IOException { - RubyModule refModule = runtime.getModule("Ref"); - RubyClass referenceClass = refModule.getClass("Reference"); - - RubyClass rubyWeakReferenceClass = runtime.defineClassUnder("WeakReference", referenceClass, RubyWeakReference.ALLOCATOR, refModule); - rubyWeakReferenceClass.defineAnnotatedMethods(RubyWeakReference.class); - - RubyClass rubySoftReferenceClass = runtime.defineClassUnder("SoftReference", referenceClass, RubySoftReference.ALLOCATOR, refModule); - rubySoftReferenceClass.defineAnnotatedMethods(RubySoftReference.class); - - return true; - } -} diff --git a/ext/java/org/jruby/ext/ref/RubySoftReference.java b/ext/java/org/jruby/ext/ref/RubySoftReference.java deleted file mode 100644 index 55690fc..0000000 --- a/ext/java/org/jruby/ext/ref/RubySoftReference.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.jruby.ext.ref; - -import java.lang.ref.SoftReference; -import org.jruby.Ruby; -import org.jruby.RubyClass; -import org.jruby.RubyObject; -import org.jruby.anno.JRubyMethod; -import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.runtime.ObjectAllocator; -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.Visibility; - -public class RubySoftReference extends RubyObject { - private SoftReference _ref; - private static final String REFERENCED_OBJECT_ID_VARIABLE = "@referenced_object_id".intern(); - - public RubySoftReference(Ruby runtime, RubyClass klass) { - super(runtime, klass); - } - - public static final ObjectAllocator ALLOCATOR = new ObjectAllocator() { - public IRubyObject allocate(Ruby runtime, RubyClass klass) { - return new RubySoftReference(runtime, klass); - } - }; - - @JRubyMethod(name = "initialize", frame = true, visibility = Visibility.PRIVATE) - public IRubyObject initialize(ThreadContext context, IRubyObject obj) { - _ref = new SoftReference(obj); - fastSetInstanceVariable(REFERENCED_OBJECT_ID_VARIABLE, obj.id()); - return context.getRuntime().getNil(); - } - - @JRubyMethod(name = "object") - public IRubyObject object() { - IRubyObject obj = (IRubyObject)_ref.get(); - if (obj != null) { - return obj; - } else { - return getRuntime().getNil(); - } - } -} diff --git a/ext/java/org/jruby/ext/ref/RubyWeakReference.java b/ext/java/org/jruby/ext/ref/RubyWeakReference.java deleted file mode 100644 index 2e9b0f2..0000000 --- a/ext/java/org/jruby/ext/ref/RubyWeakReference.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.jruby.ext.ref; - -import java.lang.ref.WeakReference; -import org.jruby.Ruby; -import org.jruby.RubyClass; -import org.jruby.RubyObject; -import org.jruby.anno.JRubyMethod; -import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.runtime.ObjectAllocator; -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.Visibility; - -public class RubyWeakReference extends RubyObject { - private WeakReference _ref; - private static final String REFERENCED_OBJECT_ID_VARIABLE = "@referenced_object_id".intern(); - - public RubyWeakReference(Ruby runtime, RubyClass klass) { - super(runtime, klass); - } - - public static final ObjectAllocator ALLOCATOR = new ObjectAllocator() { - public IRubyObject allocate(Ruby runtime, RubyClass klass) { - return new RubyWeakReference(runtime, klass); - } - }; - - @JRubyMethod(name = "initialize", frame = true, visibility = Visibility.PRIVATE) - public IRubyObject initialize(ThreadContext context, IRubyObject obj) { - _ref = new WeakReference(obj); - fastSetInstanceVariable(REFERENCED_OBJECT_ID_VARIABLE, obj.id()); - return context.getRuntime().getNil(); - } - - @JRubyMethod(name = "object") - public IRubyObject object() { - IRubyObject obj = (IRubyObject)_ref.get(); - if (obj != null) { - return obj; - } else { - return getRuntime().getNil(); - } - } -} diff --git a/lib/org/jruby/ext/ref/references.jar b/lib/org/jruby/ext/ref/references.jar deleted file mode 100644 index 171d717..0000000 Binary files a/lib/org/jruby/ext/ref/references.jar and /dev/null differ diff --git a/lib/ref.rb b/lib/ref.rb index ffa460d..3526c3b 100644 --- a/lib/ref.rb +++ b/lib/ref.rb @@ -7,13 +7,11 @@ module Ref # Set the best implementation for weak references based on the runtime. if defined?(RUBY_PLATFORM) && RUBY_PLATFORM == 'java' - # Use native Java references - begin - $LOAD_PATH.unshift(File.dirname(__FILE__)) - require 'org/jruby/ext/ref/references' - ensure - $LOAD_PATH.shift if $LOAD_PATH.first == File.dirname(__FILE__) - end + $LOAD_PATH.unshift(File.dirname(__FILE__)) + require 'ref/jruby/weak_reference' + require 'ref/jruby/soft_reference' + + $LOAD_PATH.shift if $LOAD_PATH.first == File.dirname(__FILE__) else require 'ref/soft_reference' if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'ironruby' diff --git a/lib/ref/jruby/soft_reference.rb b/lib/ref/jruby/soft_reference.rb new file mode 100644 index 0000000..941a392 --- /dev/null +++ b/lib/ref/jruby/soft_reference.rb @@ -0,0 +1,13 @@ +module Ref + + class SoftReference < Reference + def initialize(obj) + @_ref = java.lang.ref.SoftReference.new(obj) + @referenced_object_id = obj.__id__ + end + + def object + @_ref.get() + end + end +end diff --git a/lib/ref/jruby/weak_reference.rb b/lib/ref/jruby/weak_reference.rb new file mode 100644 index 0000000..a08d10a --- /dev/null +++ b/lib/ref/jruby/weak_reference.rb @@ -0,0 +1,15 @@ +module Ref + class WeakReference < Reference + + def initialize(obj) + @_ref = java.lang.ref.WeakReference.new(obj) + @referenced_object_id = obj.__id__ + end + + def object + @_ref.get() + end + + end + +end