Sure, it'll take time, but the good news is Java8's default methods are
certainly going to progressively cause deprecation of that
convention/naming convention.


2013/12/20 Igor Fedorenko <i...@ifedorenko.com>

> I don't think this is eclipse-specific, but IBM did analysis of
> java-based API evolution and documented the results at eclipse [1].
>
> The document is quite thorough and I usually use it as a reference when
> I need to develop API for long-term maintenance.
>
> The "2 Convention" is explained in the part 3.
>
> [1] http://wiki.eclipse.org/Evolving_Java-based_APIs
>
> --
> Regards,
> Igor
>
>
> On 12/19/2013, 23:21, Hervé BOUTEMY wrote:
>
>> IIUC, numbered interfaces + abstract implementations are roughly Eclipse
>> way
>> of solving this requirement about API evolution, isn't it?
>>
>> Regards,
>>
>> Hervé
>>
>> Le jeudi 19 décembre 2013 07:43:03 Igor Fedorenko a écrit :
>>
>>> On 12/18/2013, 16:42, Olivier Lamy wrote:
>>>
>>>> if you need to add new parameters in the future, you won't have to add
>>>> this new MojoExecutionListener2 extends MojoExecutionListener (IMHO
>>>> it's just ugly but that's my POV) just add those new fields in
>>>> MojoExecutionEvent etc...
>>>>
>>>> Anyway I only talk by experience and you are the guy who write the
>>>> code so do as you want.
>>>> This API can be here for  a while so if it's easy to enhance it it's
>>>> better.
>>>>
>>>> BTW I just wonder why you don't want to use this pattern with a bean
>>>> rather than a method with a lot of parameters.
>>>>
>>>
>>> API clarity and consistency are the reasons I have slight preference to
>>> explicitly pass parameters to callback methods.
>>>
>>> MojoExecutionListener2 will still be required to introduce new callback
>>> methods, and I like having single/consistent API evolution approach that
>>> covers all scenarios.
>>>
>>> When parameters are passed in explicitly, clients do not have to guess
>>> what is available to them. It also makes it little easier to reason what
>>> API version a client expects just by looking at implements
>>> MojoExecutionListener vs MojoExecutionListener2.
>>>
>>> At any rate, I don't think this matter much in this particular case, so
>>> I'll introduce event objects in next couple of days.
>>>
>>>
>>> --
>>> Regards,
>>> Igor
>>>
>>>  On 19 December 2013 07:32, Igor Fedorenko <i...@ifedorenko.com> wrote:
>>>>
>>>>> Olivier, Robert,
>>>>>
>>>>> Do you insist on event objects or can live with my initial
>>>>> implementation?
>>>>>
>>>>> I am not sure if I explained this clearly enough, but I never suggested
>>>>> changing existing method signatures in the future. If we need to add
>>>>> new parameters or new callback methods in the future, we can introduce
>>>>> new listener interface
>>>>>
>>>>>      MojoExecutionListener2 extends MojoExecutionListener
>>>>>
>>>>> and add new method to the new interface. Clients that implement
>>>>> original MojoExecutionListener will continue to work as is.
>>>>>
>>>>> --
>>>>> Regards,
>>>>> Igor
>>>>>
>>>>> On 12/16/2013, 17:04, Robert Scholte wrote:
>>>>>
>>>>>> There are 2 issues here:
>>>>>> - What if one of the current methods require an extra Object/argument?
>>>>>> - What if we need an extra method.
>>>>>>
>>>>>> The first one can be solved with the suggestion of Olivier. The method
>>>>>> signature will stay we same, we just extend the Event object passed.
>>>>>> For the latter you need to introduce a new interface of require Java8,
>>>>>> which will support default interface implementations.
>>>>>>
>>>>>> Keeping a stable method signature if much more worth to me then the
>>>>>> not
>>>>>> directly visible parameters of the event object.
>>>>>> If the current methods require different arguments, I would consider
>>>>>> different Events.
>>>>>>
>>>>>> Robert
>>>>>>
>>>>>> Op Mon, 16 Dec 2013 16:45:14 +0100 schreef Igor Fedorenko
>>>>>>
>>>>>> <i...@ifedorenko.com>:
>>>>>>
>>>>>>> On 12/16/2013, 7:39, Olivier Lamy wrote:
>>>>>>>
>>>>>>>> On Dec 16, 2013 11:27 PM, "Igor Fedorenko" <i...@ifedorenko.com>
>>>>>>>>
>>>>>>> wrote:
>>
>>>  On 12/16/2013, 5:27, Olivier Lamy wrote:
>>>>>>>>>
>>>>>>>>>> +/**
>>>>>>>>>>>
>>>>>>>>>>>  + * Extension point that allows build extensions observe and
>>>>>>>>>>>> possibly
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>> veto mojo executions.
>>>>>>>>
>>>>>>>>  + *
>>>>>>>>>>>> + * @see WeakMojoExecutionListener
>>>>>>>>>>>> + * @since 3.1.2
>>>>>>>>>>>> + * @provisional This interface is part of work in progress and
>>>>>>>>>>>> can be
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>> changed or removed without notice.
>>>>>>>>
>>>>>>>>  + */
>>>>>>>>>>>> +public interface MojoExecutionListener
>>>>>>>>>>>> +{
>>>>>>>>>>>> +    public void beforeMojoExecution( MavenSession session,
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>> MavenProject project, MojoExecution execution, Mojo mojo )
>>>>>>>>
>>>>>>>>  +        throws MojoExecutionException;
>>>>>>>>>>>> +
>>>>>>>>>>>> +    public void afterMojoExecutionSuccess( MavenSession
>>>>>>>>>>>> session,
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>> MavenProject project, MojoExecution execution,
>>>>>>>>
>>>>>>>>  +                                           Mojo mojo )
>>>>>>>>>>>> +        throws MojoExecutionException;
>>>>>>>>>>>> +
>>>>>>>>>>>> +    public void afterExecutionFailure( MavenSession session,
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>> MavenProject project, MojoExecution execution, Mojo mojo,
>>>>>>>>
>>>>>>>>  +                                       Throwable cause );
>>>>>>>>>>>> +}
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> I wonder if it will be easier for future enhancement to use a bean
>>>>>>>>>> with fields for those objects.
>>>>>>>>>> MojoExecutionListenerEvent with getMavenSession() etc...
>>>>>>>>>>
>>>>>>>>>> Maybe will be simpler to add getter to this bean than changing the
>>>>>>>>>> signature of the interface.
>>>>>>>>>> ?
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Good idea. Any objections against MojoExecutionEvent and
>>>>>>>>> ProjectExecutionEvent names?
>>>>>>>>>
>>>>>>>>
>>>>>>>> Sounds good
>>>>>>>>
>>>>>>>
>>>>>>> So I tried this and I am not sure I like the result.
>>>>>>>
>>>>>>> Event objects make it harder to see (at a glance) what parameters are
>>>>>>> provided to the callbacks, especially because not all callbacks have
>>>>>>> the
>>>>>>> same set of parameters. This muddies the API, I think.
>>>>>>>
>>>>>>> Event objects make it possible to add new callback parameters but
>>>>>>> won't
>>>>>>> help if we need to add new callbacks.
>>>>>>>
>>>>>>> I think MojoExecutionListener2/3/4/etc provides reasonably good
>>>>>>> evolution path for this API.
>>>>>>>
>>>>>>> What do you think?
>>>>>>>
>>>>>>> --
>>>>>>> Regards,
>>>>>>> Igor
>>>>>>>
>>>>>>> ------------------------------------------------------------
>>>>>>> ---------
>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
>>>>>>> For additional commands, e-mail: dev-h...@maven.apache.org
>>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
>>>>>> For additional commands, e-mail: dev-h...@maven.apache.org
>>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
>>>>> For additional commands, e-mail: dev-h...@maven.apache.org
>>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
>>> For additional commands, e-mail: dev-h...@maven.apache.org
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
>> For additional commands, e-mail: dev-h...@maven.apache.org
>>
>>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> For additional commands, e-mail: dev-h...@maven.apache.org
>
>


-- 
Baptiste <Batmat> MATHUS - http://batmat.net
Sauvez un arbre,
Mangez un castor !

Reply via email to