Skip to content

Commit

Permalink
Fix remaining errors in JI.
Browse files Browse the repository at this point in the history
headius committed Feb 28, 2018

Verified

This commit was signed with the committer’s verified signature.
headius Charles Oliver Nutter
1 parent ff88982 commit 494ad6e
Showing 5 changed files with 33 additions and 36 deletions.
26 changes: 8 additions & 18 deletions core/src/main/java/org/jruby/RubyBoolean.java
Original file line number Diff line number Diff line change
@@ -162,17 +162,12 @@ public static RubyString false_to_s(IRubyObject f) {
return RubyString.newStringShared(f.getRuntime(), FALSE_BYTES);
}

/*
Because Boolean objects can't cast to boolean via Class.cast, and you can't return
a primitive from a generified method, this impl remains ungenerified.
*/
@Override
public Object toJava(Class target) {
if (target.isAssignableFrom(Boolean.class) | target.equals(boolean.class)) {
return Boolean.FALSE;
} else {
return super.toJava(target);
public <T> T toJava(Class<T> target) {
if (target.isAssignableFrom(Boolean.class) || target == boolean.class) {
return (T) Boolean.FALSE;
}
return super.toJava(target);
}
}

@@ -206,17 +201,12 @@ public static RubyString true_to_s(IRubyObject t) {
return RubyString.newStringShared(t.getRuntime(), TRUE_BYTES);
}

/*
Because Boolean objects can't cast to boolean via Class.cast, and you can't return
a primitive from a generified method, this impl remains ungenerified.
*/
@Override
public Object toJava(Class target) {
if (target.isAssignableFrom(Boolean.class) | target.equals(boolean.class)) {
return Boolean.TRUE;
} else {
return super.toJava(target);
public <T> T toJava(Class<T> target) {
if (target.isAssignableFrom(Boolean.class) || target == boolean.class) {
return (T) Boolean.TRUE;
}
return super.toJava(target);
}
}

29 changes: 13 additions & 16 deletions core/src/main/java/org/jruby/RubyNil.java
Original file line number Diff line number Diff line change
@@ -251,22 +251,19 @@ public static IRubyObject rationalize(ThreadContext context, IRubyObject recv, I
@Override
public <T> T toJava(Class<T> target) {
if (target.isPrimitive()) {
if (target == Boolean.TYPE) {
return target.cast(false);
} else if (target == Byte.TYPE) {
return target.cast((byte)0);
} else if (target == Short.TYPE) {
return target.cast((short)0);
} else if (target == Character.TYPE) {
return target.cast((char)0);
} else if (target == Integer.TYPE) {
return target.cast(0);
} else if (target == Long.TYPE) {
return target.cast(0L);
} else if (target == Float.TYPE) {
return target.cast(0F);
} else if (target == Double.TYPE) {
return target.cast(0.0);
if (target == boolean.class) {
return (T) Boolean.FALSE;
} else if (target == char.class) {
return (T) (Character) '\0';
} else {
switch (target.getSimpleName().charAt(0)) {
case 'b': return (T) (Byte) (byte) 0;
case 's': return (T) (Short) (short) 0;
case 'i': return (T) (Integer) 0;
case 'l': return (T) (Long) 0L;
case 'f': return (T) (Float) 0.0F;
case 'd': return (T) (Double) 0.0;
}
}
}
return null;
2 changes: 1 addition & 1 deletion core/src/main/java/org/jruby/RubyString.java
Original file line number Diff line number Diff line change
@@ -5635,7 +5635,7 @@ public <T> T toJava(Class<T> target) {
if ( strLength() != 1 ) {
throw getRuntime().newArgumentError("could not coerce string of length " + strLength() + " (!= 1) into a char");
}
return target.cast(decodeString().charAt(0));
return (T) (Character) decodeString().charAt(0);
}
return super.toJava(target);
}
4 changes: 3 additions & 1 deletion core/src/main/java/org/jruby/RubySymbol.java
Original file line number Diff line number Diff line change
@@ -647,7 +647,9 @@ public static RubySymbol unmarshalFrom(UnmarshalStream input) throws java.io.IOE

@Override
public <T> T toJava(Class<T> target) {
if (target == String.class || target == CharSequence.class) return target.cast(symbol);
if (target == String.class || target == CharSequence.class) {
return target.cast(symbol);
}

return super.toJava(target);
}
Original file line number Diff line number Diff line change
@@ -1836,6 +1836,14 @@ public IRubyObject zero_p() {
return getRuntime().newBoolean(isZero());
}

@Override
public <T> T toJava(Class<T> target) {
if (target == BigDecimal.class) {
return (T) value;
}
return super.toJava(target);
}

/**
* Returns the correctly rounded square root of a positive
* BigDecimal. This method performs the fast <i>Square Root by

0 comments on commit 494ad6e

Please sign in to comment.