Skip to content

Can't call methods of private subclasses with java_method in java 12 #5841

@yamam

Description

@yamam

Environment

jruby 9.2.8.0 (2.5.3) 2019-08-12 a1ac7ff OpenJDK 64-Bit Server VM 12.0.2+10 on 12.0.2+10 +jit [mswin32-x86_64]

JavaTest.java

public class JavaTest {

    public interface PublicInterface {
        public void publicMethod(Integer a);
        public void publicMethod(Long a);
    }

    public PublicInterface publicMember = new PrivateSubclass();

    private class PrivateSubclass implements PublicInterface {
        public void publicMethod(Integer a) {System.out.println("publicMethod(Integer)");}
        public void publicMethod(Long a) {System.out.println("publicMethod(Long)");}
    }
}

test.rb

java_import 'JavaTest'
JavaTest.new.publicMember.java_method(:publicMethod, [java.lang.Integer.java_class]).call(1)

Expected Behavior

You can call methods of private subclasses with java_method in java 8.

$ javac JavaTest.java
$ jruby test.rb
publicMethod(Integer)

Actual Behavior

You can't call methods of private subclasses with java_method in java 12.

$ jruby test.rb
2019-08-20T09:36:29.010+09:00 [main] WARN FilenoUtil : Native subprocess control requires open access to sun.nio.ch
Pass '--add-opens java.base/sun.nio.ch=org.jruby.dist' or '=org.jruby.core' to enable.
TypeError: illegal access on 'publicMethod': class org.jruby.javasupport.JavaMethod (in module org.jruby.dist) cannot access a member of class JavaTest$PrivateSubclass with modifiers "public"
    call at org/jruby/RubyMethod.java:120
  <main> at test.rb:2

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions