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: db5015217234
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: db8f5e3fe9e3
Choose a head ref
  • 2 commits
  • 4 files changed
  • 1 contributor

Commits on May 21, 2018

  1. Copy the full SHA
    23dd24f View commit details
  2. Copy the full SHA
    db8f5e3 View commit details
13 changes: 2 additions & 11 deletions core/src/main/java/org/jruby/Ruby.java
Original file line number Diff line number Diff line change
@@ -1645,15 +1645,6 @@ private void initLibraries() {
new ThreadFiberLibrary().load(this, false);
}

private RubyClass defineClassIfAllowed(String name, RubyClass superClass) {
// TODO: should probably apply the null object pattern for a
// non-allowed class, rather than null
if (superClass != null && profile.allowClass(name)) {
return defineClass(name, superClass, superClass.getAllocator());
}
return null;
}

private Map<Integer, RubyClass> errnos = new HashMap<Integer, RubyClass>();

public RubyClass getErrno(int n) {
@@ -1791,8 +1782,8 @@ private void addLazyBuiltin(String name, String shortName, String className) {
}

private void addBuiltinIfAllowed(String name, Library lib) {
if(profile.allowBuiltin(name)) {
loadService.addBuiltinLibrary(name,lib);
if (profile.allowBuiltin(name)) {
loadService.addBuiltinLibrary(name, lib);
}
}

18 changes: 16 additions & 2 deletions core/src/main/java/org/jruby/javasupport/Java.java
Original file line number Diff line number Diff line change
@@ -367,13 +367,16 @@ public static RubyModule getInterfaceModule(final Ruby runtime, final Class java
}

public static RubyModule get_interface_module(final Ruby runtime, IRubyObject javaClassObject) {
JavaClass javaClass;
JavaClass javaClass; String javaName;
if ( javaClassObject instanceof RubyString ) {
javaClass = JavaClass.forNameVerbose(runtime, javaClassObject.asJavaString());
}
else if ( javaClassObject instanceof JavaClass ) {
javaClass = (JavaClass) javaClassObject;
}
else if ( (javaName = unwrapJavaString(javaClassObject)) != null ) {
javaClass = JavaClass.forNameVerbose(runtime, javaName);
}
else {
throw runtime.newArgumentError("expected JavaClass, got " + javaClassObject);
}
@@ -382,19 +385,30 @@ else if ( javaClassObject instanceof JavaClass ) {

public static RubyModule get_proxy_class(final IRubyObject self, final IRubyObject java_class) {
final Ruby runtime = self.getRuntime();
final JavaClass javaClass;
final JavaClass javaClass; String javaName;
if ( java_class instanceof RubyString ) {
javaClass = JavaClass.for_name(self, java_class);
}
else if ( java_class instanceof JavaClass ) {
javaClass = (JavaClass) java_class;
}
else if ( (javaName = unwrapJavaString(java_class)) != null ) {
javaClass = JavaClass.for_name(self, javaName);
}
else {
throw runtime.newTypeError(java_class, runtime.getJavaSupport().getJavaClassClass());
}
return getProxyClass(runtime, javaClass);
}

private static String unwrapJavaString(IRubyObject arg) {
if (arg instanceof JavaProxy) {
Object str = ((JavaProxy) arg).getObject();
return str instanceof String ? (String) str : null;
}
return null;
}

public static RubyClass getProxyClassForObject(Ruby runtime, Object object) {
return (RubyClass) getProxyClass(runtime, object.getClass());
}
6 changes: 5 additions & 1 deletion core/src/main/java/org/jruby/javasupport/JavaClass.java
Original file line number Diff line number Diff line change
@@ -285,7 +285,11 @@ public static JavaClass forNameQuiet(Ruby runtime, String className) {

@JRubyMethod(name = "for_name", required = 1, meta = true)
public static JavaClass for_name(IRubyObject recv, IRubyObject name) {
return forNameVerbose(recv.getRuntime(), name.asJavaString());
return for_name(recv, name.asJavaString());
}

static JavaClass for_name(IRubyObject recv, String name) {
return forNameVerbose(recv.getRuntime(), name);
}

@JRubyMethod
9 changes: 9 additions & 0 deletions spec/java_integration/types/retrieval_spec.rb
Original file line number Diff line number Diff line change
@@ -26,6 +26,15 @@
expect(Java::JavaClass.for_name("float")).to eq(Java::float.java_class)
expect(Java::JavaClass.for_name("double")).to eq(Java::double.java_class)
end

it "should return Java class from JRuby class-path" do
expect(Java::JavaClass.for_name('java_integration.fixtures.Reflector')).to_not be nil
end

it "should also accept Java string argument" do
str = 'java.util.Base64'.to_java
expect(Java::JavaClass.for_name(str)).to_not be nil
end
end

describe "Java classes with nested enums" do