Re: Re: Feedback requested: Impending changes to RunListener

Kevin Cooney <[email protected]>
Newsgroups gmane.comp.java.junit.user
Message-ID <CAA3E+eXyO3twq-+voRy8hFRm9HcYc1iDe5a7V+tnLekiVcpCBQ@mail.gmail.com>
On Thu, Feb 14, 2013 at 9:27 AM, tibord47 <[email protected]> wrote:

> **
>
>
> David, I can confirm that running annotated listener in 4.11 and compiled
> with 4.12 does not throw exception. So the annotation is winner in my eyes.
>
> Regarding the static inner annotation in RunListener, this would mean that
> other classes which will maybe later need the same name of annotation will
> just duplicate again.
>
Remember, this annotation changes the behavior of JUnit will have when
interacting with classes that extend RunListener. It's not simply an
indication that the listener is thread-safe (though your listener would
have to be thread-safe to use this annotation). See my comments in
http://goo.gl/6HBNV to see other reasons why I think a top-level JUnit
ThreadSafe annotation would be problematic

I'm personally not too worried about what might happen if we need to think
about indicating the thread-safety of extension points somewhere else in
JUnit. We could easily support multiple annotations in the future if we
need to, and when that time comes, perhaps JSR-305 will be more mature.

-- Kevin


>
>
> Cheers,
> Tibor
>
> --- In [email protected], Kevin Cooney wrote:
> >
> > On Thu, Feb 14, 2013 at 8:38 AM, David Saff wrote:
> >
> > > Hi, all.
> > >
> > > Kevin, thank you very much for the summary document. I think that a
> > > JUnit-specific annotation, which is not name-confusable with a standard
> > > like @ThreadSafe, seems to be a pretty clear winner. If we feel
> strongly
> > > that it should remain consonant with @ThreadSafe, we could make it a
> static
> > > inner annotation, and reference it as @RunListener.ThreadSafe.
> >
> >
> > I'm personally find with that as long as the JavaDoc for the annotation
> > makes it clear that a RunListener implementation annotated with that
> > interface will be treated differently than one not annotated with that
> > interface when addListener() and removeListener() is called.
> >
> >
> >
> > > That might
> > > also have the advantage of making clear that it's a single-purpose
> > > annotation (I'd rather not, at this point, start speculatively
> figuring out
> > > what other interfaces might try to pun meanings onto a general-purpose
> > > ThreadSafe annotation)
> > >
> > > I'm a little curious about the third-party library implementation.
> Let's
> > > say I write a package FooTest which is compiled against JUnit 4.12,
> and it
> > > contains a FooListener I'd like to mark threadsafe. A client wants to
> use
> > > it with JUnit 4.11 (she knows she won't get the concurrent performance
> > > boost, but wants it to just work). The document seems to assume that if
> > > FooListener has a RunListener.TheadSafe annotation, then our client
> won't
> > > have a problem (unless, likely, she actually tries to instantiate all
> of
> > > the annotations from FooListener in her own code).
> >
> >
> > Correct as of JDK 1.5.0_06. See
> >
> http://stackoverflow.com/questions/3567413/why-doesnt-a-missing-annotation-cause-a-classnotfoundexception-at-runtime
> >
> > It sounds that if the client wants to write code that extends FooListener
> > then JUnit 4.12 will need to be on the compile-time classpath
> >
> >
> >
> > > However, the document
> > > assumes that declaring a marker interface ThreadSafeRunListener _would_
> > > break the client. Is that true?
> >
> >
> > I believe it would result in a NoClassDefFoundError exception. It should
> be
> > easy to verify.
> >
> > Note that it may be hard to write a library that has a compile-time
> > dependency on JUnit 4.12 while being runtime compatible with 4.11 for
> other
> > reasons.
> >
> > Does FooListener fail at bytecode
> > > verification because the verifier wants to make sure that it
> implements all
> > > of ThreadSafeRunListener's methods?
> > >
> >
> > That would be my guess.
> >
> > -- Kevin
> >
> >
> > [Non-text portions of this message have been removed]
> >
>
>  
>


[Non-text portions of this message have been removed]



------------------------------------

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/junit/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/junit/join
    (Yahoo! ID required)

<*> To change settings via email:
    [email protected] 
    [email protected]

<*> To unsubscribe from this group, send an email to:
    [email protected]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.