[ 
https://issues.apache.org/jira/browse/LUCENE-6575?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14589490#comment-14589490
 ] 

Uwe Schindler edited comment on LUCENE-6575 at 6/17/15 8:40 AM:
----------------------------------------------------------------

bq. We are not there yet, but please let's not put this chaining issue in the 
way of making our queries immutable.

This issue was about improving the API, so it is relevant here. I think making 
phrase queries immutable is another thing and was discussed in LUCENE-6531.

bq. And since Cao changed the setters to return "this" in his patch, I pointed 
him to this previous discussion.

Robert's main problem was not the chaining, he disagreed with the "fluent" 
method names (Java 8+ streams API is using them everywhere now)!

But just returning "this" from a setter is in my opinion a valid simplification 
for users of the API. It mainly works around the problem of not having a "with" 
operator in java, like Javascript has: 

{code:javascript}
with (object) {
 setA();
 setB();
}
{code}

On the Java side, recent versions of Eclipse perfectly detect & ident those 
chaining constructs (because Java 8 requires them to do this, otherwise code 
gets indeed unreadable).

I also added builder APIs in recently: {{CustomAnalyzer.builder()}} (see my 
talk @ buzzwords; 
http://lucene.apache.org/core/5_2_1/analyzers-common/org/apache/lucene/analysis/custom/CustomAnalyzer.html)
 and Robert did not complain, because the names were according to fluent API 
standard and the formatting in the tests was also fine :-)


was (Author: thetaphi):
bq. We are not there yet, but please let's not put this chaining issue in the 
way of making our queries immutable.

This issue was about improving the API, so it is relevant here. I think making 
phrase queries immutable is another thing and was discussed in LUCENE-6531.

bq. And since Cao changed the setters to return "this" in his patch, I pointed 
him to this previous discussion.

Robert's main problem was not the chaining, he disagreed with the "fluent" 
method names (Java 8+ streams API is using them everywhere now)!

But just returning "this" from a setter is in my opinion a valid simplification 
for users of the API. It mainly works around the problem of not having a "with" 
operator in java, like Javascript has: 

{code:javascript}
with (object) {
 setA();
 setB();
}
{code}

On the Java side, recent versions of Eclipse perfectly detect & ident those 
chaining constructs (because Java 8 requires them to do this, otherwise code 
gets indeed unreadable).

I also added builder APIs in recently: {{CustomAnalyzer.builder()}} (see my 
talk @ buzzwords) and Robert did not complain, because the names were according 
to fluent API standard and the formatting in the tests was also fine :-)

> Improve API of PhraseQuery.Builder
> ----------------------------------
>
>                 Key: LUCENE-6575
>                 URL: https://issues.apache.org/jira/browse/LUCENE-6575
>             Project: Lucene - Core
>          Issue Type: Improvement
>            Reporter: Cao Manh Dat
>            Priority: Minor
>         Attachments: LUCENE-6575.patch, LUCENE-6575.patch
>
>
> From LUCENE-6531
> In current PhraseQuery.Builder API. User must retype field again and again :
> {code}
> PhraseQuery.Builder builder = new PhraseQuery.Builder();
> builder.add(new Term("lyrics", "when"), 1);
> builder.add(new Term("lyrics", "believe"), 3);
> {code}
> Cleaner API :
> {code}
> PhraseQuery.Builder builder = new PhraseQuery.Builder("lyrics");
> builder.add("when", 1);
> builder.add("believe", 3);
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to