Hi team!

Just wanted to share an issue I found trying to upgrade to 5.5-beta-2 and
Java 11, maybe anyone have seen anything similar before.

In our pages/components it's quite common to build anonymous classes for
Grid data sources, i.e. say if we have a <t:Grid source="sourceObject"> the
sourceObject can be defined as anonymous class that's referencing some
parameter object:

@Parameter
private Object parameterObject1;

public GridDataSource getSourceObject()
{
    return new GridDataSource()
    {
        @Override
        public int getAvailableRows()
        {
            return count(parameterObject1); // this does not read from
parameter conduit
        }
    };
}

I've found that the read access for the parameterObject1 is not replaced in
this case, and parameterObject1 reads its value from a field instead of a
conduit.

However, if parameter access is factored out from the anonymous class - the
value is read as expected, i.e. this works fine:

public GridDataSource getSourceObject()
{
    return new MyDataSource(parameterObject1); // this reads the value from
conduit as expected
}

public class MyDataSource implements GridDataSource
{
    private final Object valueOfParameterObject1;

    public MyDataSource(Object parameterObject1)
    {
        this.valueOfParameterObject1 = parameterObject1;
    }

    @Override
    public int getAvailableRows()
    {
        return count(valueOfParameterObject1);
    }
}

I haven't dig any further yet, but assume it can be related with some
changes in ASM / byte code.

Just thought I'd ask here before I continue.

Best regards,
Dmitry

Reply via email to