Hi,

In your example, it seems you're trying to add a new method to the subtype created in script. That is not supported. You can override existing methods of superclass - but not add a new method to the Java type. Note that all super methods (including protected ones) are available via Java.super. For example, you can invoke Java.super(filter).fireMatchNode(). So the workaround for this case would be add utility function outside for "setEnabled".

Hope this helps,
-Sundar

On 28/09/18, 3:19 PM, Axel Dörfler wrote:
Am 28/09/2018 um 11:34 schrieb Sundararajan Athijegannathan:
It is hard to say what went wrong without looking at your full sample/test.

Openjdk wiki page explains Java.extend function is here:
http://hg.openjdk.java.net/jdk/jdk/file/7bd8d6b011c9/src/sample/nashorn/resourcetrysuggester.js


Thanks! This usage suggests that it should actually work.

Here is my full example stripped down to the bare minimum:

----------------8<----------------
var MatcherEditor = Java.type("ca.odell.glazedlists.matchers.AbstractMatcherEditor");

var filter = new (Java.extend(MatcherEditor)) {
        setEnabled: function(enabled) {
            if (enabled) {
                fireMatchNone();
            } else {
                fireMatchAll();
            }
        }
    };
filter.setEnabled(true);
----------------8<----------------

The error is:
TypeError: filter.setEnabled is not a function in <eval> at line number 13

For the Glazedlists class used, see here:
http://static.javadoc.io/net.java.dev.glazedlists/glazedlists_java16/1.10.0/ca/odell/glazedlists/matchers/AbstractMatcherEditor.html

Source:
https://github.com/glazedlists/glazedlists/blob/master/core/src/main/java/ca/odell/glazedlists/matchers/AbstractMatcherEditor.java

That looks like a bug to me. But if there's a workaround, I'll take it :-)

Kind regards,
   Axel Dörfler.

Reply via email to