Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: e8cdd5ec05f2
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: d4ba89e63c16
Choose a head ref
  • 4 commits
  • 5 files changed
  • 1 contributor

Commits on Jun 6, 2016

  1. Copy the full SHA
    5daddb5 View commit details
  2. Copy the full SHA
    241da7c View commit details
  3. Copy the full SHA
    dc176d1 View commit details
  4. remove joda-time from stdlib dist - ended up there unintentionally

    ... with 5c712c5
    
    not sure about the cause of why it got packed up (can not reproduce)
    
    see GH-3861
    kares committed Jun 6, 2016
    Copy the full SHA
    d4ba89e View commit details
13 changes: 5 additions & 8 deletions core/src/main/java/org/jruby/java/proxies/ArrayJavaProxy.java
Original file line number Diff line number Diff line change
@@ -66,15 +66,12 @@ static ArrayJavaProxy newArray(final Ruby runtime, final Class<?> elementType, f
return new ArrayJavaProxy(runtime, Java.getProxyClassForObject(runtime, array), array);
}

public JavaArray getJavaArray() {
JavaArray javaArray = (JavaArray) dataGetStruct();

if (javaArray == null) {
javaArray = new JavaArray(getRuntime(), getObject());
dataWrapStruct(javaArray);
}
protected JavaArray asJavaObject(final Object array) {
return new JavaArray(getRuntime(), array);
}

return javaArray;
public final JavaArray getJavaArray() {
return (JavaArray) dataGetStruct();
}

@JRubyMethod(name = {"length", "size"})
29 changes: 10 additions & 19 deletions core/src/main/java/org/jruby/java/proxies/JavaProxy.java
Original file line number Diff line number Diff line change
@@ -80,26 +80,20 @@ public static RubyClass createJavaProxy(ThreadContext context) {
}

@Override
public Object dataGetStruct() {
return getJavaObject();
public final Object dataGetStruct() {
if (javaObject == null) {
javaObject = asJavaObject(object);
}
return javaObject;
}

@Override
public void dataWrapStruct(Object object) {
public final void dataWrapStruct(Object object) {
this.javaObject = (JavaObject) object;
this.object = javaObject.getValue();
}

public final Object getObject() {
// FIXME: Added this because marshal_spec seemed to reconstitute objects without calling dataWrapStruct
// this resulted in object being null after unmarshalling...
if (object == null) {
if (javaObject == null) {
throw getRuntime().newRuntimeError("Java wrapper with no contents: " + this.getMetaClass().getName());
} else {
object = javaObject.getValue();
}
}
return object;
}

@@ -109,15 +103,12 @@ public void setObject(Object object) {

public Object unwrap() { return getObject(); }

private JavaObject getJavaObject() {
if (javaObject == null) {
javaObject = JavaObject.wrap(getRuntime(), object);
}
return javaObject;
protected JavaObject asJavaObject(final Object object) {
return JavaObject.wrap(getRuntime(), object);
}

@Override
public Class getJavaClass() {
public Class<?> getJavaClass() {
return getObject().getClass();
}

@@ -190,7 +181,7 @@ protected Object cloneObject() {
* Create a name/newname map of fields to be exposed as methods.
*/
private static Map<String, String> getFieldListFromArgs(final IRubyObject[] args) {
final Map<String, String> map = new HashMap<String, String>();
final HashMap<String, String> map = new HashMap<>(args.length, 1);
// Get map of all fields we want to define.
for (int i = 0; i < args.length; i++) {
final IRubyObject arg = args[i];
52 changes: 26 additions & 26 deletions core/src/main/java/org/jruby/runtime/ObjectSpace.java
Original file line number Diff line number Diff line change
@@ -32,9 +32,12 @@

import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.*;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReferenceArray;

@@ -52,15 +55,15 @@
* for now, this may be acceptable.
*/
public class ObjectSpace {
private final ReferenceQueue<Object> deadReferences = new ReferenceQueue<Object>();
private final ReferenceQueue<ObjectGroup> objectGroupReferenceQueue = new ReferenceQueue<ObjectGroup>();
private final ReferenceQueue<Object> deadReferences = new ReferenceQueue<>();
private final ReferenceQueue<ObjectGroup> objectGroupReferenceQueue = new ReferenceQueue<>();
private WeakReferenceListNode top;

private ReferenceQueue deadIdentityReferences = new ReferenceQueue();
private final Map identities = new HashMap();
private final Map identitiesByObject = new WeakIdentityHashMap();
private final Map<Long, IdReference> identities = new HashMap<>(64);
private final Map<IRubyObject, Long> identitiesByObject = new WeakIdentityHashMap(64);
private static final AtomicLong maxId = new AtomicLong(1000);
private final ThreadLocal<Reference<ObjectGroup>> currentObjectGroup = new ThreadLocal<Reference<ObjectGroup>>();
private final ThreadLocal<Reference<ObjectGroup>> currentObjectGroup = new ThreadLocal<>();
private Reference<GroupSweeper> groupSweeperReference;

public void registerObjectId(long id, IRubyObject object) {
@@ -75,10 +78,10 @@ public static long calculateObjectId(Object object) {
// Fixnums get all the odd IDs, so we use identityHashCode * 2
return maxId.getAndIncrement() * 2;
}

public long createAndRegisterObjectId(IRubyObject rubyObject) {
synchronized (identities) {
Long longId = (Long) identitiesByObject.get(rubyObject);
Long longId = identitiesByObject.get(rubyObject);
if (longId == null) {
longId = createId(rubyObject);
}
@@ -95,36 +98,37 @@ private long createId(IRubyObject object) {
public IRubyObject id2ref(long id) {
synchronized (identities) {
cleanIdentities();
IdReference reference = (IdReference) identities.get(Long.valueOf(id));
IdReference reference = identities.get(id);
if (reference == null) {
return null;
}
return (IRubyObject) reference.get();
return reference.get();
}
}

private void cleanIdentities() {
IdReference ref;
while ((ref = (IdReference) deadIdentityReferences.poll()) != null)
identities.remove(Long.valueOf(ref.id()));
while ((ref = (IdReference) deadIdentityReferences.poll()) != null) {
identities.remove(ref.id);
}
}

@Deprecated
public long idOf(IRubyObject rubyObject) {
return createAndRegisterObjectId(rubyObject);
}

public void addFinalizer(IRubyObject object, IRubyObject proc) {
object.addFinalizer(proc);
}

public void removeFinalizers(long id) {
IRubyObject object = id2ref(id);
if (object != null) {
object.removeFinalizers();
}
}

public void add(IRubyObject object) {
if (true && object.getMetaClass() != null && !(object instanceof JavaProxy)) {
// If the object is already frozen when we encounter it, it's pre-frozen.
@@ -170,7 +174,7 @@ private synchronized void splitObjectGroups() {
}

public synchronized Iterator iterator(RubyModule rubyClass) {
final List<Reference<Object>> objList = new ArrayList<Reference<Object>>();
final ArrayList<Reference<Object>> objList = new ArrayList<>(64);
WeakReferenceListNode current = top;
while (current != null) {
Object obj = current.get();
@@ -192,7 +196,7 @@ public synchronized Iterator iterator(RubyModule rubyClass) {
}

return new Iterator() {
private Iterator<Reference<Object>> iter = objList.iterator();
final Iterator<Reference<Object>> iter = objList.iterator();

public boolean hasNext() {
throw new UnsupportedOperationException();
@@ -216,7 +220,7 @@ public void remove() {

private void cleanup(ReferenceQueue<?> referenceQueue) {
WeakReferenceListNode reference;
while ((reference = (WeakReferenceListNode)referenceQueue.poll()) != null) {
while ((reference = (WeakReferenceListNode) referenceQueue.poll()) != null) {
reference.remove();
}
}
@@ -246,17 +250,13 @@ private void remove() {
}
}

private static class IdReference extends WeakReference {
private final long id;
private static class IdReference extends WeakReference<IRubyObject> {
final long id;

public IdReference(IRubyObject object, long id, ReferenceQueue queue) {
IdReference(IRubyObject object, long id, ReferenceQueue queue) {
super(object, queue);
this.id = id;
}

public long id() {
return id;
}
}

private ObjectGroup getObjectGroup() {
Binary file not shown.
12 changes: 0 additions & 12 deletions lib/ruby/stdlib/joda-time/joda-time/maven-metadata-local.xml

This file was deleted.