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

Commits on Aug 11, 2015

  1. Copy the full SHA
    9927bde View commit details
  2. make sure package modules (at leat) respond_to? :name

    ... they still won't correctly return a String name, due compatibility that likely will only happen on 9K
    
    fixes #2468
    kares committed Aug 11, 2015
    Copy the full SHA
    0d452ee View commit details
  3. facelift some JI specs a bit

    kares committed Aug 11, 2015
    Copy the full SHA
    e585b48 View commit details
  4. Copy the full SHA
    903cd96 View commit details
  5. JavaPackageModuleTemplate should handle respond_to? :name as well

    ... since its counted among `ObjectSpace.each_object(Module)` (#2468)
    kares committed Aug 11, 2015
    Copy the full SHA
    ce8c075 View commit details
  6. Copy the full SHA
    a35930a View commit details
15 changes: 11 additions & 4 deletions core/src/main/java/org/jruby/RubyModule.java
Original file line number Diff line number Diff line change
@@ -1462,14 +1462,21 @@ public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule claz
return site.call(context, self, self, args, block);
}

@Override
public boolean equals(Object other) {
if (!(other instanceof RespondToMissingMethod)) return false;
if ( ! (other instanceof RespondToMissingMethod) ) return false;

RespondToMissingMethod rtmm = (RespondToMissingMethod)other;
RespondToMissingMethod that = (RespondToMissingMethod) other;

return this.site.methodName.equals(rtmm.site.methodName) &&
getImplementationClass() == rtmm.getImplementationClass();
return this.site.methodName.equals(that.site.methodName) &&
getImplementationClass() == that.getImplementationClass();
}

@Override
public int hashCode() {
return getImplementationClass().hashCode() + 7 * this.site.methodName.hashCode();
}

}

