RecordList.sort(Comparator) throws exception

Hi,

RecordList.sort(Comparator) throws exception in SmartGWT 2.4

package com.smartgwt.client.data;
public class RecordList extends BaseClass implements com.smartgwt.client.data.events.HasDataChangedHandlers {
...
    /**
     * Sorts the elements of the List in place. <P> The optional comparator function should take two parameters "a" and "b"
     * which are the two list items to compare, and should return: <ul> <li> a value less than zero, if "a" is less than "b"
     * such that "a" should appear earlier in the      list <li> zero, if "a" and "b" are equal <li> a value greater than zero,
     * if "a" is greater than "b" such that "b" should appear earlier in      the list </ul>
     * @param comparator comparator function to use
     *
     * @return the list itself
     */
    public native RecordList sort(JavaScriptObject self, Comparator<Record> comparator) /*-{
        return self.sort(function(record1, record2) {
            var record1J = @com.smartgwt.client.data.Record::getOrCreateRef(Lcom/google/gwt/core/client/JavaScriptObject;)(record1);
            var record2J = @com.smartgwt.client.data.Record::getOrCreateRef(Lcom/google/gwt/core/client/JavaScriptObject;)(record2);
            return comparator.@java.util.Comparator::compare(Ljava/lang/Object;Ljava/lang/Object;)(record1J, record2J);
        });
    }-*/;

The method should return RecordList but it returns JavaScriptObject and throws ClassCastException. It can be fixed by the following way:

    public native RecordList sort(Comparator<Record> comparator) /*-{
        var self = this.@com.smartgwt.client.core.BaseClass::getOrCreateJsObj()();
        var res =  self.sort(function(record1, record2) {
            var record1J = @com.smartgwt.client.data.Record::getOrCreateRef(Lcom/google/gwt/core/client/JavaScriptObject;)(record1);
            var record2J = @com.smartgwt.client.data.Record::getOrCreateRef(Lcom/google/gwt/core/client/JavaScriptObject;)(record2);
            return comparator.@java.util.Comparator::compare(Ljava/lang/Object;Ljava/lang/Object;)(record1J, record2J);
        });
        return @com.smartgwt.client.data.RecordList::getOrCreateRef(Lcom/google/gwt/core/client/JavaScriptObject;)(res);
    }-*/;

Makes sense. We’ve added the change. Thanks for your attention to detail.