You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@sis.apache.org by "Martin Desruisseaux (Jira)" <ji...@apache.org> on 2023/05/02 08:06:00 UTC

[jira] [Resolved] (SIS-578) Remove contravariance in filters and expressions

     [ https://issues.apache.org/jira/browse/SIS-578?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Martin Desruisseaux resolved SIS-578.
-------------------------------------
    Resolution: Fixed

> Remove contravariance in filters and expressions
> ------------------------------------------------
>
>                 Key: SIS-578
>                 URL: https://issues.apache.org/jira/browse/SIS-578
>             Project: Spatial Information Systems
>          Issue Type: Task
>          Components: Features
>    Affects Versions: 1.1, 1.2, 1.3
>            Reporter: Martin Desruisseaux
>            Assignee: Martin Desruisseaux
>            Priority: Major
>             Fix For: 1.4
>
>
> Since SIS 1.1, Filters and expressions in {{org.apache.sis.filter}} package have methods with a signature like below. This signature reproduced the state of GeoAPI 3.1 draft (not yet released).
> {code:java}
> List<Expression<? super R, ?>> getParameters();
> {code}
> However experience has shown that contravariance (the {{<? super>}} part) cause difficulties that are hard to resolve. The problem is that filters are often chained. When a code follows a chain of filters, it may need to check for parameters of parameters. In such cases, invoking the above {{getParameters()}} method, then invoking again {{getParameters()}} on the result, gives a type that looks like {{<? super ? super R>>, which is identified by the Java compiler as {{<? super #CAP1>}}. The consequence is many compilation errors of the kind "no method match {{List<Expression<? super #CAP1, ?>>}} which are hard to resolve otherwise than by unsafe cast. Consequently, for having more type-safe code, it seems necessary to change above method signature like below:
> {code:java}
> List<Expression<R, ?>> getParameters();
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)