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

Dawid Weiss commented on LUCENE-7796:
-------------------------------------

I looked at the code now. The test-framework's {{Rethrow}} is what I originally 
had in mind, but I was mistaken about Mike's code -- this uses IOUtils.reThrow 
and there is a problem with it -- "If the argument is null then this method 
does nothing."... so in fact a call to IOUtils.reThrow *can* be a no-op, as is 
evident when one looks at how it's used:
{code}
      // NOTE: does nothing if firstThrowable is null
      IOUtils.reThrowUnchecked(firstThrowable);
{code}
or
{code}
if (success) {
      // Does nothing if firstExc is null:
      IOUtils.reThrow(firstExc);
}
{code}

we can make it return IOException (or something unchecked), but if the argument 
can be null it absolutely cannot be used with throw... Will this make code 
clearer or more confusing? For me, it was surprising the argument can be null 
(and ignored), so based on least surprise principle I'd make 
IOUtils.reThrow(exception) require a non-null argument and always throw 
internally. Then the return type can be used without side effects (either with 
throw or as a simple statement).

A cleanup of other "rethrow-hack" places would require moving Rethrow from test 
utils back to the core and I think (but didn't look further) we actually moved 
it the other way around so as to prevent people from using it... Although, on 
the other hand -- {{AttributeFactory}}:
{code}
  // Hack to rethrow unknown Exceptions from {@link MethodHandle#invoke}:
  // TODO: remove the impl in test-framework, this one is more elegant :-)
  static void rethrow(Throwable t) {
...
{code}

So I'm a bit lost as to which direction I should go with this patch. ;)


> Make reThrow idiom declare RuntimeException return type so callers may use it 
> in a way that compiler knows subsequent code is unreachable
> -----------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: LUCENE-7796
>                 URL: https://issues.apache.org/jira/browse/LUCENE-7796
>             Project: Lucene - Core
>          Issue Type: Improvement
>            Reporter: Dawid Weiss
>            Assignee: Dawid Weiss
>            Priority: Trivial
>             Fix For: 6.x, master (7.0)
>
>
> A spinoff from LUCENE-7792: reThrow can be declared to return an unchecked 
> exception so that callers can choose to use {{throw reThrow(...)}} as an 
> idiom to let the compiler know any subsequent code will be unreachable.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

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

Reply via email to