Re: Re: Feedback requested: Impending changes to RunListener

Kevin Cooney <[email protected]>
Newsgroups gmane.comp.java.junit.user
Message-ID <CAA3E+eVwCJKQ7V0v1Jq2vZPzwz2j8Qv9EDEaW=7KifTX0mSJ2w@mail.gmail.com>
On Thu, Feb 14, 2013 at 8:38 AM, David Saff <[email protected]> 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]



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

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.