public IRubyObject newMethod(IRubyObject receiver, final String methodName, boolean bound, Visibility visibility, boolean respondToMissing, boolean priv) {
11 changes: 6 additions & 5 deletions core/src/main/java/org/jruby/java/util/BlankSlateWrapper.java
Original file line number Diff line number Diff line change
@@ -26,23 +26,24 @@ public BlankSlateWrapper(Ruby runtime, RubyClass superClass, RubyModule delegate

@Override
public DynamicMethod searchMethodInner(String name) {
// this module is special and only searches itself; do not go to superclasses
// except for special methods
// this module is special and only searches itself;

// do not go to superclasses except for special methods :
if (name.equals("__constants__")) {
return superClass.searchMethodInner("constants");
}

if (name.equals("__methods__")) {
return superClass.searchMethodInner("methods");
}

if (KEEP.matcher(name).find()) {
return superClass.searchMethodInner(name);
}

return null;
}

private static final Pattern KEEP = Pattern.compile("^(__|<|>|=)|^(class|initialize_copy|singleton_method_added|const_missing|inspect|method_missing|to_s)$|(\\?|!|=)$");
private static final Pattern KEEP = Pattern.compile(
"^(__|<|>|=)|" +
"^(class|initialize_copy|singleton_method_added|const_missing|method_missing|inspect|to_s|object_id)$|" +
"(\\?|!|=)$");
}
8 changes: 6 additions & 2 deletions core/src/main/ruby/jruby/java/java_package_module_template.rb
Original file line number Diff line number Diff line change
@@ -15,9 +15,13 @@ def method_missing(sym, *args)
end
private :method_missing

def name
name_pkg = JavaUtilities.get_proxy_or_package_under_package self, :name
name_pkg.nil? ? super : name_pkg
end

def package_name
# strip off trailing .
@package_name[0..-2]
@package_name[0..-2] # strip off trailing .
end
end
end
13 changes: 7 additions & 6 deletions spec/java_integration/packages/access_spec.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
require File.dirname(__FILE__) + "/../spec_helper"

# for DefaultPackageClass
$CLASSPATH << File.dirname(__FILE__) + "/../../../target/test-classes"

describe "A Java package" do
describe "java package" do
it 'is accessible directly when starting with java, javax, com, or org' do
# Using static methods here for simplicity; avoiding construction.
java.lang.should == JavaUtilities.get_package_module_dot_format("java.lang")
@@ -42,17 +39,21 @@
end

it "supports const_get" do
java.util.respond_to?(:const_get).should be true
java.util.const_get("Arrays").should respond_to "asList"
end

if RUBY_VERSION =~ /1\.9/
it "supports const_get with inherit argument" do
java.util.const_get("Arrays", false).should respond_to "asList"
java.util.const_get("Arrays", false).should respond_to :asList
end
end
end

describe "A class in the default package" do
# for DefaultPackageClass
$CLASSPATH << File.dirname(__FILE__) + "/../../../target/test-classes"

describe "class in default package" do
it "can be opened using Java::Foo syntax" do
Java::DefaultPackageClass.new.foo.should == "foo"
class Java::DefaultPackageClass
2 changes: 1 addition & 1 deletion spec/java_integration/packages/include_spec.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
require File.dirname(__FILE__) + "/../spec_helper"

describe "A jar with dependecies" do
describe "jar with dependecies" do
it "carries its error messages along to Ruby exception when one of its classes is imported" do
begin
module Fixtures
53 changes: 53 additions & 0 deletions spec/java_integration/packages/name_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
require File.dirname(__FILE__) + "/../spec_helper"

# for DefaultPackageClass
$CLASSPATH << File.dirname(__FILE__) + "/../../../target/test-classes"

describe "java package (and class)" do

it 'have name' do
expect( Java::JavaLang::Integer.name ).to eql 'Java::JavaLang::Integer'
#expect( Java::JavaLang.name ).to eql 'Java::JavaLang'
#expect( Java::Java.name ).to eql 'Java::Java'
#expect( Java::Javax.name ).to eql 'Java::Javax'
expect( Java.name ).to eql 'Java'
#expect( Java::java.util.name ).to eql 'Java::JavaUtil'
#expect( org.xml.name ).to eql 'Java:OrgXml'
#expect( org.xml.sax.name ).to eql 'Java:OrgXmlSax'
#expect( Java::Default.name ).to eql ''
# TODO avoid Default package in favor of Java :
#expect( Java::DefaultPackageClass.name ).to eql 'Java::DefaultPackageClass'
expect( Java::DefaultPackageClass.name ).to eql 'Java::Default::DefaultPackageClass'
end

it 'have package name' do
expect( Java::JavaLang::Integer.respond_to? :package_name ).to be false
expect( Java::JavaLang.respond_to? :package_name ).to be true
expect( Java::JavaLang.package_name ).to eql 'java.lang'
expect( Java::Java.package_name ).to eql 'java'
expect( Java::Javax.package_name ).to eql 'javax'
expect( Java::java.util.package_name ).to eql 'java.util'
expect( org.xml.package_name ).to eql 'org.xml'
expect( org.xml.sax.package_name ).to eql 'org.xml.sax'
# TODO avoid Default package in favor of Java :
#expect( Java.package_name ).to eql ''
expect( Java::Default.package_name ).to eql ''
end

it 'respond to name (GH-2468)' do
expect( java.lang.respond_to?(:name) ).to be true
expect( Java::JavaLang.respond_to?(:name) ).to be true

expect( Java::JavaLang::Integer.respond_to?(:name) ).to be true
expect( Java::Java.respond_to?(:name) ).to be true
expect( Java.respond_to?(:name) ).to be true
expect( org.xml.respond_to?(:name) ).to be true
expect( org.xml.sax.respond_to?(:name) ).to be true
expect( Java::Default.respond_to?(:name) ).to be true

if Object.const_defined?(:JavaPackageModuleTemplate) # should go-away in 9K
expect( JavaPackageModuleTemplate.respond_to?(:name) ).to be true
end
end

end
6 changes: 3 additions & 3 deletions spec/java_integration/rubygems/rubygems_spec.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@

require File.dirname(__FILE__) + "/../spec_helper"

require 'rubygems'

describe "RubyGems extensions" do

before(:all) { require 'rubygems' }

before :each do
@path = Gem.path
Gem.clear_paths